summaryrefslogtreecommitdiffstats
path: root/2022/info
diff options
context:
space:
mode:
Diffstat (limited to '2022/info')
-rw-r--r--2022/info/asmblox-after.md306
-rw-r--r--2022/info/asmblox-before.md44
-rw-r--r--2022/info/asmblox-nav.md7
-rw-r--r--2022/info/async-after.md396
-rw-r--r--2022/info/async-before.md39
-rw-r--r--2022/info/async-nav.md7
-rw-r--r--2022/info/buddy-after.md156
-rw-r--r--2022/info/buddy-before.md16
-rw-r--r--2022/info/buddy-nav.md7
-rw-r--r--2022/info/buttons-after.md238
-rw-r--r--2022/info/buttons-before.md50
-rw-r--r--2022/info/buttons-nav.md7
-rw-r--r--2022/info/community-after.md7
-rw-r--r--2022/info/community-before.md16
-rw-r--r--2022/info/community-nav.md7
-rw-r--r--2022/info/dbus-after.md378
-rw-r--r--2022/info/dbus-before.md62
-rw-r--r--2022/info/dbus-nav.md7
-rw-r--r--2022/info/detached-after.md182
-rw-r--r--2022/info/detached-before.md50
-rw-r--r--2022/info/detached-nav.md7
-rw-r--r--2022/info/devel-after.md133
-rw-r--r--2022/info/devel-before.md21
-rw-r--r--2022/info/devel-nav.md7
-rw-r--r--2022/info/eev-after.md173
-rw-r--r--2022/info/eev-before.md18
-rw-r--r--2022/info/eev-nav.md7
-rw-r--r--2022/info/eshell-after.md253
-rw-r--r--2022/info/eshell-before.md52
-rw-r--r--2022/info/eshell-nav.md7
-rw-r--r--2022/info/fanfare-after.md273
-rw-r--r--2022/info/fanfare-before.md57
-rw-r--r--2022/info/fanfare-nav.md7
-rw-r--r--2022/info/grail-after.md645
-rw-r--r--2022/info/grail-before.md33
-rw-r--r--2022/info/grail-nav.md7
-rw-r--r--2022/info/handwritten-after.md123
-rw-r--r--2022/info/handwritten-before.md50
-rw-r--r--2022/info/handwritten-nav.md7
-rw-r--r--2022/info/haskell-after.md466
-rw-r--r--2022/info/haskell-before.md63
-rw-r--r--2022/info/haskell-nav.md7
-rw-r--r--2022/info/health-after.md423
-rw-r--r--2022/info/health-before.md56
-rw-r--r--2022/info/health-nav.md7
-rw-r--r--2022/info/hyperorg-after.md7
-rw-r--r--2022/info/hyperorg-before.md12
-rw-r--r--2022/info/hyperorg-nav.md7
-rw-r--r--2022/info/indieweb-after.md364
-rw-r--r--2022/info/indieweb-before.md62
-rw-r--r--2022/info/indieweb-nav.md7
-rw-r--r--2022/info/journalism-after.md277
-rw-r--r--2022/info/journalism-before.md45
-rw-r--r--2022/info/journalism-nav.md7
-rw-r--r--2022/info/jupyter-after.md270
-rw-r--r--2022/info/jupyter-before.md52
-rw-r--r--2022/info/jupyter-nav.md7
-rw-r--r--2022/info/justl-after.md290
-rw-r--r--2022/info/justl-before.md22
-rw-r--r--2022/info/justl-nav.md7
-rw-r--r--2022/info/links-after.md5
-rw-r--r--2022/info/links-before.md2
-rw-r--r--2022/info/links-nav.md7
-rw-r--r--2022/info/localizing-after.md248
-rw-r--r--2022/info/localizing-before.md30
-rw-r--r--2022/info/localizing-nav.md7
-rw-r--r--2022/info/lspbridge-after.md332
-rw-r--r--2022/info/lspbridge-before.md4
-rw-r--r--2022/info/lspbridge-nav.md7
-rw-r--r--2022/info/mail-after.md581
-rw-r--r--2022/info/mail-before.md64
-rw-r--r--2022/info/mail-nav.md7
-rw-r--r--2022/info/maint-after.md400
-rw-r--r--2022/info/maint-before.md60
-rw-r--r--2022/info/maint-nav.md7
-rw-r--r--2022/info/meetups-after.md899
-rw-r--r--2022/info/meetups-before.md63
-rw-r--r--2022/info/meetups-nav.md7
-rw-r--r--2022/info/news-after.md5
-rw-r--r--2022/info/news-before.md17
-rw-r--r--2022/info/news-nav.md2
-rw-r--r--2022/info/orgsuperlinks-after.md184
-rw-r--r--2022/info/orgsuperlinks-before.md51
-rw-r--r--2022/info/orgsuperlinks-nav.md7
-rw-r--r--2022/info/orgvm-after.md746
-rw-r--r--2022/info/orgvm-before.md46
-rw-r--r--2022/info/orgvm-nav.md7
-rw-r--r--2022/info/orgyear-after.md406
-rw-r--r--2022/info/orgyear-before.md29
-rw-r--r--2022/info/orgyear-nav.md7
-rw-r--r--2022/info/python-after.md298
-rw-r--r--2022/info/python-before.md18
-rw-r--r--2022/info/python-nav.md7
-rw-r--r--2022/info/rde-after.md391
-rw-r--r--2022/info/rde-before.md52
-rw-r--r--2022/info/rde-nav.md7
-rw-r--r--2022/info/realestate-after.md593
-rw-r--r--2022/info/realestate-before.md40
-rw-r--r--2022/info/realestate-nav.md7
-rw-r--r--2022/info/rms-after.md260
-rw-r--r--2022/info/rms-before.md78
-rw-r--r--2022/info/rms-nav.md7
-rw-r--r--2022/info/rolodex-after.md453
-rw-r--r--2022/info/rolodex-before.md32
-rw-r--r--2022/info/rolodex-nav.md7
-rw-r--r--2022/info/sat-close-after.md7
-rw-r--r--2022/info/sat-close-before.md4
-rw-r--r--2022/info/sat-close-nav.md7
-rw-r--r--2022/info/sat-open-after.md89
-rw-r--r--2022/info/sat-open-before.md15
-rw-r--r--2022/info/sat-open-nav.md6
-rw-r--r--2022/info/school-after.md137
-rw-r--r--2022/info/school-before.md16
-rw-r--r--2022/info/school-nav.md7
-rw-r--r--2022/info/science-after.md399
-rw-r--r--2022/info/science-before.md58
-rw-r--r--2022/info/science-nav.md7
-rw-r--r--2022/info/sqlite-after.md451
-rw-r--r--2022/info/sqlite-before.md57
-rw-r--r--2022/info/sqlite-nav.md7
-rw-r--r--2022/info/sun-close-after.md7
-rw-r--r--2022/info/sun-close-before.md4
-rw-r--r--2022/info/sun-close-nav.md6
-rw-r--r--2022/info/sun-open-after.md7
-rw-r--r--2022/info/sun-open-before.md4
-rw-r--r--2022/info/sun-open-nav.md7
-rw-r--r--2022/info/survey-after.md538
-rw-r--r--2022/info/survey-before.md28
-rw-r--r--2022/info/survey-nav.md7
-rw-r--r--2022/info/tramp-after.md7
-rw-r--r--2022/info/tramp-before.md16
-rw-r--r--2022/info/tramp-nav.md7
-rw-r--r--2022/info/treesitter-after.md257
-rw-r--r--2022/info/treesitter-before.md21
-rw-r--r--2022/info/treesitter-nav.md7
-rw-r--r--2022/info/watch.md9
-rw-r--r--2022/info/wayland-after.md163
-rw-r--r--2022/info/wayland-before.md10
-rw-r--r--2022/info/wayland-nav.md7
-rw-r--r--2022/info/workflows-after.md451
-rw-r--r--2022/info/workflows-before.md56
-rw-r--r--2022/info/workflows-nav.md7
142 files changed, 15700 insertions, 0 deletions
diff --git a/2022/info/asmblox-after.md b/2022/info/asmblox-after.md
new file mode 100644
index 00000000..e1ce67d3
--- /dev/null
+++ b/2022/info/asmblox-after.md
@@ -0,0 +1,306 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="asmblox-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hi, I'm Zach and today I'll be giving""" start="00:00:00.000" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""a presentation on asm-blox,""" start="00:00:03.800" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""a programming game inspired by WebAssembly.""" start="00:00:05.320" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""So programming games came into prominence""" start="00:00:08.960" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""about a decade ago and are loved for providing""" start="00:00:10.840" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""interesting programming challenges""" start="00:00:13.160" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""without all the messiness of real world programming.""" start="00:00:14.760" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""I wanted to make a programming game""" start="00:00:17.160" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and I decided to base it off of TIS-100,""" start="00:00:19.960" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""having a pretty basic UI.""" start="00:00:24.880" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It seemed pretty doable in Emacs.""" start="00:00:28.240" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""TIS 100 is a programming game""" start="00:00:30.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""where you write a fictional assembly language""" start="00:00:33.160" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""into a grid of cells which can each""" start="00:00:35.760" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""communicate with one another,""" start="00:00:37.280" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""you're tasked with solving""" start="00:00:39.480" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""fairly simple CS 101 like problems.""" start="00:00:41.200" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""To mix things up a bit I decided to base""" start="00:00:44.960" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""the language of asm-blox off of""" start="00:00:48.440" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""WebAssembly, which is stack based,""" start="00:00:49.800" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""as opposed to TIS-100 which is registered based.""" start="00:00:52.520" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Here you can see the same program""" start="00:00:55.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""written in the game TIS-100,""" start="00:00:59.200" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""what it looks like in asm-blox,""" start="00:01:01.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and the original WebAssembly that it's based off of.""" start="00:01:03.960" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""With that said, let's get into a demo.""" start="00:01:08.040" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""This is the game board.""" start="00:01:10.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It's a 4 by 3 grid.""" start="00:01:12.240" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Each cell has a stack of size 4.""" start="00:01:14.120" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""First off, I'll show some of the stack editing commands.""" start="00:01:16.840" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""We can add a value with the const function.""" start="00:01:20.280" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Here we're adding two values to this stack""" start="00:01:23.760" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""to get added, and eventually the stack gets overflowed.""" start="00:01:27.480" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""We can fix that as follows with the clear command,""" start="00:01:33.400" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""so that clears the stack.""" start="00:01:37.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""We can duplicate values on the stack.""" start="00:01:40.720" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""This duplicates the item at the bottom of the stack.""" start="00:01:43.200" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""10 gets put on, 20 gets put on,""" start="00:01:45.600" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""then 10 will get duplicated""" start="00:01:48.880" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and put on the top of the stack.""" start="00:01:50.200" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""We can increment. For example, this increments""" start="00:01:52.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""the second to bottom, the second to bottom""" start="00:01:55.920" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""from the stack.""" start="00:01:58.760" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""So 10, 20, increment that, clear.""" start="00:01:59.920" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""That's basic stack operations.""" start="00:02:04.400" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""Next up, we have numeric commands.""" start="00:02:07.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""For example, here, if we add &quot;add&quot;,""" start="00:02:11.000" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""it pops two values off the stack,""" start="00:02:12.560" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""adds them, and pushes the result on.""" start="00:02:14.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Another way we can write this is as follows.""" start="00:02:17.080" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""We can have the add here""" start="00:02:20.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and then nest the two constants,""" start="00:02:22.480" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and then this does the same thing.""" start="00:02:26.400" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""First, the inner constant operations run,""" start="00:02:28.520" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and then the outer add operation runs.""" start="00:02:31.720" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""We can nest as deeply as we want.""" start="00:02:35.520" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""There's also subtraction, multiplication, and whatnot.""" start="00:02:40.280" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""Next up are Boolean operations.""" start="00:02:44.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Zero counts as true.""" start="00:02:46.480" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Anything else--sorry, zero counts as false.""" start="00:02:49.080" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Anything else is true.""" start="00:02:51.720" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""For example, this would give us false and true,""" start="00:02:52.760" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""so that result should be false.""" start="00:03:01.840" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Zero gets put on the stack,""" start="00:03:04.040" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""one gets put on, and then the &quot;and&quot; operation.""" start="00:03:06.120" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""So there's also or, not,""" start="00:03:08.160" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and various numerical comparison operations""" start="00:03:12.840" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""like greater than and less than.""" start="00:03:17.760" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""Next up are the port operations.""" start="00:03:21.400" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""We can send values to other cells as follows.""" start="00:03:22.880" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Here we create a value""" start="00:03:27.320" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and then send it right.""" start="00:03:29.600" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Let's run this.""" start="00:03:33.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""The 10 goes on the stack,""" start="00:03:35.040" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and then it gets sent to the right.""" start="00:03:37.480" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Here it's waiting for this cell to pick it up.""" start="00:03:38.480" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It can pick it up just as follows.""" start="00:03:41.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""So left... and then why don't we have it""" start="00:03:44.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""drop that value after it gets it.""" start="00:03:47.480" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""So the 10 gets sent to the right.""" start="00:03:49.520" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""This one picks it up and drops it.""" start="00:03:53.920" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""Lastly, we have control flow,""" start="00:04:00.240" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""which is a bit tricky,""" start="00:04:03.200" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""but with this visual,""" start="00:04:04.280" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""it helps explain it.""" start="00:04:06.880" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""There are two block constructs, &quot;block&quot; and &quot;loop&quot;,""" start="00:04:08.440" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and there's two jumping constructs, &quot;br&quot; and &quot;brif&quot;.""" start="00:04:12.280" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""So if &quot;loop&quot; is jumped to,""" start="00:04:16.880" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""the control flow goes to the beginning,""" start="00:04:23.120" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""the top of the loop.""" start="00:04:25.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""If a block is jumped to,""" start="00:04:26.520" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""it goes to the end of the block,""" start="00:04:28.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and these various blocks""" start="00:04:31.520" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""are identified by their level of nestedness.""" start="00:04:33.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""From the point of view of this jump statement,""" start="00:04:36.520" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""this &quot;br&quot; statement, this is block level 0,""" start="00:04:40.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""this is 1, this is 2.""" start="00:04:45.160" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""So here, &quot;br 1&quot; would be referring to this loop.""" start="00:04:46.440" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""What this [br 1] would do is,""" start="00:04:49.560" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""it would jump to this loop right here.""" start="00:04:51.080" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""If we were to do this [br 2], what this would do is,""" start="00:04:54.000" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""this would jump past this block right here.""" start="00:04:57.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""So as another example, this right here,""" start="00:05:02.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""this is a loop that generates increasing numbers.""" start="00:05:09.880" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""Let's see. Next up, we have modules.""" start="00:05:15.720" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""This is an example of a stack module.""" start="00:05:22.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""In addition to stack, there's also heaps.""" start="00:05:26.280" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""What this does is it allows us to create""" start="00:05:28.760" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""an extra stack that we can push and pop items onto.""" start="00:05:34.560" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""This one can have as large size as we need.""" start="00:05:38.080" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Here it has a size of 20.""" start="00:05:41.240" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It's taking values from up""" start="00:05:43.800" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and exposing those values on the left.""" start="00:05:46.400" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""This loop right here, it generates numbers,""" start="00:05:51.080" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and it's putting them onto the stack.""" start="00:05:57.080" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""We can see here that those numbers""" start="00:05:59.160" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""are being exposed to this cell right here.""" start="00:06:00.920" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It's just taking values, and eventually,""" start="00:06:03.200" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""it's going to overflow and cause an error.""" start="00:06:07.040" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""That finishes the basic commands.""" start="00:06:11.200" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""Why don't we try solving this puzzle.""" start="00:06:14.480" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""The puzzle description is right here.""" start="00:06:16.480" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""We want to read a value from I.""" start="00:06:21.320" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Send 1 to G if I is greater than 0.""" start="00:06:23.280" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Send 1 to E if it's equal to 0.""" start="00:06:28.480" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Send 1 to L if it's less than 0.""" start="00:06:30.800" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""And then all the other ones, we send 0 to.""" start="00:06:32.440" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""First things first, let's send the value we get""" start="00:06:35.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""from the input down as follows.""" start="00:06:40.920" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Let's send that value right.""" start="00:06:44.400" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""You get from up.""" start="00:06:49.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Okay. So next, we're getting a value on the left.""" start="00:06:51.240" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Now we want to compare if this number is greater than 0.""" start="00:06:54.320" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""If it's greater than 0, we send 1 to G.""" start="00:06:58.040" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Let's perform the greater than operation""" start="00:06:59.800" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""on that item we just got, and we're comparing it to 0.""" start="00:07:03.280" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Now that result, we're going to send down,""" start="00:07:08.080" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and we're going to send this original value""" start="00:07:11.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""we got from here to the right.""" start="00:07:13.880" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Here, we do a similar step.""" start="00:07:16.880" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""We get the value from the left,""" start="00:07:19.000" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""but this time, we have to do an equal operation.""" start="00:07:20.240" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Is that number we got equal to 0?""" start="00:07:22.920" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""We send that result down,""" start="00:07:25.760" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and then send this number to the right.""" start="00:07:28.960" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Lastly, we get this number from the left.""" start="00:07:32.880" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Here, we need to compare if it's less than 0.""" start="00:07:38.040" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""We send that result down,""" start="00:07:42.400" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and now lastly, we drop that remaining value.""" start="00:07:45.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Okay, let's--oh, and then lastly,""" start="00:07:50.280" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""we need to send down the value we get up.""" start="00:07:53.080" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Send down, up, send down, up.""" start="00:07:56.040" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Okay, so let's try running this.""" start="00:08:02.560" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Let's see. We notice that""" start="00:08:04.760" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""the numbers are coming in from I.""" start="00:08:08.920" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""They're going through our various conditions""" start="00:08:10.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and should be sending all the correct values.""" start="00:08:14.200" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It looks like we're not getting any errors so far.""" start="00:08:18.160" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Let's speed this up.""" start="00:08:23.560" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""That completes the puzzle.""" start="00:08:26.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""Now let's get into some of the implementation details.""" start="00:08:33.040" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""The first thing is the game loop.""" start="00:08:42.000" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""The game loop is... So this is actually extremely simple.""" start="00:08:46.320" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""All the state for the entire game""" start="00:08:50.560" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""is stored in just a few variables.""" start="00:08:52.320" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""There's one variable storing""" start="00:08:54.400" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""the text of each cell as a vector of strings.""" start="00:08:56.480" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""There's a single function""" start="00:09:01.400" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""that renders the entire game, the entire board.""" start="00:09:06.280" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""There's a single function that would render""" start="00:09:09.080" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""this entire screen based off of the state,""" start="00:09:11.120" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and then the game waits for you to press a key.""" start="00:09:13.920" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""The key usually, depending on what action you perform,""" start="00:09:19.240" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""updates the state and causes a re-render.""" start="00:09:24.120" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It's an extremely simple game loop,""" start="00:09:27.040" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""but it makes implementing it pretty easy.""" start="00:09:29.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""To demonstrate how this game loop works,""" start="00:09:32.800" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""I have a simple demo prepared.""" start="00:09:35.200" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""This is a game of tic-tac-toe.""" start="00:09:38.400" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Let me show this real fast.""" start="00:09:41.880" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It's an extremely simple implementation,""" start="00:09:44.800" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""but it follows the same principles""" start="00:09:49.200" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""that I used in asm-blox.""" start="00:09:51.466" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""First, we have the state defined in variables.""" start="00:09:53.600" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Here we have two pieces of state.""" start="00:09:57.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""We have which player's turn it is""" start="00:09:59.560" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and the state of the game board.""" start="00:10:01.600" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""The player turn can be nil if it's empty,""" start="00:10:03.120" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""the string &quot;x&quot; or the string &quot;o&quot;.""" start="00:10:06.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Then the game board is a list of nine board elements.""" start="00:10:08.760" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""So that's the state.""" start="00:10:14.240" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Then we have a helper function.""" start="00:10:16.960" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""You can go into the details,""" start="00:10:18.120" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""but it just returns true""" start="00:10:19.440" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""if the board has a winning player.""" start="00:10:21.000" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Part two is the rendering function.""" start="00:10:25.600" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Only based off of the game state,""" start="00:10:30.040" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""we have a function that erases the buffer""" start="00:10:32.800" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and draws this from scratch.""" start="00:10:36.720" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""That's this part right here.""" start="00:10:40.280" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Lastly, we have the action.""" start="00:10:45.320" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""We have one action which is bound to RET,""" start="00:10:46.720" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and it places a player token.""" start="00:10:51.920" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Once it places a player token,""" start="00:10:55.840" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""it rerenders the board,""" start="00:10:59.920" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and all the rerendering is handled by this function.""" start="00:11:03.120" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Then we have just creating of the mode""" start="00:11:06.880" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and initialization function.""" start="00:11:12.480" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""With these three steps""" start="00:11:14.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""it clearly separates out all of the state,""" start="00:11:16.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""the rendering, and the actions,""" start="00:11:20.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and it makes implementing it very simple.""" start="00:11:22.960" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""One trick that's used here and that I use""" start="00:11:25.880" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""in my asm-blox game is that""" start="00:11:29.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""when I render the board,""" start="00:11:32.383" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""I propertize the text to contain extra information.""" start="00:11:33.317" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""For example, here, each cell has""" start="00:11:40.800" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""a tic-tac-toe index to indicate which number cell it is.""" start="00:11:45.080" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""This has index 0, 1, 2, all the way up to 8.""" start="00:11:49.400" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""That way, for placing, the only thing it has to do""" start="00:11:53.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""is just look at its position""" start="00:11:58.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""based off of the text property.""" start="00:12:01.200" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It makes implementation extremely simple.""" start="00:12:04.960" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""Next up, we have the implementation of the code cells.""" start="00:12:07.800" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""If you notice, here it's kind of weird""" start="00:12:14.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""how it's like a buffer, but each cell kind of acts""" start="00:12:16.960" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""like its own buffer, and it has its own limits.""" start="00:12:21.000" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""All of the Emacs editing--""" start="00:12:25.760" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""well, some of the Emacs editing commands kind of work,""" start="00:12:27.600" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""like beginning-of-line, end-of-line, end-of-buffer.""" start="00:12:30.760" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""How is that done?""" start="00:12:35.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Well, it's all just a trick, actually.""" start="00:12:38.240" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Each cell has text properties of which line it's at""" start="00:12:41.760" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and its cell coordinates.""" start="00:12:47.280" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Whenever a key is pressed for editing, moving lines--""" start="00:12:48.800" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""there's even kind of more complicated things""" start="00:12:54.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""like switching cells around--""" start="00:12:58.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""so all of that,""" start="00:13:00.600" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""it knows which position it's in,""" start="00:13:03.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""it knows what cell it's in,""" start="00:13:05.200" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and then it copies the text of the cell,""" start="00:13:08.080" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""because remember, the contents of the cell""" start="00:13:12.880" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""are stored in internal state.""" start="00:13:16.320" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It copies that cell contents into a temporary buffer.""" start="00:13:18.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It then moves the point to whichever line it was""" start="00:13:23.000" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""in the game board.""" start="00:13:27.960" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It performs the action.""" start="00:13:31.160" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It makes sure that the resulting text isn't""" start="00:13:33.000" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""longer than the cell width or the cell height.""" start="00:13:36.200" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""If everything checks out,""" start="00:13:40.160" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""it updates the state and calls a re-render.""" start="00:13:42.040" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""So there's nothing going on in here""" start="00:13:45.120" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""that's, like, actually inserting a letter A.""" start="00:13:48.440" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It's all updating the state and causing a re-render.""" start="00:13:51.080" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""So this makes things like certain""" start="00:14:00.920" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""internal Emacs editing constructs""" start="00:14:03.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""pretty hard to use, like undoing.""" start="00:14:06.480" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Normally the undoing construct""" start="00:14:09.120" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""works off the contents of the buffer.""" start="00:14:12.200" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""But if your buffer is actually just""" start="00:14:15.120" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""a reflection of the internal state,""" start="00:14:17.840" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""then how does undoing work?""" start="00:14:20.080" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Well, it pretty much is kind of a hack.""" start="00:14:21.440" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""I mean, undoing is here,""" start="00:14:24.880" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""but it's pretty much redone""" start="00:14:27.040" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""in a not so configurable, not so modifiable way.""" start="00:14:32.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""Pretty much everything is like that,""" start="00:14:37.560" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""from these parentheses highlighting...""" start="00:14:40.080" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Normally, parentheses highlighting""" start="00:14:42.440" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""would be kind of weird,""" start="00:14:46.320" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""with cross-line parentheses and everything.""" start="00:14:47.244" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""All of that had to be redone.""" start="00:14:49.840" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""Another point about how this is implemented""" start="00:14:52.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""is the assembly text to executable code.""" start="00:14:58.160" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""If you're familiar with WebAssembly""" start="00:15:02.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""you might have encountered a tool wat-wasm.""" start="00:15:05.800" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It basically converts the WebAssembly text format""" start="00:15:10.720" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""to byte code.""" start="00:15:16.440" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""And what I do here... It goes through a similar process.""" start="00:15:18.280" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Normally, when you're writing this text format,""" start="00:15:22.440" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""you can nest things as deeply as you want.""" start="00:15:28.000" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Basically, what happens is it flattens out everything.""" start="00:15:30.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It kind of knows the order""" start="00:15:33.800" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""that all these things are going to get executed,""" start="00:15:35.920" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and then it puts it into one single line""" start="00:15:38.160" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""that it can just run through and execute.""" start="00:15:40.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""The same thing for the loops and blocks.""" start="00:15:44.120" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It internally generates labels and jump statements.""" start="00:15:48.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""So that concludes this presentation.""" start="00:15:52.240" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Thank you for listening,""" start="00:15:58.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and I hope you enjoy the rest of the conference.""" start="00:15:59.667" video="mainVideo-asmblox" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [zacromero@posteo.net](mailto:zacromero@posteo.net?subject=Comment%20for%20EmacsConf%202022%20asmblox%3A%20asm-blox%3A%20a%20game%20based%20on%20WebAssembly%20that%20no%20one%20asked%20for)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/asmblox-before.md b/2022/info/asmblox-before.md
new file mode 100644
index 00000000..d8c509ff
--- /dev/null
+++ b/2022/info/asmblox-before.md
@@ -0,0 +1,44 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Zachary Romero shares a game he wrote and how he made it. Afterwards, he will handle questions over BigBlueButton.
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="asmblox-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="asmblox-mainVideo" data="""
+00:00.000 Introduction
+00:30.680 TIS-100
+00:44.960 WebAssembly
+01:08.040 Basic stack operations
+02:07.640 Numeric commands
+02:44.680 Boolean operations
+03:21.400 Port operations
+04:00.240 Control flow
+05:15.720 Modules
+06:14.480 Puzzle
+08:33.040 The game loop
+09:35.200 Tic-tac-toe
+11:25.880 Text properties
+12:07.800 Code cells
+14:00.920 Undo
+14:37.560 Parentheses
+14:52.360 Assembly text to executable code
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--main.webm">Download --main.webm (238MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/rfZ2V1DZNgpMh18gKrsXmY">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="asmblox-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="asmblox-qanda" data="""
+00:00.000 Introduction
+01:12.600 Why did you choose an internal state versus many 'state buffers'?
+02:10.720 Do you have plans to port shenzhen.io to Emacs?
+02:29.960 Did this use WASM?
+02:59.800 Why wasm rather than a more traditional Assembly dialect? It wouldn't be harder to implement, right?
+05:08.960 Any next projects on your mind?
+05:52.680 Does this work with any other paren-based editing packages?
+06:46.920 What kind of tool could use this idea?
+07:56.280 How did you go about designing the puzzles?
+08:39.320 What are your favorite changes in the upcoming Emacs 29?
+09:07.480 Are there tools to add more puzzles?
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--answers.webm">Download --answers.webm (24MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--answers--chapters.vtt">Download --answers--chapters.vtt</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/asmblox-nav.md b/2022/info/asmblox-nav.md
new file mode 100644
index 00000000..f28a2155
--- /dev/null
+++ b/2022/info/asmblox-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/science">Writing and organizing literature notes for scientific writing</a>
+Next by track: <a href="/2022/talks/buddy">The Emacs Buddy initiative</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/async-after.md b/2022/info/async-after.md
new file mode 100644
index 00000000..28a74f96
--- /dev/null
+++ b/2022/info/async-after.md
@@ -0,0 +1,396 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="async-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hey everyone. I'm Michael,""" start="00:00:00.000" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and I'm going to be talking to you today""" start="00:00:02.720" video="mainVideo-async" id="subtitle"]]
+[[!template text="""about asynchronous programming in Emacs Lisp.""" start="00:00:04.400" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I'm located in the San Francisco Bay Area,""" start="00:00:07.640" video="mainVideo-async" id="subtitle"]]
+[[!template text="""where I'm a developer as well as""" start="00:00:10.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""a long time Emacs user.""" start="00:00:11.760" video="mainVideo-async" id="subtitle"]]
+[[!template text="""You may have heard of async""" start="00:00:14.120" video="mainVideo-async" id="subtitle"]]
+[[!template text="""or asynchronous programming.""" start="00:00:15.981" video="mainVideo-async" id="subtitle"]]
+[[!template text="""The idea has been around for decades,""" start="00:00:18.760" video="mainVideo-async" id="subtitle"]]
+[[!template text="""but it first gained widespread attention""" start="00:00:20.880" video="mainVideo-async" id="subtitle"]]
+[[!template text="""in JavaScript back in the aughts.""" start="00:00:23.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""And in the teens it gained tremendous popularity""" start="00:00:26.800" video="mainVideo-async" id="subtitle"]]
+[[!template text="""in the DevOps world with Go lang.""" start="00:00:29.521" video="mainVideo-async" id="subtitle"]]
+[[!template text="""And just in the last few years,""" start="00:00:31.720" video="mainVideo-async" id="subtitle"]]
+[[!template text="""support for async programming has landed in Rust.""" start="00:00:33.800" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Well, it can be done in Emacs as well,""" start="00:00:37.880" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and this talk will demonstrate that""" start="00:00:40.080" video="mainVideo-async" id="subtitle"]]
+[[!template text="""by walking you through a little problem""" start="00:00:42.040" video="mainVideo-async" id="subtitle"]]
+[[!template text="""that I actually solved for myself.""" start="00:00:44.600" video="mainVideo-async" id="subtitle"]]
+[[!template new="1" text="""Like a lot of these stories,""" start="00:00:47.200" video="mainVideo-async" id="subtitle"]]
+[[!template text="""it begins with scratching a personal itch.""" start="00:00:49.040" video="mainVideo-async" id="subtitle"]]
+[[!template text="""In my case, automating my music server.""" start="00:00:51.920" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I use something called the Music Player Daemon""" start="00:00:55.320" video="mainVideo-async" id="subtitle"]]
+[[!template text="""locally, and as the name suggests,""" start="00:00:57.537" video="mainVideo-async" id="subtitle"]]
+[[!template text="""it just kind of hangs out in the background.""" start="00:01:00.240" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Reads music files,""" start="00:01:03.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and talks to assorted sound drivers.""" start="00:01:04.771" video="mainVideo-async" id="subtitle"]]
+[[!template text="""In fact, it is so focused on""" start="00:01:08.040" video="mainVideo-async" id="subtitle"]]
+[[!template text="""that mission that it doesn't even offer""" start="00:01:09.640" video="mainVideo-async" id="subtitle"]]
+[[!template text="""a user interface.""" start="00:01:11.354" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Instead, it serves an API""" start="00:01:12.440" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and invites application developers""" start="00:01:14.400" video="mainVideo-async" id="subtitle"]]
+[[!template text="""to build clients on top of that API.""" start="00:01:16.120" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Okay, so let's hop into a vterm,""" start="00:01:19.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and I'd like to show you the MPD client I use""" start="00:01:22.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""for my daily driver, something called NCMP CPP.""" start="00:01:25.080" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Doesn't exactly roll off the tongue,""" start="00:01:29.520" video="mainVideo-async" id="subtitle"]]
+[[!template text="""but I've got a playlist,""" start="00:01:31.760" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I can browse the file system,""" start="00:01:33.461" video="mainVideo-async" id="subtitle"]]
+[[!template text="""looks like I can search my music library,""" start="00:01:36.520" video="mainVideo-async" id="subtitle"]]
+[[!template text="""yada yada yada.""" start="00:01:39.344" video="mainVideo-async" id="subtitle"]]
+[[!template text="""It's got all the basic features.""" start="00:01:40.000" video="mainVideo-async" id="subtitle"]]
+[[!template text="""The point that I want to make is that""" start="00:01:42.560" video="mainVideo-async" id="subtitle"]]
+[[!template new="1" text="""NCMP CPP is a completely independent project""" start="00:01:44.854" video="mainVideo-async" id="subtitle"]]
+[[!template text="""of MPD, separate and distinct.""" start="00:01:50.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""It does all of its work by simply communicating""" start="00:01:53.680" video="mainVideo-async" id="subtitle"]]
+[[!template text="""with the Music Player Demon over the API.""" start="00:01:57.200" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Well, I wanted to program to that API""" start="00:02:01.400" video="mainVideo-async" id="subtitle"]]
+[[!template text="""only from within Emacs.""" start="00:02:03.400" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Now, there are already Emacs MPD clients out there,""" start="00:02:05.760" video="mainVideo-async" id="subtitle"]]
+[[!template text="""but I didn't really want a full-blown client.""" start="00:02:09.480" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I just wanted a few small tweaks""" start="00:02:11.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""over my current configuration.""" start="00:02:14.137" video="mainVideo-async" id="subtitle"]]
+[[!template text="""A command to skip to the next song.""" start="00:02:16.320" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Maybe shove the current track into the mode line.""" start="00:02:19.280" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Things like this.""" start="00:02:22.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I needed an Elisp API that would let me do this.""" start="00:02:24.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Okay, well, let's get out of ncmpcpp,""" start="00:02:28.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and let's get into a netcat session""" start="00:02:32.000" video="mainVideo-async" id="subtitle"]]
+[[!template text="""with my local MPD server.""" start="00:02:37.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""As you can see, we get a welcome string.""" start="00:02:39.400" video="mainVideo-async" id="subtitle"]]
+[[!template text="""So, it is a server goes first protocol.""" start="00:02:43.840" video="mainVideo-async" id="subtitle"]]
+[[!template text="""But after that it's a very familiar""" start="00:02:46.800" video="mainVideo-async" id="subtitle"]]
+[[!template text="""text based request response oriented protocol.""" start="00:02:49.640" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I can ask for the volume.""" start="00:02:53.960" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I can ask for the status.""" start="00:02:56.240" video="mainVideo-async" id="subtitle"]]
+[[!template text="""But in particular I wanted an asynchronous API.""" start="00:02:58.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""If I issue a command like""" start="00:03:06.000" video="mainVideo-async" id="subtitle"]]
+[[!template text="""find every track in my library,""" start="00:03:07.800" video="mainVideo-async" id="subtitle"]]
+[[!template text="""that's going to produce a lot of data.""" start="00:03:11.840" video="mainVideo-async" id="subtitle"]]
+[[!template text="""That's a human perceptible pause""" start="00:03:15.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""as Emacs processes all the input.""" start="00:03:18.920" video="mainVideo-async" id="subtitle"]]
+[[!template new="1" text="""What I wanted was a style of programming""" start="00:03:22.080" video="mainVideo-async" id="subtitle"]]
+[[!template text="""where I could fire off my command,""" start="00:03:25.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""have the Emacs command loop keep working,""" start="00:03:28.080" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and only invoke some callback""" start="00:03:31.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""when there was data available.""" start="00:03:33.440" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Well, Emacs is famously single threaded,""" start="00:03:35.280" video="mainVideo-async" id="subtitle"]]
+[[!template text="""so it shouldn't come as a surprise that it offers""" start="00:03:38.320" video="mainVideo-async" id="subtitle"]]
+[[!template text="""a rich set of primitives that enable the sort of""" start="00:03:42.221" video="mainVideo-async" id="subtitle"]]
+[[!template text="""network programming that I wanted to do.""" start="00:03:45.654" video="mainVideo-async" id="subtitle"]]
+[[!template text="""In particular, it offers""" start="00:03:48.271" video="mainVideo-async" id="subtitle"]]
+[[!template text="""a function called `make-network-process`.""" start="00:03:50.671" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Now this method offers""" start="00:03:53.404" video="mainVideo-async" id="subtitle"]]
+[[!template text="""a bewildering variety of options,""" start="00:03:54.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""but at the heart of the matter""" start="00:03:57.721" video="mainVideo-async" id="subtitle"]]
+[[!template text="""it opens a network connection""" start="00:03:59.487" video="mainVideo-async" id="subtitle"]]
+[[!template text="""to some endpoint out there,""" start="00:04:01.054" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and we can configure it to be non-blocking.""" start="00:04:02.687" video="mainVideo-async" id="subtitle"]]
+[[!template text="""It returns a handle that you can use to refer""" start="00:04:06.104" video="mainVideo-async" id="subtitle"]]
+[[!template text="""to this network connection with other methods.""" start="00:04:10.421" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Other methods such as `process-send-string`,""" start="00:04:13.640" video="mainVideo-async" id="subtitle"]]
+[[!template text="""which as the name suggests,""" start="00:04:17.760" video="mainVideo-async" id="subtitle"]]
+[[!template text="""allows you to send textual data""" start="00:04:19.600" video="mainVideo-async" id="subtitle"]]
+[[!template text="""to the remote endpoint of your network connection.""" start="00:04:21.960" video="mainVideo-async" id="subtitle"]]
+[[!template text="""You can also use it with `set-process-filter`,""" start="00:04:26.320" video="mainVideo-async" id="subtitle"]]
+[[!template text="""which allows you to associate a callback""" start="00:04:29.400" video="mainVideo-async" id="subtitle"]]
+[[!template text="""with your network connection.""" start="00:04:32.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""That callback will be invoked""" start="00:04:33.240" video="mainVideo-async" id="subtitle"]]
+[[!template text="""when there is data available""" start="00:04:35.920" video="mainVideo-async" id="subtitle"]]
+[[!template text="""in the process's read buffer.""" start="00:04:37.804" video="mainVideo-async" id="subtitle"]]
+[[!template text="""In other words,""" start="00:04:40.480" video="mainVideo-async" id="subtitle"]]
+[[!template text="""in a request response oriented protocol""" start="00:04:41.254" video="mainVideo-async" id="subtitle"]]
+[[!template text="""like that of MPD, you open your socket""" start="00:04:44.960" video="mainVideo-async" id="subtitle"]]
+[[!template text="""with `make-network-process`,""" start="00:04:47.800" video="mainVideo-async" id="subtitle"]]
+[[!template text="""send your request via `process-send-string`""" start="00:04:50.960" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and life will just continue in Emacs""" start="00:04:53.760" video="mainVideo-async" id="subtitle"]]
+[[!template text="""until some data shows up""" start="00:04:56.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""in the process's read buffer,""" start="00:04:57.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""at which point your callback will be invoked.""" start="00:05:00.720" video="mainVideo-async" id="subtitle"]]
+[[!template new="1" text="""It turns out this was enough""" start="00:05:05.200" video="mainVideo-async" id="subtitle"]]
+[[!template text="""for a purpose built async runtime.""" start="00:05:07.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Let's work through the sequence of events""" start="00:05:12.280" video="mainVideo-async" id="subtitle"]]
+[[!template text="""when opening a connection""" start="00:05:14.800" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and firing off a few commands in this style.""" start="00:05:16.480" video="mainVideo-async" id="subtitle"]]
+[[!template text="""So, let's imagine a library""" start="00:05:18.720" video="mainVideo-async" id="subtitle"]]
+[[!template text="""that offers a connection object of some sort,""" start="00:05:22.887" video="mainVideo-async" id="subtitle"]]
+[[!template text="""a caller, and an MPD server out on the network.""" start="00:05:25.767" video="mainVideo-async" id="subtitle"]]
+[[!template text="""The caller will presumably get themselves""" start="00:05:29.487" video="mainVideo-async" id="subtitle"]]
+[[!template text="""a connection object by invoking some sort""" start="00:05:31.807" video="mainVideo-async" id="subtitle"]]
+[[!template text="""of connect method on our library.""" start="00:05:34.954" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We can handle this through `make-network-process`,""" start="00:05:38.327" video="mainVideo-async" id="subtitle"]]
+[[!template text="""but we're going to invoke `make-network-process`""" start="00:05:41.047" video="mainVideo-async" id="subtitle"]]
+[[!template text="""with nowait equal to true,""" start="00:05:45.487" video="mainVideo-async" id="subtitle"]]
+[[!template text="""in other words asynchronously.""" start="00:05:47.167" video="mainVideo-async" id="subtitle"]]
+[[!template text="""That means the method is going to return immediately.""" start="00:05:50.567" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We won't even know if the connection is up,""" start="00:05:52.927" video="mainVideo-async" id="subtitle"]]
+[[!template text="""let alone what the response would be.""" start="00:05:56.327" video="mainVideo-async" id="subtitle"]]
+[[!template new="1" text="""This has some implications.""" start="00:05:59.247" video="mainVideo-async" id="subtitle"]]
+[[!template text="""At this point we've returned control to the caller,""" start="00:06:01.807" video="mainVideo-async" id="subtitle"]]
+[[!template text="""the Emacs event loop is proceeding""" start="00:06:05.247" video="mainVideo-async" id="subtitle"]]
+[[!template text="""quite happily, and so the caller is free""" start="00:06:08.247" video="mainVideo-async" id="subtitle"]]
+[[!template text="""to start using our connection object.""" start="00:06:11.304" video="mainVideo-async" id="subtitle"]]
+[[!template text="""They might say issue a status command.""" start="00:06:15.047" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Okay, well, in our library""" start="00:06:18.367" video="mainVideo-async" id="subtitle"]]
+[[!template text="""we don't have a connection yet.""" start="00:06:20.248" video="mainVideo-async" id="subtitle"]]
+[[!template text="""How on earth are we going to service this?""" start="00:06:22.887" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Well, we can simply give ourselves a queue""" start="00:06:26.607" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and note down the fact that""" start="00:06:29.807" video="mainVideo-async" id="subtitle"]]
+[[!template text="""we owe a status command.""" start="00:06:31.820" video="mainVideo-async" id="subtitle"]]
+[[!template text="""That's pretty quick.""" start="00:06:34.567" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We've now returned control back to our caller,""" start="00:06:35.647" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and they are again free to issue more commands.""" start="00:06:38.087" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Maybe they issue a play command.""" start="00:06:40.527" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Okay, well, we're going to go deeper into depth,""" start="00:06:42.567" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and note that we also owe a play command.""" start="00:06:45.167" video="mainVideo-async" id="subtitle"]]
+[[!template text="""At some point in the indeterminate future,""" start="00:06:51.127" video="mainVideo-async" id="subtitle"]]
+[[!template text="""the connection will get up,""" start="00:06:54.007" video="mainVideo-async" id="subtitle"]]
+[[!template text="""MPD will allocate resources to track a new client.""" start="00:06:57.598" video="mainVideo-async" id="subtitle"]]
+[[!template text="""They will write the welcome string into the socket,""" start="00:07:03.000" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and those bytes are going to show up""" start="00:07:06.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""in the Emacs process's read buffer,""" start="00:07:07.920" video="mainVideo-async" id="subtitle"]]
+[[!template text="""at which point our callback will be invoked.""" start="00:07:10.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We can parse the welcome string, maybe""" start="00:07:13.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""note the version of that connection object""" start="00:07:17.440" video="mainVideo-async" id="subtitle"]]
+[[!template text="""that might come in handy.""" start="00:07:19.240" video="mainVideo-async" id="subtitle"]]
+[[!template text="""But the key point is our callback needs to""" start="00:07:20.400" video="mainVideo-async" id="subtitle"]]
+[[!template text="""take a look at the queue and notice:""" start="00:07:23.021" video="mainVideo-async" id="subtitle"]]
+[[!template text="""&quot;Oh. We owe a status command,&quot;""" start="00:07:25.240" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and so we'll invoke `process-send-string`,""" start="00:07:27.200" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and send the status command down the pipe.""" start="00:07:29.880" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Again, at some indeterminate time in the future""" start="00:07:32.280" video="mainVideo-async" id="subtitle"]]
+[[!template text="""some bytes are going to show up""" start="00:07:36.760" video="mainVideo-async" id="subtitle"]]
+[[!template text="""in our process's read buffer""" start="00:07:38.600" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and our callback will again be invoked.""" start="00:07:41.200" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We've got volume is 75 plus a lot of other stuff,""" start="00:07:44.721" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and here we come to the next problem.""" start="00:07:48.560" video="mainVideo-async" id="subtitle"]]
+[[!template new="1" text="""If our caller invoked status,""" start="00:07:50.480" video="mainVideo-async" id="subtitle"]]
+[[!template text="""they probably wanted to know about the status,""" start="00:07:54.440" video="mainVideo-async" id="subtitle"]]
+[[!template text="""so how shall we get them to them?""" start="00:07:56.960" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Well, there's really not a lot of options""" start="00:07:59.880" video="mainVideo-async" id="subtitle"]]
+[[!template text="""at this point except the callback.""" start="00:08:02.601" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Okay, so change of plan.""" start="00:08:04.280" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Our queue is no longer a queue of commands.""" start="00:08:07.568" video="mainVideo-async" id="subtitle"]]
+[[!template text="""It's going to be a queue of commands""" start="00:08:11.720" video="mainVideo-async" id="subtitle"]]
+[[!template text="""with associated callbacks.""" start="00:08:13.840" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We read the response off the socket,""" start="00:08:15.880" video="mainVideo-async" id="subtitle"]]
+[[!template text="""invoke our caller supplied callback,""" start="00:08:20.280" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and then pop the queue.""" start="00:08:23.440" video="mainVideo-async" id="subtitle"]]
+[[!template text="""At this point our callback""" start="00:08:26.080" video="mainVideo-async" id="subtitle"]]
+[[!template text="""(the library callback) needs to know""" start="00:08:28.920" video="mainVideo-async" id="subtitle"]]
+[[!template text="""that we still have a pending command,""" start="00:08:32.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""we fire that off down the pipe,""" start="00:08:34.040" video="mainVideo-async" id="subtitle"]]
+[[!template text="""at some indeterminate time in the future""" start="00:08:35.720" video="mainVideo-async" id="subtitle"]]
+[[!template text="""we get a response,""" start="00:08:38.520" video="mainVideo-async" id="subtitle"]]
+[[!template text="""our callback is invoked,""" start="00:08:40.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""we invoke the caller supplied callback,""" start="00:08:42.640" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and we pop the queue.""" start="00:08:45.720" video="mainVideo-async" id="subtitle"]]
+[[!template text="""The structure of such a program""" start="00:08:47.240" video="mainVideo-async" id="subtitle"]]
+[[!template text="""is best viewed as a finite state machine.""" start="00:08:53.760" video="mainVideo-async" id="subtitle"]]
+[[!template text="""And this is typically where you end up""" start="00:08:55.800" video="mainVideo-async" id="subtitle"]]
+[[!template text="""in asynchronous programming,""" start="00:08:57.640" video="mainVideo-async" id="subtitle"]]
+[[!template text="""at least when you don't have a runtime grafted""" start="00:08:59.835" video="mainVideo-async" id="subtitle"]]
+[[!template text="""onto your program the way you do with Go lang,""" start="00:09:02.551" video="mainVideo-async" id="subtitle"]]
+[[!template text="""or when you don't have sort of extensive""" start="00:09:04.960" video="mainVideo-async" id="subtitle"]]
+[[!template text="""library support the way you do with Rust.""" start="00:09:07.251" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Your data structure exists in one of these states""" start="00:09:09.680" video="mainVideo-async" id="subtitle"]]
+[[!template text="""at any given time,""" start="00:09:14.480" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and when input shows up on your file descriptor,""" start="00:09:15.440" video="mainVideo-async" id="subtitle"]]
+[[!template text="""you transition along one of these edges""" start="00:09:18.960" video="mainVideo-async" id="subtitle"]]
+[[!template text="""to a new state.""" start="00:09:21.368" video="mainVideo-async" id="subtitle"]]
+[[!template new="1" text="""Cool. So, let's take a look at some of the code""" start="00:09:24.240" video="mainVideo-async" id="subtitle"]]
+[[!template text="""that flows from this.""" start="00:09:28.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Okay, let's hop over to an Emacs""" start="00:09:30.000" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and take a look at how we might code this up.""" start="00:09:32.240" video="mainVideo-async" id="subtitle"]]
+[[!template text="""If you recall the sequence diagrams I shared,""" start="00:09:35.200" video="mainVideo-async" id="subtitle"]]
+[[!template text="""we're going to be scribbling down the command""" start="00:09:38.000" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and the callback that we'll be invoking""" start="00:09:40.240" video="mainVideo-async" id="subtitle"]]
+[[!template text="""upon its completion.""" start="00:09:42.240" video="mainVideo-async" id="subtitle"]]
+[[!template text="""The first thing I did was""" start="00:09:43.800" video="mainVideo-async" id="subtitle"]]
+[[!template text="""give myself a little command struct.""" start="00:09:44.800" video="mainVideo-async" id="subtitle"]]
+[[!template text="""With that, I was able to define""" start="00:09:47.720" video="mainVideo-async" id="subtitle"]]
+[[!template text="""the connection object.""" start="00:09:51.159" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We're going to be storing""" start="00:09:52.640" video="mainVideo-async" id="subtitle"]]
+[[!template text="""the handle to the connection.""" start="00:09:55.134" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We're going to write down the protocol version""" start="00:09:56.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""that we harvest from the welcome message,""" start="00:09:59.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and of course we'll be recording""" start="00:10:02.117" video="mainVideo-async" id="subtitle"]]
+[[!template text="""the command queue as well.""" start="00:10:04.249" video="mainVideo-async" id="subtitle"]]
+[[!template text="""And so I gave myself a little connection object,""" start="00:10:06.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""connection struct with those three attributes.""" start="00:10:08.600" video="mainVideo-async" id="subtitle"]]
+[[!template text="""With the data model squared away,""" start="00:10:12.280" video="mainVideo-async" id="subtitle"]]
+[[!template text="""it was really pretty easy""" start="00:10:15.080" video="mainVideo-async" id="subtitle"]]
+[[!template text="""to code up the connect implementation.""" start="00:10:16.760" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I'm eliding some details for exposition purposes,""" start="00:10:19.918" video="mainVideo-async" id="subtitle"]]
+[[!template text="""but in the event it's really not that more complex""" start="00:10:25.800" video="mainVideo-async" id="subtitle"]]
+[[!template text="""than what you see here.""" start="00:10:29.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We're going to unpack the arguments,""" start="00:10:31.080" video="mainVideo-async" id="subtitle"]]
+[[!template text="""figure out where the MPD server is""" start="00:10:32.880" video="mainVideo-async" id="subtitle"]]
+[[!template text="""to which you would like us to connect.""" start="00:10:35.651" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We'll connect via `make-network-process`.""" start="00:10:37.600" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We'll associate a library defined callback""" start="00:10:40.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""with that connection via `set-process-filter`.""" start="00:10:42.760" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Then we'll instantiate the connection object""" start="00:10:45.960" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and return it to the caller.""" start="00:10:48.760" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Once the caller has a connection object,""" start="00:10:51.720" video="mainVideo-async" id="subtitle"]]
+[[!template text="""they're free to send commands down that connection.""" start="00:10:53.818" video="mainVideo-async" id="subtitle"]]
+[[!template text="""So, what we're doing here is simply""" start="00:10:57.440" video="mainVideo-async" id="subtitle"]]
+[[!template text="""instantiating a command object""" start="00:11:00.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""on the basis of the caller supplied arguments""" start="00:11:02.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and appending it to the queue.""" start="00:11:05.440" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Then the last thing we do,""" start="00:11:07.040" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and I've just indicated this with a comment,""" start="00:11:08.440" video="mainVideo-async" id="subtitle"]]
+[[!template text="""is we kick the queue.""" start="00:11:10.920" video="mainVideo-async" id="subtitle"]]
+[[!template text="""This kind of goes back""" start="00:11:12.680" video="mainVideo-async" id="subtitle"]]
+[[!template text="""to the state transition diagram""" start="00:11:14.040" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I laid out earlier.""" start="00:11:16.680" video="mainVideo-async" id="subtitle"]]
+[[!template text="""What this means is the logic for saying,""" start="00:11:18.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""well, if we're awaiting the completion""" start="00:11:22.200" video="mainVideo-async" id="subtitle"]]
+[[!template text="""of a previously sent command,""" start="00:11:24.600" video="mainVideo-async" id="subtitle"]]
+[[!template text="""there's really not much more to be done.""" start="00:11:25.851" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We're just going to push this command""" start="00:11:27.501" video="mainVideo-async" id="subtitle"]]
+[[!template text="""onto the queue and return.""" start="00:11:30.200" video="mainVideo-async" id="subtitle"]]
+[[!template text="""On the other hand, if the queue is empty""" start="00:11:31.840" video="mainVideo-async" id="subtitle"]]
+[[!template text="""on entry to `elmpd-send`,""" start="00:11:34.400" video="mainVideo-async" id="subtitle"]]
+[[!template text="""there's no reason not to just""" start="00:11:37.120" video="mainVideo-async" id="subtitle"]]
+[[!template text="""immediately send the command.""" start="00:11:38.800" video="mainVideo-async" id="subtitle"]]
+[[!template text="""This is an example of the sort of client side code""" start="00:11:40.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""that results from this API.""" start="00:11:46.600" video="mainVideo-async" id="subtitle"]]
+[[!template new="1" text="""So, you can see here, we are giving ourselves""" start="00:11:48.120" video="mainVideo-async" id="subtitle"]]
+[[!template text="""a connection to the MPD server on the localhost.""" start="00:11:51.320" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We're going to send the get volume command""" start="00:11:54.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""down that connection.""" start="00:11:57.040" video="mainVideo-async" id="subtitle"]]
+[[!template text="""And if that command completes and all is well,""" start="00:11:58.240" video="mainVideo-async" id="subtitle"]]
+[[!template text="""we'll just send a message to Emacs.""" start="00:12:02.760" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Unfortunately, you can't see my minibuffer,""" start="00:12:05.480" video="mainVideo-async" id="subtitle"]]
+[[!template text="""so I'll hop over to the Messages buffer.""" start="00:12:07.880" video="mainVideo-async" id="subtitle"]]
+[[!template text="""And there's our result.""" start="00:12:11.120" video="mainVideo-async" id="subtitle"]]
+[[!template text="""The volume is 43.""" start="00:12:12.760" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Great, I thought.""" start="00:12:15.120" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Simple, clean, responsive, easy to code to.""" start="00:12:18.040" video="mainVideo-async" id="subtitle"]]
+[[!template text="""That is unfortunately not the end of the story.""" start="00:12:24.160" video="mainVideo-async" id="subtitle"]]
+[[!template new="1" text="""Let's continue this example a little bit.""" start="00:12:27.800" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Let's imagine that""" start="00:12:31.736" video="mainVideo-async" id="subtitle"]]
+[[!template text="""if the volume comes back from the server""" start="00:12:33.301" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and it is less than 50,""" start="00:12:35.501" video="mainVideo-async" id="subtitle"]]
+[[!template text="""we would like to set it to 50.""" start="00:12:37.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""So, this is interesting""" start="00:12:39.335" video="mainVideo-async" id="subtitle"]]
+[[!template text="""because we have two commands""" start="00:12:41.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and whether or not we send the second command""" start="00:12:43.200" video="mainVideo-async" id="subtitle"]]
+[[!template text="""it is going to depend on""" start="00:12:45.840" video="mainVideo-async" id="subtitle"]]
+[[!template text="""the response we get from the first.""" start="00:12:46.840" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Okay. I thought, well, that's fine.""" start="00:12:48.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I can simply put that logic in the callback""" start="00:12:51.640" video="mainVideo-async" id="subtitle"]]
+[[!template text="""that I specified for the get volume command.""" start="00:12:55.080" video="mainVideo-async" id="subtitle"]]
+[[!template text="""So, here we are we check the return code,""" start="00:12:58.701" video="mainVideo-async" id="subtitle"]]
+[[!template text="""we parse the volume, we compare it to 50,""" start="00:13:01.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and if it's less we just invoke `elmpd-send` again""" start="00:13:04.400" video="mainVideo-async" id="subtitle"]]
+[[!template text="""from the first command's callback.""" start="00:13:08.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Okay, I could live with that""" start="00:13:10.800" video="mainVideo-async" id="subtitle"]]
+[[!template text="""it's not the worst thing I've ever seen.""" start="00:13:14.051" video="mainVideo-async" id="subtitle"]]
+[[!template new="1" text="""Let's extend this example a little further,""" start="00:13:15.520" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and this is contrived, but bear with me.""" start="00:13:19.400" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Let us suppose that if we do set the volume to 50,""" start="00:13:21.868" video="mainVideo-async" id="subtitle"]]
+[[!template text="""we'd like to get the volume one more time just to""" start="00:13:25.480" video="mainVideo-async" id="subtitle"]]
+[[!template text="""make sure that our change took on the server.""" start="00:13:28.635" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We can play the same game.""" start="00:13:30.640" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We will put that logic in the callback""" start="00:13:33.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""that we specified for the set volume command.""" start="00:13:37.280" video="mainVideo-async" id="subtitle"]]
+[[!template text="""And here we are, we check the return code,""" start="00:13:40.168" video="mainVideo-async" id="subtitle"]]
+[[!template text="""we send a message to Emacs,""" start="00:13:43.480" video="mainVideo-async" id="subtitle"]]
+[[!template text="""we send the get volume command again""" start="00:13:45.480" video="mainVideo-async" id="subtitle"]]
+[[!template text="""along with its own callback.""" start="00:13:49.200" video="mainVideo-async" id="subtitle"]]
+[[!template text="""And at this point I hope it's clear""" start="00:13:51.080" video="mainVideo-async" id="subtitle"]]
+[[!template text="""(the problem that is emerging),""" start="00:13:55.280" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and if it's not yet, let me note that so far""" start="00:13:57.520" video="mainVideo-async" id="subtitle"]]
+[[!template text="""we're only handling the happy path""" start="00:14:01.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""in each of these callbacks.""" start="00:14:03.000" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We really ought to do something about the error path.""" start="00:14:04.520" video="mainVideo-async" id="subtitle"]]
+[[!template text="""For purposes of illustration, let's just say,""" start="00:14:06.840" video="mainVideo-async" id="subtitle"]]
+[[!template text="""we send a message to Emacs""" start="00:14:10.120" video="mainVideo-async" id="subtitle"]]
+[[!template text="""that means it would look like this.""" start="00:14:12.120" video="mainVideo-async" id="subtitle"]]
+[[!template text="""At this point that I really think""" start="00:14:14.320" video="mainVideo-async" id="subtitle"]]
+[[!template text="""it's impossible to deny that this API is actually""" start="00:14:17.335" video="mainVideo-async" id="subtitle"]]
+[[!template text="""not that easy to program to.""" start="00:14:20.851" video="mainVideo-async" id="subtitle"]]
+[[!template text="""If there are any JavaScript devs watching,""" start="00:14:23.280" video="mainVideo-async" id="subtitle"]]
+[[!template text="""you're probably chuckling right now""" start="00:14:27.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""because I have discovered for myself""" start="00:14:28.840" video="mainVideo-async" id="subtitle"]]
+[[!template text="""what they call &quot;callback hell&quot;.""" start="00:14:30.720" video="mainVideo-async" id="subtitle"]]
+[[!template text="""If you are returning""" start="00:14:33.880" video="mainVideo-async" id="subtitle"]]
+[[!template text="""the results of asynchronous function invocations""" start="00:14:37.868" video="mainVideo-async" id="subtitle"]]
+[[!template text="""to their caller via callbacks,""" start="00:14:40.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""you pretty much inevitably end up in this sort of""" start="00:14:42.200" video="mainVideo-async" id="subtitle"]]
+[[!template text="""deeply nested sequence of callbacks""" start="00:14:45.640" video="mainVideo-async" id="subtitle"]]
+[[!template text="""that is difficult to write, difficult to read,""" start="00:14:48.040" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and difficult to reason about.""" start="00:14:50.768" video="mainVideo-async" id="subtitle"]]
+[[!template new="1" text="""And yet when I was stuck in this situation""" start="00:14:53.520" video="mainVideo-async" id="subtitle"]]
+[[!template text="""it just seemed like it really shouldn't be this bad.""" start="00:14:57.480" video="mainVideo-async" id="subtitle"]]
+[[!template text="""If I give myself this sort of tabular data structure,""" start="00:15:00.080" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I felt that this expressed precisely the same logic""" start="00:15:05.320" video="mainVideo-async" id="subtitle"]]
+[[!template text="""just in a much easier to read manner.""" start="00:15:10.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I could, in my mind's eye,""" start="00:15:12.868" video="mainVideo-async" id="subtitle"]]
+[[!template text="""see the code for transforming this data structure,""" start="00:15:15.840" video="mainVideo-async" id="subtitle"]]
+[[!template text="""which is really just a list,""" start="00:15:19.720" video="mainVideo-async" id="subtitle"]]
+[[!template text="""into the code that you just""" start="00:15:21.040" video="mainVideo-async" id="subtitle"]]
+[[!template text="""saw in the previous slide,""" start="00:15:23.585" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and really if Lisp is good at anything""" start="00:15:25.600" video="mainVideo-async" id="subtitle"]]
+[[!template text="""it is list processing right.""" start="00:15:29.440" video="mainVideo-async" id="subtitle"]]
+[[!template text="""And it was really at this point""" start="00:15:31.080" video="mainVideo-async" id="subtitle"]]
+[[!template text="""that a little bit of enlightenment dawned.""" start="00:15:33.080" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I learned that Lisp is homo iconic,""" start="00:15:36.368" video="mainVideo-async" id="subtitle"]]
+[[!template text="""which is just means that the language itself""" start="00:15:40.800" video="mainVideo-async" id="subtitle"]]
+[[!template text="""is a data structure in that language.""" start="00:15:46.040" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Lisp code is, after all, just a list.""" start="00:15:49.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""And the power of Lisp macros""" start="00:15:53.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""is taking that data structure,""" start="00:15:57.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""some data structure that you've defined,""" start="00:15:59.760" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and doing exactly what I wanted to do.""" start="00:16:02.400" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Transforming it from one list into another,""" start="00:16:04.640" video="mainVideo-async" id="subtitle"]]
+[[!template text="""the destination list being Lisp code.""" start="00:16:07.520" video="mainVideo-async" id="subtitle"]]
+[[!template text="""So, I got busy, and I coded up my first Lisp macro,""" start="00:16:11.835" video="mainVideo-async" id="subtitle"]]
+[[!template text="""which I called `elmpd-chain`.""" start="00:16:16.000" video="mainVideo-async" id="subtitle"]]
+[[!template text="""And that lengthy list of, you know,""" start="00:16:19.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""three or four nested callbacks""" start="00:16:21.600" video="mainVideo-async" id="subtitle"]]
+[[!template text="""gets turned into this,""" start="00:16:24.200" video="mainVideo-async" id="subtitle"]]
+[[!template text="""which I hope you'll agree is much simpler""" start="00:16:25.920" video="mainVideo-async" id="subtitle"]]
+[[!template text="""much easier to read, much easier to reason about.""" start="00:16:29.520" video="mainVideo-async" id="subtitle"]]
+[[!template text="""And if you're morbidly curious,""" start="00:16:32.240" video="mainVideo-async" id="subtitle"]]
+[[!template text="""you can expand your macros,""" start="00:16:36.000" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and this invocation of `elmpd-chain` expands to this.""" start="00:16:40.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""So, that's my story.""" start="00:16:44.200" video="mainVideo-async" id="subtitle"]]
+[[!template new="1" text="""In all fairness, I should note that""" start="00:16:46.400" video="mainVideo-async" id="subtitle"]]
+[[!template text="""the MPD protocol has some subtleties""" start="00:16:50.840" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and complexities that I didn't really get into,""" start="00:16:53.501" video="mainVideo-async" id="subtitle"]]
+[[!template text="""both due to time constraints""" start="00:16:56.880" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and because they're not terribly relevant""" start="00:16:58.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""to the points I wanted to touch on.""" start="00:17:00.520" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I should also note that there's""" start="00:17:02.000" video="mainVideo-async" id="subtitle"]]
+[[!template text="""a fair amount of work in the library itself""" start="00:17:05.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""around accumulating partial responses""" start="00:17:07.720" video="mainVideo-async" id="subtitle"]]
+[[!template text="""as they show up in the buffer""" start="00:17:11.240" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and dispatching them piecemeal to the caller.""" start="00:17:12.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""That was really too complex to get into here.""" start="00:17:16.120" video="mainVideo-async" id="subtitle"]]
+[[!template text="""If you would like to see the code,""" start="00:17:20.468" video="mainVideo-async" id="subtitle"]]
+[[!template text="""it's available on GitHub as well as MELPA.""" start="00:17:22.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I'll be putting a version of this talk""" start="00:17:25.080" video="mainVideo-async" id="subtitle"]]
+[[!template text="""on my personal site,""" start="00:17:29.200" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and you can always reach out to me personally,""" start="00:17:30.480" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I hang out on IRC as sp1ff,""" start="00:17:33.720" video="mainVideo-async" id="subtitle"]]
+[[!template text="""or you can just email me as sp1ff@pobox.com.""" start="00:17:36.960" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Thank you very much.""" start="00:17:41.920" video="mainVideo-async" id="subtitle"]]
+
+
+
+Captioner: bhavin192
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20async%3A%20Emacs%20was%20async%20before%20async%20was%20cool)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/async-before.md b/2022/info/async-before.md
new file mode 100644
index 00000000..3b3c1068
--- /dev/null
+++ b/2022/info/async-before.md
@@ -0,0 +1,39 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+# Talk
+
+<div class="vid"><video controls preload="none" id="async-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="async-mainVideo" data="""
+00:00.000 Asynchronous programming
+00:47.200 Automating my music player
+01:42.600 Working with the API
+03:22.080 make-network-process
+05:05.200 The sequence of events
+05:57.920 Queues
+07:50.480 Callbacks
+09:24.240 Client-side code
+11:48.080 Demo
+12:27.760 Logic
+13:15.520 Callback hell
+14:53.520 Lisp macros
+16:46.400 Conclusion
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--main.webm">Download --main.webm (98MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/6mKNBvuubwoWFA9SFsgUQS">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="async-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="async-qanda" data="""
+00:00.000 Introduction
+00:21.600 How does this approach compare to using tq.el, Emacs' built-in library for transaction queues?
+01:10.480 Have you considered using the aio.el library (written by Chris Wellons) that implements async/await for Emacs lisp using promises?
+02:45.440 Are you aware that EMMS has an MPD client? There's also mpc.el built into Emacs.
+05:20.360 Have you seen the Lonesome Pine Specials?
+07:44.400 Would using dynamic/special vars add anything interesting / easier to async elisp in your opinion?
+10:16.560 How does your project compare to some of the other MPD clients?
+11:55.040 Can you share the code to the macro that creates the callback tree?
+14:42.880 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?
+15:03.440 Any thoughts on the async await paradigm generally, red-blue functions, etc.?
+21:06.320 Do you think it's a viable future for Emacs to get out of callback hell?
+24:39.320 Generators
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--answers.webm">Download --answers.webm (34MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--answers--chapters.vtt">Download --answers--chapters.vtt</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/async-nav.md b/2022/info/async-nav.md
new file mode 100644
index 00000000..4898e531
--- /dev/null
+++ b/2022/info/async-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/workflows">Org workflows for developers</a>
+Next by track: <a href="/2022/talks/grail">GRAIL---A Generalized Representation and Aggregation of Information Layers</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/buddy-after.md b/2022/info/buddy-after.md
new file mode 100644
index 00000000..c662c571
--- /dev/null
+++ b/2022/info/buddy-after.md
@@ -0,0 +1,156 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="buddy-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hello, welcome to my talk, the Emacs Buddy Initiative.""" start="00:00:00.000" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Who am I?""" start="00:00:03.920" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""I'm Andrea. I work as a Clojure Software Engineer""" start="00:00:04.760" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""somewhere in the middle of the UK.""" start="00:00:07.000" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And I started with Emacs during my PhD,""" start="00:00:09.000" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""thanks to my PhD supervisor""" start="00:00:12.520" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""that introduced me to this tool.""" start="00:00:14.120" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And from now and from then,""" start="00:00:15.760" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""I am basically using it for everything.""" start="00:00:17.280" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""You can find more about this everything""" start="00:00:20.320" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""at ag91.github.io, that is my blog.""" start="00:00:22.160" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""So let's get into the talk.""" start="00:00:26.520" video="mainVideo-buddy" id="subtitle"]]
+[[!template new="1" text="""Why Emacs Buddy?""" start="00:00:27.900" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Emacs Buddy is an initiative to bring us together.""" start="00:00:29.480" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And the reason is because Emacs is a limitless tool.""" start="00:00:32.920" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""So you can keep learning about it,""" start="00:00:36.560" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""you can keep expanding it,""" start="00:00:38.800" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""and also takes time to get up to speed.""" start="00:00:41.040" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""So you may actually extend Emacs""" start="00:00:44.800" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""or you may actually get introduced,""" start="00:00:48.680" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""start using Emacs,""" start="00:00:50.620" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""but you could fall into all the traps""" start="00:00:52.320" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""or all the wasted times that other users have already gone through.""" start="00:00:56.360" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And so, since there are a lot of amazing people""" start="00:01:00.880" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""in the Emacs community,""" start="00:01:04.600" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""why do every time redo the same error?""" start="00:01:07.360" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""So let's bring us together.""" start="00:01:10.120" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And it would be amazing to get a one-to-one relation.""" start="00:01:12.160" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""So I have somebody that actually knows what you want to do,""" start="00:01:17.480" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""what you want to achieve with Emacs,""" start="00:01:21.560" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""and supports you because they have done a similar path to yours.""" start="00:01:23.400" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And so they can remove some of the obstacles for you.""" start="00:01:27.440" video="mainVideo-buddy" id="subtitle"]]
+[[!template new="1" text="""So what can you expect?""" start="00:01:32.720" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""The main thing is guidance on your Emacs journey,""" start="00:01:34.480" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""because the Emacs journey is infinite, it doesn't really end.""" start="00:01:37.880" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""But the farther you go,""" start="00:01:41.280" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""the more value you get from this amazing tool.""" start="00:01:44.080" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And that helps you save time.""" start="00:01:46.800" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And at the same time, you can meet like-minded people.""" start="00:01:50.360" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And so you can learn about Emacs or about your context,""" start="00:01:54.280" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""if they are in, for example, if you are a physicist,""" start="00:01:59.080" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""they are physicists or they are interested in the field.""" start="00:02:02.920" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""You may not only learn about Emacs,""" start="00:02:07.560" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""but you can learn also something about the field.""" start="00:02:09.160" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And anyway, the idea is that you can move forward together.""" start="00:02:11.880" video="mainVideo-buddy" id="subtitle"]]
+[[!template new="1" text="""Somebody asked, why not just mailing lists or Reddit?""" start="00:02:17.040" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Well, the point is that mailing list is many people""" start="00:02:20.400" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""can help you solve one issue that you have.""" start="00:02:24.640" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And that naturally doesn't become a discussion""" start="00:02:28.520" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""of where you are from, what are you trying to achieve,""" start="00:02:31.560" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""and where you want to move forward with using this editor""" start="00:02:35.280" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""or using this tool.""" start="00:02:40.000" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Instead, here, we want something more personal,""" start="00:02:42.280" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""something more like you tell your story.""" start="00:02:45.640" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And if I can help you achieve what you need,""" start="00:02:48.640" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""I am also interested in your story as a buddy.""" start="00:02:53.880" video="mainVideo-buddy" id="subtitle"]]
+[[!template new="1" text="""So given that, how do you get in touch with a buddy?""" start="00:02:58.960" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Well, the thing is easy.""" start="00:03:03.360" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Just ping me at this email, andrea-dev@hotmail.com.""" start="00:03:04.680" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And I can put you in touch with one of the buddies""" start="00:03:12.720" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""that are available.""" start="00:03:15.400" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Or you can contact them personally, directly,""" start="00:03:16.760" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""because on the web page, on the Emacs Buddy web page,""" start="00:03:20.200" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""there are links to their material or their websites.""" start="00:03:26.280" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And sometimes you can find the contact yourself.""" start="00:03:32.560" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Anyway, I am a facilitator.""" start="00:03:35.600" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""So if you contact me, I will find the contact for the person""" start="00:03:37.160" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""that you want to get in touch.""" start="00:03:41.920" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""You can also get in touch with me.""" start="00:03:43.080" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""I'm a buddy myself.""" start="00:03:44.480" video="mainVideo-buddy" id="subtitle"]]
+[[!template new="1" text="""How did it go so far?""" start="00:03:47.960" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Well, from when I started the initiative,""" start="00:03:49.600" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""more or less we had 10 buddies.""" start="00:03:52.480" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""We had 10 buddies that are available to help you""" start="00:03:55.040" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""with your Emacs journey.""" start="00:03:58.720" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And I buddyed myself, or I got in touch""" start="00:04:01.520" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""with people that wanted a buddy, about eight people.""" start="00:04:04.880" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Each of these conversations was quite interesting.""" start="00:04:10.680" video="mainVideo-buddy" id="subtitle"]]
+[[!template new="1" text="""I decided to paraphrase one.""" start="00:04:14.760" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""I had this user that got in touch and said:""" start="00:04:19.640" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""&quot;I used Emacs for 10 years.""" start="00:04:23.520" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""I'm curious about the initiative,""" start="00:04:25.560" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""and here is my GitHub that I started writing recently,""" start="00:04:27.280" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Elisp projects&quot;, projects in Elisp to extend Emacs.""" start="00:04:32.360" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""I looked at their code.""" start="00:04:37.680" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""I suggested, &quot;Oh, why don't you use dash?""" start="00:04:40.840" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""It's something that I'm familiar with.""" start="00:04:43.880" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Maybe you may like it as well.&quot;""" start="00:04:45.300" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And then I started asking, &quot;Oh, what do you do with Emacs?""" start="00:04:49.440" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Have you tried a note taking tool like Org Roam?&quot;""" start="00:04:51.720" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And then the conversation started.""" start="00:04:56.000" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""So &quot;yeah, I tried Org Roam version one.""" start="00:04:58.040" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""I use my own thing.""" start="00:05:00.200" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""But what is it...""" start="00:05:01.200" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""I'm curious about version two.""" start="00:05:02.880" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Did you use it?""" start="00:05:04.240" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Do you know about Luhmann?&quot;""" start="00:05:05.840" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""That is the inspiration of Org Roam""" start="00:05:07.080" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""and the backlinking and stuff.""" start="00:05:09.862" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And then I started the conversation about that.""" start="00:05:13.240" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And we discussed about functional programming.""" start="00:05:15.480" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""We discussed a bit about philosophy and went on.""" start="00:05:18.360" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And then this conversation is not currently going.""" start="00:05:23.280" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""So we arrived to a point in which it sort of died out.""" start="00:05:29.160" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""But if I want or if they want, they can ping me back.""" start="00:05:32.760" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""I can ping them.""" start="00:05:36.680" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""So it's sort of a reference of this person exists""" start="00:05:37.440" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""and is an interesting person to chat with when I have something""" start="00:05:40.800" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""to say to them.""" start="00:05:44.440" video="mainVideo-buddy" id="subtitle"]]
+[[!template new="1" text="""And what if you want to be a buddy?""" start="00:05:48.360" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Well, if you want to be a buddy, it's easy as well.""" start="00:05:50.480" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""So basically, just open a PR on the Emacs buddy repository.""" start="00:05:54.280" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""That is something that I am maintaining at the moment.""" start="00:06:02.280" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Or simply send me the information.""" start="00:06:05.280" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Somebody just sent me an email with the information.""" start="00:06:07.760" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""I have created the commit to make it public available.""" start="00:06:10.000" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""The information is just your name, a summary,""" start="00:06:14.720" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""what kind of user you are so that you can attract""" start="00:06:18.560" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""the right people to you, and a link to your material""" start="00:06:21.560" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""so that if they are curious about your summary or about you,""" start="00:06:28.040" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""they can actually go and check and even contact you directly.""" start="00:06:31.960" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""If they contact via me, I will know your email anyway""" start="00:06:35.560" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""from the PR you open.""" start="00:06:40.560" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""So that is all.""" start="00:06:44.320" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""There are ideas to maybe... if... this is basically""" start="00:06:45.760" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""an advertisement for this initiative""" start="00:06:53.040" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""so that we can get people that want to be helped""" start="00:06:54.760" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""or people that want to help.""" start="00:06:57.640" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""It's building up organically, so no rush""" start="00:07:01.200" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""to make this thing grow, escalate enormously.""" start="00:07:03.600" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""But for example, there are ideas to join this with the meetup""" start="00:07:08.640" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""talk that is being happening in the conference.""" start="00:07:12.480" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""So for example, if you find out something very interesting,""" start="00:07:15.720" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""you can bring the discussion that you have with your buddy""" start="00:07:19.520" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""into a meetup so that the group with which you speak is bigger.""" start="00:07:22.200" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""There are ideas like that.""" start="00:07:27.560" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""But first of all, just get in touch if you want to find""" start="00:07:28.920" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""like-minded people that want to help you with your Emacs""" start="00:07:33.120" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""journey or if you want to help others.""" start="00:07:36.600" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Thank you very much.""" start="00:07:38.920" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Enjoy the rest of the talks and chat to you soon.""" start="00:07:39.800" video="mainVideo-buddy" id="subtitle"]]
+
+
+
+Captioner: andrea
+
+Questions or comments? Please e-mail [andrea-dev@hotmail.com](mailto:andrea-dev@hotmail.com?subject=Comment%20for%20EmacsConf%202022%20buddy%3A%20The%20Emacs%20Buddy%20initiative)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/buddy-before.md b/2022/info/buddy-before.md
new file mode 100644
index 00000000..5b6a0e8f
--- /dev/null
+++ b/2022/info/buddy-before.md
@@ -0,0 +1,16 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Andrea shares how to connect with an Emacs Buddy for one-to-one peer mentoring. Afterwards, he will answer questions over IRC.
+
+<div class="vid"><video controls preload="none" id="buddy-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="buddy-mainVideo" data="""
+00:00.000 Introduction
+00:27.900 Why Emacs Buddy?
+01:32.720 What can you expect?
+02:17.040 Why not just mailing lists or Reddit?
+02:58.960 How do you get in touch with a buddy?
+03:47.960 How did it go?
+04:14.760 Example
+05:48.360 What if you want to be a buddy?
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main.webm">Download --main.webm (16MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main.opus">Download --main.opus (5.9MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/rGaAhFjM5GCvNHBhs39JA3">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/buddy-nav.md b/2022/info/buddy-nav.md
new file mode 100644
index 00000000..1bb28aa9
--- /dev/null
+++ b/2022/info/buddy-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/asmblox">asm-blox: a game based on WebAssembly that no one asked for</a>
+Next by track: <a href="/2022/talks/wayland">Emacs should become a Wayland compositor</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/buttons-after.md b/2022/info/buttons-after.md
new file mode 100644
index 00000000..44c9be69
--- /dev/null
+++ b/2022/info/buttons-after.md
@@ -0,0 +1,238 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="buttons-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hi everyone! I'm Mats Liddell.""" start="00:00:00.000" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""In this talk, I will show""" start="00:00:06.280" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""how you can link to personal data""" start="00:00:07.320" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""using Hyperbole's support for implicit button types.""" start="00:00:09.040" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Before starting, a few words about me.""" start="00:00:13.960" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""I work as a software engineer,""" start="00:00:16.040" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""and in my spare time""" start="00:00:18.000" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""I'm co-maintaining the Hyperbole package""" start="00:00:19.200" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""together with the package author Bob Weiner.""" start="00:00:21.280" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Hyperbole dates back to 1993,""" start="00:00:24.360" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""and have had some inactive years in the past,""" start="00:00:27.240" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""but work is now active again.""" start="00:00:29.680" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""The package is available""" start="00:00:31.680" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""through the GNU ELPA package archive.""" start="00:00:33.080" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""The talk will focus on""" start="00:00:36.160" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""creation of implicit button types.""" start="00:00:37.960" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""For more info on Hyperbole,""" start="00:00:39.600" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""listen to other presentations""" start="00:00:41.480" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""and check out the package documentation.""" start="00:00:43.120" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""What I want you to take with you from this talk is""" start="00:00:46.360" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""that the implicit button types""" start="00:00:50.000" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""can make patterns in your files into buttons;""" start="00:00:51.640" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""and that new implicit button types""" start="00:00:54.440" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""can quickly be created by using""" start="00:00:56.600" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""the `defil` and the `defal` macros.""" start="00:00:58.480" video="mainVideo-buttons" id="subtitle"]]
+[[!template new="1" text="""So what is an implicit button type?""" start="00:01:01.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""I think of it as a text pattern""" start="00:01:05.160" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""that has some extended meaning.""" start="00:01:06.800" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""When you see the pattern in the text,""" start="00:01:08.920" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""you can think of it as a button type.""" start="00:01:10.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""When you press the button,""" start="00:01:12.800" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""something related to that meaning happens.""" start="00:01:13.880" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""It can be jumping to some place,""" start="00:01:16.880" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""opening an external tool, doing some computation.""" start="00:01:19.000" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""So there can be some action""" start="00:01:22.440" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""associated with the pattern.""" start="00:01:24.160" video="mainVideo-buttons" id="subtitle"]]
+[[!template new="1" text="""To make it clear, let's look at some examples.""" start="00:01:29.920" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Let's start with something that is maybe so obvious""" start="00:01:33.320" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""that you don't even think of it as a pattern: a file name.""" start="00:01:36.080" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""When you see such a string in text,""" start="00:01:39.600" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""you will naturally associate it with a file on disk,""" start="00:01:41.360" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""and if you would click on it,""" start="00:01:45.360" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""you would probably expect that file to open.""" start="00:01:46.720" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""In the first sentence on the slide,""" start="00:01:52.680" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""you might recognize the file name""" start="00:01:55.120" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""for the bash initialization file, ~/.bashrc.""" start="00:01:56.840" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Hyperbole comes with built-in support""" start="00:02:01.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""for recognizing files and directory path names""" start="00:02:03.840" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""as implicit button types in text.""" start="00:02:06.520" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""For Hyperbole to take action on the button type,""" start="00:02:08.680" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""you move the cursor within the button""" start="00:02:11.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""and press M-RET or use a mouse click.""" start="00:02:13.440" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""So let's try that.""" start="00:02:16.320" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Similar for the path, /usr/local in the next sentence.""" start="00:02:22.360" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""That will open the corresponding""" start="00:02:27.720" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""directory using dired-mode.""" start="00:02:29.520" video="mainVideo-buttons" id="subtitle"]]
+[[!template new="1" text="""Other examples of built-in implicit button types""" start="00:02:37.080" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""that Hyperbole recognizes are email addresses,""" start="00:02:39.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""web addresses, requests for comment documents""" start="00:02:43.720" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""in the form of RFC followed by a number,""" start="00:02:47.320" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""GNU debbugs issues, plus many more.""" start="00:02:50.120" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""These are some examples""" start="00:02:53.040" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""of implicit button types with built-in support.""" start="00:02:55.360" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""I list them here to give you an idea""" start="00:02:58.080" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""how the text pattern in itself is enough""" start="00:02:59.920" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""for the system to recognize it""" start="00:03:02.480" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""as something actionable.""" start="00:03:03.960" video="mainVideo-buttons" id="subtitle"]]
+[[!template new="1" text="""So as shown, Hyperbole has built-in support""" start="00:03:10.120" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""for implicit buttons.""" start="00:03:12.480" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""There's only one problem here.""" start="00:03:14.040" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""The behavior is predefined.""" start="00:03:16.120" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""There is of course a trade off.""" start="00:03:17.920" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""It is convenient to get""" start="00:03:20.240" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""many button types out of the box""" start="00:03:21.560" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""with likely good standard behavior""" start="00:03:23.480" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""and that works in many places.""" start="00:03:25.520" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""But what if you would want to create""" start="00:03:27.680" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""your own completely new mapping,""" start="00:03:29.360" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""possibly to your own data?""" start="00:03:31.160" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""It is here that Hyperbole's support for creating""" start="00:03:32.880" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""new implicit button types comes in.""" start="00:03:38.120" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""For the full pattern matching button type,""" start="00:03:41.280" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""like for the filename and examples we just looked at,""" start="00:03:43.360" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""you need to define the implicit button""" start="00:03:46.720" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""using the macro, `defib`.""" start="00:03:48.755" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""The downside of that is""" start="00:03:50.920" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""you need to code at the elisp level.""" start="00:03:53.280" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""However, if you are creating a new pattern""" start="00:03:54.920" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""that has well-defined delimiters,""" start="00:03:57.240" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""there is support for that in an easier way.""" start="00:03:59.120" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""These support functions, or rather macros,""" start="00:04:01.360" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""are `defil` and `defal`.""" start="00:04:03.800" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""We will look at those macros soon,""" start="00:04:06.240" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""but first, my definition of personal data.""" start="00:04:08.440" video="mainVideo-buttons" id="subtitle"]]
+[[!template new="1" text="""I think of personal data as something""" start="00:04:13.400" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""that you would like to link to,""" start="00:04:18.200" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""but it's not necessarily in a form""" start="00:04:19.680" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""supported by any known tool.""" start="00:04:21.440" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""It might be stored on a web server, local storage,""" start="00:04:23.360" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""or could even be some computation""" start="00:04:26.920" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""rather than a link.""" start="00:04:28.680" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""What all these cases have in common is that""" start="00:04:29.400" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""you want to be able to reference it""" start="00:04:32.200" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""in a short, and for you, descriptive way.""" start="00:04:34.240" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""So when you write text, you can use""" start="00:04:36.640" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""a new implicit type to create the connection.""" start="00:04:38.960" video="mainVideo-buttons" id="subtitle"]]
+[[!template new="1" text="""This might be a bit abstract,""" start="00:04:44.480" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""so let's look at an example.""" start="00:04:46.600" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Suppose you have a flat file structure""" start="00:04:48.080" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""with some notes in each file.""" start="00:04:51.000" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""It can look like this.""" start="00:04:52.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""In the data folder, we have two files""" start="00:04:54.520" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""that represents the notes we have taken.""" start="00:04:57.400" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""We now want to be able to link to these notes""" start="00:05:00.200" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""from outside of the data folder.""" start="00:05:02.840" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Let's make an implicit button type""" start="00:05:07.120" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""that opens a file in this structure.""" start="00:05:08.960" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""To make the pattern stand out in text,""" start="00:05:10.920" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""we use double braces as start and stop delimiters.""" start="00:05:13.520" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""An implicit button instance""" start="00:05:16.640" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""would then look like this.""" start="00:05:20.080" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""We can create that using the `defil` macro like this.""" start="00:05:22.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""This invocation of the field""" start="00:05:27.680" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""creates a button type &quot;demo-link-to-file&quot;""" start="00:05:31.840" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""with the start delimiter of &quot;{{&quot;""" start="00:05:34.480" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""and then delimiters of &quot;}}&quot;,""" start="00:05:37.280" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""the regular expression &quot;.*&quot; pattern""" start="00:05:40.560" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""to match everything between the delimiters,""" start="00:05:43.320" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""and finally, the action defined by the link expression.""" start="00:05:45.640" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Pattern substitution is performed""" start="00:05:48.800" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""on the link expression before evaluation""" start="00:05:52.160" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""so that the text that is in between the delimiters""" start="00:05:54.440" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""is inserted where the &quot;\\&&quot; is in the link expression.""" start="00:05:57.920" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""So all in all, implicit type instance will result in""" start="00:06:02.360" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""the link expression of &quot;~/data/FileA&quot;,""" start="00:06:07.560" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""which we recognize as a file path.""" start="00:06:11.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""With a single-line expression,""" start="00:06:14.520" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""we have created our own hyperbutton syntax""" start="00:06:18.040" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""that we can use in any Emacs buffer""" start="00:06:21.040" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""to link to this custom set of data.""" start="00:06:23.080" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""So let's evaluate the defil and use it.""" start="00:06:25.560" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""I have prepared the files so that they already""" start="00:06:30.960" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""contain some text and implicit links.""" start="00:06:33.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""So from the presentation, we can go to FileA,""" start="00:06:36.400" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""and from there to fileB.""" start="00:06:43.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Since the Hyperbole path expression""" start="00:06:48.720" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""supports outline structures, we can,""" start="00:06:51.040" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""as an extra bonus, reference directly""" start="00:06:53.640" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""the headers in the files,""" start="00:06:55.960" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""so we can, for example, link directly""" start="00:06:57.560" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""to &quot;More Notes&quot; in FileB.""" start="00:07:00.160" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""We have now created a simple info system.""" start="00:07:02.600" video="mainVideo-buttons" id="subtitle"]]
+[[!template new="1" text="""Looking deeper at the link expression,""" start="00:07:10.720" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""it can be of four different types:""" start="00:07:16.440" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""A file path expression,""" start="00:07:19.840" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""as we have already looked at;""" start="00:07:22.040" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""a brace-delimited key series,""" start="00:07:23.520" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""that is, a series of command keys""" start="00:07:25.960" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""for performing some action,""" start="00:07:27.960" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""much like a keyboard macro;""" start="00:07:29.480" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""An URL; or a function that takes one argument,""" start="00:07:30.960" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""which will be given the button text as input.""" start="00:07:36.240" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""The URL link expression allows you""" start="00:07:38.640" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""to link to web pages.""" start="00:07:42.880" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""So if the data you want to link to""" start="00:07:44.480" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""is accessible through the Web""" start="00:07:46.560" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""and the URL can be constructed""" start="00:07:48.640" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""from the button text in a meaningful way,""" start="00:07:50.880" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""it is possible to do that.""" start="00:07:53.000" video="mainVideo-buttons" id="subtitle"]]
+[[!template new="1" text="""Let's create the button type""" start="00:07:54.520" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""that links to GNU software.""" start="00:07:56.160" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""The URL to the GNU software catalog""" start="00:07:57.720" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""is www.gnu.org/software,""" start="00:08:01.089" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""and with what we know about the field,""" start="00:08:04.680" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""it is easy to create the button type for that.""" start="00:08:07.440" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""It can look like this.""" start="00:08:09.640" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""And here are two possible buttons""" start="00:08:11.000" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""linking to Emacs and Hyperbole.""" start="00:08:16.200" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""So let's again evaluate the defil and use it.""" start="00:08:19.320" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Please note that not all GNU software""" start="00:08:24.200" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""is under that URL,""" start="00:08:28.120" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""so this simple definition will not work""" start="00:08:29.000" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""to link to everything.""" start="00:08:31.000" video="mainVideo-buttons" id="subtitle"]]
+[[!template new="1" text="""To highlight the fact that the button action""" start="00:08:32.200" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""does not have to be a link,""" start="00:08:37.280" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""but can be any action,""" start="00:08:39.080" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""let's look at a math example.""" start="00:08:40.600" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Here is the button type that does some math""" start="00:08:42.200" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""and writes the result in the message area.""" start="00:08:44.800" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Let's evaluate and use it.""" start="00:08:47.480" video="mainVideo-buttons" id="subtitle"]]
+[[!template new="1" text="""Before ending, I would like to mention""" start="00:08:57.160" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""the defal macro.""" start="00:08:59.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""It is similar to the defil macro,""" start="00:09:00.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""but simpler, since it uses a form""" start="00:09:02.920" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""of the implicit button type with no delimiters.""" start="00:09:04.880" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""It is simply <TYPE LINK-EXPR>.""" start="00:09:07.880" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""So the implicit button type contains the link type""" start="00:09:14.800" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""in clear text.""" start="00:09:17.920" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Our recent FSF software button""" start="00:09:18.960" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""would be created like this.""" start="00:09:23.120" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""And it would be instantiated in text like this.""" start="00:09:24.855" video="mainVideo-buttons" id="subtitle"]]
+[[!template new="1" text="""I have shown how you,""" start="00:09:29.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""with the help of the defil macro in Hyperbole,""" start="00:09:34.960" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""quickly can create implicit buttons.""" start="00:09:37.840" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""With those buttons, you can link""" start="00:09:40.240" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""to your personal information""" start="00:09:41.480" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""in the form it may have.""" start="00:09:43.160" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""By the nature of the implicit buttons,""" start="00:09:44.160" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""those can be used from any file in Emacs.""" start="00:09:47.200" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""The button types can be""" start="00:09:49.880" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""created to be used long term,""" start="00:09:52.640" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""but even short term use within the session is possible,""" start="00:09:54.640" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""since the creation is simple and quick.""" start="00:09:57.680" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Inspired by this, I hope you will find ways""" start="00:09:59.880" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""to create implicit buttons""" start="00:10:03.400" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""that will support you getting to your information.""" start="00:10:04.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""For the simplest cases,""" start="00:10:07.360" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""the field and the file macros might be enough.""" start="00:10:09.240" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""For more complicated cases,""" start="00:10:11.400" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""using a tailor-made function can be an option.""" start="00:10:13.360" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""If you know Elisp, use the defib macro""" start="00:10:15.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""which gives you full control over the button type.""" start="00:10:19.480" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Thank you.""" start="00:10:22.240" video="mainVideo-buttons" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20buttons%3A%20Linking%20personal%20info%20with%20Hyperbole%20implicit%20buttons)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/buttons-before.md b/2022/info/buttons-before.md
new file mode 100644
index 00000000..e6f2387c
--- /dev/null
+++ b/2022/info/buttons-before.md
@@ -0,0 +1,50 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Mats Lidell shares how you can create your own hyperbutton syntax that can be used in any file to trigger any kind of action. After the talk, he will answer your questions via BigBlueButton.
+
+
+The following image shows where the talk is in the schedule for Sat 2022-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="buttons">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect stroke-width="3" x="439" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 11-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-buttons>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: TO_CAPTION_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-03T18:40:00Z" end="2022-12-03T18:55:00Z"><div class="conf-time">Saturday, Dec 3 2022, ~1:40 PM - 1:55 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 3 2022, ~12:40 PM - 12:55 PM CST (US/Central)<br />Saturday, Dec 3 2022, ~11:40 AM - 11:55 AM MST (US/Mountain)<br />Saturday, Dec 3 2022, ~10:40 AM - 10:55 AM PST (US/Pacific)<br />Saturday, Dec 3 2022, ~6:40 PM - 6:55 PM UTC <br />Saturday, Dec 3 2022, ~7:40 PM - 7:55 PM CET (Europe/Paris)<br />Saturday, Dec 3 2022, ~8:40 PM - 8:55 PM EET (Europe/Athens)<br />Sunday, Dec 4 2022, ~12:10 AM - 12:25 AM IST (Asia/Kolkata)<br />Sunday, Dec 4 2022, ~2:40 AM - 2:55 AM +08 (Asia/Singapore)<br />Sunday, Dec 4 2022, ~3:40 AM - 3:55 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/gen/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="buttons-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="buttons-mainVideo" data="""
+00:00.000 Introduction
+01:01.760 Implicit buttons
+01:29.920 Filenames
+02:37.080 Other built-in implicit buttons
+03:10.120 Creating new implicit button types with defib, defil, and defal
+04:13.400 Personal data
+04:44.480 Defining an implicit button with defil
+07:10.720 Types of link expressions
+07:54.520 Another button example
+08:32.200 Action buttons
+08:57.160 The defal macro
+09:29.760 Conclusion
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main.webm">Download --main.webm (15MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/uLx9KkUP8SbH2KZfynEtLR">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="buttons-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="buttons-qanda" data="""
+00:00.000 Introduction
+00:40.600 So with one line of code you can create custom hyperbutton types that are live in any Emacs buffer. Is that right?
+02:53.320 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?
+06:27.480 Could you differentiate Hyperbole and Org?
+08:27.720 How did you present the right buffer with shortcuts at the right of your buffer?
+10:58.200 Working with different support systems
+14:14.600 Bob Weiner
+19:04.800 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)
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--answers.webm">Download --answers.webm (31MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--answers--chapters.vtt">Download --answers--chapters.vtt</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/buttons-nav.md b/2022/info/buttons-nav.md
new file mode 100644
index 00000000..6f340d09
--- /dev/null
+++ b/2022/info/buttons-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/sqlite">Using SQLite as a data source: a framework and an example</a>
+Next by track: <a href="/2022/talks/mail">Revisiting the anatomy of Emacs mail user agents</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/community-after.md b/2022/info/community-after.md
new file mode 100644
index 00000000..7dea9532
--- /dev/null
+++ b/2022/info/community-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20community%3A%20The%20ship%20that%20builds%20itself%3A%20How%20we%20used%20Emacs%20to%20develop%20a%20workshop%20for%20communities)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/community-before.md b/2022/info/community-before.md
new file mode 100644
index 00000000..bf1aca59
--- /dev/null
+++ b/2022/info/community-before.md
@@ -0,0 +1,16 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+<div class="schedule-in-context schedule-svg-container" data-slug="community">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities" data-slug="community"> <title> 1:40- 1:50 The ship that builds itself: How we used Emacs to develop a workshop for communities</title> <rect stroke-width="3" x="439" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(452,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and GNUplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and GNUplot</title> <rect x="564" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 3:55 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(648,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: complete asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: complete asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:20 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(499,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 3:50- 3:55 Short hyperlinks to Python docs</title> <rect x="643" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(648,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(94,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(188,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(282,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(376,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(470,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(564,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(658,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(752,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 5</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 10-min talk followed by live Q&A (<https://emacsconf.org/current/community/room>)
+Status: Sorry, this talk has been cancelled
+
+
+
+# Description
+
+
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/community-nav.md b/2022/info/community-nav.md
new file mode 100644
index 00000000..c1566b5d
--- /dev/null
+++ b/2022/info/community-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2022/talks/sqlite">Using SQLite as a data source: a framework and an example</a>
+Next by time: <a href="/2022/talks/mail">Revisiting the anatomy of Emacs mail user agents</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/dbus-after.md b/2022/info/dbus-after.md
new file mode 100644
index 00000000..4b1f44f2
--- /dev/null
+++ b/2022/info/dbus-after.md
@@ -0,0 +1,378 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="dbus-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Welcome to my EmacsConf 2022 talk, The Wheels on D-Bus.""" start="00:00:00.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""In this talk, we'll cover what D-Bus is,""" start="00:00:04.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""why you might want to use it, and how to use it with Emacs.""" start="00:00:07.440" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""D-Bus is fundamentally based on passing messages""" start="00:00:10.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""in between processes, using the bus as a mediator.""" start="00:00:13.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""On top of this is built an RPC system with method invocation""" start="00:00:17.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that has argument lists and return values,""" start="00:00:20.600" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""like you might find in any programming language.""" start="00:00:22.800" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""These are commonly used for verb-type actions""" start="00:00:25.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""like &quot;restart my computer.&quot;""" start="00:00:27.840" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""You can also associate a collection of attributes""" start="00:00:30.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""with objects on the bus, and these are called properties.""" start="00:00:32.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""The properties can be read-only, write-only, or read-write.""" start="00:00:35.840" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Signals are a way of notifying participants on the bus""" start="00:00:39.840" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""of updated state, and are the basis""" start="00:00:43.160" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""for building dynamic user interfaces""" start="00:00:46.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that react to changes in the system.""" start="00:00:47.800" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""It has a static and strong type system,""" start="00:00:50.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""so if you send a message with the wrong type signature,""" start="00:00:52.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""it simply gets rejected instead of going through""" start="00:00:55.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""to the remote service.""" start="00:00:57.840" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""It also manages service life cycles,""" start="00:00:59.600" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""so you're not running services at all times.""" start="00:01:02.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""They can be started and stopped by D-Bus on demand.""" start="00:01:04.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""D-Bus has two major use cases.""" start="00:01:07.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""The first is acting as a lower-level substrate""" start="00:01:10.520" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""for higher-level programs,""" start="00:01:13.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""like a graphical desktop environment.""" start="00:01:14.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""For example, if you want to manage your network connectivity""" start="00:01:16.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""from your graphical environment,""" start="00:01:19.600" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""instead of having to build all of that from the ground up,""" start="00:01:21.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""you can rely on the D-Bus service to do that""" start="00:01:23.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and only build the graphical component of it.""" start="00:01:26.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""This gives you consistency between desktop environments""" start="00:01:28.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and reduces code duplication.""" start="00:01:31.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Another application is automating desktop programs.""" start="00:01:33.800" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""If your program offers a D-Bus service,""" start="00:01:37.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""then it can be remote-controlled,""" start="00:01:39.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and if all of your programs offer D-Bus,""" start="00:01:40.960" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""you can control your entire desktop.""" start="00:01:42.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""Let's look at the abstractions that D-Bus provides.""" start="00:01:45.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""The top level object is called a bus,""" start="00:01:48.560" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and it's like a partition""" start="00:01:51.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that messages get exchanged inside of.""" start="00:01:52.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Messages don't cross buses.""" start="00:01:54.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Inside of a bus are services.""" start="00:01:57.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Services are normally identified in reverse FQDN order,""" start="00:01:59.560" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""so org.foobar.FooService.""" start="00:02:03.160" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Each service provides some set of features""" start="00:02:06.160" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""related to a particular area of functionality.""" start="00:02:08.600" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Inside of each service are objects.""" start="00:02:11.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Objects use a path notation,""" start="00:02:14.440" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and usually follow the same reverse FQDN format""" start="00:02:16.600" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""as the service identifier.""" start="00:02:19.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Each object has one or more interfaces.""" start="00:02:21.960" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""An interface is like a facet that you can use""" start="00:02:24.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""to interact with an object,""" start="00:02:27.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and inside of the interface are properties, methods,""" start="00:02:29.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and signals, which we covered before.""" start="00:02:32.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Properties are attributes that can be read or written.""" start="00:02:34.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Methods are verbs that you can call to invoke an action,""" start="00:02:37.040" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and a signal is something that's used to move state""" start="00:02:40.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""in between a service and another participant on the bus.""" start="00:02:43.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""There can be any number of interfaces on an object,""" start="00:02:47.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""any number of objects in a service,""" start="00:02:49.600" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and any number of services on a bus,""" start="00:02:51.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and any number of buses on a system.""" start="00:02:53.440" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""There are two well-known busses,""" start="00:02:55.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and these roughly map to those two use cases""" start="00:03:00.040" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""I mentioned before.""" start="00:03:02.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""The system bus is for interfacing with hardware""" start="00:03:03.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and operating-system-level concerns""" start="00:03:06.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""like disks, networks, and so forth.""" start="00:03:08.440" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""The session bus is tied to a user login,""" start="00:03:11.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and is more in the desktop automation use case.""" start="00:03:14.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""There are some common interfaces you'll find""" start="00:03:20.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""if you go exploring D-Bus.""" start="00:03:21.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""The Introspectable interface is the basis""" start="00:03:23.960" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""of a lot of the reflection features.""" start="00:03:26.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""It has a single method called introspect""" start="00:03:27.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that returns the XML interface description""" start="00:03:30.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""of whatever you call it on.""" start="00:03:32.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Peer is used for lower level connectivity,""" start="00:03:33.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""for example, pinging a service to see if it's running.""" start="00:03:36.560" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And the Properties interface is the basis""" start="00:03:39.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""of the read-write properties,""" start="00:03:41.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""which are secretly method calls under the cover.""" start="00:03:43.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Just about every object you interact with on D-Bus""" start="00:03:45.800" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""will support all three of these interfaces.""" start="00:03:48.520" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Additionally, ObjectManager is used for services""" start="00:03:51.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that manage collections of objects.""" start="00:03:54.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""For example, the disk service has an object""" start="00:03:56.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""for each disk that's attached,""" start="00:03:59.840" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and the object manager allows you""" start="00:04:01.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""to enumerate all of those.""" start="00:04:02.800" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""Emacs supports D-Bus natively since version 23.1.""" start="00:04:06.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""It's a combination of native bindings""" start="00:04:10.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""with a C library and dbus.el.""" start="00:04:12.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""While there are some ports of D-Bus""" start="00:04:14.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""to non-Linux operating systems,""" start="00:04:17.560" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""it's probably only available on Linux""" start="00:04:19.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and almost certainly only usable on Linux.""" start="00:04:22.040" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""If you want to interact with D-Bus from Emacs,""" start="00:04:24.440" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""it's fairly straightforward.""" start="00:04:28.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""There's a collection of functions like dbus-get-property""" start="00:04:30.080" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""or dbus-call-method, et cetera,""" start="00:04:33.200" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and they almost all take this same set""" start="00:04:35.040" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""of four arguments at the beginning:""" start="00:04:37.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""bus, service, path, and interface.""" start="00:04:39.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""In this case, it takes a single additional property,""" start="00:04:42.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""which is the one to read.""" start="00:04:45.440" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And what we're calling is the hostname1 service,""" start="00:04:46.600" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""which gives you just a little bit of information""" start="00:04:49.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""about the system, like its hostname or its chassis.""" start="00:04:51.520" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And in this case, you can see I'm running""" start="00:04:54.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""this presentation off my laptop.""" start="00:04:56.200" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""The problem with this and what I don't like about it""" start="00:04:57.720" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""is that all of these identifiers are very verbose""" start="00:05:00.960" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and very repetitive.""" start="00:05:04.600" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And if you end up calling these a lot,""" start="00:05:05.720" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""it gets old really quickly.""" start="00:05:07.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""So I wrote a wrapper called Debase,""" start="00:05:09.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""which is convenience on top of the built-in functions.""" start="00:05:13.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Most of the stock functions have Debase versions""" start="00:05:15.840" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""just by replacing &quot;dbus&quot; with &quot;debase&quot;.""" start="00:05:18.840" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And let's look how that works.""" start="00:05:21.520" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""The fundamental idea of Debase is that you can bind together""" start="00:05:23.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""all of those arguments into a single object""" start="00:05:28.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that represents the endpoint.""" start="00:05:30.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""This is an EIEIO class, and it takes keyword arguments,""" start="00:05:31.560" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""so there's never any chance""" start="00:05:35.600" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""of mixing up which thing is what.""" start="00:05:36.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""So this sets the endpoint to that object,""" start="00:05:38.560" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""calls debase-get-property on it,""" start="00:05:41.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and you can see it works exactly the same.""" start="00:05:43.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""The thing that's really nice about this, though,""" start="00:05:45.040" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""is it knows that so many of these arguments""" start="00:05:47.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""are very similar that it can compute most of them""" start="00:05:50.200" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""if you don't provide them all.""" start="00:05:52.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""So if you just say service, it will assume""" start="00:05:54.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that you want the same object that matches""" start="00:05:57.160" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and the same interface that matches,""" start="00:05:59.160" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and it works just the same.""" start="00:06:00.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""I find this very, very convenient.""" start="00:06:02.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""You can also reuse the object""" start="00:06:04.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""instead of having to repeat every argument""" start="00:06:07.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""with every function call,""" start="00:06:09.160" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""which is a really great improvement in ergonomics.""" start="00:06:10.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""Because so many objects have multiple interfaces,""" start="00:06:13.440" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""you often find yourself needing to look""" start="00:06:18.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""at a different aspect of that object.""" start="00:06:20.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""This is supported with the built-in EIEIO clone method,""" start="00:06:22.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""which takes an object""" start="00:06:26.600" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and a set of keyword arguments to replace.""" start="00:06:28.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""So in this case, we can see we're calling""" start="00:06:30.440" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""the Properties method,""" start="00:06:32.600" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""but everything else on that endpoint is the same.""" start="00:06:33.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And then we're gonna call the method GetAll""" start="00:06:35.800" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""on that Properties interface,""" start="00:06:38.080" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and it's going to return all the properties""" start="00:06:39.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""of the org.freedesktop.hostname1 interface""" start="00:06:41.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""inside of that object.""" start="00:06:43.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And if we run that, we can see there's the hostname""" start="00:06:45.200" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and some other information about the laptop""" start="00:06:48.200" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that I'm running this on.""" start="00:06:50.160" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""Debase also supports object binding.""" start="00:06:51.080" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""This creates a lexical context in which the Debase object""" start="00:06:54.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""is the implicit target of any D-Bus function.""" start="00:06:58.560" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""This is really convenient if you need""" start="00:07:01.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""to fetch multiple properties or otherwise interact""" start="00:07:03.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""with the same endpoint in multiple different ways.""" start="00:07:06.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And you can see I'm still on a laptop""" start="00:07:09.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and it's still named meson.""" start="00:07:11.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""You can also, if you don't want to use the object,""" start="00:07:12.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""you can provide the raw argument list.""" start="00:07:16.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Under the covers, this is basically an flet""" start="00:07:18.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""where you're currying all of these functions""" start="00:07:20.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""so they start with those argument lists.""" start="00:07:23.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And you can see I'm running on a Linux machine,""" start="00:07:25.440" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""which should not be surprising.""" start="00:07:27.800" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""Debase also has an experimental code generation feature.""" start="00:07:29.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""It outputs EIEIO code with one class per D-Bus interface.""" start="00:07:34.080" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""This includes accessors for all of its properties""" start="00:07:38.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""with an in-process cache, so if you read one property,""" start="00:07:41.080" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""you don't have to go back to the bus to read it again.""" start="00:07:44.160" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""It also outputs generic functions and method implementations""" start="00:07:46.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""for the D-Bus interface methods.""" start="00:07:50.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""It includes name-mangling options,""" start="00:07:52.200" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""so you can control how everything is named.""" start="00:07:54.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And you can generate the code either""" start="00:07:56.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""via introspecting a live system""" start="00:07:58.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""or providing an XML interface description,""" start="00:08:00.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""which is handy if you want to use it""" start="00:08:02.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""as part of a non-interactive build.""" start="00:08:04.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""I think this has a lot of promise,""" start="00:08:05.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""but it doesn't feel quite right yet,""" start="00:08:08.160" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""so any feedback or contributions are very welcome.""" start="00:08:09.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""Let's generate some Elisp code""" start="00:08:14.200" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""for that hostname1 service we were interacting with before.""" start="00:08:16.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""debase-gen-class is the generation class,""" start="00:08:19.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and it says to create a class that matches this interface,""" start="00:08:23.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""named &quot;hostname1&quot;, and then the rest of these arguments""" start="00:08:26.080" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""are the same ones to target the endpoint,""" start="00:08:29.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""just like with debase-object,""" start="00:08:31.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""because it extends debase-object.""" start="00:08:32.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""debase-gen-code is a generic function""" start="00:08:34.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that takes any debase-gen class.""" start="00:08:37.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""There are different classes for functions,""" start="00:08:40.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""properties, et cetera,""" start="00:08:42.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and it creates all of the code for it.""" start="00:08:43.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""If we evaluate it, we can see the results""" start="00:08:45.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""look about like we would expect:""" start="00:08:48.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""creates a defclass named &quot;hostname1&quot;,""" start="00:08:49.960" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""which extends debase-object,""" start="00:08:52.160" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""has all of the slots and accessors defined,""" start="00:08:53.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and then methods that define everything""" start="00:08:56.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that you might want to do with it, including documentation.""" start="00:08:59.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""This is based on introspecting a running system,""" start="00:09:01.840" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""but as I mentioned,""" start="00:09:04.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""you can provide an XML interface description instead,""" start="00:09:05.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""if you like.""" start="00:09:08.040" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""Debase also comes with &quot;debase-objectmanager&quot;,""" start="00:09:08.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""which is convenience for the D-Bus ObjectManager interface.""" start="00:09:12.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""This is used in a lot of places in D-Bus,""" start="00:09:15.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""where an object manages other objects.""" start="00:09:18.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""For example, the NetworkManager object""" start="00:09:20.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""manages network hardware objects,""" start="00:09:22.720" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and using the ObjectManager interface,""" start="00:09:25.160" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""you can enumerate all of the network hardware,""" start="00:09:26.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and by subscribing to the signals,""" start="00:09:28.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""you can be notified when they change.""" start="00:09:31.040" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""&quot;debase-objectmanager&quot; keeps a local cache,""" start="00:09:33.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and will fire a callback on any change.""" start="00:09:36.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""So it's the building block for that dynamic user interface,""" start="00:09:38.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""like you would see in a desktop system,""" start="00:09:41.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""but inside of Emacs.""" start="00:09:43.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""Let's do some demos.""" start="00:09:44.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Discomfort is an interface I wrote for UDisks2,""" start="00:09:47.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""which is what manages all of the block device hardware.""" start="00:09:51.040" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And again, it has that dynamic desktop-like interactivity,""" start="00:09:53.720" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and mostly will just do what you mean.""" start="00:09:57.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""This is definitely alpha state.""" start="00:10:00.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""It doesn't have all the features,""" start="00:10:03.520" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""but it's good enough that I use it daily.""" start="00:10:04.840" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""So here's Discomfort,""" start="00:10:06.560" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and you can see it has a list of all your hardware,""" start="00:10:08.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""what type it is, and where it's mounted.""" start="00:10:11.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""I have a little USB extension cable here,""" start="00:10:13.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and I'm gonna plug in a disc,""" start="00:10:16.200" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""just to show you how this works.""" start="00:10:17.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""You can see when I plug it in,""" start="00:10:19.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""just a moment later,""" start="00:10:21.080" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""it shows up in that list, automatically.""" start="00:10:22.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""I don't have to press any key,""" start="00:10:24.440" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""I don't have to refresh it, it's just there.""" start="00:10:25.720" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""If I unplug it, it's gone.""" start="00:10:27.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Plug it back in,""" start="00:10:29.520" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and there it is.""" start="00:10:30.720" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And you can see it's an encrypted volume.""" start="00:10:33.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""So in order to do anything with this,""" start="00:10:35.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""I'm going to have to supply a password.""" start="00:10:37.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Just pressing Enter goes into the &quot;do what I mean&quot; mode,""" start="00:10:38.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and it asks for the password.""" start="00:10:41.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""In this case, I've chosen the very secure password""" start="00:10:43.520" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""of &quot;password&quot;.""" start="00:10:46.600" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""I hit Enter, and it unlocks it, and it mounts it,""" start="00:10:47.560" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and it opens &quot;dired&quot; looking at it.""" start="00:10:51.200" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And here's a little README.""" start="00:10:53.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Let's see what it says.""" start="00:10:54.440" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""&quot;Hello, EmacsConf.&quot;""" start="00:10:55.560" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""So that's my demo of discomfort.""" start="00:10:58.560" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""In addition to acting as a client for D-Bus,""" start="00:11:01.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Emacs can also offer services to other D-Bus clients.""" start="00:11:05.840" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""This is a really interesting opportunity""" start="00:11:09.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""because it allows many different programs""" start="00:11:11.960" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""to integrate with Emacs""" start="00:11:14.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""in ways that were previously very difficult.""" start="00:11:15.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""You can use this as an alternative to Emacs.""" start="00:11:17.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""The difference is D-Bus provides a full API,""" start="00:11:20.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""so instead of emacsclient being""" start="00:11:23.200" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""a sort of fire-and-forget system,""" start="00:11:25.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""you can actually get results back from the remote operation.""" start="00:11:26.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""So here's some code.""" start="00:11:30.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Here's a dbus-eval function, which takes a string,""" start="00:11:32.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""reads it, and evaluates it,""" start="00:11:35.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and returns whatever that value is.""" start="00:11:37.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Then we have a debase-bind block""" start="00:11:39.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that sets up an object on the session bus.""" start="00:11:41.840" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Again, that's my user login bus.""" start="00:11:44.800" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""It offers this D-Bus service Emacs.""" start="00:11:46.840" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""This is a constant inside of the dbus.el package.""" start="00:11:49.560" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And again, the path is a constant in there.""" start="00:11:53.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And we're gonna create this interface,""" start="00:11:55.440" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""org.gnu.Emacs.Eval, and then register a method called Eval""" start="00:11:57.160" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that calls that dbus-eval function.""" start="00:12:02.520" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Pretty straightforward, only a handful of lines of code.""" start="00:12:04.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""To test this out, we're going to use the dbus-send utility.""" start="00:12:08.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""This is a command line program that interacts with D-Bus.""" start="00:12:12.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""We're going to tell it to wait for and print the reply,""" start="00:12:15.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that the message should be sent to the session bus,""" start="00:12:18.080" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that we're going to talk""" start="00:12:21.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""to the org.gnu.Emacs service on that bus,""" start="00:12:22.600" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and the /org/gnu/Emacs object inside that service.""" start="00:12:25.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""On that object, we're gonna interact""" start="00:12:30.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""with the org.gnu.Emacs.Eval interface""" start="00:12:33.040" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and call its Eval method.""" start="00:12:36.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""We're gonna call that method with a single string argument,""" start="00:12:37.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""which is indicated by the string prefix,""" start="00:12:40.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and then a form to evaluate.""" start="00:12:42.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""I actually have to run this from a shell,""" start="00:12:45.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""because if I try using it in Org, it wedges.""" start="00:12:47.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""org-babel blocks waiting on completion,""" start="00:12:49.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""which blocks the D-Bus service from responding.""" start="00:12:51.960" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""I really wish Emacs was multi-threaded.""" start="00:12:54.520" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""But let's try it out.""" start="00:12:57.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""So if we run this, we can see that we get a return,""" start="00:12:59.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and that's an unsigned integer of 32 bits""" start="00:13:02.720" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""with a value of 3.""" start="00:13:05.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""So like I was saying, this is really a two-way API""" start="00:13:06.440" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""where you can communicate back and forth""" start="00:13:09.960" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""between Emacs and another program.""" start="00:13:11.720" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""It's not just fire-and-forget.""" start="00:13:13.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""I think that's really cool.""" start="00:13:14.960" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""Let's try another demo.""" start="00:13:16.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""What about a remote org-capture?""" start="00:13:18.520" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""What if you could trigger an org-capture""" start="00:13:20.600" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""from any program on your desktop?""" start="00:13:23.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""I think that would be pretty cool.""" start="00:13:24.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And we can see, there it is.""" start="00:13:26.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""All right, I think I've got that one covered.""" start="00:13:30.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""So I do want to say that remote eval is probably a bad idea""" start="00:13:38.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""from a security perspective,""" start="00:13:42.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""but the point of this is some quick and dirty demonstrations""" start="00:13:43.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""of what can happen and to get people's imaginations flowing,""" start="00:13:46.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""because I think this is something""" start="00:13:49.800" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that offers a lot of promise for Emacs.""" start="00:13:51.720" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""I think having a full-blown Emacs desktop environment""" start="00:13:54.080" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""where it can do all the things that a GNOME""" start="00:13:57.800" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""or a KDE environment can do is very exciting.""" start="00:13:59.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And if you want to have a traditional GUI with Emacs""" start="00:14:02.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""as a more integrated participant of it,""" start="00:14:06.440" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""its service mechanism offers a lot of ability to do that.""" start="00:14:08.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""In the micro sense, I think there's a lot of improvements""" start="00:14:11.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that can be made to either dbus.el or to dbase.""" start="00:14:16.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""The main one is handling of the type system.""" start="00:14:19.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Lisp's dynamic type system doesn't mesh particularly well""" start="00:14:21.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""with the static strong type system that D-bus offers,""" start="00:14:25.840" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and having some convenience to assist that""" start="00:14:28.800" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""would be very helpful.""" start="00:14:31.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""There's also some weird interfaces.""" start="00:14:32.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""For example, some things return identifiers""" start="00:14:35.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""as an array of integer code points instead of a string,""" start="00:14:38.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and there should be a common way of handling that.""" start="00:14:40.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""I also think that the service support could be improved.""" start="00:14:43.720" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Even though I gave the demo service,""" start="00:14:46.160" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""it's not really a great D-bus citizen""" start="00:14:48.040" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""because it doesn't offer that introspection mechanism,""" start="00:14:50.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and so the actual methods are pretty much invisible""" start="00:14:53.080" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""to other participants,""" start="00:14:55.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""unless they already know that you're using Emacs.""" start="00:14:56.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""That's my talk.""" start="00:15:00.080" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Thank you.""" start="00:15:01.800" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""You can find me on mastodon.social or on libera.chat.""" start="00:15:02.560" video="mainVideo-dbus" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20dbus%3A%20The%20Wheels%20on%20D-Bus)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/dbus-before.md b/2022/info/dbus-before.md
new file mode 100644
index 00000000..fac93a6c
--- /dev/null
+++ b/2022/info/dbus-before.md
@@ -0,0 +1,62 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sun 2022-12-04. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="dbus">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(126,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect x="378" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(399,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect stroke-width="3" x="588" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 16-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-dbus>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: TO_CAPTION_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-04T20:15:00Z" end="2022-12-04T20:35:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~3:15 PM - 3:35 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 4 2022, ~2:15 PM - 2:35 PM CST (US/Central)<br />Sunday, Dec 4 2022, ~1:15 PM - 1:35 PM MST (US/Mountain)<br />Sunday, Dec 4 2022, ~12:15 PM - 12:35 PM PST (US/Pacific)<br />Sunday, Dec 4 2022, ~8:15 PM - 8:35 PM UTC <br />Sunday, Dec 4 2022, ~9:15 PM - 9:35 PM CET (Europe/Paris)<br />Sunday, Dec 4 2022, ~10:15 PM - 10:35 PM EET (Europe/Athens)<br />Monday, Dec 5 2022, ~1:45 AM - 2:05 AM IST (Asia/Kolkata)<br />Monday, Dec 5 2022, ~4:15 AM - 4:35 AM +08 (Asia/Singapore)<br />Monday, Dec 5 2022, ~5:15 AM - 5:35 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/dev/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="dbus-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="dbus-mainVideo" data="""
+00:00.000 What is D-Bus?
+01:07.880 Why D-Bus?
+01:45.360 The D-Bus Model
+02:55.360 Well-known Busses
+03:20.000 Common interfaces
+04:06.240 Emacs Native D-Bus
+05:09.320 Debase
+05:23.880 Debase: Objects
+06:13.440 Debase: Retarget objects
+06:51.080 Debase: Object binding
+07:12.480 Debase: Raw binding
+07:29.400 Debase: Codegen
+08:14.200 Debase: Codegen example
+09:08.680 Debase: ObjectManager
+09:44.480 Demo: Discomfort
+11:01.480 Demo: Remote eval
+13:16.280 Demo: Remote Org capture
+14:11.880 Future directions
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main.webm">Download --main.webm (54MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main.opus">Download --main.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main.org">Download --main.org</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/uwgjHJvZF9cv5KcYFZmdNz">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="dbus-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="dbus-qanda" data="""
+00:46.840 D-Feet graphical debugger
+01:37.000 Emacs desktop environment
+04:58.160 How long has D-Bus been around, and what was in place before that?
+07:48.360 Why is everything D-Bus prefixed with "org."?
+08:28.480 Do most OS/desktop environment/window managers interoperate well over D-Bus?
+10:08.720 There is a lot of criticism against D-Bus out there. Why do you think that might be?
+11:37.560 Which system services come to mind when thinking about applications, be it at the OS/DE/WM level?
+12:19.720 When it comes to managing devices, how are D-Bus and udev related?
+13:33.280 What is something D-Bus does that you couldn't do before? What is a really cool use of D-Bus in a modern desktop environment?
+15:08.880 Can you explain briefly what clients and services can do with properties?
+17:49.920 Is there such a thing as a D-Bus reflection browser, maybe Emacs-based, that lets you discover all the behavior different D-Bus app participants provide?
+18:17.760 Next question, D-Bus seems great for extensibility, but then Emacs has no such mechanism and is fantastically more extensible. Why do you think this is so?
+19:25.200 Do you have any other cool D-Bus ideas?
+19:54.640 Are there buses besides system and session? Is there anything more to a bus besides a way to group objects?
+22:52.280 What do you use it for?
+25:12.480 It looks like dBus is mostly useful for Emacs to do IPC -- IIUC, this is how synctex works when working with LaTeX docs. How does it compare with other ways of doing IPC, for example, communicating over a socket with MPD?
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="dbus-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--answers.webm">Download --answers.webm (18MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--answers.opus">Download --answers.opus (9.8MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/dbus-nav.md b/2022/info/dbus-nav.md
new file mode 100644
index 00000000..de8d811a
--- /dev/null
+++ b/2022/info/dbus-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/grail">GRAIL---A Generalized Representation and Aggregation of Information Layers</a>
+Next by track: <a href="/2022/talks/indieweb">Putting Org Mode on the Indieweb</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/detached-after.md b/2022/info/detached-after.md
new file mode 100644
index 00000000..21abac9b
--- /dev/null
+++ b/2022/info/detached-after.md
@@ -0,0 +1,182 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="detached-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hello, everyone! Welcome to my talk,""" start="00:00:00.000" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""&quot;Getting detached from Emacs&quot;.""" start="00:00:04.454" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""When I started to use Emacs,""" start="00:00:07.321" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I quickly gravitated towards using it""" start="00:00:09.720" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""as much as I could.""" start="00:00:12.920" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""Magit, Org, Dired,""" start="00:00:15.000" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""a lot of new possibilities opened up.""" start="00:00:17.880" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""However, there was a workflow""" start="00:00:21.360" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""that was difficult for me to replace.""" start="00:00:23.280" video="mainVideo-detached" id="subtitle"]]
+[[!template new="1" text="""The problem for me was running shell commands""" start="00:00:27.120" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""in sub-processes of Emacs,""" start="00:00:30.120" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""which in some situations led me to stick to""" start="00:00:32.560" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""using an external terminal.""" start="00:00:34.880" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""These situations,""" start="00:00:38.000" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""often revolved around long-running shell commands,""" start="00:00:39.688" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""either on my local machine""" start="00:00:43.354" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""or on a remote host.""" start="00:00:46.154" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""When I was on a remote host,""" start="00:00:48.600" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I would also rely on using the program tmux""" start="00:00:50.240" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""to be able to detach from the remote process.""" start="00:00:52.800" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""My main concern at the time""" start="00:00:57.280" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""was that I didn't want to having to avoid""" start="00:00:59.621" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""restarting Emacs,""" start="00:01:01.954" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""because I needed to wait for a process to complete.""" start="00:01:03.440" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""However, there was of course a lot of things""" start="00:01:07.800" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I was missing out on by not using Emacs.""" start="00:01:11.200" video="mainVideo-detached" id="subtitle"]]
+[[!template new="1" text="""Therefore, my solution to resolving""" start="00:01:15.800" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""the issue of occasionally having to leave Emacs""" start="00:01:19.760" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""led me down the path of developing the package""" start="00:01:22.840" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""Detached.""" start="00:01:26.188" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""The package allows Emacs to delegate""" start="00:01:28.321" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""the responsibility of creating processes""" start="00:01:31.160" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""to the program dtach.""" start="00:01:33.640" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""It also makes sure to write""" start="00:01:36.840" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""the output of the process to a file,""" start="00:01:39.121" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""which we will see later on how that is being used.""" start="00:01:44.421" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""The package makes Emacs capable of""" start="00:01:48.254" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""attaching to these processes""" start="00:01:50.800" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""as well as managing them.""" start="00:01:53.120" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""In the package, each process is called a session,""" start="00:01:55.280" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""and inside of Emacs that is just""" start="00:01:58.880" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""an object with properties""" start="00:02:01.040" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""such as what command is being run,""" start="00:02:02.560" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""what working directory is used,""" start="00:02:04.688" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""where the output is stored, etc.""" start="00:02:06.720" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""The important aspect is also that""" start="00:02:10.240" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""these objects are being persistent,""" start="00:02:12.480" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""so they are stored over time.""" start="00:02:16.840" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""Today, I'm going to walk you through""" start="00:02:20.221" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""how I use the package and what advantages""" start="00:02:22.920" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""there are of treating processes like text.""" start="00:02:26.154" video="mainVideo-detached" id="subtitle"]]
+[[!template new="1" text="""I'm going to start by opening up M-x shell,""" start="00:02:30.840" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""and I will run a command""" start="00:02:35.720" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""to update my package manager.""" start="00:02:40.388" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""Instead of pressing return,""" start="00:02:46.920" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I'll simply press shift return""" start="00:02:48.354" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""to let Emacs delegate the execution""" start="00:02:50.240" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""to the dtach program.""" start="00:02:52.600" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""Emacs will immediately attach itself to the process,""" start="00:02:54.920" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""and we therefore don't perceive any difference""" start="00:02:57.600" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""from when running the command as a subprocess.""" start="00:03:00.960" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""We now have the option though""" start="00:03:04.480" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""to detach from the session,""" start="00:03:06.588" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""and later on we can of course""" start="00:03:09.800" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""reattach Emacs to the session.""" start="00:03:12.080" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""For me, this addresses the core""" start="00:03:17.154" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""of the problem that I had.""" start="00:03:20.521" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""But let’s see what’s more""" start="00:03:23.800" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""the new workflow inside of Emacs can bring.""" start="00:03:25.040" video="mainVideo-detached" id="subtitle"]]
+[[!template new="1" text="""The package supports multiple user interfaces""" start="00:03:30.800" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""such as Eshell and Compile.""" start="00:03:35.720" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I will therefore switch to the Detached project,""" start="00:03:39.840" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""and I will run the build command that I use.""" start="00:03:43.360" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I will run it with detached-compile""" start="00:03:49.440" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""with the difference that""" start="00:03:54.040" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I can detach from the compilation.""" start="00:03:55.800" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""One benefit of this new workflow is that""" start="00:03:59.800" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I can get a system notification shown up here""" start="00:04:05.000" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""once a session has finished.""" start="00:04:08.680" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""Previously, I was either forced to have""" start="00:04:10.760" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""the terminal open so I could see it or hiding it,""" start="00:04:15.520" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""but then risking having forgotten it.""" start="00:04:19.040" video="mainVideo-detached" id="subtitle"]]
+[[!template new="1" text="""How do we then see the output of a session?""" start="00:04:27.854" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""Get the detached-list-sessions command,""" start="00:04:32.560" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""and here we see""" start="00:04:36.888" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""the command that we just built,""" start="00:04:42.954" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""and we see the guix pull with an asterisk""" start="00:04:45.600" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""indicating that it is continuously running.""" start="00:04:48.440" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""If I press enter,""" start="00:04:54.480" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""we will get the output of the session here.""" start="00:05:01.521" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""And since it was run using compile,""" start="00:05:04.440" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""we also have compilation mode enabled here,""" start="00:05:07.200" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""so we could navigate between""" start="00:05:11.720" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""potential warnings or errors.""" start="00:05:14.288" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""And we see that there is a warning here.""" start="00:05:17.160" video="mainVideo-detached" id="subtitle"]]
+[[!template new="1" text="""One thing that""" start="00:05:21.440" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I have prepared here is that""" start="00:05:26.721" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""if I open up the user interface,""" start="00:05:28.920" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""we only see two sessions,""" start="00:05:32.240" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""but that is because we applied a filter here.""" start="00:05:35.760" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""So, we have actually the only sessions""" start="00:05:39.088" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""that are created within the last 12 hours""" start="00:05:43.160" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""and that are considered unique.""" start="00:05:46.000" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""So, if I remove the uniqueness,""" start="00:05:47.360" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""we also see that we have a previous build""" start="00:05:50.600" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""running on the main branch.""" start="00:05:57.040" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""So, I think that's typically normal""" start="00:05:59.280" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""that you might have that.""" start="00:06:02.760" video="mainVideo-detached" id="subtitle"]]
+[[!template new="1" text="""And since the sessions can be considered text,""" start="00:06:07.080" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""we can just mark these two and check,""" start="00:06:10.920" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""does this warning exist on the main branch or not?""" start="00:06:14.760" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""So, we can just diff these ones""" start="00:06:18.880" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""and we see that the warning is only present""" start="00:06:22.720" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""on the emacsconf branch.""" start="00:06:27.554" video="mainVideo-detached" id="subtitle"]]
+[[!template new="1" text="""Now, another benefit, in my opinion,""" start="00:06:34.040" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""of the new way of working is that""" start="00:06:37.520" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I have these properties being displayed""" start="00:06:41.840" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""in the user interface.""" start="00:06:43.240" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I can quickly see which commands are still running,""" start="00:06:45.421" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""what hosts they are running on,""" start="00:06:48.960" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""where they are running,""" start="00:06:51.360" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""and for how long they have been running.""" start="00:06:53.488" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""And if they have run,""" start="00:06:58.221" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""how long did it take?""" start="00:07:00.421" video="mainVideo-detached" id="subtitle"]]
+[[!template new="1" text="""Occasionally, though, there might be""" start="00:07:04.521" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""even more input needed to distinguish sessions.""" start="00:07:06.880" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""So, what I typically do then is""" start="00:07:16.880" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""press A to annotate the session,""" start="00:07:19.600" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I would add a &quot;Warning found at emacsconf&quot;""" start="00:07:22.200" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""And then it will show up this annotation""" start="00:07:29.088" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""in the echo area when I select the session.""" start="00:07:32.954" video="mainVideo-detached" id="subtitle"]]
+[[!template new="1" text="""Another great improvement of using these sessions""" start="00:07:45.088" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""and consider them being text is,""" start="00:07:48.080" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""now we also see the guix pull completed here.""" start="00:07:52.640" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""Then we can also select and see that, okay,""" start="00:07:57.421" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""there is a lot of updates in this command,""" start="00:08:01.021" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""but let's not look at it now.""" start="00:08:08.600" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""Let's instead remember that""" start="00:08:10.160" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""previously last week""" start="00:08:17.654" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""when I ran a guix pull,""" start="00:08:19.840" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I saw an Emacs package that looks interesting.""" start="00:08:21.640" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I rather don't remember its full name,""" start="00:08:27.680" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""but it has something to do with collection.""" start="00:08:30.040" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""So, what I then can do is""" start="00:08:32.720" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""remove the 12 hour narrowing criteria,""" start="00:08:38.840" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""and we can see here I got sessions ranging back""" start="00:08:42.280" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""even to 28th of October.""" start="00:08:47.680" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""Since these are just to be considered text,""" start="00:08:51.040" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I can--""" start="00:08:55.600" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""now let's first narrow the sessions""" start="00:08:58.754" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""to only show the ones that run guix pull.""" start="00:09:00.320" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""Then I would narrow based on the output""" start="00:09:05.288" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""containing a regular expression.""" start="00:09:08.440" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""So, I remember it was something with collection.""" start="00:09:11.280" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""And we got one hit.""" start="00:09:14.400" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""Here it should be something with collection.""" start="00:09:20.088" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""It was emacs-flymake-collection.""" start="00:09:24.188" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""This is something that is a""" start="00:09:29.621" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""very nice feature to have.""" start="00:09:34.821" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""It doesn't create any overhead""" start="00:09:38.400" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""of having these old sessions lying around""" start="00:09:42.160" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""and occasionally, it can be interesting""" start="00:09:45.280" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""to search through them as well.""" start="00:09:47.400" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""So, for me, this is another example of""" start="00:09:49.680" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""when bringing workflows into Emacs,""" start="00:09:55.000" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""it often opens up new exciting possibilities.""" start="00:10:00.054" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""Thanks a lot for listening.""" start="00:10:05.121" video="mainVideo-detached" id="subtitle"]]
+
+
+
+Captioner: anush
+
+Questions or comments? Please e-mail [niklas.eklund@posteo.net](mailto:niklas.eklund@posteo.net?subject=Comment%20for%20EmacsConf%202022%20detached%3A%20Getting%20detached%20from%20Emacs)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/detached-before.md b/2022/info/detached-before.md
new file mode 100644
index 00000000..b3139527
--- /dev/null
+++ b/2022/info/detached-before.md
@@ -0,0 +1,50 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Niklas Eklund shows how to use detached to manage long-running asynchronous processes, including how to search through and compare session results. Afterwards, he will handle questions via BigBlueButton.
+
+
+The following image shows where the talk is in the schedule for Sun 2022-12-04. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="detached">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(126,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect stroke-width="3" x="378" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(399,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 11-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-detached>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: TO_INDEX_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-04T18:01:00Z" end="2022-12-04T18:16:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~1:01 PM - 1:16 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 4 2022, ~12:01 PM - 12:16 PM CST (US/Central)<br />Sunday, Dec 4 2022, ~11:01 AM - 11:16 AM MST (US/Mountain)<br />Sunday, Dec 4 2022, ~10:01 AM - 10:16 AM PST (US/Pacific)<br />Sunday, Dec 4 2022, ~6:01 PM - 6:16 PM UTC <br />Sunday, Dec 4 2022, ~7:01 PM - 7:16 PM CET (Europe/Paris)<br />Sunday, Dec 4 2022, ~8:01 PM - 8:16 PM EET (Europe/Athens)<br />Sunday, Dec 4 2022, ~11:31 PM - 11:46 PM IST (Asia/Kolkata)<br />Monday, Dec 5 2022, ~2:01 AM - 2:16 AM +08 (Asia/Singapore)<br />Monday, Dec 5 2022, ~3:01 AM - 3:16 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/dev/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="detached-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="detached-mainVideo" data="""
+00:00.000 Intro
+00:27.120 The problem
+01:15.800 My solution: detached
+02:30.840 Shell
+03:30.800 Compile
+04:27.854 Detached list sessions
+05:21.440 Narrow criteria
+06:07.080 Diff sessions
+06:34.040 Rich interface with properties
+07:04.521 Annotation
+07:45.088 Searching through sessions
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.webm">Download --main.webm (42MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.opus">Download --main.opus (4.7MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/5g6W1vPuWeHognYnvnnbNk">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="detached-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="detached-qanda" data="""
+00:32.880 Can it replace ssh+tmux for persistent sessions on remote hosts?
+01:16.880 I see integration with projectile in the readme. Does it also integrate with project.el?
+03:51.240 Can you detach a session from shell-mode and reattach from eshell/vterm/term-mode? Or start a compile in shell-mode and attach it from compilation-mode?
+05:45.120 How do you talk to detached? Could it be feasible to run a child Emacs instead of detached?
+07:45.880 How does it handle processes that require user input?
+09:20.000 Can you rerun a command (session?) but in another directory?
+12:22.880 What are some other places where this might be useful?
+16:59.720 What are you currently excited about in Emacs?
+19:27.400 Bug in detached re: eshell and quotes
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="detached-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--answers.webm">Download --answers.webm (53MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--answers.opus">Download --answers.opus (8.9MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/detached-nav.md b/2022/info/detached-nav.md
new file mode 100644
index 00000000..0a9a505f
--- /dev/null
+++ b/2022/info/detached-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/hyperorg">Powerful productivity with Hyperbole and Org Mode</a>
+Next by track: <a href="/2022/talks/eshell">Top 10 reasons why you should be using Eshell</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/devel-after.md b/2022/info/devel-after.md
new file mode 100644
index 00000000..d2f37446
--- /dev/null
+++ b/2022/info/devel-after.md
@@ -0,0 +1,133 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="devel-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hello, it's time for another Emacs development update.""" start="00:00:00.000" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I want to thank the organizers of EmacsConf""" start="00:00:05.320" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""for putting this together""" start="00:00:07.800" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and also the maintainers of Emacs""" start="00:00:10.160" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""with a special thanks to Eli Zaretskii.""" start="00:00:12.280" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""It's really he who gave me this information""" start="00:00:14.240" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""so that I could pass it along to you.""" start="00:00:16.520" video="mainVideo-devel" id="subtitle"]]
+[[!template new="1" text="""The main thing to discuss this time""" start="00:00:19.360" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""with regard to what's been going on with Emacs is Emacs 29.""" start="00:00:21.720" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""The release cycle for Emacs 29 should begin in December""" start="00:00:25.880" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""when a branch will be cut and the release work will start.""" start="00:00:29.840" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""We should be seeing Emacs 29 coming out fairly soon.""" start="00:00:32.880" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Here's just a brief overview""" start="00:00:36.600" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""of some of the things to look forward to""" start="00:00:38.120" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""coming up in Emacs 29.""" start="00:00:39.680" video="mainVideo-devel" id="subtitle"]]
+[[!template new="1" text="""Overlays have been re-implemented.""" start="00:00:42.480" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""If you haven't used them before,""" start="00:00:45.680" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""overlays are a way to apply a set of properties""" start="00:00:47.240" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""over a range of text so that""" start="00:00:50.960" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""you can have things like mouse clicks""" start="00:00:53.560" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""take on different behavior""" start="00:00:55.840" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""depending on where it happens in the text.""" start="00:00:57.920" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""This is different than text properties""" start="00:00:59.520" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""which associate the properties with the text itself.""" start="00:01:01.720" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Overlays do not alter the text in any way""" start="00:01:04.080" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and they simply, as the name suggests,""" start="00:01:07.200" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""overlay on the buffer.""" start="00:01:09.320" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Now previously, overlays were implemented as linear lists""" start="00:01:10.920" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""which got very slow when there were""" start="00:01:14.040" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""a lot of overlays in a buffer.""" start="00:01:15.800" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Now they're being re-implemented as trees,""" start="00:01:17.880" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""so that searching should be very fast, and""" start="00:01:19.920" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""in fact, comparable to text properties.""" start="00:01:21.880" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""This is already on the master branch""" start="00:01:24.440" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and (more or less) is ready for release.""" start="00:01:26.520" video="mainVideo-devel" id="subtitle"]]
+[[!template new="1" text="""Eglot has been ported into Emacs.""" start="00:01:29.280" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Eglot is an LSP [Language Server Protocol] client for Emacs,""" start="00:01:32.240" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""one of the two that are often used.""" start="00:01:36.960" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""But now it's going to be included in core,""" start="00:01:38.440" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""so it's considered official""" start="00:01:40.840" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and will be well integrated with other Emacs features.""" start="00:01:42.760" video="mainVideo-devel" id="subtitle"]]
+[[!template new="1" text="""There's going to be a Tree-sitter library.""" start="00:01:46.480" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Tree-sitter is a way of building fast incremental parsers.""" start="00:01:48.640" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""There's a website on Tree-sitter if you Google for that.""" start="00:01:53.200" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""This can be used for various features,""" start="00:01:56.040" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""but first and foremost, it'll be used""" start="00:01:57.800" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""for fontification and indentation in Emacs.""" start="00:01:59.720" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Instead of heuristics and regular expressions,""" start="00:02:02.840" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""you can now build your fontifications""" start="00:02:05.600" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""based on a parse tree.""" start="00:02:07.400" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""There's a branch now that supports this""" start="00:02:09.080" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""for several modes already, like Python, TypeScript,""" start="00:02:10.640" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and JavaScript.""" start="00:02:13.680" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""We don't have anyone yet working on it for C mode""" start="00:02:15.000" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""but Eli has challenged whether anyone""" start="00:02:18.120" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""in the community is interested.""" start="00:02:20.480" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""He would love to see Tree-sitter support added for C mode,""" start="00:02:21.960" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""because this has been quite slow""" start="00:02:25.960" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""when dealing with very, very large files""" start="00:02:27.880" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and Tree-sitter should help that.""" start="00:02:29.640" video="mainVideo-devel" id="subtitle"]]
+[[!template new="1" text="""There have been significant improvements""" start="00:02:32.000" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""in dealing with very long lines.""" start="00:02:34.320" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""This is something that has been""" start="00:02:36.680" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""a long time frequent complaint.""" start="00:02:38.160" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Emacs becomes rather unusable""" start="00:02:40.800" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""if you open a giant file that's a single long line.""" start="00:02:42.880" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Anyone who's ever tried to open a 30 megabyte JSON file""" start="00:02:45.840" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""that's all on one line will know this pain.""" start="00:02:49.560" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Some modes, however, will have to adapt to this change,""" start="00:02:52.200" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""because sometimes access to the whole buffer""" start="00:02:55.960" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""is now forcefully restricted.""" start="00:02:58.320" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""If the mode requires access to the entire buffer""" start="00:03:00.440" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""at all times to work, then the developer of that mode""" start="00:03:04.400" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""will need to devise some simplifications""" start="00:03:08.000" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""so that they don't require that complete access.""" start="00:03:10.240" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""For example, if a mode used to go way back""" start="00:03:13.160" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""to the beginning of the buffer""" start="00:03:15.760" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""in order to determine if there's an unbalanced parenthesis,""" start="00:03:16.920" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""this won't work in the new long lines support mode,""" start="00:03:19.480" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""because the entire buffer is not always available.""" start="00:03:23.040" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Emacs is sort of doing some""" start="00:03:25.840" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""restricting of the buffer heuristically""" start="00:03:27.720" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""in order to keep the visible range working""" start="00:03:29.880" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""very, very quickly now.""" start="00:03:32.480" video="mainVideo-devel" id="subtitle"]]
+[[!template new="1" text="""Emacs can now build directly with SQLite.""" start="00:03:35.280" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""This means that SQLite databases""" start="00:03:39.240" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""can be directly accessible from Emacs.""" start="00:03:42.360" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Should be nice for anyone whose mode wants to""" start="00:03:44.880" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""cache or store some queryable data.""" start="00:03:47.360" video="mainVideo-devel" id="subtitle"]]
+[[!template new="1" text="""The XInput extension is now up to version 2.""" start="00:03:50.080" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""There are many extensions in this specification.""" start="00:03:54.960" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""From the user's point of view,""" start="00:03:58.240" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""it enables things like smooth scrolling and touch devices.""" start="00:03:59.800" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Emacs will now use this by default on all systems""" start="00:04:03.360" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""where the library is installed.""" start="00:04:06.320" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""It should be on every modern system that uses X.""" start="00:04:08.560" video="mainVideo-devel" id="subtitle"]]
+[[!template new="1" text="""There's also a pure GTK build in Emacs 29.""" start="00:04:11.320" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""The purpose of this is to allow Emacs""" start="00:04:15.520" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""on systems without X, such as Wayland or Broadway,""" start="00:04:17.560" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""to be able to have a graphical build of Emacs.""" start="00:04:21.160" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""There's also lots of improvements to drag and drop""" start="00:04:24.160" video="mainVideo-devel" id="subtitle"]]
+[[!template new="1" text="""on X systems, for people who like drag and drop.""" start="00:04:27.320" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""And there's support for double buffering on Microsoft Windows.""" start="00:04:31.360" video="mainVideo-devel" id="subtitle"]]
+[[!template new="1" text="""The last of the headline features""" start="00:04:34.280" video="mainVideo-devel" id="subtitle"]]
+[[!template new="1" text="""coming for Emacs 29 is emoji input.""" start="00:04:38.480" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""So there will now be a prefix key,""" start="00:04:41.160" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""C-x 8 e for emoji input,""" start="00:04:43.520" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""along with several new commands to insert emoji""" start="00:04:47.320" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""by various forms of shorthand.""" start="00:04:50.240" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""There will even be an input method""" start="00:04:52.480" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""where you can write the plain English names of emojis""" start="00:04:54.360" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and have the symbol inserted.""" start="00:04:57.560" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""So that rounds out some of the features""" start="00:04:59.120" video="mainVideo-devel" id="subtitle"]]
+[[!template new="1" text="""coming up for Emacs 29.""" start="00:05:02.160" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Sounds like an exciting release""" start="00:05:03.680" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and it should be headed your way soon.""" start="00:05:05.680" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I hope everybody has fun at the conference""" start="00:05:07.480" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and enjoy yourselves.""" start="00:05:09.920" video="mainVideo-devel" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20devel%3A%20Emacs%20development%20updates)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/devel-before.md b/2022/info/devel-before.md
new file mode 100644
index 00000000..d2576923
--- /dev/null
+++ b/2022/info/devel-before.md
@@ -0,0 +1,21 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, John Wiegley will briefly summarize important developments on the road to Emacs 29. He will not be able to answer questions right now, but you can post questions in the pad and he can follow up after the event.
+
+<div class="vid"><video controls preload="none" id="devel-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="devel-mainVideo" data="""
+00:00.000 Introduction
+00:19.320 Emacs 29 release cycle
+00:42.400 Overlays
+01:29.080 Eglot
+01:46.480 Tree-sitter
+02:30.840 Very long lines
+03:35.240 SQLite
+03:50.080 XInput
+04:11.320 Pure GTK build
+04:24.640 Drag and drop
+04:31.400 Double-buffering on Microsoft Windows
+04:35.240 Emoji input
+05:00.080 End
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main.webm">Download --main.webm (33MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main.opus">Download --main.opus (2.8MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/o8S5uKpPTCD717zwHPd5cD">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/devel-nav.md b/2022/info/devel-nav.md
new file mode 100644
index 00000000..9335964b
--- /dev/null
+++ b/2022/info/devel-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/localizing">Pre-localizing Emacs</a>
+Next by track: <a href="/2022/talks/fanfare">Fanfare for the Common Emacs User</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/eev-after.md b/2022/info/eev-after.md
new file mode 100644
index 00000000..7368a306
--- /dev/null
+++ b/2022/info/eev-after.md
@@ -0,0 +1,173 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="eev-mainVideo-transcript"></a>
+# Transcript
+
+[[!template text="""Hi! My name is Eduardo Ochs. I'm the author""" start="00:00:00.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""of an Emacs package called eev, and the name""" start="00:00:04.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""of this presentation is: &quot;Bidirectional links""" start="00:00:06.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""in eev&quot;.""" start="00:00:09.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""Let me present things in a weird order,""" start="00:00:10.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""starting by the new feature, and then I'm""" start="00:00:13.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""going to explain the whole context.""" start="00:00:16.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""One of the main features that we are""" start="00:00:20.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""going to see here is this function here,""" start="00:00:22.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""M-x kla, and kla is a mnemonic for &quot;kill""" start="00:00:24.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""Link to Anchor&quot;. Let me explain... let me""" start="00:00:27.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""demonstrate how it works. This thing here""" start="00:00:31.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""with the green angle brackets is an""" start="00:00:33.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""anchor, this thing between the green""" start="00:00:36.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""angle brackets is a tag of an""" start="00:00:40.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""anchor, and if I type M-x kla here""" start="00:00:42.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""it highlights this tag for a second and""" start="00:00:46.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""it says &quot;Copied to the kill ring: blah""" start="00:00:49.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""blah blah...&quot; and this thing here is a link.""" start="00:00:52.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""I can insert the link here, I""" start="00:00:54.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""can insert the link in my notes...""" start="00:00:57.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""and if I execute this thing this link""" start="00:01:00.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""here it goes to this anchor in this file.""" start="00:01:03.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""If you have a recent version of eev""" start="00:01:10.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""installed then trying this feature""" start="00:01:12.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""should be very easy...""" start="00:01:13.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""you just need to open the this file here,""" start="00:01:15.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""in which everything is defined, and then""" start="00:01:18.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""go to this section at the beginning of""" start="00:01:21.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""the file, and then run the three blocks""" start="00:01:23.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""of tests that are there.""" start="00:01:26.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""This block corresponds roughly to what""" start="00:01:28.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""we have just done...""" start="00:01:31.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""this other block""" start="00:01:33.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""is slightly different because it shows""" start="00:01:36.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""some variants of kla... one is with `f`""" start="00:01:40.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""instead of an `a` here, let me""" start="00:01:44.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""show how it works... if we type""" start="00:01:48.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""`M-x eeklf` or just `M-x klf`""" start="00:01:51.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""we get a link to this file that does not""" start="00:01:57.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""point to an anchor, and if we type""" start="00:02:00.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""`M-x klt` we get another kind of link that""" start="00:02:03.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""is a link to an anchor in the same""" start="00:02:07.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""file...""" start="00:02:09.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""and the third block""" start="00:02:11.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""is more interesting because it lets""" start="00:02:16.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""people create links to files that""" start="00:02:18.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""are elsewhere, and that do not have""" start="00:02:20.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""anchors in them...""" start="00:02:23.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""let me execute this... this will""" start="00:02:25.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""run this sexp here and display the""" start="00:02:29.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""target at the window at the right...""" start="00:02:32.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""this is one of the source files of Emacs.""" start="00:02:35.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""Let's imagine that I want to create a""" start="00:02:41.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""link to this string here... then I can""" start="00:02:43.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""type `M-x klfs`, and this will create a""" start="00:02:46.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""link to a file and to a string in that""" start="00:02:51.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""file. So if I type ENTER here""" start="00:02:53.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""it says: &quot;Copied to the kill ring: ...\""" start="00:02:56.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""and this is a link to this file here,""" start="00:02:59.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""and to the first occurrence of this""" start="00:03:02.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""string in this file.""" start="00:03:04.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""So: how does this work (inside)?...""" start="00:03:10.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""when I was trying to write the documentation""" start="00:03:14.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""of this I tried to write a summary of""" start="00:03:16.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""how the algorithm works, and I failed and""" start="00:03:19.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""I tried again, and I failed again,""" start="00:03:21.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""several times... and then I gave up and I""" start="00:03:23.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""decided to write an intro - a tutorial,""" start="00:03:26.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""this one -""" start="00:03:29.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""that explains everything with lots of""" start="00:03:31.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""details, and with lots of sections""" start="00:03:34.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""with &quot;Try it!&quot;s, that""" start="00:03:35.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""have examples that you you can run to""" start="00:03:39.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""understand things, to examine how some""" start="00:03:41.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""functions work, how the data""" start="00:03:44.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""structures work, and so on...""" start="00:03:48.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""the problem is that sometimes we have""" start="00:03:51.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""several hyperlinks that point to the to""" start="00:03:54.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""the same file. Let me give an example.""" start="00:03:56.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""In the configuration in which I am now,""" start="00:04:00.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""in this file here... the old way of""" start="00:04:04.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""generating hyperlinks to this file""" start="00:04:07.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""with `find-here-links`""" start="00:04:08.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""will generate a temporary buffer""" start="00:04:10.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""like this, and then I would have to""" start="00:04:13.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""choose which one of these hyperlinks I""" start="00:04:15.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""find best, which one I prefer, and then""" start="00:04:18.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""copy it to my notes... so instead""" start="00:04:21.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""of choosing a hyperlink this thing here""" start="00:04:25.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""shows all the options.""" start="00:04:27.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""And in the new way, in `M-x kla`""" start="00:04:30.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""and friends, there's an algorithm that""" start="00:04:34.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""chooses the best short hyperlink by""" start="00:04:37.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""itself, and this algorithm is a bit hard""" start="00:04:39.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""to explain... let me demonstrate it here.""" start="00:04:43.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""Again, we have all these options here, of""" start="00:04:46.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""hyperlinks to this file...""" start="00:04:50.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""and if I type `M-x klf`""" start="00:04:51.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""it chooses one of them.""" start="00:04:56.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""And of course I can copy it to my notes,""" start="00:04:58.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""it's going to work, it's going to point""" start="00:05:01.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""to here... and so on.""" start="00:05:02.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""Well, the title of this presentation was""" start="00:05:05.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""&quot;Bidirectional links with eev&quot;... let me""" start="00:05:08.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""show what I mean by bi-directional""" start="00:05:11.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""hyperlinks, and how we can use this thing""" start="00:05:13.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""to create bidirectional hyperlinks""" start="00:05:15.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""very quickly.""" start="00:05:17.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""I will have to use a smaller font... let""" start="00:05:19.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""me open these two files here. This one at""" start="00:05:22.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""the left is a program in Haskell, and""" start="00:05:25.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""this one is a file with my notes on""" start="00:05:27.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""Haskell.""" start="00:05:30.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""How do I create a link from...""" start="00:05:31.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""to this file in Haskell""" start="00:05:35.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""to put it in this file here? I can put""" start="00:05:39.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""the cursor here, in any position""" start="00:05:42.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""after this anchor here, and type""" start="00:05:45.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""`M-x kla`...""" start="00:05:48.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""it copies this link here to the kill""" start="00:05:49.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""ring and then I can can go here and""" start="00:05:51.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""either insert it with C-y (yank), or""" start="00:05:54.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""insert it with `M-k kli`, that adds a""" start="00:05:59.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""comment prefix here.""" start="00:06:06.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""So this is a way to create a link from""" start="00:06:07.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""here to there in which every""" start="00:06:11.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""comment has to be given explicitly...""" start="00:06:15.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""but I also implemented a way to""" start="00:06:18.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""create the two links at the same time.""" start="00:06:21.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""I don't use it much, it's mostly for""" start="00:06:23.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""demos, because it's impressive, I wanted""" start="00:06:25.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""to show that in this presentation...""" start="00:06:27.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""Anyway, let me show it here. Note that""" start="00:06:29.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""that in this file here the point is""" start="00:06:33.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""here, in this file the point is here...""" start="00:06:36.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""My trick is going to create a link to""" start="00:06:40.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""this anchor and put it in this file, and""" start="00:06:43.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""it's going to create a link to this""" start="00:06:47.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""anchor and put it in this file...""" start="00:06:49.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""So, here it goes: `M-x kla2`... ta-da!""" start="00:06:52.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""it highlighted the true anchors for a""" start="00:06:57.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""second, and it created these things here""" start="00:07:01.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""and inserted them with the""" start="00:07:03.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""right prefixes, I mean, the right""" start="00:07:06.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""comment prefixes.""" start="00:07:09.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""And that's it!""" start="00:07:10.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""So... that's it. If you found this thing""" start="00:07:15.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""interesting just""" start="00:07:18.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""install a recent version of eev and run""" start="00:07:22.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""the tutorial, either with this thing here,""" start="00:07:25.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""`M-x find-kla-intro`, or by running""" start="00:07:28.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""this sexp, or open this file here in the""" start="00:07:30.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""eev directory, and follow the""" start="00:07:35.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""tutorials...""" start="00:07:37.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""most things that there are well""" start="00:07:39.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""documented, but the thing that I don't""" start="00:07:42.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""use much and that is mostly for demos,""" start="00:07:46.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""which is the the thing that creates""" start="00:07:47.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""bi-directional hyperlinks, is not yet""" start="00:07:50.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""well documented, but the rest is.""" start="00:07:52.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""So: that's it! Bye! Have fun! =)""" start="00:07:55.000" video="mainVideo-eev" id="subtitle"]]
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20eev%3A%20Bidirectional%20links%20with%20eev)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/eev-before.md b/2022/info/eev-before.md
new file mode 100644
index 00000000..556359de
--- /dev/null
+++ b/2022/info/eev-before.md
@@ -0,0 +1,18 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sat 2022-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="eev">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect stroke-width="3" x="619" y="75" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 8-min talk followed by IRC Q&A (<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-gen,emacsconf-dev">#emacsconf-dev</a>)
+Etherpad: <https://pad.emacsconf.org/2022-eev>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: Q&A finished, IRC and pad will be archived on this page
+
+
+
+
+<div class="vid"><video controls preload="none" id="eev-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-eev--bidirectional-links-with-eev--eduardo-ochs--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-eev--bidirectional-links-with-eev--eduardo-ochs--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-eev--bidirectional-links-with-eev--eduardo-ochs--main.webm">Download --main.webm (17MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-eev--bidirectional-links-with-eev--eduardo-ochs--main.opus">Download --main.opus (3.9MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-eev--bidirectional-links-with-eev--eduardo-ochs--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/hQUQSeECqpb3AMSqiViksa">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/eev-nav.md b/2022/info/eev-nav.md
new file mode 100644
index 00000000..cdf20e11
--- /dev/null
+++ b/2022/info/eev-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/health">Health data journaling and visualization with Org Mode and gnuplot</a>
+Next by track: <a href="/2022/talks/jupyter">Edit live Jupyter notebook cells with Emacs</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/eshell-after.md b/2022/info/eshell-after.md
new file mode 100644
index 00000000..3c6c1674
--- /dev/null
+++ b/2022/info/eshell-after.md
@@ -0,0 +1,253 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="eshell-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""I have 10 minutes to talk you into""" start="00:00:00.000" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""giving Eshell a second chance.""" start="00:00:05.000" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Have the right perspective and expectation,""" start="00:00:07.880" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and I think you’ll really enjoy it.""" start="00:00:10.120" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Just remember eshell is a shell,""" start="00:00:12.920" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""not a terminal emulator.""" start="00:00:15.680" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I use both Eshell and vterm.""" start="00:00:17.840" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I’m going to talk and type fast,""" start="00:00:20.280" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""as I have 10 reasons for you to try Eshell again.""" start="00:00:23.480" video="mainVideo-eshell" id="subtitle"]]
+[[!template new="1" text="""1. It’s an Emacs REPL.""" start="00:00:29.000" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I mean, check this out.""" start="00:00:32.600" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Let’s start up Eshell here.""" start="00:00:34.000" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Let’s just type a Lisp expression.""" start="00:00:37.000" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""It works.""" start="00:00:41.400" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""As a shell, the parens are kinda optional.""" start="00:00:43.920" video="mainVideo-eshell" id="subtitle"]]
+[[!template new="1" text="""2. It’s also a shell.""" start="00:00:48.600" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""While eshell may look like a shell, like Bash""" start="00:00:52.520" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""you should view it as a REPL""" start="00:00:56.480" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""with parenthesis-less s-expressions.""" start="00:00:58.560" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""This makes sense, because a shell command with options,""" start="00:01:02.400" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""like this ls command,""" start="00:01:05.560" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""looks like an s-expression.""" start="00:01:08.000" video="mainVideo-eshell" id="subtitle"]]
+[[!template new="1" text="""3. You can mix these two modes.""" start="00:01:10.120" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Shells can call subshells""" start="00:01:12.880" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""which return their output like a function call,""" start="00:01:14.960" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""like this Bash command.""" start="00:01:17.920" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""In this Eshell example,""" start="00:01:20.800" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I use the output of a text file""" start="00:01:22.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""as command line arguments to ripgrep.""" start="00:01:24.640" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Notice how I use braces""" start="00:01:27.960" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""to state that it is a call to an eshell expression.""" start="00:01:29.640" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""We can mix Lisp-expressions and Shell-expressions.""" start="00:01:34.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Allow me a contrived example.""" start="00:01:40.040" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Notice I use good ol' setq to create a variable.""" start="00:01:45.600" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Yes, those are global Emacs variables available everywhere.""" start="00:01:50.080" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""In Eshell, the wildcard actually creates a list.""" start="00:01:54.920" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""This variable assignment doesn’t work as you might expect,""" start="00:01:59.600" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""as setq in Eshell is still setq,""" start="00:02:04.480" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and it assigns variables in pairs.""" start="00:02:07.560" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""To make a list in Eshell, we use listify:""" start="00:02:10.320" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Without parens, Eshell is in “shell mode”,""" start="00:02:17.120" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""which means that words are strings,""" start="00:02:21.240" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and variables need to be prefixed with dollar signs.""" start="00:02:23.800" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""A command can have both Eshell and Lisp expressions.""" start="00:02:26.880" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""As you can see here,""" start="00:02:32.400" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I have a call to ripgrep,""" start="00:02:34.560" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""but part of it is an s-expression.""" start="00:02:37.120" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Remember the differences:""" start="00:02:40.320" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""With parens, eshell treats it as Lisp,""" start="00:02:42.240" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""like the last line in my example.""" start="00:02:46.160" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""With braces, eshell follows these shell-like rules:""" start="00:02:49.200" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""First, if it looks like a number, it's a number.""" start="00:02:53.920" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Otherwise, eshell converts it to a string""" start="00:02:57.160" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""(quotes, like a shell, groups words).""" start="00:02:59.440" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""What about this mix between functions and executables""" start="00:03:03.680" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""for the first word?""" start="00:03:07.520" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Functions that begin with eshell are called first.""" start="00:03:10.840" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Next in priority are executables on your $PATH,""" start="00:03:15.440" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""then matching Lisp functions.""" start="00:03:19.080" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""You can actually switch this order""" start="00:03:22.160" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""with the `eshell-prefer-lisp-functions` variable.""" start="00:03:23.941" video="mainVideo-eshell" id="subtitle"]]
+[[!template new="1" text="""4. Emacs is actually better than shell.""" start="00:03:27.560" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""If the following works, why would you call""" start="00:03:31.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""expr or bc or dc, or any of those other calculators?""" start="00:03:35.200" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""You can just call a Lisp expression.""" start="00:03:40.040" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Why call less or more when you could call view-file?""" start="00:03:43.640" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Here, I’ve aliased less to view-file.""" start="00:03:48.000" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Load it up, and it shows up in an Emacs mode.""" start="00:03:52.840" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Just like with less, if you hit q,""" start="00:03:57.560" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""you go back to your Eshell terminal.""" start="00:04:01.520" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I do have an improvement, though.""" start="00:04:05.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""The problem with view-file is""" start="00:04:08.440" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""it takes a single file as an argument.""" start="00:04:10.480" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""In a shell, we might want to view more than one.""" start="00:04:13.400" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""So let’s make a solution to that.""" start="00:04:15.720" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""This function will call the first function""" start="00:04:18.720" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""with the first argument,""" start="00:04:21.000" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and the second function with each of the rest.""" start="00:04:22.160" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""This allows me to make a version of less""" start="00:04:26.680" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""that calls view-file on the first [argument] given,""" start="00:04:29.560" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""but open in another window for each additional file.""" start="00:04:33.160" video="mainVideo-eshell" id="subtitle"]]
+[[!template new="1" text="""5. Better regular expressions.""" start="00:04:36.080" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Can’t remember regular expressions when calling""" start="00:04:41.240" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""grep or some other search function? Use the rx macro.""" start="00:04:44.800" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Here I call ripgrep again, but this time,""" start="00:04:48.640" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I’m using a Lisp expression calling the rx macro""" start="00:04:55.920" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""to look for UUIDs in the files in my current directory.""" start="00:05:00.680" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""But I have another improvement for this.""" start="00:05:04.720" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""While the rx macro is freaking cool for Emacs Lisp,""" start="00:05:08.160" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""it doesn’t always translate to regular expressions""" start="00:05:13.480" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""accepted by most commands.""" start="00:05:15.920" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""The (I have no idea how to pronounce this) pcre2el project""" start="00:05:20.080" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""can convert from a Lisp regular expression""" start="00:05:25.200" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""to Perl-compatible regular expressions (PCRE)""" start="00:05:28.520" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""acceptable by most search commands.""" start="00:05:31.360" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I’ve created a new macro here, prx,""" start="00:05:33.520" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""that translates the output of the rx macro.""" start="00:05:37.880" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""This allows me to type something much more readable,""" start="00:05:41.320" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and probably easier to remember.""" start="00:05:46.520" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Certainly easier than this freaking regular expression.""" start="00:05:48.520" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I’ve got an even better improvement.""" start="00:05:54.680" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""The rx macro with regular expression snippets""" start="00:05:59.440" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""can be assigned to key words""" start="00:06:03.560" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""that I can then take advantage of.""" start="00:06:05.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Now our command would be much simpler to type.""" start="00:06:08.680" video="mainVideo-eshell" id="subtitle"]]
+[[!template new="1" text="""6. Loops are better with predicates.""" start="00:06:13.480" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Let’s say you want to remove the execute bit""" start="00:06:16.160" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""from files that have it.""" start="00:06:18.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""In a shell like bash, you need both a for loop and an if,""" start="00:06:20.480" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""as you can see in this example.""" start="00:06:24.400" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""With eshell, use a predicate to combine into a simple loop.""" start="00:06:26.600" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""The paren x after a file glob""" start="00:06:31.560" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""filters for only files marked as executable.""" start="00:06:34.360" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Now here is another improvement.""" start="00:06:36.880" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Since we often type loops to execute on one command,""" start="00:06:43.560" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""what about creating a function""" start="00:06:47.960" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""that can do this all in one go?""" start="00:06:49.520" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""This do function splits the arguments on that double colon,""" start="00:06:51.000" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""where the left side is a single statement to run,""" start="00:06:57.600" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and the right side is a list of files.""" start="00:07:00.080" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I have to append and flatten it""" start="00:07:02.600" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""in order for it to work.""" start="00:07:05.840" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""It loops through each file,""" start="00:07:07.640" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""creating an eshell command with the file appended.""" start="00:07:09.400" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""With this, I can remove the execute bit""" start="00:07:12.080" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""on all CSV files that have it.""" start="00:07:15.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I see that my example wasn’t too good, as most commands""" start="00:07:20.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""like chmod accept multiple files, but you get the idea.""" start="00:07:24.320" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""In my final, larger form on my website,""" start="00:07:29.040" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I don’t assume the command expression accepts""" start="00:07:33.160" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""a file as a final argument,""" start="00:07:35.280" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""as I can also replace underscores with the filename.""" start="00:07:36.720" video="mainVideo-eshell" id="subtitle"]]
+[[!template new="1" text="""7. Output of last command.""" start="00:07:39.640" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Most shells have a special variable""" start="00:07:45.400" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""like $? for the exit code of the last command.""" start="00:07:48.800" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""While reading through the source code,""" start="00:07:52.840" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I noticed that the $$ refers to""" start="00:07:55.920" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""the output of the last command.""" start="00:07:58.800" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""This seems pretty cool.""" start="00:08:00.600" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""However, Eshell returns true or nil""" start="00:08:05.800" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""when running external commands,""" start="00:08:10.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""so accessing the output from a call to ls""" start="00:08:12.720" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""doesn’t work as expected.""" start="00:08:15.880" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""But this is Emacs.""" start="00:08:19.480" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""We can fix that.""" start="00:08:21.120" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""After running any command, eshell sets these four variables.""" start="00:08:23.160" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I can hook a function call after every Eshell command.""" start="00:08:28.120" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Using buffer-substring,""" start="00:08:33.520" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I store the output into a global variable,""" start="00:08:36.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and extend Eshell’s special variables list.""" start="00:08:39.280" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""In my Emacs configuration,""" start="00:08:43.600" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I turned this variable into a ring,""" start="00:08:46.520" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""so while $$ works,""" start="00:08:48.480" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""so does array sub-scripting on that variable.""" start="00:08:51.440" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""This allows me to run a command""" start="00:08:54.400" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and use the output from that command more than once.""" start="00:08:58.400" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""The code for this is a bit longer,""" start="00:09:02.280" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""so you’ll need to see my Emacs configuration for details.""" start="00:09:05.280" video="mainVideo-eshell" id="subtitle"]]
+[[!template new="1" text="""8. Redirection back to Emacs.""" start="00:09:08.520" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Output of any command""" start="00:09:13.440" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""can go to kill-ring (or the clipboard).""" start="00:09:14.880" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Think of the implications.""" start="00:09:18.520" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""You don’t have to go into text selection mode.""" start="00:09:21.080" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Just grab the output.""" start="00:09:23.840" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""In fact, with our $$ improvement,""" start="00:09:26.240" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""we can always copy the output from the last command""" start="00:09:30.280" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""to the clipboard.""" start="00:09:33.240" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Better yet, let’s write the output""" start="00:09:34.080" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""to our engineering notebook.""" start="00:09:38.000" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Here’s my idea.""" start="00:09:39.400" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""First, create a capture template that takes a string,""" start="00:09:41.680" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""or if called interactively, the region,""" start="00:09:46.080" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and that does an immediate-finish after inserting""" start="00:09:48.200" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""that string to the default notes file.""" start="00:09:51.880" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Next, create a wrapper function""" start="00:09:53.880" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""to call org-capture-string to run that template.""" start="00:09:57.680" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Finally, we add our new function to eshell-virtual-targets.""" start="00:10:01.560" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Let’s see this in action.""" start="00:10:07.640" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I have a CSV file of user information.""" start="00:10:08.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I can use grep and cut to extract some of that""" start="00:10:15.708" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and write it out to this month’s engineering notebook.""" start="00:10:19.720" video="mainVideo-eshell" id="subtitle"]]
+[[!template new="1" text="""9. Using Emacs buffers.""" start="00:10:26.880" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Why leave the results of eshell commands""" start="00:10:35.280" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""in the *eshell* buffer?""" start="00:10:39.160" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Send the output into a buffer where you can use it.""" start="00:10:40.280" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Here’s a call to ripgrep""" start="00:10:44.120" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""that searches for lines with email addresses""" start="00:10:48.000" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""using a complicated regular expression""" start="00:10:50.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""that I added to my prx macro.""" start="00:10:53.520" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""When I switch to this almost-grep buffer,""" start="00:10:56.080" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I can turn on grep-mode.""" start="00:11:01.080" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Now I can jump around as if I just called grep directly.""" start="00:11:03.320" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Perhaps I’m proficient with my prx macro""" start="00:11:09.040" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""to filter out entries,""" start="00:11:14.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""but not good with shell commands""" start="00:11:16.640" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""that I can use in pipes to extract just one…""" start="00:11:19.280" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""the address column, for instance?""" start="00:11:24.000" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Let’s just extract it,""" start="00:11:26.040" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""send it to a buffer called email-list,""" start="00:11:28.960" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and now I can use Emacs commands that I know and love""" start="00:11:33.280" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""to edit the data directly.""" start="00:11:38.480" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""We currently have an over-sight""" start="00:11:39.800" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""that the Eshell’s built-in cat command""" start="00:11:55.800" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""doesn’t pipe buffer contents as standard in.""" start="00:11:58.840" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""So I created a bcat, a buffer cat, function to do this.""" start="00:12:02.720" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""So this command works""" start="00:12:07.920" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""to grab my email addresses I just extracted""" start="00:12:09.880" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and send them to another program.""" start="00:12:14.600" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""If you’re interested, I have a more elaborate""" start="00:12:16.320" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and yet simpler workflow surrounding sending data""" start="00:12:20.960" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""back and forth from Eshell to Emacs buffers.""" start="00:12:25.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template new="1" text="""10. Did I mention that you can cd to remote systems?""" start="00:12:28.400" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""This command uses SSH to jump to my host, goblin,""" start="00:12:35.680" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""start a root session, and jump to the etc directory.""" start="00:12:39.880" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Remember that Tramp can be finicky""" start="00:12:44.040" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""if you start blinging your remote hosts with oh-my-zshell,""" start="00:12:47.720" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and funky prompts and things like that,""" start="00:12:52.840" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""so your mileage may vary.""" start="00:12:57.791" video="mainVideo-eshell" id="subtitle"]]
+[[!template new="1" text="""In summary: Use eshell if you want""" start="00:12:59.360" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""a quick way to run commands and Emacs functions as a REPL,""" start="00:13:03.960" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""or to run an OS program but process the output with Emacs.""" start="00:13:07.320" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Keep in mind that Eshell has two types of subshells,""" start="00:13:11.480" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and you can mix and match during a command call.""" start="00:13:15.920" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""The rx macro is really cool.""" start="00:13:19.600" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Eshell loops are better with filters and predicates …""" start="00:13:22.640" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""if you can remember them.""" start="00:13:26.600" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Take advantage of Emacs buffers""" start="00:13:28.240" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""to really enhance your shell experience.""" start="00:13:30.960" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""You’ve now seen that just like Emacs,""" start="00:13:32.880" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I’ve crafted Eshell to be my own shell creation,""" start="00:13:36.040" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""tailored to my workflow.""" start="00:13:39.520" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""So, steal my spells, cast your own magic,""" start="00:13:41.040" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""but feel free to share your incantations back to me.""" start="00:13:44.800" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I’ve gone over my time allotment, so we’ll have to""" start="00:13:48.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""continue this discussion on the intertubes.""" start="00:13:51.360" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Why yes, I have joined the birdless diaspora,""" start="00:13:53.680" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""so toot me over there.""" start="00:13:57.160" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Thanks.""" start="00:13:59.200" video="mainVideo-eshell" id="subtitle"]]
+
+
+
+Captioner: howard
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20eshell%3A%20Top%2010%20reasons%20why%20you%20should%20be%20using%20Eshell)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/eshell-before.md b/2022/info/eshell-before.md
new file mode 100644
index 00000000..1c57c21e
--- /dev/null
+++ b/2022/info/eshell-before.md
@@ -0,0 +1,52 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Howard Abrams shows how eshell combines the best of Emacs Lisp and shells. Afterwards, he will handle questions via BigBlueButton.
+
+
+The following image shows where the talk is in the schedule for Sun 2022-12-04. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="eshell">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(126,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect x="378" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(399,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect stroke-width="3" x="439" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 15-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-eshell>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: TO_INDEX_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-04T18:40:00Z" end="2022-12-04T18:55:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~1:40 PM - 1:55 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 4 2022, ~12:40 PM - 12:55 PM CST (US/Central)<br />Sunday, Dec 4 2022, ~11:40 AM - 11:55 AM MST (US/Mountain)<br />Sunday, Dec 4 2022, ~10:40 AM - 10:55 AM PST (US/Pacific)<br />Sunday, Dec 4 2022, ~6:40 PM - 6:55 PM UTC <br />Sunday, Dec 4 2022, ~7:40 PM - 7:55 PM CET (Europe/Paris)<br />Sunday, Dec 4 2022, ~8:40 PM - 8:55 PM EET (Europe/Athens)<br />Monday, Dec 5 2022, ~12:10 AM - 12:25 AM IST (Asia/Kolkata)<br />Monday, Dec 5 2022, ~2:40 AM - 2:55 AM +08 (Asia/Singapore)<br />Monday, Dec 5 2022, ~3:40 AM - 3:55 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/dev/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="eshell-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="eshell-mainVideo" data="""
+00:00.000 Introduction
+00:29.000 1. It’s an Emacs REPL
+00:48.600 2. It’s also a shell
+01:10.120 3. You can mix these two modes
+03:27.560 4. Emacs is better than shell
+04:36.080 5. Better regular expressions
+06:13.480 6. Loops are better with predicates
+07:39.640 7. Output of last command
+09:08.520 8. Redirection back to Emacs
+10:26.880 9. Using Emacs buffers
+12:28.400 10. cd to remote systems
+12:59.360 Summary
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main.webm">Download --main.webm (45MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main.opus">Download --main.opus (7.2MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/ndrA731VbY2U6SP8onw3yw">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="eshell-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="eshell-qanda" data="""
+00:31.280 Do you fall back to vterm only when needing terminal emulation?
+01:56.320 Have you thought about adding the Eshell manual?
+02:43.200 Can Eshell be used from Elisp?
+03:33.880 How does that interplay with literate devops?
+04:42.880 Do you have a strategy for getting around Eshell's lack of support for input redirection?
+07:35.040 Do you have a preferred method for getting argument completion for shell commands?
+09:14.320 Similarly, is it possible to get Eldoc-based completion for Elisp calls in Eshell?
+10:33.720 Integrating functions into Emacs core
+12:51.760 Are you the maintainer of Eshell now? No, just an interested bystander.
+18:13.880 Do you ever fall back to terminals/shells outside Emacs, and if so, in what circumstances?
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="eshell-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--answers.webm">Download --answers.webm (47MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--answers.opus">Download --answers.opus (8.4MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/eshell-nav.md b/2022/info/eshell-nav.md
new file mode 100644
index 00000000..0852d97c
--- /dev/null
+++ b/2022/info/eshell-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/detached">Getting detached from Emacs</a>
+Next by track: <a href="/2022/talks/workflows">Org workflows for developers</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/fanfare-after.md b/2022/info/fanfare-after.md
new file mode 100644
index 00000000..f393b689
--- /dev/null
+++ b/2022/info/fanfare-after.md
@@ -0,0 +1,273 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="fanfare-mainVideo-transcript"></a>
+# Transcript
+
+[[!template text="""Hello, my name is John Cummings, and I'm here today""" start="00:00:00.000" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""to play a Fanfare for the Common Emacs User.""" start="00:00:02.206" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""By &quot;common&quot;, I mean the types of Emacs usage""" start="00:00:04.852" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and comfort that are simpler, more mundane,""" start="00:00:07.266" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and yes, even imperfect,""" start="00:00:09.689" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that some may identify with more than others,""" start="00:00:11.075" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""or more at certain times.""" start="00:00:13.037" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""It's hard to use Emacs and not be aware of""" start="00:00:14.651" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""the impressive and interesting accomplishments""" start="00:00:16.914" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""of its community. And here at emacsconf""" start="00:00:18.703" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we also get pumped up about those things,""" start="00:00:20.756" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""amplified by the energy of the other attendees.""" start="00:00:22.426" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""But this energy fades as we return focus""" start="00:00:25.567" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""to our day-to-day work. And in these circumstances,""" start="00:00:27.730" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we may unfairly judge our own Emacs usage""" start="00:00:30.571" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""against the community highlights.""" start="00:00:32.993" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""So I want to identify and celebrate the ways""" start="00:00:34.997" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that we common Emacs users use it,""" start="00:00:37.712" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""the reasons why it's a good fit for those ways,""" start="00:00:39.932" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and some ways we could take advantage of that.""" start="00:00:42.290" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""What is Emacs to us common users? Well, we're consumers.""" start="00:00:45.430" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We use whatever was available - whatever our OS gave us,""" start="00:00:48.528" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""or whatever we found when we searched the web.""" start="00:00:51.493" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We're not even necessarily aware""" start="00:00:53.990" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""of what the latest version is, or what changes it has.""" start="00:00:55.711" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We may not ever think about upgrading.""" start="00:00:58.091" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We have what we have, and we use what we have.""" start="00:01:00.138" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""But I think, with this simple act, many of us""" start="00:01:02.742" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""achieve a very significant Emacs milestone:""" start="00:01:05.149" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we've committed to having it in our toolkit""" start="00:01:07.997" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and our skillset. We'll probably install it""" start="00:01:10.278" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""on every system that we can, eventually.""" start="00:01:12.625" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We know it has a use for us today,""" start="00:01:14.804" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and that it will solve some problems""" start="00:01:16.827" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that we don't even know about yet.""" start="00:01:18.120" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""It will not just be one tool; it will be many.""" start="00:01:19.588" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And we know that it will be more than just useful;""" start="00:01:22.215" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""it will also be challenging, puzzling, and frustrating.""" start="00:01:24.368" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""But we still keep it""" start="00:01:27.345" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""as a permanent part of our toolkit,""" start="00:01:28.630" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and we should be proud of that.""" start="00:01:29.873" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And regardless of what exactly we've installed,""" start="00:01:31.800" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""it was a good choice.""" start="00:01:34.136" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""It will almost certainly do what we need it to do.""" start="00:01:35.337" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""Old versions are not inert dead-ends;""" start="00:01:37.556" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""they're still functional tools.""" start="00:01:39.766" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And that's a key aspect of Emacs - it's a tool""" start="00:01:41.134" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""to get our work done. That sounds obvious,""" start="00:01:43.979" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""but it's easy to get distracted by the great things""" start="00:01:46.398" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that it can accomplish, and think""" start="00:01:48.483" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that it requires the same accomplishments from us.""" start="00:01:49.985" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""But it requires no advanced state of mind,""" start="00:01:52.571" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""no level of expertise to start using it,""" start="00:01:54.656" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""or use it correctly.""" start="00:01:56.867" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""It just requires that we have it, and use it.""" start="00:01:58.043" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And with a little effort, we can get results early on,""" start="00:02:00.754" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and those results are not just preparations""" start="00:02:03.665" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""for better things to come later;""" start="00:02:06.084" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""they have value for us today,""" start="00:02:07.586" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and we're already using it right.""" start="00:02:08.712" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And when we do need to tweak whatever we installed,""" start="00:02:12.049" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we might again be consumers, finding some snippets""" start="00:02:14.551" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""out on the web, pasting them in, and moving on.""" start="00:02:16.803" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We don't necessarily understand what we did,""" start="00:02:19.581" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""but we got some value out of it. Over time,""" start="00:02:21.933" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we may participate more, take it day by day,""" start="00:02:24.102" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and one day we may find that our config""" start="00:02:26.114" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""has become a disorganized pile.""" start="00:02:28.357" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""Maybe it's mixed haphazardly""" start="00:02:30.902" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""with some output from the &quot;customize&quot; feature,""" start="00:02:32.027" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and eventually we start to feel""" start="00:02:34.029" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""like it's a shameful mess. It's hard to manage;""" start="00:02:35.697" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we may think of it as append-only or read-only.""" start="00:02:37.991" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We can't deny there are problems here,""" start="00:02:40.960" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""but it happened for a good reason. It was quick,""" start="00:02:42.829" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""easy, and effective for us""" start="00:02:45.582" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""to enhance our experience this way, and then move on.""" start="00:02:47.250" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We were using Emacs as it was designed here.""" start="00:02:50.062" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""It just wasn't sustainable indefinitely.""" start="00:02:52.172" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We may continue doing things this way""" start="00:02:54.775" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""even though we realize it's not a good idea.""" start="00:02:56.627" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""But I think there are some ways""" start="00:02:59.596" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""to mitigate the downsides,""" start="00:03:00.472" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that let us embrace our tendencies,""" start="00:03:01.682" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and continue to benefit from them.""" start="00:03:03.150" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""If we allow and encourage ourselves""" start="00:03:05.444" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""to capture our thoughts and circumstances""" start="00:03:06.971" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""along with the work that we do on our config,""" start="00:03:10.065" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and do so without judgment, or the responsibility""" start="00:03:11.700" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""to &quot;do it right&quot;, we give ourselves the context""" start="00:03:14.386" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""to understand and manage it later.""" start="00:03:17.047" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""This should be done however works for us,""" start="00:03:19.549" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""whether it's rambling inline comments,""" start="00:03:21.618" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""keeping a separate journal or notes,""" start="00:03:23.286" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""or even a more advanced literate programming technique,""" start="00:03:25.247" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""if we want to make an investment like that.""" start="00:03:27.975" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""Or putting our config into source control,""" start="00:03:30.485" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""even if it's nothing more than a simple,""" start="00:03:32.629" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""daily record of changes along with our contextual notes,""" start="00:03:34.214" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""will make things a lot easier for our future selves.""" start="00:03:37.050" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""But regardless of how well, or sloppy, we manage it,""" start="00:03:41.221" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we should also realize that our messy config""" start="00:03:43.974" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""is a personal artifact with inherent value,""" start="00:03:46.184" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""even if it's amusement value, or sentimental value.""" start="00:03:48.129" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""Emacs is not only a tool to get our work done,""" start="00:03:51.565" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""it can also be a very personalized experience.""" start="00:03:54.401" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And if so, then our Emacs config""" start="00:03:56.978" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""is our experience in written form.""" start="00:03:59.366" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""You can see it as a log of your journey through Emacs,""" start="00:04:02.110" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and the mark that you made on it along the way,""" start="00:04:04.303" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""mistakes and all.""" start="00:04:06.663" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We may see our config as a record of failure,""" start="00:04:08.506" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""of things that we did wrong, the things that we repeated,""" start="00:04:10.676" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""or never finished. But it's important to realize""" start="00:04:12.886" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that a record of failure is a record of persistence.""" start="00:04:15.672" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""In that sense, it's kind of like our genome:""" start="00:04:18.592" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""a set of unique, disorganized,""" start="00:04:20.761" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""somewhat accidental properties, that, on the whole,""" start="00:04:23.197" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""makes us fit to survive in our Emacs usage.""" start="00:04:26.308" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""It's also interesting to think of it""" start="00:04:29.394" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""as an archaeological record. Where we can sometimes""" start="00:04:31.021" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""get some insight into our &quot;ancient times&quot;.""" start="00:04:33.482" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""Just being able to see what we were doing years ago""" start="00:04:35.942" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""is interesting -- to see how things changed,""" start="00:04:38.570" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and hopefully grew over time. And sometimes""" start="00:04:40.906" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we find some buried treasures that we forgot were there.""" start="00:04:43.158" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And of course it's interesting to realize""" start="00:04:45.845" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that when we start Emacs, this pile of config""" start="00:04:48.172" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""also executes in roughly the same order""" start="00:04:50.874" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that we created it in. Our journey through Emacs""" start="00:04:52.959" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""happens again and again every time we start it up.""" start="00:04:56.438" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And it's ready for us to keep working on it.""" start="00:04:59.482" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And when it comes to packages,""" start="00:05:04.095" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we may not make extensive use of them, if any at all.""" start="00:05:05.305" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We probably have different reasons for this.""" start="00:05:09.050" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We may feel like we need to reach""" start="00:05:10.602" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""some level of mastery before we start using them.""" start="00:05:12.437" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We may not have the mental room to think about packages,""" start="00:05:14.815" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""or may not want to take on the administrative burden""" start="00:05:17.943" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""required to keep track of which packages we have,""" start="00:05:20.362" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""the dependencies and versions, and their compatibility.""" start="00:05:22.989" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""Some of us may just be uncomfortable""" start="00:05:25.834" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""letting new third-party code run in our environments.""" start="00:05:27.694" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""It could also just be the case""" start="00:05:30.664" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that our needs haven't driven us to need a package yet.""" start="00:05:31.832" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We're already doing what we need,""" start="00:05:35.377" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and doing it efficiently enough.""" start="00:05:36.871" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And here we find more alignment""" start="00:05:39.089" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""between Emacs the tool, and our common mindset:""" start="00:05:40.215" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""They work well when they stay needs-driven.""" start="00:05:42.592" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We're not obligated to use""" start="00:05:44.977" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""as much of Emacs' functionality as we can,""" start="00:05:46.646" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""or every package that we're aware of""" start="00:05:48.949" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""if we don't have a need to.""" start="00:05:51.159" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And in fact, that's a great way to stay overwhelmed.""" start="00:05:52.510" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""But if we stay aware of our needs, and then find""" start="00:05:54.971" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that there is a package that might address them,""" start="00:05:57.700" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""then we can deal with it. And a need to explore,""" start="00:05:59.902" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and a need to be curious, is a valid need.""" start="00:06:02.655" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And if we do need extra confidence for that exploration,""" start="00:06:05.823" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""then the things we talked about before,""" start="00:06:09.327" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""like keeping good notes of our experiences and needs,""" start="00:06:10.912" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""or version controlling our config,""" start="00:06:13.633" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""will help us keep that connection to our needs,""" start="00:06:15.541" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that gives us the freedom to experiment""" start="00:06:18.586" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""in the wide world of packages.""" start="00:06:20.922" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And if we really do just need what's built in to Emacs,""" start="00:06:23.008" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""the vanilla out-of-the-box experience,""" start="00:06:27.262" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""then we can also be proud that we're making use""" start="00:06:29.514" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""of all the work that went into that experience,""" start="00:06:32.183" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""because a lot did.""" start="00:06:33.560" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And when we report any problems that we find,""" start="00:06:35.021" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we're also working to keep that experience""" start="00:06:37.256" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""smooth for future users.""" start="00:06:39.190" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""Of course, some of us may find this intimidating,""" start="00:06:41.192" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and if so, feel free to reach out to me,""" start="00:06:43.987" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and probably anyone in the community,""" start="00:06:46.531" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that can help you navigate that process.""" start="00:06:48.767" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""So how do we use our Emacs installation?""" start="00:06:56.249" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We often use it very simply: we get simple results""" start="00:06:59.461" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""in simple ways. Often we do things the same simple way""" start="00:07:01.838" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""for a very long time, and this is of course great,""" start="00:07:06.068" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""since we're getting done what we need to get done.""" start="00:07:08.720" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""There's no result or method too simple for Emacs.""" start="00:07:10.513" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And we're not oblivious to the alternative.""" start="00:07:14.392" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""Many of us are at least aware that there are ways""" start="00:07:16.853" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we could iterate on what we do,""" start="00:07:19.356" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""or some polish that we could apply,""" start="00:07:20.649" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and we may even quite enjoy""" start="00:07:22.734" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""reading about more advanced Emacs possibilities,""" start="00:07:24.569" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and thinking about how they could apply""" start="00:07:27.113" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""to our own workflow, but at the end of the day,""" start="00:07:28.215" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we still keep our own usage the same, and basic.""" start="00:07:30.951" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And this is another fundamental aspect of using Emacs.""" start="00:07:33.703" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""You can work simply and successfully,""" start="00:07:36.998" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""but you'll always be conscious of the possibility""" start="00:07:38.959" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""for far more complexity. And many of us""" start="00:07:40.502" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""do try to iterate on our ways, and sometimes succeed,""" start="00:07:43.213" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""but often we run into trouble and we stop or defer.""" start="00:07:46.424" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""A lot of times we're intimidated by the scope of things -""" start="00:07:49.177" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we're not sure how to make measurable progress.""" start="00:07:51.304" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We may find that the first ways we learned""" start="00:07:53.848" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""are so ingrained in us, that learning even a second way""" start="00:07:56.101" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""is many times harder.""" start="00:07:59.312" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And sometimes we do make sudden progress""" start="00:08:01.147" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""after years of sameness,""" start="00:08:03.191" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and wonder why we waited so long.""" start="00:08:04.275" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And these are universal pains""" start="00:08:06.260" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that everyone has to feel who wants to improve.""" start="00:08:07.737" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""But this is again where we can benefit""" start="00:08:11.324" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""from letting our needs drive us.""" start="00:08:13.451" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""Sometimes they'll tell us that it's OK""" start="00:08:14.661" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""keeping things the way they are, and sometimes""" start="00:08:16.538" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""they'll tell us that it's good to keep pushing,""" start="00:08:18.806" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""because there's a reason for it,""" start="00:08:20.491" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and we'll be glad that we did.""" start="00:08:21.767" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And what are the ways that we do learn,""" start="00:08:25.077" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and grow, and create within Emacs? One constant""" start="00:08:27.507" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""is that we forget a lot. We learn something""" start="00:08:30.635" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and then remember that we already learned""" start="00:08:33.596" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and forgot it once before. Sometimes we just hope""" start="00:08:35.682" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""to learn more than we forget.""" start="00:08:38.309" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And staying driven by our needs can also help here,""" start="00:08:39.769" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""because it's easier to learn something""" start="00:08:41.772" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""when we have a reason to, and an application for it.""" start="00:08:43.499" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""In Emacs, it can be tempting to do this backwards,""" start="00:08:46.317" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and want to learn all there is about Emacs first,""" start="00:08:49.071" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and then apply it. But again that's a surefire way""" start="00:08:51.782" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""to stay overwhelmed.""" start="00:08:53.992" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And when we code and build things, we tend to create many small, quick things,""" start="00:08:55.935" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""but never really integrate them deeply""" start="00:08:59.640" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""into our environment or workflow.""" start="00:09:01.600" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We leave things half-finished once we get bored,""" start="00:09:03.661" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""or find ourselves in over our head.""" start="00:09:05.462" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And this is natural, because we're curious and creative,""" start="00:09:07.088" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and Emacs makes it relatively easy, and actually fun,""" start="00:09:09.883" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""to experiment and get these quick results.""" start="00:09:12.677" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""But it's less clear how to see them through,""" start="00:09:14.845" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and inherently less fun to do the follow-up gruntwork.""" start="00:09:17.065" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""But if we embrace our ways here,""" start="00:09:20.310" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and structure our workflow to support them,""" start="00:09:21.970" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we might find ourselves more satisfied.""" start="00:09:23.897" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""So let's give ourselves permission, and a logical place""" start="00:09:26.215" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""to put all our fun little quick experiments,""" start="00:09:28.926" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""without having to worry about integrating""" start="00:09:31.571" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""or polishing them, unless we find a need to later.""" start="00:09:33.423" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""Let's use source control wisely to give ourselves""" start="00:09:35.700" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""a place to experiment, and a place for stability.""" start="00:09:38.505" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""Let's stay needs-driven so that we know""" start="00:09:41.447" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""what we really do need to follow up on,""" start="00:09:42.968" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and what's OK to drop. And let's remember""" start="00:09:46.186" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that there is someone who will always appreciate""" start="00:09:48.963" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""any notes about our thought process we can take,""" start="00:09:50.965" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""no matter how rough or rambling they are:""" start="00:09:53.635" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""our future selves.""" start="00:09:55.845" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And so I hope that some people can identify with""" start="00:09:58.788" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""at least some of what I've shared today.""" start="00:10:01.376" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And I hope that we realize that,""" start="00:10:02.927" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""no matter how we see ourselves as Emacs users,""" start="00:10:05.021" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and no matter what we see other people building,""" start="00:10:06.964" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we're proud of the fact that we have built""" start="00:10:09.233" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""an experience that fits us. Thank you to everyone.""" start="00:10:11.569" video="mainVideo-fanfare" id="subtitle"]]
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20fanfare%3A%20Fanfare%20for%20the%20Common%20Emacs%20User)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/fanfare-before.md b/2022/info/fanfare-before.md
new file mode 100644
index 00000000..de244b57
--- /dev/null
+++ b/2022/info/fanfare-before.md
@@ -0,0 +1,57 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sun 2022-12-04. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="fanfare">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(126,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect stroke-width="3" x="698" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect x="378" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(399,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 11-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-fanfare>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: TO_INDEX_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-04T21:25:00Z" end="2022-12-04T21:35:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~4:25 PM - 4:35 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 4 2022, ~3:25 PM - 3:35 PM CST (US/Central)<br />Sunday, Dec 4 2022, ~2:25 PM - 2:35 PM MST (US/Mountain)<br />Sunday, Dec 4 2022, ~1:25 PM - 1:35 PM PST (US/Pacific)<br />Sunday, Dec 4 2022, ~9:25 PM - 9:35 PM UTC <br />Sunday, Dec 4 2022, ~10:25 PM - 10:35 PM CET (Europe/Paris)<br />Sunday, Dec 4 2022, ~11:25 PM - 11:35 PM EET (Europe/Athens)<br />Monday, Dec 5 2022, ~2:55 AM - 3:05 AM IST (Asia/Kolkata)<br />Monday, Dec 5 2022, ~5:25 AM - 5:35 AM +08 (Asia/Singapore)<br />Monday, Dec 5 2022, ~6:25 AM - 6:35 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/gen/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="fanfare-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--main.webm">Download --main.webm (25MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--main.opus">Download --main.opus (4.4MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/3ikPgKEnX1jVUqnxZrMuHs">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="fanfare-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="fanfare-qanda" data="""
+03:26.480 How would you suggest Emacs developers, including package developers, interface with non-developer users and get their insights to help in shaping future Emacs functionality?
+04:38.480 Is the Emacs community getting smaller?
+08:22.720 Do you think using one of the starter packages affects the learning process you mentioned?
+10:41.040 Barrier to getting regular users on board
+15:26.280 Changing your habits
+19:28.240 Tip of the day, Emacs help discovery
+21:47.020 Menus
+32:18.040 In terms of your Emacs, how far down do you go? (Lisp functions, primitives, C)
+43:52.400 Have we thought about how to use touchscreens?
+47:39.560 Have you ever seen VisiData?
+53:48.880 Low-code environments
+59:32.200 Microsoft
+01:04:53.840 Hyperbole and Org
+01:12:07.720 EmacsConf behind the scenes
+01:21:00.680 Theming
+01:22:42.080 HyControl
+01:26:25.880 Emacspeak
+01:31:21.040 Recording
+01:38:22.520 Losing and rediscovering knowledge
+01:44:11.480 Emacs as a shared community knowledge base
+01:53:46.560 Philosophy
+02:03:49.800 Narrowing
+02:05:40.800 First time on a new system
+02:07:43.800 Bootstrapping
+02:10:50.760 Richard Stallman
+02:14:24.880 Other developers
+02:15:54.880 Emacs and Org development
+02:21:41.000 Closures, Lisp
+02:42:12.480 Clog
+02:54:23.960 Domain-specific languages, collaboration
+03:02:39.280 Condensing things into a 10-minute talk
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="fanfare-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--answers.webm">Download --answers.webm (306MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--answers.opus">Download --answers.opus (62MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/fanfare-nav.md b/2022/info/fanfare-nav.md
new file mode 100644
index 00000000..6617b751
--- /dev/null
+++ b/2022/info/fanfare-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/devel">Emacs development updates</a>
+Next by track: <a href="/2022/talks/python">Short hyperlinks to Python docs</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/grail-after.md b/2022/info/grail-after.md
new file mode 100644
index 00000000..98d5a049
--- /dev/null
+++ b/2022/info/grail-after.md
@@ -0,0 +1,645 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="grail-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Thank you for joining me today. I'm Sameer Pradhan""" start="00:00:00.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""from the Linguistic Data Consortium""" start="00:00:05.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""at the University of Pennsylvania""" start="00:00:07.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and founder of cemantix.org .""" start="00:00:10.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Today we'll be addressing research""" start="00:00:14.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""in computational linguistics,""" start="00:00:16.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""also known as natural language processing""" start="00:00:18.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""a sub area of artificial intelligence""" start="00:00:22.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""with a focus on modeling and predicting""" start="00:00:24.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""complex linguistic structures from various signals.""" start="00:00:27.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""The work we present is limited to text and speech signals.""" start="00:00:31.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""but it can be extended to other signals.""" start="00:00:35.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""We propose an architecture,""" start="00:00:38.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and we call it GRAIL, which allows""" start="00:00:40.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the representation and aggregation""" start="00:00:42.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of such rich structures in a systematic fashion.""" start="00:00:44.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""I'll demonstrate a proof of concept""" start="00:00:50.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""for representing and manipulating data and annotations""" start="00:00:52.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""for the specific purpose of building""" start="00:00:56.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""machine learning models that simulate understanding.""" start="00:00:58.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""These technologies have the potential for impact""" start="00:01:02.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""in almost every conceivable field""" start="00:01:05.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that generates and uses data.""" start="00:01:09.120" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""We process human language""" start="00:01:13.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""when our brains receive and assimilate""" start="00:01:15.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""various signals which are then manipulated""" start="00:01:16.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and interpreted within a syntactic structure.""" start="00:01:20.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""it's a complex process that I have simplified here""" start="00:01:23.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""for the purpose of comparison to machine learning.""" start="00:01:27.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Recent machine learning models tend to require""" start="00:01:30.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""a large amount of raw, naturally occurring data""" start="00:01:33.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and a varying amount of manually enriched data,""" start="00:01:37.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""commonly known as &quot;annotations&quot;.""" start="00:01:40.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Owing to the complex and numerous nature""" start="00:01:43.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of linguistic phenomena, we have most often used""" start="00:01:45.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""a divide and conquer approach.""" start="00:01:49.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""The strength of this approach is that it allows us""" start="00:01:53.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to focus on a single, or perhaps a few related""" start="00:01:55.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""linguistic phenomena.""" start="00:01:58.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""The weaknesses are the universe of these phenomena""" start="00:02:00.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""keep expanding, as language itself""" start="00:02:03.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""evolves and changes over time,""" start="00:02:07.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and second, this approach requires an additional task""" start="00:02:09.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of aggregating the interpretations,""" start="00:02:13.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""creating more opportunities for computer error.""" start="00:02:14.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Our challenge, then, is to find the sweet spot""" start="00:02:18.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that allows us to encode complex information""" start="00:02:21.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""without the use of manual annotation,""" start="00:02:25.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""or without the additional task of aggregation by computers.""" start="00:02:27.720" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""So what do I mean by &quot;annotation&quot;?""" start="00:02:34.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""In this talk the word annotation refers to""" start="00:02:37.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the manual assignment of certain attributes""" start="00:02:39.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to portions of a signal which is necessary""" start="00:02:43.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to perform the end task.""" start="00:02:48.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""For example, in order for the algorithm""" start="00:02:51.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to accurately interpret a pronoun,""" start="00:02:54.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""it needs to know that pronoun,""" start="00:02:57.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""what that pronoun refers back to.""" start="00:03:00.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""We may find this task trivial, however,""" start="00:03:03.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""current algorithms repeatedly fail in this task.""" start="00:03:06.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So the complexities of understanding""" start="00:03:10.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""in computational linguistics require annotation.""" start="00:03:13.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""The world annotation itself is a useful example,""" start="00:03:16.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""because it also reminds us""" start="00:03:20.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that words have multiple meetings""" start="00:03:22.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""as annotation itself does—""" start="00:03:25.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""just as I needed to define it in this context,""" start="00:03:27.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""so that my message won't be misinterpreted.""" start="00:03:30.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So, too, must annotators do this for algorithms""" start="00:03:33.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""through the manual intervention.""" start="00:03:39.040" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""Learning from raw data""" start="00:03:43.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""(commonly known as unsupervised learning)""" start="00:03:44.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""poses limitations for machine learning.""" start="00:03:47.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""As I described, modeling complex phenomena""" start="00:03:50.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""need manual annotations.""" start="00:03:53.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""The learning algorithm uses these annotations""" start="00:03:55.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""as examples to build statistical models.""" start="00:03:58.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This is called supervised learning.""" start="00:04:01.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Without going into too much detail,""" start="00:04:04.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""I'll simply note that the recent popularity""" start="00:04:06.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of the concept of deep learning""" start="00:04:10.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""is that evolutionary step""" start="00:04:12.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""where we have learned to train models""" start="00:04:14.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""using trillions of parameters in ways that they can""" start="00:04:17.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""learn richer hierarchical structures""" start="00:04:20.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""from very large amounts of annotate, unannotated data.""" start="00:04:25.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""These models can then be fine-tuned,""" start="00:04:29.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""using varying amounts of annotated examples""" start="00:04:32.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""depending on the complexity of the task""" start="00:04:35.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to generate better predictions.""" start="00:04:37.640" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""As you might imagine, manually annotating""" start="00:04:39.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""complex, linguistic phenomena""" start="00:04:44.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""can be very specific, labor-intensive task.""" start="00:04:47.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""For example, imagine if we were""" start="00:04:51.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to go back through this presentation""" start="00:04:54.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and connect all the pronouns""" start="00:04:56.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""with the nouns to which they refer.""" start="00:04:58.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Even for a short 18 min presentation,""" start="00:04:59.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""this would require hundreds of annotations.""" start="00:05:03.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""The models we build are only as good""" start="00:05:05.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""as the quality of the annotations we make.""" start="00:05:08.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""We need guidelines""" start="00:05:11.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that ensure that the annotations are done""" start="00:05:12.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""by at least two humans who have substantial agreement""" start="00:05:15.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""with each other in their interpretations.""" start="00:05:19.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""We know that if we try to trade a model using annotations""" start="00:05:22.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that are very subjective, or have more noise,""" start="00:05:25.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""we will receive poor predictions.""" start="00:05:28.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Additionally, there is the concern of introducing""" start="00:05:30.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""various unexpected biases into one's models.""" start="00:05:33.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So annotation is really both an art and a science.""" start="00:05:37.080" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""In the remaining time,""" start="00:05:44.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""we will turn to two fundamental questions.""" start="00:05:47.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""First, how can we develop a unified representation""" start="00:05:50.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of data and annotations""" start="00:05:54.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that encompasses arbitrary levels of linguistic information?""" start="00:05:55.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""There is a long history of attempting to answer""" start="00:05:59.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""this first question.""" start="00:06:03.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This history is documented in our recent article,""" start="00:06:04.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and you can refer to that article.""" start="00:06:08.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""It will be on the website.""" start="00:06:11.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""It is as if we, as a community,""" start="00:06:16.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""have been searching for our own Holy Grail.""" start="00:06:19.000" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""The second question we will pose is""" start="00:06:22.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""what role might Emacs, along with Org mode,""" start="00:06:26.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""play in this process?""" start="00:06:30.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Well, the solution itself may not be tied to Emacs.""" start="00:06:31.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Emacs has built in capabilities""" start="00:06:35.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that could be useful for evaluating potential solutions.""" start="00:06:38.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""It's also one of the most extensively documented""" start="00:06:42.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""pieces of software and the most customizable""" start="00:06:45.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""piece of software that I have ever come across,""" start="00:06:48.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and many would agree with that.""" start="00:06:51.600" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""In order to approach this second question,""" start="00:06:55.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""we turn to the complex structure of language itself.""" start="00:07:00.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""At first glance, language appears to us""" start="00:07:03.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""as a series of words.""" start="00:07:07.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Words form sentences, sentences form paragraphs,""" start="00:07:09.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and paragraphs form completed text.""" start="00:07:13.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""If this was a sufficient description""" start="00:07:16.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of the complexity of language,""" start="00:07:19.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""all of us would be able to speak and read""" start="00:07:21.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""at least ten different languages.""" start="00:07:24.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""We know it is much more complex than this.""" start="00:07:26.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""There is a rich, underlying recursive tree structure--""" start="00:07:29.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""in fact, many possible tree structures""" start="00:07:33.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""which makes a particular sequence meaningful""" start="00:07:36.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and many others meaningless.""" start="00:07:39.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""One of the better understood tree structures""" start="00:07:42.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""is the syntactic structure.""" start="00:07:45.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""While natural language""" start="00:07:47.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""has rich ambiguities and complexities,""" start="00:07:49.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""programming languages are designed to be parsed""" start="00:07:51.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and interpreted deterministically.""" start="00:07:55.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Emacs has been used for programming very effectively.""" start="00:07:57.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So there is a potential for using Emacs""" start="00:08:02.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""as a tool for annotation.""" start="00:08:05.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This would significantly improve our current set of tools.""" start="00:08:06.560" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""It is important to note that most of the annotation tools""" start="00:08:10.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that have been developed over the past few decades""" start="00:08:16.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""have relied on graphical interfaces,""" start="00:08:19.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""even those used for enriching textual information.""" start="00:08:22.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Most of the tools in current use""" start="00:08:26.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""are designed for a end user to add very specific,""" start="00:08:30.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""very restricted information.""" start="00:08:36.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""We have not really made use of the potential""" start="00:08:38.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that an editor or a rich editing environment like Emacs""" start="00:08:42.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""can add to the mix.""" start="00:08:45.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Emacs has long enabled the editing of, the manipulation of""" start="00:08:47.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""complex embedded tree structures abundant in source code.""" start="00:08:52.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So it's not difficult to imagine that it would have""" start="00:08:56.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""many capabilities that we we need""" start="00:08:58.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to represent actual language.""" start="00:09:00.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""In fact, it already does that with features""" start="00:09:02.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that allow us to quickly navigate""" start="00:09:04.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""through sentences and paragraphs,""" start="00:09:06.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and we don't need a few key strokes.""" start="00:09:07.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Or to add various text properties to text spans""" start="00:09:09.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to create overlays, to name but a few.""" start="00:09:13.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Emacs figured out this way to handle Unicode,""" start="00:09:17.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""so you don't even have to worry about the complexity""" start="00:09:22.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of managing multiple languages.""" start="00:09:26.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""It's built into Emacs. In fact, this is not the first time""" start="00:09:29.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Emacs has been used for linguistic analysis.""" start="00:09:34.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""One of the breakthrough moments in language,""" start="00:09:37.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""natural language processing was the creation""" start="00:09:41.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of manually created syntactic trees""" start="00:09:44.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""for a 1 million word collection""" start="00:09:48.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of Wall Street Journal articles.""" start="00:09:50.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This was else around 1992""" start="00:09:52.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""before Java or graphical interfaces were common.""" start="00:09:54.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""The tool that was used to create that corpus was Emacs.""" start="00:09:59.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""It was created at UPenn, and is famously known as""" start="00:10:03.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the Penn Treebank. '92 was about when""" start="00:10:08.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the Linguistic Data Consortium was also established,""" start="00:10:12.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and it's been about 30 years""" start="00:10:16.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that it has been creating various""" start="00:10:18.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""language-related resources.""" start="00:10:20.720" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""Org mode--in particular, the outlining mode,""" start="00:10:22.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""or rather the enhanced form of outlining mode--""" start="00:10:28.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""allows us to create rich outlines,""" start="00:10:32.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""attaching properties to nodes,""" start="00:10:35.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and provides commands for easily customizing""" start="00:10:37.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""sorting of various pieces of information""" start="00:10:41.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""as per one's requirement.""" start="00:10:43.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This can also be a very useful tool.""" start="00:10:45.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This enhanced form of outline-mode adds more power to Emacs.""" start="00:10:50.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""It provides commands for easily customizing""" start="00:10:59.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and filtering information,""" start="00:11:03.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""while at the same time hiding unnecessary context.""" start="00:11:05.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""It also allows structural editing.""" start="00:11:09.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This can be a very useful tool to enrich corpora""" start="00:11:11.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""where we are focusing on limited amount of phenomena.""" start="00:11:16.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""The two together allow us to create""" start="00:11:20.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""a rich representation""" start="00:11:24.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that can simultaneously capture multiple possible sequences,""" start="00:11:27.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""capture details necessary to recreate the original source,""" start="00:11:33.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""allow the creation of hierarchical representation,""" start="00:11:38.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""provide structural editing capabilities""" start="00:11:42.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that can take advantage of the concept of inheritance""" start="00:11:44.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""within the tree structure.""" start="00:11:47.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Together they allow local manipulations of structures,""" start="00:11:49.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""thereby minimizing data coupling.""" start="00:11:54.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""The concept of tags in Org mode""" start="00:11:56.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""complement the hierarchy part.""" start="00:11:59.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Hierarchies can be very rigid,""" start="00:12:01.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""but to tags on hierarchies,""" start="00:12:03.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""we can have a multifaceted representations.""" start="00:12:06.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""As a matter of fact, Org mode has the ability for the tags""" start="00:12:08.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to have their own hierarchical structure""" start="00:12:12.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""which further enhances the representational power.""" start="00:12:15.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""All of this can be done as a sequence""" start="00:12:18.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of mostly functional data transformations,""" start="00:12:22.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""because most of the capabilities""" start="00:12:25.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""can be configured and customized.""" start="00:12:27.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""It is not necessary to do everything at once.""" start="00:12:29.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Instead, it allows us to incrementally increase""" start="00:12:32.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the complexity of the representation.""" start="00:12:36.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Finally, all of this can be done""" start="00:12:37.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""in plain-text representation""" start="00:12:39.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""which comes with its own advantages.""" start="00:12:42.360" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""Now let's take a simple example.""" start="00:12:45.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This is a a short video that I'll play.""" start="00:12:50.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""The sentence is &quot;I saw the moon with a telescope,&quot;""" start="00:12:56.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and let's just make a copy of the sentence.""" start="00:12:59.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""What we can do now is to see:""" start="00:13:04.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""what does this sentence comprise?""" start="00:13:09.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""It has a noun phrase &quot;I,&quot;""" start="00:13:11.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""followed by a word &quot;saw.&quot;""" start="00:13:13.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Then &quot;the moon&quot; is another noun phrase,""" start="00:13:17.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and &quot;with the telescope&quot; is a prepositional phrase.""" start="00:13:21.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Now one thing that you might remember,""" start="00:13:24.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""from grammar school or syntax is that""" start="00:13:30.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""there is a syntactic structure.""" start="00:13:36.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""And if you in this particular case--""" start="00:13:41.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""because we know that the moon is not typically""" start="00:13:44.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""something that can hold the telescope,""" start="00:13:47.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that the seeing must be done by me or &quot;I,&quot;""" start="00:13:51.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and the telescope must be in my hand,""" start="00:13:56.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""or &quot;I&quot; am viewing the moon with a telescope.""" start="00:14:01.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""However, it is possible that in a different context""" start="00:14:04.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the moon could be referring to an animated character""" start="00:14:13.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""in a animated series, and could actually hold the telescope.""" start="00:14:17.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""And this is one of the most--""" start="00:14:22.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the oldest and one of the most--""" start="00:14:23.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and in that case the situation might be""" start="00:14:24.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that I'm actually seeing the moon holding a telescope...""" start="00:14:26.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""I mean. The moon is holding the telescope,""" start="00:14:30.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and I'm just seeing the moon holding the telescope.""" start="00:14:36.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Complex linguistic ambiguity or linguistic""" start="00:14:40.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""phenomena that requires world knowledge,""" start="00:14:48.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and it's called the PP attachment problem""" start="00:14:53.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""where the propositional phrase attachment""" start="00:14:55.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""can be ambiguous, and various different contextual cues""" start="00:14:59.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""have to be used to resolve the ambiguity.""" start="00:15:04.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So in this case, as you saw,""" start="00:15:06.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""both the readings are technically true,""" start="00:15:09.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""depending on different contexts.""" start="00:15:11.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So one thing we could do is just""" start="00:15:13.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to cut the tree and duplicate it,""" start="00:15:16.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and then let's create another node""" start="00:15:19.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and call it an &quot;OR&quot; node.""" start="00:15:21.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""And because we are saying,""" start="00:15:24.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""this is one of the two interpretations.""" start="00:15:26.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Now let's call one interpretation &quot;a&quot;,""" start="00:15:28.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and that interpretation essentially""" start="00:15:32.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""is this child of that node &quot;a&quot;""" start="00:15:36.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and that says that the moon""" start="00:15:39.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""is holding the telescope.""" start="00:15:41.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Now we can create another representation &quot;b&quot;""" start="00:15:44.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""where we capture the other interpretation,""" start="00:15:46.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""where this, the act, the moon or--I am actually""" start="00:15:53.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""holding the telescope,""" start="00:15:59.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and watching the moon using it.""" start="00:16:00.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So now we have two separate interpretations""" start="00:16:06.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""in the same structure,""" start="00:16:09.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and all we do--we're able to do is with this,""" start="00:16:11.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""with very quick key strokes now...""" start="00:16:15.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""While we are at it, let's add another interesting thing,""" start="00:16:18.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""this node that represents &quot;I&quot;:""" start="00:16:22.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""&quot;He.&quot; It can be &quot;She&quot;.""" start="00:16:25.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""It can be &quot;the children,&quot; or it can be &quot;The people&quot;.""" start="00:16:28.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Basically, any entity that has the capability to &quot;see&quot;""" start="00:16:35.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""can be substituted in this particular node.""" start="00:16:45.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Let's see what we have here now.""" start="00:16:53.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""We just are getting sort of a zoom view""" start="00:16:57.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of the entire structure, what we created,""" start="00:17:01.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and essentially you can see that""" start="00:17:04.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""by just, you know, using a few keystrokes,""" start="00:17:08.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""we were able to capture two different interpretations""" start="00:17:11.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of a a simple sentence,""" start="00:17:17.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and they are also able to add""" start="00:17:20.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""these alternate pieces of information""" start="00:17:23.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that could help machine learning algorithms""" start="00:17:27.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""generalize better.""" start="00:17:30.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""All right.""" start="00:17:32.440" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""Now, let's look at the next thing. So in a sense,""" start="00:17:36.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""we can use this power of functional data structures""" start="00:17:40.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to represent various potentially conflicting""" start="00:17:46.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and structural readings of that piece of text.""" start="00:17:50.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""In addition to that, we can also create more texts,""" start="00:17:55.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""each with different structure,""" start="00:17:58.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and have them all in the same place.""" start="00:17:59.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This allows us to address the interpretation""" start="00:18:01.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of a static sentence that might be occurring in the world,""" start="00:18:04.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""while simultaneously inserting information""" start="00:18:06.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that would add more value to it.""" start="00:18:09.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This makes the enrichment process also very efficient.""" start="00:18:11.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Additionally, we can envision""" start="00:18:15.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""a power user of the future, or present,""" start="00:18:19.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""who can not only annotate a span,""" start="00:18:24.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""but also edit the information in situ""" start="00:18:27.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""in a way that would help machine algorithms""" start="00:18:31.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""generalize better by making more efficient use""" start="00:18:34.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of the annotations.""" start="00:18:36.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So together, Emacs and Org mode can speed up""" start="00:18:37.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the enrichment of the signals""" start="00:18:41.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""in a way that allows us""" start="00:18:42.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to focus on certain aspects and ignore others.""" start="00:18:44.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Extremely complex landscape of rich structures""" start="00:18:47.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""can be captured consistently,""" start="00:18:50.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""in a fashion that allows computers""" start="00:18:53.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to understand language.""" start="00:18:55.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""We can then build tools to enhance the tasks""" start="00:18:56.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that we do in our everyday life.""" start="00:19:00.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""YAMR is acronym, or the file's type or specification""" start="00:19:03.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that we are creating to capture this new""" start="00:19:10.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""rich representation.""" start="00:19:15.240" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""We'll now look at an example of spontaneous speech""" start="00:19:17.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that occurs in spoken conversations.""" start="00:19:21.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Conversations frequently contain errors in speech:""" start="00:19:24.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""interruptions, disfluencies,""" start="00:19:28.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""verbal sounds such as cough or laugh,""" start="00:19:30.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and other noises.""" start="00:19:33.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""In this sense, spontaneous speech is similar""" start="00:19:35.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to a functional data stream.""" start="00:19:38.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""We cannot take back words that come out of our mouth,""" start="00:19:39.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""but we tend to make mistakes, and we correct ourselves""" start="00:19:42.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""as soon as we realize that we have made--""" start="00:19:47.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""we have misspoken.""" start="00:19:49.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This process manifests through a combination""" start="00:19:50.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of a handful of mechanisms, including immediate correction""" start="00:19:53.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""after an error, and we do this unconsciously.""" start="00:19:56.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Computers, on the other hand,""" start="00:20:00.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""must be taught to understand these cases.""" start="00:20:02.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""What we see here is a example document or outline,""" start="00:20:06.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""or part of a document that illustrates""" start="00:20:12.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""various different aspects of the representation.""" start="00:20:18.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""We don't have a lot of time to go through""" start="00:20:22.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""many of the details.""" start="00:20:25.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""I would highly encourage you to play a...""" start="00:20:28.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""I'm planning on making some videos, or ascii cinemas,""" start="00:20:31.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that I'll be posting, and you can,""" start="00:20:39.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""if you're interested, you can go through those.""" start="00:20:42.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""The idea here is to try to do""" start="00:20:46.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""a slightly more complex use case.""" start="00:20:50.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""But again, given the time constraint""" start="00:20:54.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and the amount of information""" start="00:20:57.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that needs to fit in the screen,""" start="00:21:00.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""this may not be very informative,""" start="00:21:01.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""but at least it will give you some idea""" start="00:21:05.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of what can be possible.""" start="00:21:08.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""And in this particular case, what you're seeing is that""" start="00:21:10.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""there is a sentence which is &quot;What I'm I'm tr- telling now.&quot;""" start="00:21:13.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Essentially, there is a repetition of the word &quot;I'm&quot;,""" start="00:21:18.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and then there is a partial word""" start="00:21:21.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that somebody tried to say &quot;telling&quot;,""" start="00:21:23.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""but started saying &quot;tr-&quot;, and then corrected themselves""" start="00:21:25.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and said, &quot;telling now.&quot;""" start="00:21:29.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So in this case, you see, we can capture words""" start="00:21:30.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""or a sequence of words, or a sequence of tokens.""" start="00:21:39.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""One thing to... An interesting thing to note is that in NLP,""" start="00:21:44.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""sometimes we have to break typically""" start="00:21:52.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""words that don't have spaces into two separate words,""" start="00:21:55.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""especially contractions like &quot;I'm&quot;,""" start="00:22:01.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""so the syntactic parser needs needs two separate nodes.""" start="00:22:04.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""But anyway, so I'll... You can see that here.""" start="00:22:08.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""The other... This view. What this view shows is that""" start="00:22:11.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""with each of the nodes in the sentence""" start="00:22:15.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""or in the representation,""" start="00:22:19.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""you can have a lot of different properties""" start="00:22:23.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that you can attach to them,""" start="00:22:26.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and these properties are typically hidden,""" start="00:22:27.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""like you saw in the earlier slide.""" start="00:22:30.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""But you can make use of all these properties""" start="00:22:32.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to do various kind of searches and filtering.""" start="00:22:35.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""And on the right hand side here--""" start="00:22:39.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""this is actually not a legitimate syntax--""" start="00:22:43.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""but on the right are descriptions""" start="00:22:48.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of what each of these represent.""" start="00:22:51.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""All the information is also available in the article.""" start="00:22:53.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""You can see there... It shows how much rich context""" start="00:22:57.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""you can capture.""" start="00:23:04.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This is just a closer snapshot""" start="00:23:05.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of the properties on the node,""" start="00:23:08.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and you can see we can have things like,""" start="00:23:10.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""whether the word is a token or not,""" start="00:23:13.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""or that it's incomplete, whether some words""" start="00:23:14.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""might want to be filtered out for parsing,""" start="00:23:17.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and we can say this: PARSE_IGNORE,""" start="00:23:19.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""or some words or restart markers...""" start="00:23:23.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""We can mark, add a RESTART_MARKER, or sometimes,""" start="00:23:25.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""some of these might have durations. Things like that.""" start="00:23:29.240" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""The other fascinating thing of this representation""" start="00:23:32.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""is that you can edit properties in the column view.""" start="00:23:38.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""And suddenly, you have this tabular data structure""" start="00:23:42.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""combined with the hierarchical data structure.""" start="00:23:45.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""And as you can--you may not be able to see it here,""" start="00:23:48.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""but what has also happened here is that""" start="00:23:53.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""some of the tags have been inherited""" start="00:23:56.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""from the earlier nodes.""" start="00:24:01.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""And so you get a much fuller picture of things.""" start="00:24:02.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Essentially you, can filter out things""" start="00:24:07.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that you want to process,""" start="00:24:13.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""process them, and then reintegrate it into the whole.""" start="00:24:15.320" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""So, in conclusion, today we have proposed and demonstrated""" start="00:24:20.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the use of an architecture (GRAIL),""" start="00:24:25.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""which allows the representation, manipulation,""" start="00:24:27.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and aggregation of rich linguistic structures""" start="00:24:31.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""in a systematic fashion.""" start="00:24:34.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""We have shown how GRAIL advances the tools""" start="00:24:36.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""available for building machine learning models""" start="00:24:41.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that simulate understanding.""" start="00:24:44.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Thank you very much for your time and attention today.""" start="00:24:46.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""My contact information is on this slide.""" start="00:24:51.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""If you are interested in an additional example""" start="00:24:54.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that demonstrates the representation""" start="00:25:02.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of speech and written text together,""" start="00:25:05.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""please continue watching.""" start="00:25:08.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Otherwise, you can stop here""" start="00:25:10.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and enjoy the rest of the conference.""" start="00:25:12.200" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""Welcome to the bonus material.""" start="00:25:15.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""I'm glad for those of you who are stuck around.""" start="00:25:39.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""We are now going to examine an instance""" start="00:25:43.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of speech and text signals together""" start="00:25:46.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that produce multiple layers.""" start="00:25:49.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""When we have--when we take a spoken conversation""" start="00:25:51.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and use the best language processing models available,""" start="00:25:54.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""we suddenly hit a hard spot""" start="00:25:58.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""because the tools are typically not trained""" start="00:26:00.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to filter out the unnecessary cruft""" start="00:26:03.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""in order to automatically interpret""" start="00:26:05.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the part of what is being said""" start="00:26:07.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that is actually relevant.""" start="00:26:09.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Over time, language researchers""" start="00:26:11.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""have created many interdependent layers of annotations,""" start="00:26:14.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""yet the assumptions underlying them are seldom the same.""" start="00:26:17.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Piecing together such related but disjointed annotations""" start="00:26:21.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""on their predictions poses a huge challenge.""" start="00:26:25.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This is another place where we can leverage""" start="00:26:28.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the data model underlying the Emacs editor,""" start="00:26:30.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""along with the structural editing capabilities""" start="00:26:33.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of Org mode to improve current tools.""" start="00:26:35.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Let's take this very simple looking utterance.""" start="00:26:38.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""&quot;Um \{lipsmack\} and that's it. (\{laugh\})&quot;""" start="00:26:42.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Looks like the person-- so this is--""" start="00:26:48.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""what you are seeing here is a transcript of an audio signal""" start="00:26:50.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that has a lip smack and a laugh as part of it,""" start="00:26:54.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and there is also a &quot;Um&quot; like interjection.""" start="00:27:00.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So this has a few interesting noises""" start="00:27:04.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and specific things that would be illustrative""" start="00:27:08.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of what we are going to, how we are going to represent it.""" start="00:27:14.000" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""Okay. So let's say you want to have""" start="00:27:20.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""a syntactic analysis of this sentence or utterance.""" start="00:27:25.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""One common technique people use""" start="00:27:28.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""is just to remove the cruft, and, you know,""" start="00:27:30.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""write some rules, clean up the utterance,""" start="00:27:32.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""make it look like it's proper English,""" start="00:27:35.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and then, you know, tokenize it,""" start="00:27:36.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and basically just use standard tools to process it.""" start="00:27:40.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""But in that process, they end up eliminating""" start="00:27:43.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""valid pieces of signal that have meaning to others""" start="00:27:47.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""studying different phenomena of language.""" start="00:27:51.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Here you have the rich transcript,""" start="00:27:52.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the input to the syntactic parser.""" start="00:27:56.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""As you can see, there is a little tokenization happening""" start="00:28:00.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""where you'll be inserting space""" start="00:28:05.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""between &quot;that&quot; and the contracted is ('s),""" start="00:28:07.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and between the period and the &quot;it,&quot;""" start="00:28:12.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and the output of the syntactic parser is shown below.""" start="00:28:15.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""which (surprise) is a S-expression.""" start="00:28:18.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Like I said, the parse trees, when they were created,""" start="00:28:21.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and still largely when they are used, are S-expressions,""" start="00:28:24.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and most of the viewers here""" start="00:28:29.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""should not have much problem reading it.""" start="00:28:33.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""You can see this tree structure""" start="00:28:35.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of this syntactic parser here.""" start="00:28:37.280" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""Now let's say you want to integrate""" start="00:28:39.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""phonetic information or phonetic layer""" start="00:28:40.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that's in the audio signal, and do some analysis.""" start="00:28:44.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Now, it would need you to do a few-- take a few steps.""" start="00:28:49.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""First, you would need to align the transcript""" start="00:28:57.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""with the audio. This process is called forced alignment,""" start="00:29:01.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""where you already know what the transcript is,""" start="00:29:06.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and you have the audio, and you can get a good alignment""" start="00:29:10.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""using both pieces of information.""" start="00:29:14.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""And this is typically a technique that is used to""" start="00:29:17.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""create training data for training""" start="00:29:20.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""automatic speech recognizers.""" start="00:29:23.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""One interesting thing is that in order to do""" start="00:29:25.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""this forced alignment, you have to keep""" start="00:29:29.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the non-speech events in transcript,""" start="00:29:32.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""because they consume some audio signal,""" start="00:29:35.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and if you don't have that signal,""" start="00:29:39.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the alignment process doesn't know exactly...""" start="00:29:41.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""you know, it doesn't do a good job,""" start="00:29:44.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""because it needs to align all parts of the signal""" start="00:29:45.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""with something, either pause or silence or noise or words.""" start="00:29:50.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Interestingly, punctuations really don't factor in,""" start="00:29:55.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""because we don't speak in punctuations.""" start="00:29:59.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So one of the things that you need to do""" start="00:30:01.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""is remove most of the punctuations,""" start="00:30:04.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""although you'll see there are some punctuations""" start="00:30:05.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that can be kept, or that are to be kept.""" start="00:30:08.040" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""And the other thing is that the alignment has to be done""" start="00:30:12.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""before tokenization, as it impacts pronunciation.""" start="00:30:15.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""To show an example: Here you see &quot;that's&quot;.""" start="00:30:20.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""When it's one word,""" start="00:30:24.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""it has a slightly different pronunciation""" start="00:30:26.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""than when it is two words, which is &quot;that is&quot;,""" start="00:30:31.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""like you can see &quot;is.&quot; And so,""" start="00:30:35.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""if you split the tokens or split the words""" start="00:30:38.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""in order for syntactic parser to process it,""" start="00:30:44.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""you would end up getting the wrong phonetic analysis.""" start="00:30:48.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""And if you have--if you process it""" start="00:30:51.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""through the phonetic analysis,""" start="00:30:54.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and you don't know how to integrate it""" start="00:30:55.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""with the tokenized syntax, you can, you know,""" start="00:30:59.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that can be pretty tricky. And a lot of time,""" start="00:31:02.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""people write one-off pieces of code that handle these,""" start="00:31:07.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""but the idea here is to try to have a general architecture""" start="00:31:10.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that seamlessly integrates all these pieces.""" start="00:31:14.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Then you do the syntactic parsing of the remaining tokens.""" start="00:31:17.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Then you align the data and the two annotations,""" start="00:31:21.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and then integrate the two layers.""" start="00:31:24.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Once that is done, then you can do all kinds of""" start="00:31:27.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""interesting analysis, and test various hypotheses""" start="00:31:31.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and generate the statistics,""" start="00:31:33.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""but without that you only are dealing""" start="00:31:35.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""with one or the other part.""" start="00:31:39.360" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""Let's just take a quick look at how each of the layers""" start="00:31:42.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that are involved look like.""" start="00:31:48.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So this is &quot;Um \{lipsmack\}, and that's it. \{laugh\}&quot;""" start="00:31:51.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This is the transcript, and on the right hand side,""" start="00:31:56.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""you see the same thing as a transcript""" start="00:32:00.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""listed in a vertical in a column.""" start="00:32:04.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""You'll see why, in just a second.""" start="00:32:06.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""And there are some place--""" start="00:32:08.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""there are some rows that are empty,""" start="00:32:09.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""some rows that are wider than the others, and we'll see why.""" start="00:32:11.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""The next is the tokenized sentence""" start="00:32:15.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""where you have space added,""" start="00:32:19.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""you know space between these two tokens:""" start="00:32:20.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""&quot;that&quot; and the apostrophe &quot;s&quot; ('s),""" start="00:32:23.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and the &quot;it&quot; and the &quot;period&quot;.""" start="00:32:26.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""And you see on the right hand side""" start="00:32:28.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that the tokens have attributes.""" start="00:32:30.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So there is a token index, and there are 1, 2,""" start="00:32:33.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""you know 0, 1, 2, 3, 4, 5 tokens,""" start="00:32:36.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and each token has a start and end character,""" start="00:32:38.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and space (sp) also has a start and end character,""" start="00:32:41.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and space is represented by a &quot;sp&quot;. And there are""" start="00:32:45.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""these other things that we removed,""" start="00:32:50.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""like the &quot;\{LS\}&quot; which is for &quot;\{lipsmack\}&quot;""" start="00:32:54.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and &quot;\{LG\}&quot; which is &quot;\{laugh\}&quot; are showing grayed out,""" start="00:32:56.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and you'll see why some of these things are grayed out""" start="00:32:59.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""in a little bit.""" start="00:33:02.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This is what the forced alignment tool produces.""" start="00:33:03.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Basically, it takes the transcript,""" start="00:33:11.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and this is the transcript""" start="00:33:17.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that has slightly different symbols,""" start="00:33:19.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""because different tools use different symbols""" start="00:33:24.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and their various configurational things.""" start="00:33:26.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""But this is what is used to get an alignment""" start="00:33:28.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""or time alignment with phones.""" start="00:33:33.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So this column shows the phones, and so each word...""" start="00:33:36.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So, for example, &quot;and&quot; has been aligned with these phones,""" start="00:33:40.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and these on the start and end""" start="00:33:43.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""are essentially temporal or time stamps that it aligned--""" start="00:33:46.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that has been aligned to it.""" start="00:33:52.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Interestingly, sometimes we don't really have any pause""" start="00:33:54.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""or any time duration between some words""" start="00:34:00.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and those are highlighted as gray here.""" start="00:34:05.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""See, there's this space... Actually""" start="00:34:08.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""it does not have any temporal content,""" start="00:34:12.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""whereas this other space has some duration.""" start="00:34:17.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So the ones that have some duration are captured,""" start="00:34:21.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""while the others are the ones that in the earlier diagram""" start="00:34:24.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""we saw were left out.""" start="00:34:29.520" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""And the aligner actually produces multiple files.""" start="00:34:31.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""One of the files has a different, slightly different""" start="00:34:37.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""variation on the same information,""" start="00:34:44.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and in this case, you can see""" start="00:34:46.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that the punctuation is missing,""" start="00:34:50.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and the punctuation is, you know, deliberately missing,""" start="00:34:52.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""because there is no time associated with it,""" start="00:34:57.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and you see that it's not the tokenized sentence--""" start="00:35:02.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""a tokenized word. This... Now it gives you a full table,""" start="00:35:06.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and you can't really look into it very carefully.""" start="00:35:17.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""But we can focus on the part that seems legible,""" start="00:35:21.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""or, you know, properly written sentence,""" start="00:35:25.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""process it and reincorporate it back into the whole.""" start="00:35:28.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So if somebody wants to look at, for example,""" start="00:35:32.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""how many pauses the person made while they were talking,""" start="00:35:35.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""And they can actually measure the pause, the number,""" start="00:35:39.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the duration, and make connections between that""" start="00:35:42.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and the rich syntactic structure that is being produced.""" start="00:35:46.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""And in order to do that, you have to get these layers""" start="00:35:49.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to align with each other,""" start="00:35:57.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and this table is just a tabular representation""" start="00:35:59.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of the information that we'll be storing in the YAMR file.""" start="00:36:04.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Congratulations! You have reached""" start="00:36:08.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the end of this demonstration.""" start="00:36:11.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Thank you for your time and attention.""" start="00:36:13.480" video="mainVideo-grail" id="subtitle"]]
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20grail%3A%20GRAIL---A%20Generalized%20Representation%20and%20Aggregation%20of%20Information%20Layers)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/grail-before.md b/2022/info/grail-before.md
new file mode 100644
index 00000000..26e0d6c1
--- /dev/null
+++ b/2022/info/grail-before.md
@@ -0,0 +1,33 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+# Talk
+
+<div class="vid"><video controls preload="none" id="grail-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="grail-mainVideo" data="""
+00:00.000 Introduction
+01:13.400 Processing language
+02:34.560 Annotation
+03:43.240 Learning from data
+04:39.680 Manual annotation
+05:44.400 How can we develop a unified representation?
+06:22.520 What role might Emacs and Org mode play?
+06:55.280 The complex structure of language
+08:10.800 Annotation tools
+10:22.360 Org mode
+12:45.480 Example
+17:36.240 Different readings
+19:17.680 Spontaneous speech
+23:32.000 Editing properties in column view
+24:20.280 Conclusion
+25:15.280 Bonus material
+27:20.480 Syntactic analysis
+28:39.280 Forced alignment
+30:12.600 Alignment before tokenization
+31:42.880 Layers
+34:31.320 Variations
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main.webm">Download --main.webm (81MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main.opus">Download --main.opus (18MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/iepyHuSZMww6K4yfkntTpA">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="grail-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--answers.webm" />${captions}<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="grail-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--answers.webm">Download --answers.webm (41MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--answers.opus">Download --answers.opus (16MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/grail-nav.md b/2022/info/grail-nav.md
new file mode 100644
index 00000000..a81dc915
--- /dev/null
+++ b/2022/info/grail-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/async">Emacs was async before async was cool</a>
+Next by track: <a href="/2022/talks/dbus">The Wheels on D-Bus</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/handwritten-after.md b/2022/info/handwritten-after.md
new file mode 100644
index 00000000..7b9f8fb5
--- /dev/null
+++ b/2022/info/handwritten-after.md
@@ -0,0 +1,123 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="handwritten-mainVideo-transcript"></a>
+# Transcript
+
+[[!template text="""Can you recognize this building?""" start="00:00:00.000" video="mainVideo-handwritten" id="subtitle"]]
+[[!template new="1" text="""Some of you may have recognized this.""" start="00:00:08.080" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""This building is called""" start="00:00:09.800" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""the John Hancock building.""" start="00:00:11.440" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""This is in Chicago.""" start="00:00:14.480" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""I recently bought this building.""" start="00:00:17.360" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Isn't it nice?""" start="00:00:19.480" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Heavens no!""" start="00:00:21.320" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""I am in my home in Pune in India.""" start="00:00:23.240" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""I am Bala Ramadurai,""" start="00:00:27.640" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""an author, professor, and an innovation coach.""" start="00:00:29.160" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Hello and welcome to my talk on""" start="00:00:33.560" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""“How to incorporate handwritten notes""" start="00:00:36.000" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""into Emacs Org Mode”""" start="00:00:39.560" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Now, why did I show you this building?""" start="00:00:42.280" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""The name is of interest for this talk.""" start="00:00:45.920" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""In the US, someone's signature is""" start="00:00:49.400" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""also referred to as their Hancock.""" start="00:00:52.360" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Your handwriting is pretty much part of your identity.""" start="00:00:55.200" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""It is as fundamental as that.""" start="00:00:59.680" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Of course, there is a movie by that name too, Hancock.""" start="00:01:03.120" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""I could have started with a clip from that movie,""" start="00:01:07.600" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""but in spite of Will Smith and Charlize Theron,""" start="00:01:12.000" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""both my favorite movie stars in the movie, I hated it.""" start="00:01:15.880" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""[Clip from Hancock (2008)]""" start="00:01:24.160" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""But I digress.""" start="00:01:35.160" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Handwriting has been a fascinating topic for me.""" start="00:01:40.480" video="mainVideo-handwritten" id="subtitle"]]
+[[!template new="1" text="""However, note-taking has always been on my computer,""" start="00:01:44.200" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""in particular, in the Emacs Org Mode system.""" start="00:01:49.720" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""It is so easy to note down anything,""" start="00:01:54.120" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""add a schedule, add a deadline,""" start="00:01:57.360" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""search anything you want, link anything you want,""" start="00:01:59.840" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""export it to any format, track what you've been doing,""" start="00:02:04.280" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""clock your tasks, and on and on and on.""" start="00:02:07.920" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""It's such a squeaky-clean system to""" start="00:02:12.560" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""track everything and link it to""" start="00:02:15.520" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""anything from the digital world.""" start="00:02:17.560" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Sharing the original notes is still a pain in the rear,""" start="00:02:20.800" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""but for personal stuff, it's awesome.""" start="00:02:24.640" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""But then what about handwriting?""" start="00:02:29.360" video="mainVideo-handwritten" id="subtitle"]]
+[[!template new="1" text="""Research seems to suggest that handwritten notes""" start="00:02:32.640" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""can enhance clarity of thought, retention,""" start="00:02:35.640" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""sometimes even getting rid of your worries.""" start="00:02:40.200" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""[Fried, C. B. (2008). In-class laptop use and
+its effects on student learning]""" start="00:02:50.560" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""[Speaker displays articles on Note-taking]""" start="00:03:06.400" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""My experience seems to agree with that too.""" start="00:03:13.640" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""As a professor, my fear has always been""" start="00:03:17.840" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""this quote, “Lecturing is that mysterious process""" start="00:03:21.200" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""by means of which the contents of the notebook""" start="00:03:25.200" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""of the professor are transferred""" start="00:03:29.240" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""through the instrument of the fountain pen""" start="00:03:31.880" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""to the notebook of the student""" start="00:03:34.920" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""without passing through the mind of either.”""" start="00:03:37.280" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Hmmm... So, question — How do we combine""" start="00:03:40.640" video="mainVideo-handwritten" id="subtitle"]]
+[[!template new="1" text="""the efficient Org Mode system""" start="00:03:45.680" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""with the effective handwritten note-taking system?""" start="00:03:48.160" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Merge the systems together. Absolutely.""" start="00:03:53.720" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""How do you do that?""" start="00:03:56.800" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Step 1: Write the notes by hand""" start="00:03:59.360" video="mainVideo-handwritten" id="subtitle"]]
+[[!template new="1" text="""on a notebook. Pen, pencil.""" start="00:04:03.680" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Keep some convention for yourselves""" start="00:04:06.080" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""for tracking tasks like a star or an asterisk.""" start="00:04:09.000" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Step 2: Scan them using""" start="00:04:13.040" video="mainVideo-handwritten" id="subtitle"]]
+[[!template new="1" text="""your favourite mobile app.""" start="00:04:16.400" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""I recommend Adobe Scan or Dropbox.""" start="00:04:18.560" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Step 3: store the document as a JPG file""" start="00:04:23.440" video="mainVideo-handwritten" id="subtitle"]]
+[[!template new="1" text="""into a folder called Inbox.""" start="00:04:30.000" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Make sure this syncs into a cloud storage folder""" start="00:04:32.680" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""and your Org Mode system""" start="00:04:37.760" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""has access to this folder.""" start="00:04:39.480" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""(Optional) Step 4: convert the notes into text""" start="00:04:41.120" video="mainVideo-handwritten" id="subtitle"]]
+[[!template new="1" text="""using Google Keep or just type""" start="00:04:45.920" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""the damn thing one more time.""" start="00:04:49.320" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Then you can process that""" start="00:04:51.520" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""in your Org Mode system""" start="00:04:54.920" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""as you always do in whatever""" start="00:04:56.240" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""is there in your inbox.""" start="00:04:59.640" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""But, three steps or four before I get access""" start="00:05:02.120" video="mainVideo-handwritten" id="subtitle"]]
+[[!template new="1" text="""to my notes and into my Org Mode?""" start="00:05:06.120" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""What a precious waste of time.""" start="00:05:09.400" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""I'd rather be tinkering with my""" start="00:05:11.640" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""config file in that time, correct?""" start="00:05:14.120" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Boy...""" start="00:05:18.800" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Get or buy or gift or convince your partner,""" start="00:05:19.360" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""parent, or anybody else to gift yourself""" start="00:05:24.920" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""a touch-enabled large device.""" start="00:05:29.720" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Then use an app like OneNote to write notes""" start="00:05:31.960" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""on the device and link the handwritten note""" start="00:05:37.880" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""directly into Org Mode by copying the link.""" start="00:05:41.440" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""You can use a shortcut like Ctrl-1""" start="00:05:46.240" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""to mark the todos, but that means it remains""" start="00:05:54.080" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""only on OneNote ecosystem, the todos.""" start="00:05:59.480" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""You can use the same app to also convert""" start="00:06:05.160" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""the handwritten note into text""" start="00:06:14.920" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""just by the click of a button.""" start="00:06:18.320" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""As a bonus, you can even include screenshots""" start="00:06:23.560" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""from your online meetings.""" start="00:06:27.360" video="mainVideo-handwritten" id="subtitle"]]
+[[!template new="1" text="""I like both my options.""" start="00:06:30.920" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Option 1: use a regular notebook,""" start="00:06:33.440" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""scan and process them into my inbox.""" start="00:06:36.440" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Option 2: write the notes in a digital device""" start="00:06:40.840" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""and convert them into text.""" start="00:06:44.560" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Or, third option, I appeal to thee,""" start="00:06:46.480" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""oh great community, can you please build a package""" start="00:06:52.480" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""inside Org Mode that recognises handwriting""" start="00:06:57.000" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""to export it into our Org Mode, Emacs Org Mode.""" start="00:07:00.960" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Thank you so much for your attention. Bye.""" start="00:07:10.040" video="mainVideo-handwritten" id="subtitle"]]
+
+
+
+Captioner: jai
+
+Questions or comments? Please e-mail [bala@balaramadurai.net](mailto:bala@balaramadurai.net?subject=Comment%20for%20EmacsConf%202022%20handwritten%3A%20How%20to%20incorporate%20handwritten%20notes%20into%20Emacs%20Orgmode)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/handwritten-before.md b/2022/info/handwritten-before.md
new file mode 100644
index 00000000..43c65cf1
--- /dev/null
+++ b/2022/info/handwritten-before.md
@@ -0,0 +1,50 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Bala Ramadurai shares how he takes handwritten notes and includes them in his Org Mode files. Afterwards, he will handle questions over BigBlueButton.
+
+
+The following image shows where the talk is in the schedule for Sat 2022-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="handwritten">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect stroke-width="3" x="101" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 8-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-handwritten>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: TO_CAPTION_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-03T15:05:00Z" end="2022-12-03T15:15:00Z"><div class="conf-time">Saturday, Dec 3 2022, ~10:05 AM - 10:15 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 3 2022, ~9:05 AM - 9:15 AM CST (US/Central)<br />Saturday, Dec 3 2022, ~8:05 AM - 8:15 AM MST (US/Mountain)<br />Saturday, Dec 3 2022, ~7:05 AM - 7:15 AM PST (US/Pacific)<br />Saturday, Dec 3 2022, ~3:05 PM - 3:15 PM UTC <br />Saturday, Dec 3 2022, ~4:05 PM - 4:15 PM CET (Europe/Paris)<br />Saturday, Dec 3 2022, ~5:05 PM - 5:15 PM EET (Europe/Athens)<br />Saturday, Dec 3 2022, ~8:35 PM - 8:45 PM IST (Asia/Kolkata)<br />Saturday, Dec 3 2022, ~11:05 PM - 11:15 PM +08 (Asia/Singapore)<br />Sunday, Dec 4 2022, ~12:05 AM - 12:15 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/gen/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="handwritten-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="handwritten-mainVideo" data="""
+00:02.200 Introduction
+01:41.080 Org Mode
+02:29.520 Handwriting
+03:42.167 Combining Org Mode and handwriting
+03:59.720 Step 1: Write the notes by hand
+04:14.420 Step 2: Scan them
+04:23.640 Step 3: Store the document
+04:42.300 (Optional) Step 4: Convert the notes
+05:02.280 Using touch devices
+06:30.920 Options
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--main.webm">Download --main.webm (80MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--script.fountain">Download --script.fountain</a></li><li><a href="https://toobnix.org/w/kr86uvn8KHey8cGULY71Aw">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="handwritten-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="handwritten-qanda" data="""
+00:30.160 How do you link the notes together so that you could search through them in the future?
+01:51.649 Is it necessary to OCR your handwriting?
+03:59.351 What about searching notes? Notes to text while being offline?
+06:00.080 Have you looked at taking handwritten notes on a tablet like Xournal++?
+07:32.160 Have you tried out the reMarkable device and figured out how to link the files back into Org mode constructivley yet?
+09:26.299 Handwritten and org transcribed notes de-duplication for searching: do you want one or the other, both?
+12:01.280 How often do you instead type in and summarize your notes?
+15:14.164 How fancy has your handwritten notes import been?
+21:58.411 Do you actually have a device of your own that allows you to take notes like this? Or is it just written on paper?
+24:36.320 Mindmaps
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="handwritten-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--answers.webm">Download --answers.webm (103MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--answers.opus">Download --answers.opus (11MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/handwritten-nav.md b/2022/info/handwritten-nav.md
new file mode 100644
index 00000000..1ef722c7
--- /dev/null
+++ b/2022/info/handwritten-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/treesitter">Tree-sitter beyond syntax highlighting</a>
+Next by track: <a href="/2022/talks/lspbridge">lsp-bridge: a smooth-as-butter asynchronous LSP client</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/haskell-after.md b/2022/info/haskell-after.md
new file mode 100644
index 00000000..e9e454fb
--- /dev/null
+++ b/2022/info/haskell-after.md
@@ -0,0 +1,466 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="haskell-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Today, I will talk about Haskell code exploration for Emacs.""" start="00:00:00.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""What is Haskell? It is a purely functional language.""" start="00:00:03.500" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""For example, every value in Haskell is immutable.""" start="00:00:06.500" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""And it is the main compiler of Haskell, GHC.""" start="00:00:09.500" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It provides API for the whole compilation pipeline.""" start="00:00:13.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""For example, the tools mentioned in this talk,""" start="00:00:16.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""including hcel and haddorg,""" start="00:00:18.424" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""they use, they heavily utilize the GHC front-end API""" start="00:00:20.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""for parsing and understanding""" start="00:00:24.500" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""the identifiers in Haskell source files.""" start="00:00:26.744" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Roughly speaking,""" start="00:00:29.500" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""a Haskell program consists of several parts.""" start="00:00:31.544" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""it begins with some front matters, including,""" start="00:00:34.664" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""for example, language extensions,""" start="00:00:37.064" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which are optional language features one might want to use""" start="00:00:40.024" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""for convenience.""" start="00:00:44.064" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""The front matters also contain module exports.""" start="00:00:48.464" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""So for example, here we define,""" start="00:00:52.500" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""we declare module F2Md.Config""" start="00:00:55.784" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""for this Haskell source file,""" start="00:00:58.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which exports these four identifiers""" start="00:01:00.984" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""that other source files can use when importing F2Md.Config.""" start="00:01:03.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""And the next will be""" start="00:01:07.500" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""a block of imports so that we can use libraries""" start="00:01:10.784" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and identifiers in these libraries.""" start="00:01:14.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""The bulk of a Haskell source file normally is""" start="00:01:17.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""a list of declarations,""" start="00:01:21.744" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""including values, types, and instances, and so on.""" start="00:01:23.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""The difference between a value and a type is that""" start="00:01:26.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""the type of a value is a type,""" start="00:01:29.184" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and the type of a type is a kind.""" start="00:01:30.500" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""For example, here's a small block of Haskell source code.""" start="00:01:34.064" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We define Range type""" start="00:01:38.584" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""from a lower-end integer to a higher-end integer.""" start="00:01:41.504" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We also declare a value r of the type Range,""" start="00:01:45.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which is Range from 2 to 7,""" start="00:01:51.464" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""because in Haskell, we like to--""" start="00:01:54.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""by default, functions can be curried,""" start="00:02:01.104" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which basically means, by default, we want to utilize""" start="00:02:04.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""the partial application of functions.""" start="00:02:09.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We don't require parens surrounding arguments""" start="00:02:12.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""when invoking a function.""" start="00:02:17.384" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""That makes it possible, if you want,""" start="00:02:19.464" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""to write Haskell like Lisp""" start="00:02:22.725" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""by adding a bit of redundant parens.""" start="00:02:25.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""So for example,""" start="00:02:28.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""here are two blocks of code, one Lisp, one Haskell,""" start="00:02:30.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and they look quite similar to each other.""" start="00:02:33.784" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""What is a code explorer?""" start="00:02:36.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""A code explorer is a tool""" start="00:02:38.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""to browse its code base to its code comprehension.""" start="00:02:39.544" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Code explorer commonly comes with""" start="00:02:42.724" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""several functionalities or features,""" start="00:02:45.424" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""including a cross-referencer,""" start="00:02:47.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which allows going to definitions of an identifier at points""" start="00:02:49.344" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""or looking up references of an identifier,""" start="00:02:53.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""like where it is used.""" start="00:02:56.544" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""So the example in Emacs would be xref.""" start="00:02:58.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Code explorer also would be able to show you""" start="00:03:04.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""documentation and signatures of identifiers at points.""" start="00:03:07.704" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""In Emacs, that would be eldoc.""" start="00:03:10.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It also commonly allows you to search for identifiers.""" start="00:03:13.984" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Something like that in Emacs""" start="00:03:17.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""could be describe-function and find-function.""" start="00:03:19.984" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Code explorer is normally""" start="00:03:22.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""quite often implemented in two parts,""" start="00:03:24.784" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""the indexer and the server,""" start="00:03:27.464" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""where the indexer parses the source code files,""" start="00:03:28.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""indexes the identifiers,""" start="00:03:32.584" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and stores the information of identifiers""" start="00:03:34.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""like the definition, size, and the currencies,""" start="00:03:36.384" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""either in databases or in files.""" start="00:03:38.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""The other part is the server,""" start="00:03:42.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which uses the database created by the indexer""" start="00:03:44.544" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""to serve the information of the identifier.""" start="00:03:49.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Before I present my solution to code exploring,""" start="00:03:53.104" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""some description of prior art is in order.""" start="00:03:57.104" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""There are several tools that you can use""" start="00:04:01.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""to aid code exploration,""" start="00:04:05.384" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""including tech-based tools like hasktags and hs-tags.""" start="00:04:08.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""The limitation with these tools""" start="00:04:13.544" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""is they are focused on the current projects only""" start="00:04:15.584" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and do not work""" start="00:04:18.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""for cross-packaging reference and definition.""" start="00:04:19.704" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Another problem with the tag-based tools is""" start="00:04:26.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""they might not handle symbols with the same name properly.""" start="00:04:31.045" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Sometimes they get confused,""" start="00:04:34.784" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and they ask you to choose which definition,""" start="00:04:36.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""what is the correct definition site,""" start="00:04:43.424" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""even though the occurrence of the symbol""" start="00:04:46.024" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""or the symbol at point has only one definition ambiguously.""" start="00:04:49.344" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Another tool is the haskell-mode.""" start="00:04:55.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""It has some limited support for eldoc""" start="00:04:58.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""by displaying the signature of an identifier at points,""" start="00:05:02.784" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""but the identifier has to be something""" start="00:05:06.704" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""that is commonly known or sort of built-in""" start="00:05:11.864" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""or come from the base library of Haskell.""" start="00:05:15.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""So for example,""" start="00:05:18.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""it works for common functions like head and tail.""" start="00:05:20.344" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""And you can see that the signature is displayed here.""" start="00:05:24.344" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""However, it does not work for,""" start="00:05:27.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""let's say, IO. IO is a type.""" start="00:05:29.664" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Maybe that's the reason.""" start="00:05:31.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's find another function""" start="00:05:33.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""that's not from the base library.""" start="00:05:37.424" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""toJSON is from the Aeson library,""" start="00:05:40.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""so no signature is displayed here.""" start="00:05:42.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""It also provides""" start="00:05:47.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""some sort of goto-declaration functionality""" start="00:05:51.264" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""to jump to any declaration in a file.""" start="00:05:53.424" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""To do that, one has to first run haskell-decl-scan-mode""" start="00:05:56.424" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""to enter this minor mode.""" start="00:06:00.664" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Then we can run imenu to go to any definition,""" start="00:06:03.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""to go to any declaration, like getHomeR.""" start="00:06:08.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Apparently, after running that,""" start="00:06:11.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""we are able to go to definition.""" start="00:06:13.824" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""So for example, let's see,""" start="00:06:16.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""we want to find definition of getCityJR.""" start="00:06:19.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""And indeed, it works""" start="00:06:22.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""if it's within the same source file, of course.""" start="00:06:25.624" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It still does not work for cross-packaging identifiers.""" start="00:06:28.624" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""So HandlerFor is probably an identifier from servant.""" start="00:06:32.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Or no, not necessarily servant. Maybe WAI.""" start="00:06:37.024" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Anyway, it's another library.""" start="00:06:40.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""And how about find-references?""" start="00:06:43.504" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""find-references also works somehow for this file.""" start="00:06:50.504" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""How about WidgetFor?""" start="00:07:01.224" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It works for WidgetFor too.""" start="00:07:06.784" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It has some support for goto-definition and find-references.""" start="00:07:13.744" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""But as usual, it does not support such things cross-package.""" start="00:07:18.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""And finally, we have""" start="00:07:26.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""the Sledgehammer HLS Haskell language server.""" start="00:07:27.365" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It can be used with EGLOT.""" start="00:07:31.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""But the problem with HLS, HLS has many many features""" start="00:07:33.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""because it is a language server,""" start="00:07:40.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""like renaming, like eldoc for standard libraries, and so on.""" start="00:07:42.944" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""But the problem with HLS is, one, that it is very, very slow.""" start="00:07:51.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""And I wouldn't use it with my laptop.""" start="00:07:57.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""And two, it also does not support cross-package referencing.""" start="00:08:00.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""In fact, there's an outstanding GitHub issue about this.""" start="00:08:05.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""So cross-package referencing and goto-definition""" start="00:08:08.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""is sort of a common shortfall,""" start="00:08:13.064" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""a common problem for these existing Haskell code explorers.""" start="00:08:17.264" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""Then finally, we also have hoogle and hackage.""" start="00:08:21.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Hoogle is a search engine for Haskell identifiers,""" start="00:08:23.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and the results link to Hackage,""" start="00:08:28.384" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which is the Haskell documentation website""" start="00:08:30.744" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""for all Haskell libraries.""" start="00:08:33.704" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Haskell Hackage has functionality""" start="00:08:35.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""where you can jump to the source code file rendered in HTML,""" start="00:08:40.104" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and you can click on the identifiers there""" start="00:08:45.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""to jump to definitions,""" start="00:08:49.544" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""but it does not support find references,""" start="00:08:51.624" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and it is rather basic.""" start="00:08:54.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""Then I learned about haskell-code-explorer,""" start="00:08:59.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which is a fully-fledged Haskell code explorer.""" start="00:09:01.744" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It is written by someone else.""" start="00:09:05.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It is a web application""" start="00:09:07.824" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""for exploring Haskell package codebases.""" start="00:09:09.264" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""The official reference instance for haskell-code-explorer""" start="00:09:12.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""is available at this URL, which I will demo soon.""" start="00:09:16.344" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""What I did with these packages... I ported it to GHC 9.2.""" start="00:09:19.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""I renamed it to hcel because I want to focus on Emacs clients""" start="00:09:25.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""rather than JavaScript clients, which I will explain later.""" start="00:09:29.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""And I also wrote an Emacs client package, of course.""" start="00:09:31.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""This is what haskell-code-explorer looks like.""" start="00:09:37.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""On the homepage, it is a list of indexed packages""" start="00:09:41.504" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""indexed by the indexer.""" start="00:09:47.024" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""One can filter it by the package name""" start="00:09:50.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""or look for identifiers directly across all packages.""" start="00:09:53.944" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's have a look at base. There are three versions.""" start="00:10:05.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's have a look at the latest version, 4.12.0.0.""" start="00:10:09.984" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Once entering the package view,""" start="00:10:15.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""you are shown a list of all modules by their path,""" start="00:10:19.064" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""as well as a tree of these module files.""" start="00:10:24.544" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""You can filter by module name or file name,""" start="00:10:29.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""or you can search for identifier within the same package""" start="00:10:32.624" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""or in all packages.""" start="00:10:34.424" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's say we want to learn about Control.Monad.""" start="00:10:36.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""Now we are in the module view.""" start="00:10:43.304" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""The source file is presented to you,""" start="00:10:46.984" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and it has links to identifiers.""" start="00:10:49.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""When you hover over them, the documentation shows up,""" start="00:10:55.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""including the signature where it is defined.""" start="00:11:01.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""You can go to its definition or find references.""" start="00:11:05.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's say we want to go to the definition of Monad.""" start="00:11:10.344" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It jumps to the definition site of the monad type class.""" start="00:11:20.264" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""If we click at the definition site,""" start="00:11:25.584" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""it brings up a list of references.""" start="00:11:28.104" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""On the left, you can choose""" start="00:11:32.224" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which package you want to find references of monad in.""" start="00:11:33.744" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's look at the random one, avwx.""" start="00:11:39.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Here is a list of results where Monad is used in avwx.""" start="00:11:47.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""This is a module path.""" start="00:11:54.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""One can go to any of these results.""" start="00:11:57.864" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We can search for things in all packages""" start="00:12:06.424" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""or in the current package.""" start="00:12:07.944" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let’s say I want to search for &quot;Read&quot;""" start="00:12:09.584" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""I think this is the &quot;Read&quot; that is commonly used in Haskell,""" start="00:12:13.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""the read type class for parsing strings into values.""" start="00:12:19.344" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""I think that is more or less it.""" start="00:12:25.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""That is the Haskell Code Explorer web application""" start="00:12:31.104" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""in all its glory.""" start="00:12:34.624" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""Let's go back to the slides.""" start="00:12:38.304" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""That was the web application,""" start="00:12:40.984" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which is basically a JavaScript client""" start="00:12:43.464" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""that talks to the server""" start="00:12:46.544" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""by sending requests and receiving""" start="00:12:48.744" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and parsing the JSON results or JSON responses.""" start="00:12:51.064" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Initially, I was interested in hacking the web client.""" start="00:12:55.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It uses the ember.js web framework.""" start="00:13:02.504" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""The first thing to do was to npm install ember-cli.""" start="00:13:05.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It gives me 12 vulnerabilities,""" start="00:13:09.944" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""4 low, 2 moderate, 3 high, 3 critical.""" start="00:13:16.224" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""I don't know how often it is the case""" start="00:13:19.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""when we don't really care about these nasty vulnerabilities""" start="00:13:26.184" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""from Node.js or npm because they are so common.""" start="00:13:33.064" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""I don't quite like that.""" start="00:13:36.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""Another reason for favoring Emacs clients""" start="00:13:41.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""over JavaScript clients is user freedom.""" start="00:13:45.464" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Emacs is geared towards user freedom.""" start="00:13:49.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It allows users maximum freedom to customize or mod Emacs.""" start="00:13:53.384" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""I think Emacs clients can be a way to fix JavaScript traps,""" start="00:14:01.664" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""like using user scripts to replace non-free JavaScript.""" start="00:14:07.264" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""There are tools to do that, for example, like Haketilo.""" start="00:14:14.344" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Why write JavaScript replacement""" start="00:14:19.584" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""if we can write Elisp replacement?""" start="00:14:21.504" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""If we overwrite all kinds of front-ends in Emacs""" start="00:14:25.264" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""for commonly-used web applications""" start="00:14:31.784" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""like Reddit, Hacker News, what have you,""" start="00:14:34.504" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""then we have an Emacs app store""" start="00:14:37.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""where we can just install these applications""" start="00:14:40.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and browse the web more freely.""" start="00:14:43.704" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""Back to hcel, which is the Emacs client I wrote.""" start="00:14:51.184" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""I tried to reuse as much of Emacs built-ins as possible,""" start="00:14:56.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""including eldoc, for showing documentation,""" start="00:14:59.184" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""xref for cross-referencer,""" start="00:15:03.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""compilation-mode for showing search results of identifiers,""" start="00:15:04.864" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""outline-mode for a hierarchical view""" start="00:15:07.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""of package module identifiers,""" start="00:15:11.704" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""sort of a cursor-mode for highlighting identifiers,""" start="00:15:14.384" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""help-mode for displaying quick help for Haskell identifiers,""" start="00:15:18.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""integration with haddorg,""" start="00:15:26.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which I will mention later, etc.""" start="00:15:27.704" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It is available as hcel without the dot on GNU ELPA.""" start="00:15:31.304" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Time for a demo.""" start="00:15:38.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""To start using hc.el, surprise surprise,""" start="00:15:40.184" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""we run the hcel command.""" start="00:15:42.584" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We are presented with a list of packages""" start="00:15:45.184" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""indexed by the hcel indexer.""" start="00:15:46.984" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""This is an outline mode,""" start="00:15:52.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""so we can tab to list all the modules""" start="00:15:54.064" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""represented by the module path.""" start="00:15:58.824" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We can further tab into the list of identifiers""" start="00:16:01.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""declared in this module.""" start="00:16:03.504" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Now it asks whether you want to open module source.""" start="00:16:05.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""This is because some module source code""" start="00:16:09.184" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""can be quite large and it can take a bit of time.""" start="00:16:11.984" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""In this case, the control monad is quite small,""" start="00:16:14.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""so let's say yes.""" start="00:16:17.784" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We see the list of identifiers.""" start="00:16:19.944" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""One can jump to an identifier forever.""" start="00:16:24.104" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""As you can see, the identifiers at points are highlighted.""" start="00:16:28.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""This can be particularly useful""" start="00:16:33.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""in a large function declaration""" start="00:16:36.224" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""where you come to see, for example,""" start="00:16:38.704" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""all the occurrences of an identifier""" start="00:16:40.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""inside the body of the declaration.""" start="00:16:44.304" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""These are declarations""" start="00:16:48.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which in Haskell mode are listed in imenu.""" start="00:16:50.824" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We can do the same here in hcel source mode.""" start="00:16:53.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It lists all the declarations with their signature.""" start="00:17:00.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's say we want to jump to this funny operator.""" start="00:17:06.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It worked and you can also go back and forth""" start="00:17:13.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""within the declarations by pressing &quot;n&quot; and &quot;p&quot;.""" start="00:17:20.424" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Similarly, you can do something similar in the outline mode""" start="00:17:26.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""by toggling the follow mode, just like in org-agenda.""" start="00:17:30.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's turn it off.""" start="00:17:38.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""Now, how about find definition references?""" start="00:17:40.224" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Using xref,""" start="00:17:46.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""we can jump to the definition of Int and jump back.""" start="00:17:49.064" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Jump to Maybe, jump back.""" start="00:17:53.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's have a look at references of replicateM.""" start="00:17:56.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""There are plenty of them.""" start="00:18:01.024" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Maybe we want to check out ghc-lib.""" start="00:18:03.464" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Here are all the references""" start="00:18:09.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and you can of course jump to any of them in the results.""" start="00:18:11.344" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Cool.""" start="00:18:16.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""You may have already noticed""" start="00:18:19.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""the eldoc displaying the documentation""" start="00:18:21.864" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and signature of identifiers.""" start="00:18:27.184" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""For example, here it shows the signature of replicateM,""" start="00:18:34.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""where it is defined, and its documentation.""" start="00:18:44.104" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We can bring up the eldoc buffer.""" start="00:18:47.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""In the eldoc buffer,""" start="00:18:56.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""there are also links to other identifiers,""" start="00:18:58.264" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which takes you to the definition of these identifiers,""" start="00:19:00.184" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""like minBound.""" start="00:19:04.544" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Apparently, this is not working.""" start="00:19:07.624" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""I'm pretty sure it maybe works.""" start="00:19:10.864" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's go to nothing or just...""" start="00:19:13.104" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""I think those didn't work because""" start="00:19:17.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""the module source for those identifiers is not open.""" start="00:19:19.864" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""Of course, you can search""" start="00:19:24.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""for any identifiers across all indexed packages""" start="00:19:30.304" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""by invoking hcel-global-ids.""" start="00:19:33.024" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's say we want to search for Read.""" start="00:19:38.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We are presented with a list of results,""" start="00:19:42.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which are identifiers starting with Read with capital R.""" start="00:19:47.464" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""They also show where they are defined""" start="00:19:54.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and the documentation, just like in eldoc.""" start="00:19:57.304" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""One can also directly jump to the identifier""" start="00:20:07.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""in the mini-buffer results.""" start="00:20:13.944" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""For example, we want to check out this Read2""" start="00:20:20.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""defined in base-4.12.0.0 Data.Functor.Classes""" start="00:20:22.024" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""There we go.""" start="00:20:28.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""Another functionality of hcel""" start="00:20:34.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""is the help buffer integration.""" start="00:20:37.864" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We can do hcel-help and then let's say""" start="00:20:41.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""we want to learn about the read type class.""" start="00:20:46.565" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""This is a help buffer""" start="00:20:52.744" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and you can jump to other definitions""" start="00:20:55.184" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""within the help buffer""" start="00:21:00.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""to read the documentation like readsPrec.""" start="00:21:02.464" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It says Server version cannot be satistifed. Actual version.""" start="00:21:07.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""This means we need to tell hecl""" start="00:21:11.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""that the server has the correct version.""" start="00:21:14.784" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""hecl-fetch-server-version.""" start="00:21:17.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Wait a bit for it to update""" start="00:21:21.744" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""the knowledge of the server version.""" start="00:21:25.704" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Now you can follow the links, Read, readsPrec.""" start="00:21:27.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""You can do the &quot;l&quot; and &quot;r&quot; to navigate within the history.""" start="00:21:33.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""ReadS, ReadP.""" start="00:21:38.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Just like in the help buffer for elisp code,""" start="00:21:43.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""you can jump to the definition.""" start="00:21:46.024" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""I believe that is everything, more or less.""" start="00:21:53.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""That concludes the demo.""" start="00:22:00.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""Now let's turn to haddorg,""" start="00:22:05.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which is an Org backend for Haddock.""" start="00:22:07.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Haddock is the documentation generator for Haskell packages.""" start="00:22:09.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""For example,""" start="00:22:13.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""the official Haskell package documentation website Hackage,""" start="00:22:15.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""all the documentation there is generated by Haddock""" start="00:22:22.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""into the HTML format.""" start="00:22:25.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Haddock has several backends""" start="00:22:28.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""that convert the intermediate representation""" start="00:22:31.424" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""called interface to various output formats,""" start="00:22:34.384" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""including HTML, LaTeX, and Hugo.""" start="00:22:37.064" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""HTML is the main format with a lot of features.""" start="00:22:41.864" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""LaTeX is less so, and I don't think it is widely used.""" start="00:22:44.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's have a look at an HTML example.""" start="00:22:49.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""This is a PDF because these HTML files can be rather large""" start="00:22:53.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and slow down EWW significantly.""" start="00:23:01.184" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It's faster to convert it to PDF""" start="00:23:07.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and read it from pdf-tools.""" start="00:23:10.264" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Looks like this is as big as it goes.""" start="00:23:17.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""I hope you can still see it.""" start="00:23:20.864" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Can I still enlarge it a bit more? Maybe.""" start="00:23:26.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""This is Servant.Server.""" start="00:23:30.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It is a module in the servant-server package.""" start="00:23:33.064" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It is a widely used package for writing servers.""" start="00:23:36.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It starts with a heading, which is the name of the module,""" start="00:23:42.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and the table of contents.""" start="00:23:49.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Then a heading: Run an wai application from an API.""" start="00:23:52.784" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Under this heading, there are all the relevant identifiers""" start="00:23:56.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""that is concerned with running a WAI application from API,""" start="00:24:00.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""including serve, which is one of the main entry points""" start="00:24:08.624" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""for a Servant.Server.""" start="00:24:13.304" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It has a signature linkable to the other identifiers,""" start="00:24:15.624" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""the documentation,""" start="00:24:21.704" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""an example with a Haskell source code block.""" start="00:24:23.104" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""That's what HTML output looks like.""" start="00:24:26.744" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""As I mentioned,""" start="00:24:31.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""there are several downsides or drawbacks with that,""" start="00:24:34.024" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""like the HTML files can be huge and slow down EWW.""" start="00:24:35.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Also, every module is an HTML of itself,""" start="00:24:41.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and there's also an HTML for the package""" start="00:24:46.224" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""with a list of all the modules.""" start="00:24:48.384" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Whereas the Org backend""" start="00:24:50.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""is better in that it is much more compact.""" start="00:24:54.744" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""All the modules under the same package""" start="00:25:04.264" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""are included in one Org file""" start="00:25:07.504" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""as sub-headings, level 2 headings.""" start="00:25:10.784" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""So, servant-server, Servant.Server, that is the module.""" start="00:25:13.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""So basically, this level 2 heading""" start="00:25:19.504" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""contains all the information in this PDF.""" start="00:25:21.944" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Run the WAI application from API, serve.""" start="00:25:25.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It has a signature that links to other identifiers""" start="00:25:29.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and the documentation that's also linkable.""" start="00:25:39.224" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""The Haskell source block is now an Org source block,""" start="00:25:42.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and you can do all sorts of interesting things""" start="00:25:47.224" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""with it using org-babel.""" start="00:25:49.504" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""Let's check the links as server.""" start="00:25:52.744" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Right, so the link works.""" start="00:25:56.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Application, right, Request.""" start="00:26:00.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It also supports cross-packaging package linking,""" start="00:26:05.384" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""so following the link to request""" start="00:26:08.384" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""takes us from servant-server package Org documentation""" start="00:26:12.304" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""to the WAI Org documentation.""" start="00:26:17.624" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""Another nice thing with Org documentation""" start="00:26:24.784" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""is that you can use Org functions""" start="00:26:27.544" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""like org-goto to jump to any identifiers.""" start="00:26:32.744" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's say we want to jump to application.""" start="00:26:40.544" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We have toApplication. So it jumpts to toApplication.""" start="00:26:45.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""I guess application is not an identifier,""" start="00:26:50.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""yes, it is more like a type alias,""" start="00:26:54.024" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""that's why we couldn't find it.""" start="00:26:55.824" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""So that is haddorg.""" start="00:26:58.664" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""And of course, I implemented a bit of integration""" start="00:27:01.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""between haddorg and hcel""" start="00:27:06.104" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""so that we can jump from one to the other.""" start="00:27:08.544" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's go back to servant.""" start="00:27:11.304" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's see, ServerT.""" start="00:27:15.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Maybe we want to check out""" start="00:27:24.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""the source code definition of ServerT.""" start="00:27:27.104" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""To find out exactly what sort of type alias it is,""" start="00:27:31.944" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""like what is the alias (or type synonym)""" start="00:27:36.264" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We run hcel-identifier-at-point--""" start="00:27:43.184" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""sorry, hcel-haddorg-to-hcel-definition...""" start="00:27:49.504" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Oh, we have an HTTP error.""" start="00:27:52.344" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Typ ServerT not found in module src/Servant/Server.hs""" start="00:27:55.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Why? Well, this is because""" start="00:27:59.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""the HCEL server only understands,""" start="00:28:01.125" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""it only has knowledge of identifiers""" start="00:28:04.944" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""that is defined in the original source file.""" start="00:28:07.824" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""So, it is not aware of, say,""" start="00:28:12.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""identifiers that are re-exported in the module.""" start="00:28:17.184" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Most likely, Servant.Server module re-exports ServerT""" start="00:28:21.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""from another module.""" start="00:28:25.824" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We will probably have better luck""" start="00:28:28.704" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""looking into some internal modules like this one.""" start="00:28:29.744" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's try this type class HasContextEntry.""" start="00:28:35.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""So this time it worked.""" start="00:28:39.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""And, of course, we can go the other direction""" start="00:28:42.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""from hecl to haddorg.""" start="00:28:44.344" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's say if we want to display named context""" start="00:28:48.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""in the haddorg documentation""" start="00:28:51.584" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""so that we can read about, other identifiers documentation""" start="00:28:54.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""that is related to named context.""" start="00:29:01.624" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We do hecl-identifier-at-point-to-haddorg""" start="00:29:04.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""And it does take us to the server-server old file.""" start="00:29:08.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Okay.""" start="00:29:14.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""And that concludes my presentation.""" start="00:29:18.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""You can find hecl in GNU Elpa,""" start="00:29:21.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and you can also find the source code,""" start="00:29:23.584" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""as well as the source of haddorg""" start="00:29:25.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and instructions on how to generate org documentation""" start="00:29:27.464" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""using haddorg in my cgit instance.""" start="00:29:29.864" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Thank you for your attention.""" start="00:29:33.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""I hope you enjoy the rest of the conference.""" start="00:29:36.784" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Thank you.""" start="00:29:38.000" video="mainVideo-haskell" id="subtitle"]]
+
+
+
+Captioner: anush
+
+Questions or comments? Please e-mail [id@ypei.org](mailto:id@ypei.org?subject=Comment%20for%20EmacsConf%202022%20haskell%3A%20Haskell%20code%20exploration%20with%20Emacs)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/haskell-before.md b/2022/info/haskell-before.md
new file mode 100644
index 00000000..ab963d87
--- /dev/null
+++ b/2022/info/haskell-before.md
@@ -0,0 +1,63 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Yuchen Pei demonstrates an Emacs package for exploring Haskell code and org documentation generated by a Haddock org backend. Afterwards, he will handle questions via BigBlueButton.
+
+
+The following image shows where the talk is in the schedule for Sat 2022-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="haskell">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect stroke-width="3" x="666" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 30-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-haskell>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: TO_CAPTION_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-03T21:05:00Z" end="2022-12-03T21:35:00Z"><div class="conf-time">Saturday, Dec 3 2022, ~4:05 PM - 4:35 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 3 2022, ~3:05 PM - 3:35 PM CST (US/Central)<br />Saturday, Dec 3 2022, ~2:05 PM - 2:35 PM MST (US/Mountain)<br />Saturday, Dec 3 2022, ~1:05 PM - 1:35 PM PST (US/Pacific)<br />Saturday, Dec 3 2022, ~9:05 PM - 9:35 PM UTC <br />Saturday, Dec 3 2022, ~10:05 PM - 10:35 PM CET (Europe/Paris)<br />Saturday, Dec 3 2022, ~11:05 PM - 11:35 PM EET (Europe/Athens)<br />Sunday, Dec 4 2022, ~2:35 AM - 3:05 AM IST (Asia/Kolkata)<br />Sunday, Dec 4 2022, ~5:05 AM - 5:35 AM +08 (Asia/Singapore)<br />Sunday, Dec 4 2022, ~6:05 AM - 6:35 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/dev/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="haskell-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="haskell-mainVideo" data="""
+00:00.000 What is Haskell?
+00:30.520 Parts of a Haskell program
+01:33.640 Example of Haskell source code
+02:13.400 Writing Haskell like Lisp
+02:37.160 What is a code explorer?
+03:53.760 Prior art
+04:56.240 Haskell mode
+05:46.080 Jumping to declarations
+06:43.560 Finding references
+07:24.840 The Haskell language server
+08:20.520 Hoogle and Hackage
+08:54.960 Haskell Code Explorer
+09:34.600 Demo of Haskell Code Explorer
+10:42.080 Learning about monads
+12:35.480 Web client
+13:39.920 User freedom
+14:47.800 hc.el
+15:38.560 Demo
+16:46.520 Declarations
+17:38.920 Finding definitions and references
+18:19.160 Eldoc
+19:22.360 Searching for identifiers
+20:32.560 Help buffer integration
+22:01.440 Haddock
+23:28.840 Servant
+24:30.480 Org
+25:50.320 Links
+26:19.280 Navigation
+28:41.160 Going the other direction
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--main.webm">Download --main.webm (47MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/6u6Pd9P8zcbwfFVXNHYzUz">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="haskell-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="haskell-qanda" data="""
+01:42.120 Does it work with offline documentation?
+03:50.720 What is the state of integration of Haskell with Emacs in 2022?
+09:01.680 Have you tried any projects in literate Haskell?
+12:51.360 Is the indexing faster when re-indexing? Would it be too slow to re-index on-demand?
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="haskell-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--answers.webm">Download --answers.webm (6.6MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--answers.opus">Download --answers.opus (5.5MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/haskell-nav.md b/2022/info/haskell-nav.md
new file mode 100644
index 00000000..5d1f7344
--- /dev/null
+++ b/2022/info/haskell-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/jupyter">Edit live Jupyter notebook cells with Emacs</a>
+Next by track: <a href="/2022/talks/sat-close">Saturday closing remarks</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/health-after.md b/2022/info/health-after.md
new file mode 100644
index 00000000..ec02951c
--- /dev/null
+++ b/2022/info/health-after.md
@@ -0,0 +1,423 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="health-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hi, this is Dave O'Toole, and today""" start="00:00:00.000" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I'll be giving a presentation on tracking health data""" start="00:00:04.000" video="mainVideo-health" id="subtitle"]]
+[[!template text="""with Emacs, Org Mode, and Gnuplot.""" start="00:00:07.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So Gnuplot is the well-known scientific""" start="00:00:12.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and mathematical plotting application.""" start="00:00:16.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""You feed it text files full of names, dates, numbers,""" start="00:00:19.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""data points, and you get out a nice graph.""" start="00:00:24.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""You can spit out SVG. You can spit out PNG graphics.""" start="00:00:27.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""In this case, we're using an SVG.""" start="00:00:31.120" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""What I'm going to show you today""" start="00:00:33.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""is how to take daily health journal items:""" start="00:00:36.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""in other words, things like I exercised""" start="00:00:39.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""such and such number of minutes today,""" start="00:00:42.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I got X hours of sleep last night,""" start="00:00:44.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I used such and such number of pieces of nicotine gum,""" start="00:00:47.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""say five pieces. So let's see,""" start="00:00:51.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""we've got this whole picture here, all right,""" start="00:00:54.560" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and I've tracked here...""" start="00:00:58.440" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This is a month of data from my life.""" start="00:00:59.360" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This is... I'm not showing all the variables,""" start="00:01:02.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""but this is what I felt comfortable sharing""" start="00:01:05.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""in order to help people who might have a need to track,""" start="00:01:08.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""either because of a chronic condition,""" start="00:01:14.240" video="mainVideo-health" id="subtitle"]]
+[[!template text="""or just because of a health improvement goal""" start="00:01:15.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""or what have you, people who might need to""" start="00:01:18.600" video="mainVideo-health" id="subtitle"]]
+[[!template text="""track health data in a way""" start="00:01:20.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that's a little bit more robust""" start="00:01:23.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""than just one or two variables""" start="00:01:24.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and just weight or just blood pressure.""" start="00:01:26.600" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So in this case, I've got exercise,""" start="00:01:29.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I've got the number of hours of sleep,""" start="00:01:33.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""the number of doses of nicotine,""" start="00:01:36.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""(that's the yellow line here),""" start="00:01:38.560" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and this is referring to nicotine gum.""" start="00:01:40.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""What we're going to be talking about""" start="00:01:44.240" video="mainVideo-health" id="subtitle"]]
+[[!template text="""is looking at connections, the idea""" start="00:01:45.560" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that plotting your data can actually""" start="00:01:47.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""help you figure out what's going on.""" start="00:01:49.880" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This is just one month.""" start="00:01:52.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I've been doing this for a couple of months now,""" start="00:01:53.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""but I felt comfortable showing one month""" start="00:01:55.440" video="mainVideo-health" id="subtitle"]]
+[[!template text="""with a limited subset of the variables.""" start="00:01:57.560" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""What I'm going to be doing in this presentation""" start="00:01:59.440" video="mainVideo-health" id="subtitle"]]
+[[!template text="""is showing you how to set up your org templates""" start="00:02:02.240" video="mainVideo-health" id="subtitle"]]
+[[!template text="""so that you can, you know, hit a hotkey""" start="00:02:05.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""to capture today's data with an org template--""" start="00:02:08.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""or in this case yesterday's. Usually I'm saying, okay,""" start="00:02:11.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""yesterday this happened,""" start="00:02:14.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""because you don't know until the day's over""" start="00:02:15.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""how many pieces of nicotine gum you ate""" start="00:02:17.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""or how many hours you slept.""" start="00:02:19.720" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So usually we're recording data for the previous day.""" start="00:02:21.440" video="mainVideo-health" id="subtitle"]]
+[[!template text="""We can set up a capture template""" start="00:02:25.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""so that it fills a little org entry. One for exercise,""" start="00:02:28.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""one for sleep, one for nicotine, one for distress.""" start="00:02:30.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Here distress is just 1 to 10:""" start="00:02:34.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""how bad do you feel today?""" start="00:02:36.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""It's not a scientific measure, but you know,""" start="00:02:38.560" video="mainVideo-health" id="subtitle"]]
+[[!template text="""many, many things ask you to rate""" start="00:02:41.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""on a scale of 1 to 10, how bad is the anxiety,""" start="00:02:43.360" video="mainVideo-health" id="subtitle"]]
+[[!template text="""how bad is the general level of stress,""" start="00:02:47.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and so without a lot of complication,""" start="00:02:49.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I just rate that one to ten.""" start="00:02:51.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Pain, okay, we won't have to get into any details,""" start="00:02:53.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""but if there is a level of chronic pain, well,""" start="00:02:58.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I put that between 1 and 10. As we can see here,""" start="00:03:00.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""during the period that I've shown you, it's pretty low.""" start="00:03:04.240" video="mainVideo-health" id="subtitle"]]
+[[!template text="""There's some. If you miss a dose of medication,""" start="00:03:07.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""you can track that, in this case""" start="00:03:11.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""with a big ugly red triangle, you know.""" start="00:03:13.600" video="mainVideo-health" id="subtitle"]]
+[[!template text="""You can see, I can see here that in mid-, in late September,""" start="00:03:17.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""sorry, in early to mid-October,""" start="00:03:24.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I stopped using the nicotine gum""" start="00:03:29.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and probably should have cut down more gradually""" start="00:03:31.000" video="mainVideo-health" id="subtitle"]]
+[[!template text="""because my sleep suffered. Look at this.""" start="00:03:32.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""The sleep line is down here, okay?""" start="00:03:34.760" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""What I'm going to do now,""" start="00:03:38.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""now that I've shown you the graph""" start="00:03:39.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and some of the things that are useful about it,""" start="00:03:40.880" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I'm going to actually take a step back""" start="00:03:44.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and show you from start to finish how you can do this""" start="00:03:46.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""in GNU Emacs, and I have a little template generator""" start="00:03:50.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that you can use if you'd like.""" start="00:03:53.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""All right, so let's go back.""" start="00:03:56.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Let's step back from this file.""" start="00:03:59.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""We're going to split the screen, and on the left side,""" start="00:04:01.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I'm going to put the underlying Org file""" start="00:04:07.600" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that generates this graph.""" start="00:04:09.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Let me shrink that a little bit.""" start="00:04:10.920" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""All right, I'm going to work my way backwards""" start="00:04:16.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""from the template to the template generator,""" start="00:04:22.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""meaning that you'll be able to spit out,""" start="00:04:26.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""given your own specification of health variables,""" start="00:04:28.440" video="mainVideo-health" id="subtitle"]]
+[[!template text="""you'll be able to have it spit out""" start="00:04:31.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""a custom Gnuplot script like this""" start="00:04:33.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that's preset up with the definitions""" start="00:04:38.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""for the column view in Org mode.""" start="00:04:41.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I'm assuming a little bit of familiarity""" start="00:04:43.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""with Org mode and Gnuplotting,""" start="00:04:45.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""but I'll try to explain as much as I can as I go along.""" start="00:04:47.200" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""The journal here is where... okay, okay, one moment.""" start="00:04:51.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So as you can see, there's a sub-entry here""" start="00:04:59.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""for each day that I've included from my data set""" start="00:05:03.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""starting on September 13th of this year""" start="00:05:06.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and ending on October 17th.""" start="00:05:08.560" video="mainVideo-health" id="subtitle"]]
+[[!template text="""And there's an Org property drawer with""" start="00:05:10.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""the corresponding names of each field and the value.""" start="00:05:16.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Now the idea here is that the columns specify...""" start="00:05:29.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""if you know a little bit about Org mode,""" start="00:05:36.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""what happens is that you...""" start="00:05:40.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""let's say that I hit the key for my journal template,""" start="00:05:43.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""which... Mine is very similar.""" start="00:05:50.920" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""This is the capture buffer for today's date,""" start="00:05:52.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and if you're recording yesterday's date,""" start="00:06:00.880" video="mainVideo-health" id="subtitle"]]
+[[!template text="""you can just flip it like that if you need to.""" start="00:06:02.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Then I say, yesterday, I remember""" start="00:06:04.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I went for about a one-mile walk,""" start="00:06:08.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""so that's probably about 20 minutes,""" start="00:06:11.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and that I had such and such,""" start="00:06:14.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I had eight and a half hours of sleep, let's say.""" start="00:06:16.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I estimate how many pieces of nicotine gum I have.""" start="00:06:19.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I try to count as closely as I can, how much distress,""" start="00:06:22.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""you know what I mean,""" start="00:06:25.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""whether or not I missed a dose of medication.""" start="00:06:26.360" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Then when you hit C-c C-c,""" start="00:06:28.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""it captures that to the end of your Org file.""" start="00:06:32.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Now what this shows is that... I cut and paste it in.""" start="00:06:39.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I've been keeping these entries every day for months,""" start="00:06:46.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and that I cut and pasted in a month of data.""" start="00:06:48.160" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""Now I'm going to dig in a little bit to the Gnuplot script.""" start="00:06:51.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This here, all this stuff, is one component of the graph,""" start="00:07:00.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and I'll go over how it works.""" start="00:07:07.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""First, the items through this column declaration here,""" start="00:07:11.360" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and the id:myid, this columnview table here,""" start="00:07:19.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""\#+BEGIN: columnview, this whole bit here,""" start="00:07:30.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""is going to get filled in with the corresponding columns,""" start="00:07:34.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""exercise minutes, sleep hours, nicotine doses.""" start="00:07:39.880" video="mainVideo-health" id="subtitle"]]
+[[!template text="""And then it gets pumped out by Org mode into a file""" start="00:07:43.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that looks like this: tab-separated values""" start="00:07:53.560" video="mainVideo-health" id="subtitle"]]
+[[!template text="""with an ISO-style date at the beginning.""" start="00:07:59.841" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""So what we're going to do is we're going to go through""" start="00:08:03.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""the Gnuplot portion of this,""" start="00:08:10.360" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and I'm going to enlarge the font a little.""" start="00:08:14.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I'm going to go line by line through the Gnuplot portion.""" start="00:08:21.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Now, my template generator will give you one like this.""" start="00:08:23.720" video="mainVideo-health" id="subtitle"]]
+[[!template text="""You don't have to write this from scratch.""" start="00:08:30.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""But I'm going to go through it line by line""" start="00:08:33.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""because if you do use the template,""" start="00:08:35.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""then it'll help to have gone through it line by line,""" start="00:08:37.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""because you're probably going to have to modify it.""" start="00:08:42.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So first, we're going to clear the graphics""" start="00:08:46.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""from any previous runs""" start="00:08:49.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""so that if we reuse the same Gnuplot process,""" start="00:08:50.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""we're not overwriting the old--""" start="00:08:53.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that we are completely overwriting the old image.""" start="00:08:57.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So that's the purpose of this line here.""" start="00:09:00.720" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""The output parameters: we want to put out an SVG file.""" start="00:09:03.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Font Arial, that's funny,""" start="00:09:08.560" video="mainVideo-health" id="subtitle"]]
+[[!template text="""but I don't know what font it's actually ending up choosing,""" start="00:09:13.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""but it looks fine.""" start="00:09:16.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Then we want it to be square,""" start="00:09:16.880" video="mainVideo-health" id="subtitle"]]
+[[!template text="""so I'm giving it 900 by 900 pixels,""" start="00:09:19.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""even though it is a scalable vector graphic.""" start="00:09:21.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""We're putting it in the same folder as the org file,""" start="00:09:23.720" video="mainVideo-health" id="subtitle"]]
+[[!template text="""example.svg.""" start="00:09:29.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""These lines here set it up to use the Org mode format""" start="00:09:30.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that we showed in the other file over here.""" start="00:09:39.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""The time format is four-digit year, two-digit month,""" start="00:09:42.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""two-digit day.""" start="00:09:48.360" video="mainVideo-health" id="subtitle"]]
+[[!template text="""The time format doesn't specify here the time,""" start="00:09:50.360" video="mainVideo-health" id="subtitle"]]
+[[!template text="""but that doesn't seem to mess it up.""" start="00:09:56.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This line &quot;set datafile separator&quot; means that""" start="00:09:59.600" video="mainVideo-health" id="subtitle"]]
+[[!template text="""the separators between that""" start="00:10:02.440" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and between all the other fields are tabs,""" start="00:10:04.240" video="mainVideo-health" id="subtitle"]]
+[[!template text="""which is what Org mode does""" start="00:10:06.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""when it spits out a table by default.""" start="00:10:08.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Okay, along to the next lines.""" start="00:10:11.000" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""We're going to set up for time series data,""" start="00:10:15.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""meaning that the x-axis is going to be time,""" start="00:10:18.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""x2tics 1 format.""" start="00:10:22.808" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I believe this means that every day has one tick""" start="00:10:26.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and that this tells it that the first--""" start="00:10:30.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""unfortunately, I forget the exact meaning of this one line.""" start="00:10:32.880" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I'm just going to move on. We want one X tick per day,""" start="00:10:39.360" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and because X is in seconds,""" start="00:10:44.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""it's 24 hours times 60 minutes times 60 seconds.""" start="00:10:46.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This line &quot;set grid xtics&quot; gives us""" start="00:10:50.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""a vertical line on each day of the graph.""" start="00:10:55.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I'll pull up the graph""" start="00:10:57.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""just so that it's a little easier to see.""" start="00:10:58.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""All these vertical lines, one on each day,""" start="00:11:00.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that's given to you by &quot;set grid xtics&quot;.""" start="00:11:03.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""One Y tick every five points.""" start="00:11:06.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So here at five pieces of nicotine,""" start="00:11:10.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""we've got a five, at ten pieces – well,""" start="00:11:13.720" video="mainVideo-health" id="subtitle"]]
+[[!template text="""we don't want to eat ten pieces, but ten, fifteen, twenty.""" start="00:11:15.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Rotating the labels to make them fit a little bit better,""" start="00:11:19.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that's this part here where the labels are sideways,""" start="00:11:25.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and even with just one month of data,""" start="00:11:28.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""they're getting a little crowded.""" start="00:11:30.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This &quot;set key box lc&quot; just makes the line around the key,""" start="00:11:35.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""the legend here, a little bit less severe.""" start="00:11:41.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""set xtics format: this makes it so that, for example,""" start="00:11:44.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I've done a United-States-style date here""" start="00:11:51.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""with the month and then the day.""" start="00:11:53.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""You don't necessarily have to do that.""" start="00:11:55.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""You can have whatever you want.""" start="00:11:58.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This xtics format,""" start="00:12:01.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that relates to how the dates are printed.""" start="00:12:03.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Remember that over here, this set timefmt,""" start="00:12:06.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that relates to how the dates are formatted""" start="00:12:12.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""in the Org mode output.""" start="00:12:15.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So remember, those are two...""" start="00:12:17.000" video="mainVideo-health" id="subtitle"]]
+[[!template text="""You don't want to mix those up.""" start="00:12:18.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""All right, &quot;yrange [0:40]&quot;.""" start="00:12:19.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Thus far, my exercise sessions have all been""" start="00:12:23.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""less than 30 minutes, and nothing's gone over 30.""" start="00:12:28.720" video="mainVideo-health" id="subtitle"]]
+[[!template text="""If you have a health variable""" start="00:12:31.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that is in a significantly different range,""" start="00:12:35.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""you may need to get a slightly more complicated""" start="00:12:38.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Gnuplot script because it is possible to plot""" start="00:12:41.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""multiple yranges in one plot""" start="00:12:43.720" video="mainVideo-health" id="subtitle"]]
+[[!template text="""if you have a variable that uses a different range.""" start="00:12:46.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""It's just a little trickier.""" start="00:12:48.720" video="mainVideo-health" id="subtitle"]]
+[[!template text="""These parts here, aside from the fact""" start="00:12:49.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that you might make some changes that relate to""" start="00:12:55.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""the date and your country format,""" start="00:12:59.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""are going to be the same.""" start="00:13:01.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This is like boilerplate for almost anything.""" start="00:13:03.240" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""Now here are the parts that are going to vary""" start="00:13:05.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""depending on what health variables you want to store.""" start="00:13:09.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""There are three main sections here.""" start="00:13:13.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""One is setting the different line types that are used.""" start="00:13:18.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Setting linetype 1 with line width 2, line color RGB.""" start="00:13:28.720" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Unfortunately, Gnuplot is a little bit cryptic,""" start="00:13:32.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""which is why I've made this template generator""" start="00:13:34.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that I'll show you in a moment.""" start="00:13:36.880" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I pick a color. So this is exercise, forest green.""" start="00:13:38.000" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Point size 1, meaning you get""" start="00:13:43.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""these little green triangles about that size.""" start="00:13:49.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""But the point type 9 is the pointing up triangle.""" start="00:13:51.600" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Line type 2, purple. So that's the sleep line.""" start="00:13:54.720" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So we're just establishing these different line types""" start="00:13:59.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that we've given arbitrary numbers.""" start="00:14:03.000" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Now onto the next section.""" start="00:14:04.720" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Oh, before I move on here,""" start="00:14:08.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""you can see point type 11 for line 5, which is red.""" start="00:14:12.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""And that's the missed medications line,""" start="00:14:16.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""so you get a triangle that's upside down""" start="00:14:18.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""because that's point shape 11.""" start="00:14:20.640" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""All right. The next section here is the goal lines.""" start="00:14:22.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""There are horizontal dashed lines here""" start="00:14:27.880" video="mainVideo-health" id="subtitle"]]
+[[!template text="""at 8 purple hours of sleep, because 8 hours is the goal.""" start="00:14:33.441" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So there's a horizontal line at Y = 8.""" start="00:14:37.360" video="mainVideo-health" id="subtitle"]]
+[[!template text="""For pieces of nicotine gum,""" start="00:14:41.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I'm trying to keep it to around 5 right now.""" start="00:14:43.880" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So my goal line is at 5. So these...""" start="00:14:46.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Here, a goal of at least 20 minutes of exercise.""" start="00:14:52.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Sometimes I get more, sometimes I get less.""" start="00:14:56.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""There's a green line and a 20, showing that that's the goal.""" start="00:14:59.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""These lines here are actually the goal lines.""" start="00:15:02.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""You can specify the goal for each one""" start="00:15:06.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""in the template generator that I'll show you.""" start="00:15:09.120" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""The last part is the actual plot command.""" start="00:15:12.000" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So the dependent... So okay,""" start="00:15:28.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""these all start with 1, &quot;using 1&quot; against this variable.""" start="00:15:30.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So $2... This is a ternary operator here""" start="00:15:34.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that says if the value of the second column is zero,""" start="00:15:41.600" video="mainVideo-health" id="subtitle"]]
+[[!template text="""then don't plot a point. In other words,""" start="00:15:49.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""not a number means it won't plot a point.""" start="00:15:52.360" video="mainVideo-health" id="subtitle"]]
+[[!template text="""The template generator lets you skip over""" start="00:15:56.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""the details of that. It sticks this in there.""" start="00:15:58.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I'll show you.""" start="00:16:02.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So we only want to plot a point when the value is non-zero.""" start="00:16:02.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""If there was no exercise, we're not plotting a point.""" start="00:16:09.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""The with construct means we'll plot data""" start="00:16:12.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""using date against exercise with points,""" start="00:16:15.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""the title is &quot;exercise (minutes)&quot;, line type 1.""" start="00:16:21.341" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Remember, we established line type 1 up here""" start="00:16:25.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""as being forest green, point style 1,""" start="00:16:29.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""point type 9, green triangles.""" start="00:16:35.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Now I'm going to show 1 against column 3,""" start="00:16:37.600" video="mainVideo-health" id="subtitle"]]
+[[!template text="""which is &quot;hours of sleep&quot;.""" start="00:16:42.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This one is plotted with lines,""" start="00:16:43.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""so we don't specify a point type or point size,""" start="00:16:46.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""just a line type 2. And remember, you can see""" start="00:16:48.600" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that line type 2 is defined as purple""" start="00:16:51.720" video="mainVideo-health" id="subtitle"]]
+[[!template text="""with point type 1, point size 1.""" start="00:16:55.241" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Okay, so I did specify point size and point type,""" start="00:16:57.360" video="mainVideo-health" id="subtitle"]]
+[[!template text="""but because I'm not plotting with points,""" start="00:16:59.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""those are ignored.""" start="00:17:01.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Here we come to the line with nicotine.""" start="00:17:02.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""The fourth column is the nicotine number,""" start="00:17:08.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""the fourth column from the Org mode file.""" start="00:17:11.560" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So here you can see how we're telling Gnuplot""" start="00:17:13.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""to take each column of the tab-separated Org mode file""" start="00:17:16.008" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and put it into the graph.""" start="00:17:19.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""The line types are set up here.""" start="00:17:21.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""The goal lines are set up here.""" start="00:17:25.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""And then the actual plot command is set up here.""" start="00:17:30.800" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""So now we're going to work further backwards""" start="00:17:35.560" video="mainVideo-health" id="subtitle"]]
+[[!template text="""from this Gnuplot template""" start="00:17:41.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""to the template generator that I used to make it.""" start="00:17:42.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Now I'm not going to go into""" start="00:17:46.560" video="mainVideo-health" id="subtitle"]]
+[[!template text="""all of the details of the code,""" start="00:18:01.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""but what I am going to show you is that""" start="00:18:03.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""there's a variable called `health-factors`.""" start="00:18:06.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""And what this does, this `health-factors-from-list`""" start="00:18:10.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""lets you specify, with a property list""" start="00:18:15.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""of keyword and value pairs""" start="00:18:20.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""(here's the keyword name and the value is exercise),""" start="00:18:22.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""the goal that I want 20 minutes of exercise,""" start="00:18:24.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that the unit is minutes,""" start="00:18:28.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that the color is forest green, and so on.""" start="00:18:30.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""The aspects of the Gnuplot setup""" start="00:18:36.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""have been abstracted here.""" start="00:18:39.440" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Eight hours of sleep is the goal here.""" start="00:18:43.560" video="mainVideo-health" id="subtitle"]]
+[[!template text="""The hours are units. What color,""" start="00:18:49.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""what thickness of the line.""" start="00:18:54.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Here we specify the number of points.""" start="00:18:55.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""There's references online""" start="00:19:00.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that show you what point types are what shapes in Gnuplot,""" start="00:19:01.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and so on and so forth.""" start="00:19:05.200" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""I'll walk through the code a little bit that does this,""" start="00:19:11.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that actually takes these pieces,""" start="00:19:17.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that takes this specification of what your variables are""" start="00:19:20.440" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and turns it into a template.""" start="00:19:24.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""First, I'm using EIEIO,""" start="00:19:30.440" video="mainVideo-health" id="subtitle"]]
+[[!template text="""the object system that's included with GNU Emacs.""" start="00:19:37.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""It's a reasonable facsimile""" start="00:19:41.720" video="mainVideo-health" id="subtitle"]]
+[[!template text="""of the Common Lisp Object System.""" start="00:19:45.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""What I'm going to be doing here""" start="00:19:47.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""is defining a class with each of those items,""" start="00:19:51.240" video="mainVideo-health" id="subtitle"]]
+[[!template text="""those properties that we talked about in that list""" start="00:19:56.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that lets you specify name, what the goal is,""" start="00:19:58.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""what the units are, and the Gnuplot things""" start="00:20:01.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""(the Gnuplot parameters like thickness,""" start="00:20:04.240" video="mainVideo-health" id="subtitle"]]
+[[!template text="""plot type, and all that) into a class that will then""" start="00:20:06.560" video="mainVideo-health" id="subtitle"]]
+[[!template text="""spit out the template once you feed it""" start="00:20:13.240" video="mainVideo-health" id="subtitle"]]
+[[!template text="""some of these health factor objects. So just a moment.""" start="00:20:16.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""For example, you can see that this template""" start="00:20:27.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""originally came from being generated by this code here.""" start="00:20:34.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""To use the template,""" start="00:20:46.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""to use this little template generator...""" start="00:20:52.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""See, here's where it spits out the line type""" start="00:20:55.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""given the pieces.""" start="00:21:06.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This is all just text formatting.""" start="00:21:07.440" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This is one of the things that Emacs Lisp""" start="00:21:09.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""just really excels at.""" start="00:21:11.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I need to take a piece of data""" start="00:21:13.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""like a list of health information,""" start="00:21:19.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""a list of health variables, what their units are,""" start="00:21:22.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and how they're supposed to be formatted in Gnuplot,""" start="00:21:25.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and go from that to the nice template.""" start="00:21:28.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So that's pretty much the whole thing.""" start="00:21:30.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I want to see if there's anything I missed.""" start="00:21:31.720" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""Bring up the chart.""" start="00:21:41.000" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This has been really useful""" start="00:21:51.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""for communicating with healthcare professionals""" start="00:21:54.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""because you are both on the same page""" start="00:21:59.600" video="mainVideo-health" id="subtitle"]]
+[[!template text="""about exactly what is happening,""" start="00:22:04.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""what's been happening because if... Let's say""" start="00:22:05.880" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that you're tired when you talk to your care provider.""" start="00:22:10.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Well, if you have objective information""" start="00:22:15.240" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that you've been recording every day,""" start="00:22:17.560" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that you're ahead of the game, really,""" start="00:22:18.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""because you don't need, necessarily, the presence of mind""" start="00:22:22.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""to be able to give your care provider""" start="00:22:25.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""a complete picture of what's going on in your world.""" start="00:22:27.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""If you can find those few minutes a day to enter--""" start="00:22:30.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""not even a few minutes,""" start="00:22:33.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""really just a minute to enter the data""" start="00:22:34.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and say what happened yesterday...""" start="00:22:37.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I'm finding over these months""" start="00:22:39.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that I've been more in touch with my health when I can--""" start="00:22:42.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""not forced, but when I have the habit,""" start="00:22:45.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""the consistent habit every single day""" start="00:22:49.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""of recording that data--I'm accountable to myself.""" start="00:22:52.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""It's interesting.""" start="00:22:55.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I guess it gets into a little bit of ideas""" start="00:22:57.360" video="mainVideo-health" id="subtitle"]]
+[[!template text="""about the Quantified Self""" start="00:23:01.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and how holding yourself accountable""" start="00:23:02.440" video="mainVideo-health" id="subtitle"]]
+[[!template text="""can change what you do and what the outcomes are.""" start="00:23:05.240" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Just look at this here.""" start="00:23:09.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Without getting into too much detail,""" start="00:23:14.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""one of the reasons I track my sleep is because,""" start="00:23:17.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""as you can see, my sleep""" start="00:23:19.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""is not as well-regulated as most people,""" start="00:23:22.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and that's why I need to do that.""" start="00:23:26.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This was a time... 10, 12,""" start="00:23:31.440" video="mainVideo-health" id="subtitle"]]
+[[!template text="""here's 14 hours of sleep, that's depression.""" start="00:23:34.441" video="mainVideo-health" id="subtitle"]]
+[[!template text="""It oscillates a little bit. But then below the goal line,""" start="00:23:36.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""the things are a little more normal here.""" start="00:23:43.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This is a little more normal.""" start="00:23:45.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""But then, really, without thinking about it too much,""" start="00:23:46.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I cut out the nicotine, and my sleep suffered.""" start="00:23:52.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Just the fact that I'm able to look and see that connection""" start="00:23:56.240" video="mainVideo-health" id="subtitle"]]
+[[!template text="""is really amazing to me.""" start="00:24:00.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Maybe I would have anyway,""" start="00:24:01.360" video="mainVideo-health" id="subtitle"]]
+[[!template text="""but looking at the whole months of data,""" start="00:24:02.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""there have been many things to discuss""" start="00:24:05.240" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and many things to think about.""" start="00:24:07.400" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""Because this is a short presentation,""" start="00:24:09.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I probably should wrap up.""" start="00:24:12.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I just want to thank the whole Emacs community""" start="00:24:13.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""for being there and for including me in the conference""" start="00:24:18.240" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and I hope to participate next year as well.""" start="00:24:23.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Thank you so much.""" start="00:24:27.080" video="mainVideo-health" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20health%3A%20Health%20data%20journaling%20and%20visualization%20with%20Org%20Mode%20and%20gnuplot)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/health-before.md b/2022/info/health-before.md
new file mode 100644
index 00000000..68441993
--- /dev/null
+++ b/2022/info/health-before.md
@@ -0,0 +1,56 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, David O'Toole shares how he tracked and graphed his personal data using Org mode and Gnuplot, and how you can use a template generator to do the same. Afterwards, he will handle questions over BigBlueButton.
+
+
+The following image shows where the talk is in the schedule for Sat 2022-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="health">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect stroke-width="3" x="564" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 25-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-health>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: TO_CAPTION_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-03T20:00:00Z" end="2022-12-03T20:25:00Z"><div class="conf-time">Saturday, Dec 3 2022, ~3:00 PM - 3:25 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 3 2022, ~2:00 PM - 2:25 PM CST (US/Central)<br />Saturday, Dec 3 2022, ~1:00 PM - 1:25 PM MST (US/Mountain)<br />Saturday, Dec 3 2022, ~12:00 PM - 12:25 PM PST (US/Pacific)<br />Saturday, Dec 3 2022, ~8:00 PM - 8:25 PM UTC <br />Saturday, Dec 3 2022, ~9:00 PM - 9:25 PM CET (Europe/Paris)<br />Saturday, Dec 3 2022, ~10:00 PM - 10:25 PM EET (Europe/Athens)<br />Sunday, Dec 4 2022, ~1:30 AM - 1:55 AM IST (Asia/Kolkata)<br />Sunday, Dec 4 2022, ~4:00 AM - 4:25 AM +08 (Asia/Singapore)<br />Sunday, Dec 4 2022, ~5:00 AM - 5:25 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/gen/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="health-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="health-mainVideo" data="""
+00:00.000 Introduction
+00:33.640 How to take daily health journal items
+01:59.440 How to set up your org templates
+03:38.320 How to do it in GNU Emacs
+04:16.840 Overview of the presentation
+04:51.960 The journal
+05:52.800 The capture buffer
+06:51.320 The columnview table
+08:03.480 Gnuplot
+09:03.320 Output parameters
+10:15.480 Time series data
+13:05.920 Health variables
+14:22.680 Goal lines
+15:12.000 The Gnuplot command
+17:35.560 The template generator
+19:11.480 The code that creates a template
+21:41.000 The power of the chart
+24:09.920 Thanks
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main.webm">Download --main.webm (95MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main.opus">Download --main.opus (17MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/j4M57ijUYE4DMVwT9X3CYB">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="health-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="health-qanda" data="""
+00:50.800 Do you use this just for yourself? Or do you use this to discuss/show with doctors/health professionals?
+02:38.157 How do you input the health data?
+03:53.121 How do you track the various health statistics that you are gathering?
+04:50.422 It's possible to download data from the Apple watch's health app. Is it easy enough to incorporate those .csv files into your implementation of Gnuplot?
+06:48.800 Regarding the medication tracking you only have option to record missed or not. If one needs to take multiple medication throughout the day, how would you propose to track that? Within gnuplot or separate?
+08:27.720 How's the workflow when working on the gnuplot code?
+09:07.680 How much time does it take to process the amount of data that you add inside GNU Emacs?
+09:38.190 Will indent-guide behave well with yaml files for helm?
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="health-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--answers.webm">Download --answers.webm (95MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--answers.opus">Download --answers.opus (6.8MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/health-nav.md b/2022/info/health-nav.md
new file mode 100644
index 00000000..15fa5106
--- /dev/null
+++ b/2022/info/health-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/maint">Maintaining the Maintainers: Attribution as an Economic Model for Open Source</a>
+Next by track: <a href="/2022/talks/eev">Bidirectional links with eev</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/hyperorg-after.md b/2022/info/hyperorg-after.md
new file mode 100644
index 00000000..2de66414
--- /dev/null
+++ b/2022/info/hyperorg-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20hyperorg%3A%20Powerful%20productivity%20with%20Hyperbole%20and%20Org%20Mode)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/hyperorg-before.md b/2022/info/hyperorg-before.md
new file mode 100644
index 00000000..2b52af8c
--- /dev/null
+++ b/2022/info/hyperorg-before.md
@@ -0,0 +1,12 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Bob Weiner discusses utilizing GNU Hyperbole action-oriented buttons in Org mode documents for interactive demos and task automation.
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="hyperorg-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-hyperorg--powerful-productivity-with-hyperbole-and-org-mode--robert-weiner--main.webm" />${captions}<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-hyperorg--powerful-productivity-with-hyperbole-and-org-mode--robert-weiner--main.webm">Download --main.webm (110MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-hyperorg--powerful-productivity-with-hyperbole-and-org-mode--robert-weiner--main.opus">Download --main.opus (19MB)</a></li><li><a href="https://toobnix.org/w/uz8zLQWbjGC49LSx3Y1Vx7">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="hyperorg-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-hyperorg--powerful-productivity-with-hyperbole-and-org-mode--robert-weiner--answers.webm" />${captions}<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="hyperorg-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-hyperorg--powerful-productivity-with-hyperbole-and-org-mode--robert-weiner--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-hyperorg--powerful-productivity-with-hyperbole-and-org-mode--robert-weiner--answers.webm">Download --answers.webm (42MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-hyperorg--powerful-productivity-with-hyperbole-and-org-mode--robert-weiner--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-hyperorg--powerful-productivity-with-hyperbole-and-org-mode--robert-weiner--answers.opus">Download --answers.opus (15MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/hyperorg-nav.md b/2022/info/hyperorg-nav.md
new file mode 100644
index 00000000..d22df26b
--- /dev/null
+++ b/2022/info/hyperorg-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/rms">What I'd like to see in Emacs</a>
+Next by track: <a href="/2022/talks/detached">Getting detached from Emacs</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/indieweb-after.md b/2022/info/indieweb-after.md
new file mode 100644
index 00000000..ffe7d3c2
--- /dev/null
+++ b/2022/info/indieweb-after.md
@@ -0,0 +1,364 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="indieweb-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hey everyone, I'm Michael,""" start="00:00:00.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and I'm going to be talking about""" start="00:00:02.280" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Org mode and the IndieWeb.""" start="00:00:03.640" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I am located in the San Francisco Bay Area,""" start="00:00:06.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""where I'm a developer as well as""" start="00:00:08.840" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""a longtime Emacs user.""" start="00:00:10.321" video="mainVideo-indieweb" id="subtitle"]]
+[[!template new="1" text="""So, I maintain a personal website using Org mode.""" start="00:00:14.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""If you're watching this talk,""" start="00:00:17.560" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I'm going to guess that you probably are too.""" start="00:00:19.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""For anybody who isn't,""" start="00:00:21.560" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""let me explain exactly what I mean by that.""" start="00:00:24.880" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I have a static website. I author the pages""" start="00:00:28.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""in Org mode's markup language,""" start="00:00:32.280" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""otherwise known as Orgdown.""" start="00:00:34.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I use the Org export facility""" start="00:00:36.280" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""to transcode that markup to HTML.""" start="00:00:38.440" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""And then I just use rsync to push""" start="00:00:43.760" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""the resulting HTML pages up to a VPS.""" start="00:00:47.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I like the workflow.""" start="00:00:51.760" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""It's familiar to me as a coder.""" start="00:00:52.854" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I get to use familiar tools like Git and Make.""" start="00:00:57.840" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Publishing and then pushing the site""" start="00:01:03.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""to a local test server is just `make`.""" start="00:01:06.120" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Pushing it to the live site is just `make prod`.""" start="00:01:09.800" video="mainVideo-indieweb" id="subtitle"]]
+[[!template new="1" text="""That said, certain problems made themselves apparent""" start="00:01:13.880" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""with this arrangement pretty quickly.""" start="00:01:18.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Commenting was one. It's very difficult""" start="00:01:22.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""to support commenting on a static website.""" start="00:01:25.840" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I've got no database.""" start="00:01:28.200" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I have no real server, and so on.""" start="00:01:29.501" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Yes, of course, there is Disqus""" start="00:01:34.120" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and other third party services""" start="00:01:35.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that will do this for you,""" start="00:01:37.868" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""but I was uncomfortable outsourcing that job.""" start="00:01:38.800" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""And it was more than just comments.""" start="00:01:43.880" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""There was a general sense of isolation.""" start="00:01:45.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""There's no connection to places""" start="00:01:48.360" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""like Reddit, or Mastodon, or Twitter,""" start="00:01:50.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""you know, where all the people are.""" start="00:01:53.360" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I guess you can post, then Tweet a link to it.""" start="00:01:56.560" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""But suppose somebody responds to your Tweet.""" start="00:01:59.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Now you've got a conversation going on on Twitter""" start="00:02:01.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that you're a visitor, and""" start="00:02:05.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that a non-Twitter-using visitor to your site""" start="00:02:07.640" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""would be completely disconnected from.""" start="00:02:09.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I am seeing people using Reddit effectively""" start="00:02:15.400" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""as the comment section for their sites.""" start="00:02:19.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""But unless you've got an audience, you know,""" start="00:02:22.640" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""the size of Derek's or Amos's,""" start="00:02:24.760" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I don't think that's really feasible either.""" start="00:02:27.720" video="mainVideo-indieweb" id="subtitle"]]
+[[!template new="1" text="""Now, after casting about for some time,""" start="00:02:32.040" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I stumbled upon something called the IndieWeb.""" start="00:02:34.200" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""In their own words, the IndieWeb is""" start="00:02:37.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""a community of independent and personal websites""" start="00:02:39.280" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""connected by simple standards based on""" start="00:02:41.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""the principles of owning your domain""" start="00:02:44.401" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and using it as your primary identity,""" start="00:02:46.720" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""publishing on your own site,""" start="00:02:48.480" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and optionally syndicating elsewhere,""" start="00:02:50.360" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and owning your data.""" start="00:02:52.418" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I would describe it as a collection of individuals""" start="00:02:54.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""who've chosen to own their own platforms,""" start="00:02:57.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""alongside a loosely specked set of standards""" start="00:03:01.360" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that tie those sites together.""" start="00:03:05.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""And it's really those standards""" start="00:03:07.480" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that make the IndieWeb""" start="00:03:09.218" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""more than just a call for everybody""" start="00:03:10.640" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""to go back to the arts""" start="00:03:13.120" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and blog on on their own sites.""" start="00:03:14.735" video="mainVideo-indieweb" id="subtitle"]]
+[[!template new="1" text="""Now, this presentation isn't going to""" start="00:03:17.800" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""focus on the IndieWeb as such.""" start="00:03:19.640" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""It's more about using Org mode""" start="00:03:21.480" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""to put your site on the IndieWeb.""" start="00:03:23.360" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I'm a little limited by time here,""" start="00:03:24.640" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""so I'm going to focus on""" start="00:03:28.040" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""just one of those protocols,""" start="00:03:30.351" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and that's Webmentions.""" start="00:03:32.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""So, what's a Webmention?""" start="00:03:33.400" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Let's begin with the inveterate Alice,""" start="00:03:35.720" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""who has a website""" start="00:03:38.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and has posted content to that site.""" start="00:03:39.468" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Her old friend Bob comes along,""" start="00:03:42.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""notices that content""" start="00:03:46.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and wishes to say something about it.""" start="00:03:47.440" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""He posts to his site""" start="00:03:49.360" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and his publication software will,""" start="00:03:51.468" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""if it supports Webmentions,""" start="00:03:54.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""will notice that he's mentioned Alice's post.""" start="00:03:57.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""At that point, his publication software""" start="00:04:00.160" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""reaches out to Alice's site,""" start="00:04:04.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""asks for the mentioned document,""" start="00:04:07.240" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and will examine it to see""" start="00:04:11.040" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""if Alice advertises an endpoint at her site""" start="00:04:12.560" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""capable of receiving Webmentions.""" start="00:04:15.600" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""In this case, it does.""" start="00:04:18.160" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""So, Bob's publishing software does it.""" start="00:04:19.600" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""At the end of the day,""" start="00:04:23.480" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""a Webmention is really just""" start="00:04:24.468" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""an HTTP post request with two parameters,""" start="00:04:26.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""a source and a target.""" start="00:04:30.360" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""On receipt, Alice's server will""" start="00:04:33.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""reach out to Bob's site,""" start="00:04:36.818" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""request the document that contains the mention,""" start="00:04:39.400" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and validate it, decide whether or not""" start="00:04:43.280" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""she wants to accept the Webmention.""" start="00:04:45.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""In this case, it's legit, it's accepted,""" start="00:04:48.120" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and Alice chooses to make a note,""" start="00:04:50.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""to update her content,""" start="00:04:54.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""to make a note of the fact""" start="00:04:56.760" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that it was mentioned by Bob.""" start="00:04:58.720" video="mainVideo-indieweb" id="subtitle"]]
+[[!template new="1" text="""Now a couple of things to note here.""" start="00:05:00.600" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""The first is that this is effectively""" start="00:05:01.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""decentralized commenting.""" start="00:05:03.480" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Both parties own their content,""" start="00:05:04.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and there's no third party involved,""" start="00:05:07.440" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""trusted or otherwise.""" start="00:05:09.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Now at this point, you might object that, well,""" start="00:05:13.640" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""as the owner of a statically generated site,""" start="00:05:16.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I have essentially none of the infrastructure""" start="00:05:18.720" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I need to implement this.""" start="00:05:21.600" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I have no server above and beyond Apache.""" start="00:05:22.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I can't really…, I have no database.""" start="00:05:27.120" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I guess you could send Webmentions with curl,""" start="00:05:30.600" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""but now to do Webmention endpoint discovery,""" start="00:05:33.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""you're going to be parsing arbitrary HTML.""" start="00:05:37.040" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""It's a lot of work.""" start="00:05:39.640" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""That's okay. There are sites out there""" start="00:05:41.120" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that offer Webmentions as a service.""" start="00:05:45.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""So, let's take a look at how that goes.""" start="00:05:48.840" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""We return to our original example.""" start="00:05:51.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Alice continues to advertise an endpoint""" start="00:05:54.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""capable of receiving Webmentions,""" start="00:05:57.840" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""but it's no longer on her site.""" start="00:06:00.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""It's at webmention.io.""" start="00:06:01.840" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Bob is essentially in the same position,""" start="00:06:03.840" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""but he now has in his world""" start="00:06:08.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""a third party site called Telegraph.""" start="00:06:09.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""When Bob wants to publish,""" start="00:06:13.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""he no longer needs to go through all the work""" start="00:06:16.040" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""of sending Webmention,""" start="00:06:19.760" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and of carrying out Webmention endpoint discovery.""" start="00:06:21.760" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""He sends one API request to Telegraph,""" start="00:06:25.280" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""effectively saying, please send a Webmention for me.""" start="00:06:27.880" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Asynchronously, telegraph.io is going to""" start="00:06:31.120" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""retrieve Alice's post,""" start="00:06:36.640" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""do Webmention endpoint discovery,""" start="00:06:38.718" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and send the Webmention on Bob's behalf.""" start="00:06:41.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Except this time he's sending it to webmention.io.""" start="00:06:45.400" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Now, at some arbitrary point in the future,""" start="00:06:48.280" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Alice can ask webmention.io,""" start="00:06:53.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""&quot;Hey, do I have any new Webmentions?&quot;""" start="00:06:55.800" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""And if she does, she may choose""" start="00:06:57.720" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""to update her content and publish.""" start="00:07:00.480" video="mainVideo-indieweb" id="subtitle"]]
+[[!template new="1" text="""Okay, so let's code this up.""" start="00:07:04.160" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Now, I'm recording this talk""" start="00:07:07.240" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""about a month ahead of time""" start="00:07:09.120" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and I haven't been able to put together""" start="00:07:10.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""a little demo project.""" start="00:07:12.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Hopefully, I can hack something together""" start="00:07:13.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""before this video streams.""" start="00:07:16.600" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""But in the meantime,""" start="00:07:18.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I'd like to imagine a little test site.""" start="00:07:20.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""It has a single page,""" start="00:07:22.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""maybe we'll call it index.org,""" start="00:07:25.218" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and we're going to publish it.""" start="00:07:28.880" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""We're going to export it to""" start="00:07:30.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""a subdirectory of our project directory,""" start="00:07:32.600" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""simply called www.""" start="00:07:35.840" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""So, the entry point to the Org export system""" start="00:07:39.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""is the function org-publish,""" start="00:07:44.800" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""whose docstring helpfully says,""" start="00:07:46.640" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""it publishes all projects.""" start="00:07:49.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""The set of all projects is defined by""" start="00:07:52.240" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""the variable `org-publish-project-alist`,""" start="00:07:56.760" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""which is a very flexible association list""" start="00:07:59.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that lets you define""" start="00:08:02.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""what files are in your project,""" start="00:08:03.868" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""how you wish to export them,""" start="00:08:05.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""where they're going to go, etc, etc, etc.""" start="00:08:07.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""So great. This is actually pretty straightforward.""" start="00:08:10.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""We just give ourselves a little Elisp file""" start="00:08:13.840" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and a single function.""" start="00:08:15.880" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I'll call it publish,""" start="00:08:17.040" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and all it will do is define""" start="00:08:18.640" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""`org-publish-project-alist`""" start="00:08:22.360" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and invoke `org-publish-all`.""" start="00:08:25.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""At that point, exporting is a one-liner.""" start="00:08:26.840" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""We just invoke Emacs, load up our site.el file,""" start="00:08:31.880" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and invoke the publish function.""" start="00:08:35.560" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""And if we want to publish to the live server,""" start="00:08:37.280" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that's just another one-liner of ours.""" start="00:08:43.668" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""So, that's the publication framework.""" start="00:08:45.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template new="1" text="""Now, let's take a look at sending Webmentions.""" start="00:08:48.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""The idea is that we're going to""" start="00:08:51.280" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""get our fingers into the publication process.""" start="00:08:54.400" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Note when we see a Webmention in""" start="00:08:57.240" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""the process of exporting our Orgdown,""" start="00:09:01.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and write it out to disk for sending later on.""" start="00:09:04.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Now, I didn't want to send a Webmention""" start="00:09:07.840" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""for every single link in the post.""" start="00:09:11.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I wanted this to be an intentional choice.""" start="00:09:13.040" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""And it turns out there are""" start="00:09:14.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""different sorts of Webmentions""" start="00:09:16.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""you can make on a page.""" start="00:09:19.120" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""For instance, if you add""" start="00:09:20.160" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""the CSS class u-in-reply-to to your link,""" start="00:09:22.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""the recipient will""" start="00:09:26.800" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""interpret this Webmention as a reply.""" start="00:09:28.635" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""There are similar CSS classes""" start="00:09:30.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""for likes, reposts, and generalized mentions.""" start="00:09:33.440" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""When the recipient gets your Webmention,""" start="00:09:37.240" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""if they want to know who's talking to them,""" start="00:09:42.800" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""they need to parse your page""" start="00:09:45.640" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and look for DOM elements with certain CSS classes""" start="00:09:47.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""defined by the protocol as well.""" start="00:09:51.800" video="mainVideo-indieweb" id="subtitle"]]
+[[!template new="1" text="""I'm a visual thinker,""" start="00:09:54.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""so I kind of drew out the process of publication,""" start="00:09:57.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and exactly where we're going to""" start="00:10:00.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""get our fingers into this.""" start="00:10:03.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""So, this is me invoking make,""" start="00:10:05.160" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""which of course fires up Emacs.""" start="00:10:07.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Just as before, my publish function will define""" start="00:10:09.800" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""`org-publish-project-alist` with one difference.""" start="00:10:14.440" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""There is an attribute,""" start="00:10:17.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""a property in the list called `publishing-function`.""" start="00:10:21.040" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""We're going to need to customize that.""" start="00:10:23.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""As usual, we then call…,""" start="00:10:26.280" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""we kick off the process by calling `org-publish-all`.""" start="00:10:28.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""org-publish-all will invoke""" start="00:10:31.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""your publishing function""" start="00:10:36.468" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""for each page, and it will hand to""" start="00:10:37.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""your publishing function for each page.""" start="00:10:40.560" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""The name of the file you're publishing,""" start="00:10:42.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""where it's going, and a parameter entitled plist.""" start="00:10:45.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""This is not super well documented.""" start="00:10:50.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""There are points in the docs""" start="00:10:53.200" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that refer to this as a communication channel.""" start="00:10:55.280" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""What I discovered by simply reading the code was that""" start="00:10:57.440" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""it's a property list that is initialized""" start="00:11:01.800" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""for each invocation of your publication function.""" start="00:11:04.560" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""The initial properties are""" start="00:11:09.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""inherited from your project,""" start="00:11:13.560" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""but you are free to add properties as you go""" start="00:11:16.200" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""to communicate between different portions""" start="00:11:20.801" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""of the publication process.""" start="00:11:23.880" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""My publication function really does one thing,""" start="00:11:25.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and that's simply swap out the HTML template""" start="00:11:30.400" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that's passed to `org-publish-to`.""" start="00:11:34.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template new="1" text="""Now, in order to take note of""" start="00:11:36.840" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""each Webmention that I send,""" start="00:11:43.696" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I took advantage of another""" start="00:11:45.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Org mode extension point""" start="00:11:47.585" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""called defining new link types.""" start="00:11:49.880" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Here you can see""" start="00:11:52.720" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I've created a new link type called reply.""" start="00:11:54.851" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""One of the attributes that you can attach to this""" start="00:11:58.560" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""is the function that is used to export your link.""" start="00:12:01.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I've elided the code for""" start="00:12:06.160" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""mentions, likes, and reposts.""" start="00:12:08.562" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""If you look at my export function,""" start="00:12:10.720" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""you can see that it ultimately yields""" start="00:12:13.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""the appropriate HTML for this link.""" start="00:12:16.280" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Before that, it calls a little helper function""" start="00:12:19.440" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that will pull out the actual""" start="00:12:22.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""target URL of the link""" start="00:12:24.518" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and shove it into this communication channel""" start="00:12:26.160" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""under the property name `sp1ff/mentions`.""" start="00:12:28.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template new="1" text="""So, `org-publish-to` is really the workhorse""" start="00:12:31.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""of the publication process.""" start="00:12:37.360" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""The first thing it's going to do is""" start="00:12:40.240" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""transcode from the parsed Orgdown,""" start="00:12:42.120" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""which is an intermediate representation""" start="00:12:47.400" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""known as Org elements, to HTML.""" start="00:12:50.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""In particular, for every one of my new links""" start="00:12:53.200" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that I'm using to mark Webmentions,""" start="00:12:57.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""it's going to invoke my little export function.""" start="00:13:00.440" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""And so as we work our way through the post,""" start="00:13:04.040" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I'm going to accumulate all the Webmentions""" start="00:13:06.600" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that I've made in the property list.""" start="00:13:09.040" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""The second step is to actually render""" start="00:13:10.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""the final HTML document,""" start="00:13:14.360" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and that's where my specialized template comes in.""" start="00:13:16.560" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""All I do there is, use it to get""" start="00:13:18.800" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""my authorship information into the page.""" start="00:13:21.480" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""And then the last step is called finalization.""" start="00:13:24.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""At this point, we have the rendered HTML document,""" start="00:13:29.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and Org mode gives you an extension point here,""" start="00:13:32.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""where you can do arbitrary post-processing""" start="00:13:35.720" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""on that document.""" start="00:13:38.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I arguably abuse it to retrieve""" start="00:13:39.200" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""all the Webmentions I've made""" start="00:13:42.160" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""out of the communication channel""" start="00:13:44.440" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and write them to disk.""" start="00:13:46.280" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""At this point, when we type make,""" start="00:13:47.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""we wind up with the rendered HTML""" start="00:13:54.840" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""for our Orgdown document,""" start="00:13:59.160" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""along with a little text file""" start="00:14:01.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""in which we've recorded all the Webmentions""" start="00:14:03.880" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that need to be sent.""" start="00:14:06.040" video="mainVideo-indieweb" id="subtitle"]]
+[[!template new="1" text="""The next step is to send said Webmentions.""" start="00:14:07.349" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""This is surprisingly easy in Emacs Lisp.""" start="00:14:11.800" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""This is my actual implementation.""" start="00:14:15.560" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I use the request.el package to talk to Telegraph.""" start="00:14:17.360" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""And at this point, we really don't need to""" start="00:14:22.360" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""add a lot to our little site Elisp file.""" start="00:14:26.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I sketched out a `send-webmentions` implementation""" start="00:14:30.640" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that just goes through in a loop""" start="00:14:34.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and calls my send-webmention function.""" start="00:14:36.160" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""And now publication becomes a two-step process.""" start="00:14:39.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""First, the org-publish, then sending Webmentions.""" start="00:14:42.640" video="mainVideo-indieweb" id="subtitle"]]
+[[!template new="1" text="""Okay, so I realize this has been""" start="00:14:46.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""a bit of a whirlwind.""" start="00:14:51.418" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""So, where are we now?""" start="00:14:52.800" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""We have a sample site that we can publish""" start="00:14:55.240" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and have sent Webmentions.""" start="00:15:00.600" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""And we've done it with just Emacs, Org mode,""" start="00:15:02.400" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""a little Lisp, and a make file.""" start="00:15:05.480" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""If you'd like to see more,""" start="00:15:07.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I've put my library up on GitHub.""" start="00:15:09.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""It has logic for both""" start="00:15:11.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""sending and receiving Webmentions""" start="00:15:13.754" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""as well as something""" start="00:15:15.560" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that on the IndieWeb is called POSSE,""" start="00:15:16.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""which is an acronym standing for""" start="00:15:19.120" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Publish (on your) Own Site, Syndicate Elsewhere.""" start="00:15:22.400" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""What that means is that""" start="00:15:25.400" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""you turn the publication step""" start="00:15:27.818" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""from merely publishing new content to your site""" start="00:15:31.400" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""to also replicating it to places""" start="00:15:35.400" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""like Twitter and Facebook and so forth.""" start="00:15:36.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""And also when people like, comment,""" start="00:15:39.160" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and retweet your content,""" start="00:15:44.120" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that gets fed back to your site,""" start="00:15:45.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""where you can display it as comments.""" start="00:15:47.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template new="1" text="""In terms of the future,""" start="00:15:51.400" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I feel like I'm at a decision point.""" start="00:15:52.600" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Org mode is admirably flexible,""" start="00:15:54.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and I'm confident that I can continue to""" start="00:15:58.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""add support for IndieWeb protocols.""" start="00:16:00.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""On the other hand, it is so flexible""" start="00:16:02.560" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that the process of figuring out""" start="00:16:05.440" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""which extension points to use in any situation""" start="00:16:07.880" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""is very challenging.""" start="00:16:10.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""When I started down this path,""" start="00:16:12.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""my mindset was keep it simple""" start="00:16:14.800" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and let's just see how far I could get with Org mode.""" start="00:16:17.840" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""And I feel like I might be bumping up""" start="00:16:20.400" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""against the limitations of that approach now.""" start="00:16:23.160" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Thank you very much.""" start="00:16:25.800" video="mainVideo-indieweb" id="subtitle"]]
+
+
+
+Captioner: bhavin192
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20indieweb%3A%20Putting%20Org%20Mode%20on%20the%20Indieweb)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/indieweb-before.md b/2022/info/indieweb-before.md
new file mode 100644
index 00000000..843d566c
--- /dev/null
+++ b/2022/info/indieweb-before.md
@@ -0,0 +1,62 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Michael Herstine shows how to set up Org Mode for sending and publishing Webmentions as part of the Indieweb. Afterwards, he will handle questions via BigBlueButton.
+
+
+The following image shows where the talk is in the schedule for Sun 2022-12-04. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="indieweb">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(126,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect stroke-width="3" x="603" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect x="378" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(399,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 17-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-indieweb>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: TO_INDEX_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-04T20:25:00Z" end="2022-12-04T20:45:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~3:25 PM - 3:45 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 4 2022, ~2:25 PM - 2:45 PM CST (US/Central)<br />Sunday, Dec 4 2022, ~1:25 PM - 1:45 PM MST (US/Mountain)<br />Sunday, Dec 4 2022, ~12:25 PM - 12:45 PM PST (US/Pacific)<br />Sunday, Dec 4 2022, ~8:25 PM - 8:45 PM UTC <br />Sunday, Dec 4 2022, ~9:25 PM - 9:45 PM CET (Europe/Paris)<br />Sunday, Dec 4 2022, ~10:25 PM - 10:45 PM EET (Europe/Athens)<br />Monday, Dec 5 2022, ~1:55 AM - 2:15 AM IST (Asia/Kolkata)<br />Monday, Dec 5 2022, ~4:25 AM - 4:45 AM +08 (Asia/Singapore)<br />Monday, Dec 5 2022, ~5:25 AM - 5:45 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/gen/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="indieweb-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="indieweb-mainVideo" data="""
+00:00.000 Introduction
+00:14.080 Maintaining a personal website using Org mode
+01:13.880 Problems with comments and isolation
+02:32.040 The Indieweb
+03:17.800 Webmentions
+05:00.600 Decentralized commenting
+07:04.160 The publication framework
+08:48.080 Sending Webmentions
+09:54.000 The process of publication
+11:36.840 Defining new link types
+12:31.920 org-publish-to
+14:07.349 Sending Webmentions with request.el
+14:46.520 Summary
+15:51.400 The future
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--main.webm">Download --main.webm (51MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/bTV1JohHSkRvnHYQKZ39hm">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="indieweb-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="indieweb-qanda" data="""
+00:00.000 Introduction
+01:05.500 Q0 - How did you create the drill down representation of the make call?
+02:22.132 Q1 - Have you seen Reclaim ID?
+02:22.840 Q2 - what happens when you republish or re-export the same post will the web mentions be sent out repeatedly
+03:14.300 Q3 - Backend storage - alternative to database
+04:01.107 Q4 - Any thoughts on using it with ox-hugo?
+05:27.632 Q6 - web 1, web 2 vs web3 (?)
+05:57.207 Intermission - opening the Q&A message
+08:12.207 Q7 - Cutting telegraph out of the equation?
+09:08.715 Q8 - Web3 - indieweb vs(?) static site
+09:55.232 Q9 - Do you have a process running on the webserver to receive requests?
+10:44.857 Q8 (bis) - discussion about Web3 + having a demo
+12:20.957 Q9 - How satisfied are you? - current vs alternative indieweb protocols
+13:44.440 Q10 - Are you not doing too much inside emacs?
+14:32.540 Q11 - If you start with Telegraph and then want to change the endpoint, what happens?
+15:55.814 Q12 - Have you seen Agregore browser?
+16:13.914 Q13 - Are you not doing too much inside emacs? (bis)
+17:33.690 Closing and moving to the next speaker
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="indieweb-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--answers.webm">Download --answers.webm (39MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--answers.opus">Download --answers.opus (6.7MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/indieweb-nav.md b/2022/info/indieweb-nav.md
new file mode 100644
index 00000000..dbe52317
--- /dev/null
+++ b/2022/info/indieweb-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/dbus">The Wheels on D-Bus</a>
+Next by track: <a href="/2022/talks/localizing">Pre-localizing Emacs</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/journalism-after.md b/2022/info/journalism-after.md
new file mode 100644
index 00000000..8df9d23a
--- /dev/null
+++ b/2022/info/journalism-after.md
@@ -0,0 +1,277 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="journalism-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""All right. Hello, everyone. Welcome to my talk.""" start="00:00:00.000" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""We'll be talking today about Emacs journalism""" start="00:00:06.960" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and what that means.""" start="00:00:10.120" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""First of all, I'd like to thank the EmacsConf organizers.""" start="00:00:12.280" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Thank you very much, Sacha, for being very patient with me.""" start="00:00:15.000" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Let's get right into it. So who's this talk for?""" start="00:00:20.040" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""First of all, it's for anyone""" start="00:00:22.680" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""who wants to learn about workflows""" start="00:00:24.800" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and how you can work with Emacs""" start="00:00:26.360" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to basically do anything you want.""" start="00:00:28.520" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And it's for all levels of Emacs lovers.""" start="00:00:31.280" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So I'll keep it accessible.""" start="00:00:33.680" video="mainVideo-journalism" id="subtitle"]]
+[[!template new="1" text="""Why this talk? So first of all,""" start="00:00:36.120" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I want to share a lot of Emacs.""" start="00:00:37.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I also wanted to learn about workflows myself.""" start="00:00:40.520" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So what better way than to talk about them""" start="00:00:42.520" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to be able to learn? And we could maybe learn a thing""" start="00:00:46.320" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""or two about collaboration and using Emacs to that motive.""" start="00:00:49.520" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I think it's useful to try and figure out who am I?""" start="00:00:56.800" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Why am I having this talk? I'm a journalist based""" start="00:01:00.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""in Hong Kong and a documentary filmmaker. So that means""" start="00:01:03.160" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""that I have interviews quite often.""" start="00:01:06.800" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I'm dealing with texts and subtitles,""" start="00:01:08.960" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""which I have to transcribe.""" start="00:01:11.520" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And I'm also dealing with a lot of research.""" start="00:01:14.040" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So that means going through a lot of documents and a lot of,""" start="00:01:16.880" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""well, skimming through documents""" start="00:01:22.160" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to be able to have something to write.""" start="00:01:26.760" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And I also use Emacs since basically one year ago,""" start="00:01:30.280" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I started using it full time""" start="00:01:34.120" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to have a great detriment of my productivity.""" start="00:01:35.400" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So we'll be talking about, we'll be talking about, well,""" start="00:01:39.640" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""basically, my workflow for Emacs""" start="00:01:45.600" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and how I went about having an Emacs workflow.""" start="00:01:48.440" video="mainVideo-journalism" id="subtitle"]]
+[[!template new="1" text="""So what is best when you're thinking about your own workflow""" start="00:01:52.160" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and some things to think about journalism""" start="00:01:56.800" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and about using these kinds of tools""" start="00:01:59.200" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""in combination for this? So where do we all start?""" start="00:02:03.200" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Let's start with a simple-ish definition""" start="00:02:09.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""of what is a workflow. A workflow is""" start="00:02:11.560" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""any sequence of actions or tools you use to accomplish that.""" start="00:02:14.960" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So it doesn't have to be through text processing,""" start="00:02:18.360" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""though obviously being a text-oriented community,""" start="00:02:23.200" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""it will most likely be partially text.""" start="00:02:27.760" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""But it's just about how we accomplish a task""" start="00:02:31.440" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and which tools and mindsets we go into it with.""" start="00:02:35.000" video="mainVideo-journalism" id="subtitle"]]
+[[!template new="1" text="""For example, let's talk about my old workflow.""" start="00:02:39.120" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""That workflow was basically just Google Drive""" start="00:02:42.760" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""using proprietary tools like Notion, Google Drive, Office,""" start="00:02:46.880" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Storyboarder, and for communication, WeChat.""" start="00:02:50.760" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""If I could forgive all the privacy concerns of WeChat,""" start="00:02:55.840" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I wouldn't, but I still wouldn't forgive""" start="00:02:59.560" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""the terribly buggy interface, and I hate it.""" start="00:03:03.280" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So there are certain tools that you have to use""" start="00:03:06.760" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and you have to modify your workflow""" start="00:03:09.120" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""or just adapt your workflow to the tools""" start="00:03:11.360" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""that you have to use. So for me, unfortunately,""" start="00:03:13.840" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""that means having to use WeChat. You compartmentalize it""" start="00:03:17.120" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and set it aside, try not to think about it too hard.""" start="00:03:23.400" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And this is the part that hurts the most, right?""" start="00:03:27.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""You're thinking about your workflow,""" start="00:03:29.320" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""you're thinking about, all right,""" start="00:03:31.040" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I have this thing that works, I don't think about it.""" start="00:03:32.240" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And all of a sudden, oh, I'm not happy""" start="00:03:37.200" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""with what I have right now. So let's get into,""" start="00:03:40.040" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""let's get into how, oops. So let's get into how and why""" start="00:03:44.240" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""we're not happy with our workflows.""" start="00:03:50.080" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Because obviously, it's quite nice""" start="00:03:51.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to not have to think about things.""" start="00:03:55.680" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""But once you've thought about it,""" start="00:03:57.160" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and once you're not happy with how it works,""" start="00:03:58.720" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I think it's quite useful to think about""" start="00:04:01.400" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""why we're not happy about it.""" start="00:04:03.560" video="mainVideo-journalism" id="subtitle"]]
+[[!template new="1" text="""A huge part of what Emacs is being conscious of, well,""" start="00:04:05.280" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""how do we find our workflows?""" start="00:04:10.200" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""How do we find what we want to do? And for me, obviously,""" start="00:04:11.680" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""the best way to find that is to write it down""" start="00:04:17.840" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and to try and tailor my tools to it.""" start="00:04:19.840" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""This is what I came up with.""" start="00:04:24.240" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I want to be able to manage my accounting,""" start="00:04:26.240" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to manage collaboration. So: working on files""" start="00:04:28.040" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""alongside my colleagues, communication,""" start="00:04:30.720" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""so that's planning out and managing meetings,""" start="00:04:33.440" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""managing teammates, managing tasks, information gathering.""" start="00:04:38.840" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So that's what I was saying, going through documents,""" start="00:04:44.000" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""going through all these lists of tasks and all of these,""" start="00:04:45.960" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""not lists of tasks, all of these, well, basically,""" start="00:04:50.000" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""scientific papers, notes, references and wikis, media.""" start="00:04:54.080" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So I want to be able to have a music player,""" start="00:04:59.800" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""a podcast player, a movie player. That's outside of work,""" start="00:05:02.320" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""but it's still one of the tasks that I do. Media processing,""" start="00:05:06.160" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""so this is where my job kind of gets into it a bit more.""" start="00:05:10.000" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So I want to be able to take notes""" start="00:05:13.560" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""on the media that I watch,""" start="00:05:15.160" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to transcribe the interviews""" start="00:05:16.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and even the conversations that I have,""" start="00:05:19.560" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to be able to later on have an easier time.""" start="00:05:21.560" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Photo editing, video editing, so unfortunately,""" start="00:05:26.440" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Emacs isn't quite quite oriented to that.""" start="00:05:32.120" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Graphic design, color grading, storyboarding.""" start="00:05:35.960" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And so obviously, you go into it a bit more.""" start="00:05:40.520" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So managing to do scheduling tasks, interviews,""" start="00:05:43.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""preparing shot lists, tracking time,""" start="00:05:46.520" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""setting daily work goals, setting priorities,""" start="00:05:49.160" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""independent tasks, publishing,""" start="00:05:53.320" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""so publishing stuff for my work on my work CMS,""" start="00:05:55.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""publishing stuff on my personal CMS,""" start="00:05:59.080" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""although that's not happened yet. I've been kind of busy.""" start="00:06:01.520" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Security and privacy, so making sure""" start="00:06:06.080" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""that everything that I use respects my data and respects me.""" start="00:06:08.640" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Unfortunately, not the case, but you take what you can.""" start="00:06:13.280" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Text processing. So that's journaling,""" start="00:06:18.400" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""writing down articles, my personal wiki, my work wiki,""" start="00:06:20.600" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""which I use to document, well, for example,""" start="00:06:26.040" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""several projects that I have currently.""" start="00:06:34.680" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So I basically have my work wiki that I'm trying""" start="00:06:37.160" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to fill out where I'll be able""" start="00:06:43.320" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to basically go into it later on""" start="00:06:45.160" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and have my thoughts written down.""" start="00:06:47.200" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And programming, which I'm not very good at.""" start="00:06:50.400" video="mainVideo-journalism" id="subtitle"]]
+[[!template new="1" text="""Some people might have noticed""" start="00:06:56.800" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""that this looks a lot like [literate] programming.""" start="00:06:59.400" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""If you go into my config file,""" start="00:07:17.160" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I have something kind of similar.""" start="00:07:18.640" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I was planning on having a bit more time""" start="00:07:20.160" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""for this presentation and making it stick to that.""" start="00:07:22.440" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""But you'll see basically the mess that is my Emacs config.""" start="00:07:26.360" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""But it kind of sticks to the same thoughts, right?""" start="00:07:31.000" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Text processing, web browsing, finances,""" start="00:07:33.320" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""that's my accounting, media and research.""" start="00:07:37.400" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So my BibTeX... Here be dragons.""" start="00:07:39.880" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Terrible, terrible config""" start="00:07:43.880" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""that I've stolen from plenty of people.""" start="00:07:45.120" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So basically, that's how Emacs fits into this.""" start="00:07:47.720" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So this is where I talk about literate configs""" start="00:07:52.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and how that's helped me. Obviously, I've extolled""" start="00:07:57.400" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""the virtue of literate configs""" start="00:08:01.920" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to quite an extent right here. It's basically...""" start="00:08:04.200" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""The concept is to have documents, living documents""" start="00:08:09.360" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and documentation as code.""" start="00:08:15.240" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So basically, let's go back into my config.""" start="00:08:18.240" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I talk about what the config file does, have code blocks.""" start="00:08:22.240" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So this is something that Emacs does. I'm pretty sure""" start="00:08:31.280" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""that there are some resources about that accessible online,""" start="00:08:33.600" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""which are even accessible in the Emacs Gulf. And so, yeah,""" start="00:08:36.640" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""basically just having everything accessible""" start="00:08:46.440" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""in one single source, one single file,""" start="00:08:50.200" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""which allows you to basically put everything down""" start="00:08:52.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and integrate things from your config much much more easily.""" start="00:08:54.880" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""That's something that I found very useful in Emacs""" start="00:09:00.640" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and which I think everyone can benefit from""" start="00:09:05.240" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""or the idea of it, like having everything stored centrally.""" start="00:09:07.600" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""It doesn't have to be used just for Emacs.""" start="00:09:11.280" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""It can be used also, it can be used also for, for example,""" start="00:09:15.000" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""a Qt browser or for other window manager configs.""" start="00:09:22.000" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""That kind of thing.""" start="00:09:26.680" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And it's not been very easy to set a place.""" start="00:09:28.240" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So I haven't done that just yet, but that's the plan.""" start="00:09:32.920" video="mainVideo-journalism" id="subtitle"]]
+[[!template new="1" text="""Basically, this is all thanks to Org mode.""" start="00:09:37.640" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So, small presentation of what Org mode is. Org mode""" start="00:09:41.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""is basically a project / task management,""" start="00:09:45.640" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""past management and task management,""" start="00:09:49.600" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and writing mode for Emacs.""" start="00:09:52.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So I can just put in a heading to do Hello World,""" start="00:09:54.320" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""send a message to Rosie tomorrow about the shoot space MDS--""" start="00:10:00.040" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""that's thanks to wonderful Doom Emacs--and schedule it.""" start="00:10:10.320" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I don't know. It's tomorrow. Let's go and set it to 9am.""" start="00:10:15.400" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And say, maybe it's it's tomorrow already. I've done it.""" start="00:10:21.800" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I've sent a message. Perfect. It's done.""" start="00:10:28.760" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And it also allows you to have an agenda view.""" start="00:10:31.440" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So I hope there's nothing too compromising right here.""" start="00:10:33.680" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Whatever. It's fine. So it allows you""" start="00:10:37.720" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to basically manage your agenda from there.""" start="00:10:41.880" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And you might have seen me doing my little space nrf""" start="00:10:45.200" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and wonderful key binding by Org Roam. So this""" start="00:10:54.440" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""is also another thing which is quite quite nice""" start="00:10:58.360" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""with Emacs is that you can you can have Org Roam, which""" start="00:11:01.040" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""is basically a database management program.""" start="00:11:06.080" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So I can have documentary ideas""" start="00:11:09.080" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and have basically my ideas which link up to another file.""" start="00:11:12.960" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So for example, this one, which I have nothing for,""" start="00:11:21.800" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""but you get the idea. So it allows you to apps""" start="00:11:25.840" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to link up with different files and to manage your thoughts.""" start="00:11:29.240" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And this gets back into the workflow part of my talk,""" start="00:11:33.720" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""which is, well, this, this is a way""" start="00:11:37.960" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to control what your workflow""" start="00:11:41.880" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""is control what the tools you're using are and to control,""" start="00:11:44.320" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""basically the way in which you interact""" start="00:11:49.760" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""with your technology.""" start="00:11:52.080" video="mainVideo-journalism" id="subtitle"]]
+[[!template new="1" text="""So I am getting back into the way that I collaborate.""" start="00:11:52.960" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Because obviously it's no good having just""" start="00:11:59.800" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""one Emacs user who's trying to share to share things""" start="00:12:02.800" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""with his editor. So I use pandoc.""" start="00:12:07.920" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""For example, let's go back into my file right here.""" start="00:12:11.160" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Obviously, I don't spend much time inside of tables.""" start="00:12:17.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""But if I select this one, that's &quot;SPC m e&quot;.""" start="00:12:24.360" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Thank you, Doom Emacs for the for the keybindings.""" start="00:12:29.200" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And I can just export it via pandoc right here, So &quot;p&quot;.""" start="00:12:32.080" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And I can just export it to doc, docx, or export it to ODT.""" start="00:12:38.240" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So as an ODT file, which is typically what I do.""" start="00:12:50.720" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And then I just send it through WeChat,""" start="00:12:55.120" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""which is not optimal, but I'm not allowed""" start="00:12:57.120" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to do anything else. So it is what it is.""" start="00:13:00.360" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Basically, this is how I export my files. And I re-import,""" start="00:13:04.080" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I re-import them with pandoc as well.""" start="00:13:12.760" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So I convert my Pages files, which I receive""" start="00:13:15.520" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""through an ICS plugin. It's not quite finalized,""" start="00:13:19.800" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""so I'm not ready to show it,""" start="00:13:22.880" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""but there's a link that I'll be putting""" start="00:13:24.120" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""in the description which talks about this.""" start="00:13:26.360" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So this is my sharing part.""" start="00:13:29.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""It's nothing very special, honestly.""" start="00:13:32.960" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""It's just making sure that your documents""" start="00:13:35.440" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""are able to be shared.""" start="00:13:38.320" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I have certain things. So for example,""" start="00:13:41.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""if I go into retro gaming in Hong Kong,""" start="00:13:44.080" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""if I go into my scripts, there are certain headings""" start="00:13:47.840" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""which I have. So for example, they ignore...""" start="00:13:53.920" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""My editor doesn't like to have some headings.""" start="00:13:55.520" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""But when I have a video script that I'm preparing,""" start="00:13:58.760" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I like to have them for my own organization""" start="00:14:02.600" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and for my thinking. So I keep them in right there""" start="00:14:05.520" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and put in ignore. This is the advantage""" start="00:14:09.400" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""of the Emacs because you can just SPC m e o o,""" start="00:14:11.761" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and this is ready to send, basically.""" start="00:14:17.281" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""There are ways to have export presets,""" start="00:14:20.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""but I'm not quite there yet. It's a lot of work.""" start="00:14:24.040" video="mainVideo-journalism" id="subtitle"]]
+[[!template new="1" text="""So, getting back to my presentation.""" start="00:14:26.960" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""This all goes into basically other packages,""" start="00:14:30.120" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""which I want to implement, but I haven't been able to.""" start="00:14:36.720" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""My main conclusion: you don't have to get lost in the weeds.""" start="00:14:39.320" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I kind of did that while preparing this talk.""" start="00:14:43.840" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So basically, you don't have to do it all at once.""" start="00:14:48.280" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Don't let it consume your life.""" start="00:14:51.720" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I probably should have done this earlier.""" start="00:14:55.640" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""But Emacs configs are forever work in progress.""" start="00:14:57.320" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So there are lots of features which you can add,""" start="00:15:02.120" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""a lot of things which you can implement if you only had,""" start="00:15:04.920" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I don't know, five weeks to be able to implement them.""" start="00:15:08.120" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""But you're working right now.""" start="00:15:11.640" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And this is a message to me five months ago.""" start="00:15:12.960" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Don't do it. Just keep working""" start="00:15:16.320" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and don't get lost in configuration all day.""" start="00:15:19.640" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So yeah, basically the aim is to use software that you love,""" start="00:15:23.640" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""but not die in the process.""" start="00:15:27.560" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And yeah, basically just using it as much as you can""" start="00:15:29.440" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""using fast software as much as you can.""" start="00:15:34.720" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I'm doing that as well for...""" start="00:15:36.520" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I have certain software such as storyboarder or bit tags,""" start="00:15:39.840" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""that kind of thing, which I try to use as much as possible,""" start="00:15:46.680" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""even outside of Emacs.""" start="00:15:50.160" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And the aim is to get the work done in the end.""" start="00:15:51.840" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I'm not an absolutist on this. So yeah, basically,""" start="00:15:56.280" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""let's keep modding our configs and having fun.""" start="00:16:00.680" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""If you've got any questions about the talk,""" start="00:16:03.920" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I'm happy to answer. I am a novice at this,""" start="00:16:06.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""both presenting in front of camera""" start="00:16:10.440" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and at talking about Emacs.""" start="00:16:12.960" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I'm sure I've gotten a few things wrong,""" start="00:16:15.720" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and it's not been the smoothest talk, but it's 10pm, almost.""" start="00:16:18.680" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I need to get back home. Yeah, take care, everyone.""" start="00:16:23.720" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Thanks again to the organizers. Here's my contact info.""" start="00:16:28.760" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And I'll be in touch with the questions.""" start="00:16:32.720" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I don't think I'll be able to do the live answers,""" start="00:16:36.200" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""but that's more or less it. Thanks so much for listening,""" start="00:16:38.320" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""if you've been listening, and take care.""" start="00:16:41.880" video="mainVideo-journalism" id="subtitle"]]
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20journalism%3A%20Emacs%20journalism%20%28or%20everything%27s%20a%20nail%20if%20you%20hit%20it%20with%20Emacs%29)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/journalism-before.md b/2022/info/journalism-before.md
new file mode 100644
index 00000000..6c1b25c5
--- /dev/null
+++ b/2022/info/journalism-before.md
@@ -0,0 +1,45 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sat 2022-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="journalism">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect stroke-width="3" x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 17-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-journalism>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: TO_INDEX_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-03T14:05:00Z" end="2022-12-03T14:25:00Z"><div class="conf-time">Saturday, Dec 3 2022, ~9:05 AM - 9:25 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 3 2022, ~8:05 AM - 8:25 AM CST (US/Central)<br />Saturday, Dec 3 2022, ~7:05 AM - 7:25 AM MST (US/Mountain)<br />Saturday, Dec 3 2022, ~6:05 AM - 6:25 AM PST (US/Pacific)<br />Saturday, Dec 3 2022, ~2:05 PM - 2:25 PM UTC <br />Saturday, Dec 3 2022, ~3:05 PM - 3:25 PM CET (Europe/Paris)<br />Saturday, Dec 3 2022, ~4:05 PM - 4:25 PM EET (Europe/Athens)<br />Saturday, Dec 3 2022, ~7:35 PM - 7:55 PM IST (Asia/Kolkata)<br />Saturday, Dec 3 2022, ~10:05 PM - 10:25 PM +08 (Asia/Singapore)<br />Saturday, Dec 3 2022, ~11:05 PM - 11:25 PM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/gen/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="journalism-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="journalism-mainVideo" data="""
+00:00.000 Introduction
+00:36.120 Why this talk
+01:52.160 Thinking about workflows
+02:39.120 My old workflow
+04:05.280 Finding my workflow
+06:56.800 Literate configuration
+09:37.640 Org Mode
+11:52.960 Collaborating with Pandoc
+14:26.960 You don't have to get lost in the weeds
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main.webm">Download --main.webm (112MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main.opus">Download --main.opus (9.9MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/nqaGcHbHSY2dGxVpzvc3WX">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="journalism-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="journalism-qanda" data="""
+00:58.920 Why was WeChat a necessity for you?
+02:33.520 Have you looked at crdt.el for collaborative real-time editing?
+05:11.520 Sharing Org Mode files is trickier than we expect. Do you do this?
+07:15.520 Do you use pandoc for incoming and outgoing docs? Do you find that repeated conversions lose document quality?
+10:16.520 What was your moment when you started to work in Emacs instead of config editing?
+12:53.520 Why is Emacs recommended for journalism?
+19:17.520 Do you use any fancy solutions for annotating text onto particular video timestamps?
+24:08.520 When you get stuck with an Emacs problem, is there somewhere you go to get help (nice place for non-tech people)?
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="journalism-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--answers.webm">Download --answers.webm (114MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--answers.opus">Download --answers.opus (8.7MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/journalism-nav.md b/2022/info/journalism-nav.md
new file mode 100644
index 00000000..530eee48
--- /dev/null
+++ b/2022/info/journalism-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/sat-open">Saturday opening remarks</a>
+Next by track: <a href="/2022/talks/school">Back to school with Emacs</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/jupyter-after.md b/2022/info/jupyter-after.md
new file mode 100644
index 00000000..830fdf16
--- /dev/null
+++ b/2022/info/jupyter-after.md
@@ -0,0 +1,270 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="jupyter-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hi, my name is Blaine Mooers.""" start="00:00:00.000" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""I'm an associate professor of biochemistry""" start="00:00:03.840" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""at the University of Oklahoma Health Sciences Center""" start="00:00:05.400" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""in Oklahoma City.""" start="00:00:08.200" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""I'm going to talk about the use of Emacs""" start="00:00:09.760" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""to edit live Jupyter notebook cells""" start="00:00:12.000" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""as well as text areas on web pages.""" start="00:00:16.240" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So like a lot of technical workers,""" start="00:00:20.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""I find myself having to write prose""" start="00:00:22.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""in text areas on web pages,""" start="00:00:24.880" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""as well as working with code""" start="00:00:28.680" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""in Jupyter notebooks and Colab notebooks,""" start="00:00:31.720" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and often I have wished for""" start="00:00:37.000" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""the full power of Emacs while doing so.""" start="00:00:39.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Well, now that is possible.""" start="00:00:43.480" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Actually, there are several solutions""" start="00:00:45.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""that have been available for some time.""" start="00:00:46.800" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""I'm going to talk about one solution""" start="00:00:49.040" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""that I'm familiar with and has worked out for me.""" start="00:00:50.400" video="mainVideo-jupyter" id="subtitle"]]
+[[!template new="1" text="""So this requires the use of two software packages,""" start="00:00:55.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""GhostText and Atomic Chrome.""" start="00:00:58.120" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""GhostText is an extension for the web browser,""" start="00:01:01.600" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""whereas Atomic Chrome is a package for Emacs.""" start="00:01:04.240" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""You have to have both of these.""" start="00:01:07.280" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So Chrome is for the editor side""" start="00:01:10.880" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and GhostText handles the browser side.""" start="00:01:13.400" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""The GhostText extension is available""" start="00:01:18.920" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""in the Chrome web store.""" start="00:01:22.480" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""And GhostText is represented by this icon,""" start="00:01:26.800" video="mainVideo-jupyter" id="subtitle"]]
+[[!template new="1" text="""which has a ghost in front of the capital letter T.""" start="00:01:29.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""It is being developed by Federico Brigante.""" start="00:01:31.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""He is a very prolific JavaScript developer.""" start="00:01:36.400" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""He has a web page committed to GhostText,""" start="00:01:41.240" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""as well as a GitHub site.""" start="00:01:44.280" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So here's an example of GhostText.""" start="00:01:47.200" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""This is a snapshot from a session""" start="00:01:50.160" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""that I had while editing LaTeX on the Overleaf website.""" start="00:01:54.840" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Overleaf is this web service""" start="00:02:01.280" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""that empowers the editing of LaTeX documents on the web.""" start="00:02:03.760" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So I have clicked on this GhostText icon in the toolbar.""" start="00:02:09.720" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""I had already opened up Emacs,""" start="00:02:14.040" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and I had the Atomic Chrome server running.""" start="00:02:17.040" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So a connection was established,""" start="00:02:19.880" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""as indicated by this blue border around this text area.""" start="00:02:21.800" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""And as soon as that appeared,""" start="00:02:28.600" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""the text appeared in a buffer inside of Emacs.""" start="00:02:30.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So I have overlaid the area where normally the compiled PDF""" start="00:02:35.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""would appear in an Overleaf session.""" start="00:02:40.160" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So I'm using a configuration for LaTeX that I developed,""" start="00:02:43.920" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""which is available through the MooersLab GitHub site.""" start="00:02:47.680" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""I also gave a talk about how I use LaTeX in Emacs""" start="00:02:52.160" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""at the Berlin Emacs meetup in August.""" start="00:02:55.920" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""This talk was not recorded,""" start="00:02:58.840" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""but the slides are available on this website.""" start="00:03:00.040" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So I would like to now switch to a little live coding""" start="00:03:05.120" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""to make this a little more interesting.""" start="00:03:09.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So I start my day at this other website called 750Words.""" start="00:03:12.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template new="1" text="""This site just takes plain text,""" start="00:03:22.440" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""but I like to write in LaTeX.""" start="00:03:25.280" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So GhostText came to my rescue""" start="00:03:28.560" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""when I started using this everyday last May.""" start="00:03:31.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So I clicked on the GhostText icon.""" start="00:03:34.480" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""It highlighted that area in blue.""" start="00:03:37.240" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""There's some boilerplate""" start="00:03:39.760" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""that I like to start my day with.""" start="00:03:41.840" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""I like to get a list of my deadlines""" start="00:03:45.920" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""that are coming up, as shown here,""" start="00:03:50.600" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""for the next several months.""" start="00:03:54.240" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""And then I have landed at this tab stop.""" start="00:03:55.840" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""And so I had issued a tab trigger""" start="00:03:59.400" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""which inserted this almost 50 lines of text""" start="00:04:04.240" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""from a snippet through Yasnippet.""" start="00:04:09.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""And then I'll change this text to whatever.""" start="00:04:13.640" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""And then I can hit TAB to move to the next site.""" start="00:04:17.480" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""I was dead tired last night, so I fell asleep at my desk,""" start="00:04:29.280" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and whatever. So I just keep on going""" start="00:04:38.440" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and then hit TAB again and enter my &quot;To Be Done&quot; items.""" start="00:04:42.440" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""And then what I love about Emacs is that""" start="00:04:47.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""you can hit C-c C-j to insert a new item and so forth,""" start="00:04:50.240" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""so you can extend the list.""" start="00:04:56.120" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Initially, I just have 10 items.""" start="00:05:03.240" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""I'm going to have more. And on I go,""" start="00:05:05.080" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""using the full power of LaTeX.""" start="00:05:08.840" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So I have configured Atomic Chrome""" start="00:05:12.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""so it will recognize this website as a –""" start="00:05:16.120" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""it will open up this website –""" start="00:05:20.000" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""the connection to this website with this buffer""" start="00:05:21.400" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""in the LaTeX major mode. To turn this off,""" start="00:05:26.160" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""we can close – simply just close the buffer""" start="00:05:36.560" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and that will shut things down.""" start="00:05:40.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""On the browser side, you can right-click on the icon""" start="00:05:42.960" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and disconnect GhostText on this page.""" start="00:05:46.400" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Okay, let's go to a different situation.""" start="00:05:49.040" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""This is not a feature that's advertised by the developer,""" start="00:05:53.640" video="mainVideo-jupyter" id="subtitle"]]
+[[!template new="1" text="""but I discovered that you can edit code cells""" start="00:05:57.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""(or any kind of cell for that matter)""" start="00:06:00.120" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""in a Jupyter Notebook.""" start="00:06:02.800" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""However, we have a challenge here.""" start="00:06:04.440" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""We have three text areas open – three code cells.""" start="00:06:05.720" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So if we click on the GhostText icon,""" start="00:06:09.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""these three areas will show up in green""" start="00:06:14.760" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and we'll be prompted to select the one""" start="00:06:17.480" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""that we want to activate.""" start="00:06:19.120" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""We want to activate the one with text.""" start="00:06:20.280" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So then we can go in here and make edits, of course,""" start="00:06:22.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and you can do this in Emacs""" start="00:06:31.400" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""or we can do it in the browser. It doesn't matter.""" start="00:06:33.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""You saw me editing in Emacs,""" start="00:06:35.640" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""but we can also make the edits""" start="00:06:38.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""in the text area of the browser""" start="00:06:40.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and they will show up immediately in Emacs.""" start="00:06:44.880" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So we could change the case of that M and that's going to –""" start="00:06:47.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""shows up over here. Okay, we can run this code.""" start="00:06:54.440" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So this is R, one of the three major""" start="00:06:59.280" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""programming languages for data science.""" start="00:07:03.440" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""At least, Jupyter is supposed to be""" start="00:07:05.160" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""a combination of Julia, Python, and R.""" start="00:07:07.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So we're running mcmc to get the posterior distribution""" start="00:07:13.480" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and we're going to plot those out with this pyplots package,""" start="00:07:17.560" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and we have these beautiful plots showing the median""" start="00:07:21.120" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""of the posterior distribution for four variables in –""" start="00:07:24.080" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""four parameters in the CARS data set,""" start="00:07:27.040" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""which is available – built into the R package.""" start="00:07:31.560" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""And then these shaded areas are the 80% interval.""" start="00:07:38.040" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Okay. Oops.""" start="00:07:45.560" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So now for the Python side,""" start="00:07:49.160" video="mainVideo-jupyter" id="subtitle"]]
+[[!template new="1" text="""here's an example in which I'm going to actually""" start="00:08:07.640" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""insert a snippet of that cell""" start="00:08:13.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and then I'm going to enter nvlig for nglview ligand,""" start="00:08:18.680" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and just hit enter. Oops. Hit TAB, excuse me,""" start="00:08:27.280" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and we don't need this line of code, so delete that.""" start="00:08:43.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Yep, we want to load up this pdb file""" start="00:08:48.000" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""that's in this subdirectory.""" start="00:08:52.200" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So the pdb file is a plain text file""" start="00:08:54.280" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""that contains atomic coordinates""" start="00:08:56.920" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""of protein crystal structure.""" start="00:08:58.840" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""This protein happens to be important in cancer""" start="00:09:00.160" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and we have – we screened by docking 55,000 compounds""" start="00:09:03.000" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""on a supercomputer""" start="00:09:09.080" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and then we did MD [molecular dynamics] simulations""" start="00:09:10.680" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""of the top 10 [actually 20] leads.""" start="00:09:12.744" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Twelve of them had the compound remain bound""" start="00:09:14.160" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""during the period of the simulation,""" start="00:09:18.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""so those have some potential for –""" start="00:09:19.680" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and require experimental validation.""" start="00:09:22.560" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So we'll run this chunk of code,""" start="00:09:25.160" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and this will give a view of the molecule""" start="00:09:28.640" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""that we can interact with by using the mouse.""" start="00:09:30.840" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""But I want to share this with my colleague.""" start="00:09:36.480" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""My colleague is not set up to use Jupyter,""" start="00:09:39.880" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""but instead we can write this out to a HTML file,""" start="00:09:42.920" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""which I have loaded up already.""" start="00:09:46.960" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""And so we can actually – perhaps.""" start="00:09:48.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""We click on these two arrows pointing at each other,""" start="00:09:55.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and we can get a full screen view of this molecule""" start="00:10:01.680" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and he can identify each atom in this structure.""" start="00:10:05.160" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Over a thousand atoms present.""" start="00:10:10.440" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""We're just hovering over a specific atom.""" start="00:10:12.720" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So shown in gray is the ligand that is bound. Okay.""" start="00:10:14.960" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So we still have this box selected""" start="00:10:27.760" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and we still have these two different –""" start="00:10:32.080" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""so for each of the – our selected text areas""" start="00:10:36.560" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""we have a separate – we have a separate buffer open. Okay.""" start="00:10:40.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""To wrap things up here, here's an example of using –""" start="00:11:03.840" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""with evolving Julia code.""" start="00:11:06.840" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""And so this Julia code in this cell is in a Emacs buffer.""" start="00:11:08.920" video="mainVideo-jupyter" id="subtitle"]]
+[[!template new="1" text="""So you've got an idea now, I think.""" start="00:11:12.920" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So in terms of plain text areas like in Overleaf""" start="00:11:19.280" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and then these cells in Jupyter Notebooks,""" start="00:11:23.760" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""these are other areas that can be edited""" start="00:11:27.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""like in the text areas within Outlook Webmail and Gmail.""" start="00:11:30.960" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Instead of having to point with the mouse""" start="00:11:37.920" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""or click with the mouse,""" start="00:11:42.640" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""one can also use keybindings or keyboard shortcuts.""" start="00:11:43.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So here are the ones for three major operating systems.""" start="00:11:48.080" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So how does GhostText work?""" start="00:11:51.600" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Main thing is you have to open up Emacs""" start="00:11:54.640" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and get this Atomic Chrome server running.""" start="00:11:57.200" video="mainVideo-jupyter" id="subtitle"]]
+[[!template new="1" text="""And then with it up and going,""" start="00:11:59.680" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""GhostText will be able to – has to be activated""" start="00:12:03.120" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and it will find the GhostText server""" start="00:12:06.680" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""through the localhost port 4001.""" start="00:12:09.640" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Put that into the web browser.""" start="00:12:15.080" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""If you navigate to that port,""" start="00:12:19.040" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""you'll get output that looks like this""" start="00:12:21.640" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""if everything's working well.""" start="00:12:23.720" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Otherwise, you'll get a error message""" start="00:12:25.640" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and it should have a port socket –""" start="00:12:27.920" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""a web socket port number.""" start="00:12:30.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""It will not be the same every time.""" start="00:12:34.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So these are the supported web browsers""" start="00:12:36.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""in addition to Chrome. These are supported""" start="00:12:42.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template new="1" text="""and likewise anything in these –""" start="00:12:45.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""any browser related to these""" start="00:12:47.280" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""can probably use these extensions.""" start="00:12:49.880" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""For example, the Brave browser will use Chrome extension""" start="00:12:53.080" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and the Firefox browser extension works with WaterFox.""" start="00:12:56.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""These are the supported editors.""" start="00:13:01.680" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Each editor has its own extension""" start="00:13:05.240" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and this GhostText was initially developed for SublimeText.""" start="00:13:10.200" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So if you have SublimeText,""" start="00:13:15.720" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""then you can use its smooth operation as positive control""" start="00:13:17.920" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""when things go wrong with Emacs.""" start="00:13:21.960" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""This is Atomic. This is a GitHub site for Atomic Chrome.""" start="00:13:25.000" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Atomic Chrome is available for installation through Melpa.""" start="00:13:29.480" video="mainVideo-jupyter" id="subtitle"]]
+[[!template new="1" text="""This is my configuration for Atomic Chrome.""" start="00:13:33.160" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So I have this setup so the server starts whenever I log in,""" start="00:13:40.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and I have it set up so that default major mode is Python""" start="00:13:45.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""to deal with the Jupyter notebooks and Colab notebooks.""" start="00:13:50.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""And then I have major modes""" start="00:13:55.560" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""for these other websites defined below.""" start="00:13:57.720" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""This is a testing site so the developer has made""" start="00:13:59.840" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""to help with troubleshooting.""" start="00:14:06.080" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""He also has a protocol on his website""" start="00:14:08.120" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""to follow during troubleshooting.""" start="00:14:11.160" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So here are some precautions.""" start="00:14:13.560" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""You'll find that GhostText doesn't work with Pluto.""" start="00:14:16.640" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Pluto is a new computational notebook""" start="00:14:19.080" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""for working with Julia.""" start="00:14:21.240" video="mainVideo-jupyter" id="subtitle"]]
+[[!template new="1" text="""My suggestion would be just to run IJulia in Jupyter.""" start="00:14:23.480" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""It also doesn't work, of course, with RStudio.""" start="00:14:27.040" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Even though RStudio sort of resembles""" start="00:14:32.000" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""a web page, web browser, it's not.""" start="00:14:35.200" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Of course, you can always run R,""" start="00:14:39.000" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""as you've just seen, using the IPy kernel.""" start="00:14:41.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""I will also caution you that if you use the Emacs server,""" start="00:14:48.240" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""you may run into issues""" start="00:14:52.240" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""with the server competing with the port 4001.""" start="00:14:53.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So instead, you should probably configure the Emacs server""" start="00:14:58.000" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""to use a specific port.""" start="00:15:01.920" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So far – although I haven't done that myself –""" start="00:15:05.000" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""so far, I haven't found any conflicts""" start="00:15:07.640" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""with the Org Roam user interface.""" start="00:15:11.000" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So my conclusions are: GhostText allows you to edit prose""" start="00:15:13.480" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""with your favorite major mode""" start="00:15:20.920" video="mainVideo-jupyter" id="subtitle"]]
+[[!template new="1" text="""in the text areas of web pages""" start="00:15:24.440" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and in the cells of Jupyter notebooks.""" start="00:15:28.120" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""This allows you to tap into snippets""" start="00:15:31.080" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and thereby save time as you have – probably have –""" start="00:15:34.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""hopefully got an idea of.""" start="00:15:37.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""I'd like to thank my friends and mentors""" start="00:15:39.720" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""who've helped me out during my second year""" start="00:15:44.040" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""in my Emacs learning spiral.""" start="00:15:46.600" video="mainVideo-jupyter" id="subtitle"]]
+[[!template new="1" text="""These include my local colleagues.""" start="00:15:49.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""We meet once a month in the Oklahoma Data Science Workshop.""" start="00:15:55.840" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Last July, I gave a presentation about GhostText.""" start="00:15:58.680" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""And then also my friends at Berlin and Austin Emacs meetups""" start="00:16:01.720" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and in the UK research software engineer""" start="00:16:08.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Emacs research Slack channel.""" start="00:16:12.960" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So I don't attend these every month,""" start="00:16:17.600" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""but I try to make the meetings as often as I can.""" start="00:16:18.920" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Then I'm supported by the following grants,""" start="00:16:21.440" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""which allow me to spend""" start="00:16:25.400" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""at least some time each day in Emacs.""" start="00:16:28.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""I'll be happy to take any questions.""" start="00:16:30.680" video="mainVideo-jupyter" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [Blaine-Mooers@ouhsc.edu](mailto:Blaine-Mooers@ouhsc.edu?subject=Comment%20for%20EmacsConf%202022%20jupyter%3A%20Edit%20live%20Jupyter%20notebook%20cells%20with%20Emacs)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/jupyter-before.md b/2022/info/jupyter-before.md
new file mode 100644
index 00000000..f64c7d85
--- /dev/null
+++ b/2022/info/jupyter-before.md
@@ -0,0 +1,52 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Blaine Mooers shows how to use GhostText and Atomic Chrome to edit Jupyter notebook cells and other text areas within Emacs. Afterwards, he will handle questions via BigBlueButton.
+
+
+The following image shows where the talk is in the schedule for Sat 2022-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="jupyter">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect stroke-width="3" x="635" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 18-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-jupyter>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: TO_INDEX_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-03T20:45:00Z" end="2022-12-03T21:05:00Z"><div class="conf-time">Saturday, Dec 3 2022, ~3:45 PM - 4:05 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 3 2022, ~2:45 PM - 3:05 PM CST (US/Central)<br />Saturday, Dec 3 2022, ~1:45 PM - 2:05 PM MST (US/Mountain)<br />Saturday, Dec 3 2022, ~12:45 PM - 1:05 PM PST (US/Pacific)<br />Saturday, Dec 3 2022, ~8:45 PM - 9:05 PM UTC <br />Saturday, Dec 3 2022, ~9:45 PM - 10:05 PM CET (Europe/Paris)<br />Saturday, Dec 3 2022, ~10:45 PM - 11:05 PM EET (Europe/Athens)<br />Sunday, Dec 4 2022, ~2:15 AM - 2:35 AM IST (Asia/Kolkata)<br />Sunday, Dec 4 2022, ~4:45 AM - 5:05 AM +08 (Asia/Singapore)<br />Sunday, Dec 4 2022, ~5:45 AM - 6:05 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/gen/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="jupyter-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="jupyter-mainVideo" data="""
+00:00.000 Introduction
+00:51.520 GhostText and Atomic Chrome
+01:26.920 GhostText
+03:13.120 Live coding demo
+05:57.040 Editing code cells
+07:57.160 Python
+11:11.040 Julia
+11:59.600 How does GhostText work?
+12:44.320 Supported web browsers
+13:33.000 Atomic Chrome configuration
+14:21.560 Precautions
+15:21.480 Conclusions
+15:48.560 Thanks
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main.webm">Download --main.webm (62MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main.opus">Download --main.opus (8.4MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--slides.pdf">Download --slides.pdf (2MB)</a></li><li><a href="https://toobnix.org/w/3umjDWcUmHoypvBnzw7dTQ">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="jupyter-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="jupyter-qanda" data="""
+01:00.520 Do you have a favorite color theme?
+01:54.360 To your knowledge, are recent coming security changes in Chrome going to impact browser extensions?
+03:07.960 Is this browser-agnostic, or do you have to use Chrome?
+03:47.580 You mentioned a couple other solutions to allow emacs editing of text areas. Pointers?
+05:49.520 Why not save text from Emacs?
+08:03.320 Have you been talking with John Kitchin?
+10:06.160 Journey
+11:37.560 What was the keybinding for Linux Firefox?
+12:44.960 How long have you been using Emacs?
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="jupyter-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--answers.webm">Download --answers.webm (34MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--answers.opus">Download --answers.opus (5MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/jupyter-nav.md b/2022/info/jupyter-nav.md
new file mode 100644
index 00000000..bef304bc
--- /dev/null
+++ b/2022/info/jupyter-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/eev">Bidirectional links with eev</a>
+Next by track: <a href="/2022/talks/haskell">Haskell code exploration with Emacs</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/justl-after.md b/2022/info/justl-after.md
new file mode 100644
index 00000000..25ce11e8
--- /dev/null
+++ b/2022/info/justl-after.md
@@ -0,0 +1,290 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="justl-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hi everyone, I am Sibi Prabakaran""" start="00:00:00.000" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and welcome to my session on Justl Emacs Mode.""" start="00:00:04.240" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""A bit about me, I have been working""" start="00:00:09.560" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""as a Haskell Engineer""" start="00:00:11.640" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""at FPComplete for the last 4 years.""" start="00:00:12.880" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I am based out of India.""" start="00:00:15.600" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I occasionally blog at my website psibi.in""" start="00:00:17.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""where you can find more information about me.""" start="00:00:20.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I have been using Emacs""" start="00:00:23.560" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""for more than a decade now.""" start="00:00:25.000" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I help in the maintenance""" start="00:00:26.920" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""of the Terraform client for LSP mode.""" start="00:00:28.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I have also authored dhall-mode and rego-mode""" start="00:00:31.080" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""which are the major modes""" start="00:00:33.960" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""for the respective languages.""" start="00:00:35.000" video="mainVideo-justl" id="subtitle"]]
+[[!template new="1" text="""Before jumping into the demo""" start="00:00:39.320" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""of the Emacs package,""" start="00:00:40.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I would like to give a brief introduction""" start="00:00:42.040" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""about justfiles and what it is.""" start="00:00:44.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I will also try to compare it with Makefiles""" start="00:00:46.280" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""as it takes a lot of inspiration from it.""" start="00:00:49.000" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""What you see currently in the buffer""" start="00:00:53.640" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""is a sample justfile.""" start="00:00:55.640" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""If you have previously used Makefiles,""" start="00:00:57.320" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""you would be able to see""" start="00:00:59.480" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""that there is quite a bit of similarity""" start="00:01:00.480" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""between them.""" start="00:01:02.280" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Anything that starts with hash""" start="00:01:03.560" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""is a documentation comment.""" start="00:01:05.080" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""You can see that I have the first recipe""" start="00:01:07.120" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""which is named as default.""" start="00:01:09.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""So if you run the just executable""" start="00:01:10.920" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""without any arguments,""" start="00:01:12.520" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""by default it is going to run""" start="00:01:14.120" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""the first recipe.""" start="00:01:15.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""This recipe's definition""" start="00:01:17.200" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""calls the just command""" start="00:01:18.440" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""in turn, with the two arguments,""" start="00:01:20.080" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""namely --list and --unsorted,""" start="00:01:21.920" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""which basically asks just""" start="00:01:24.080" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""to list down all the recipes""" start="00:01:25.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""in an unsorted order.""" start="00:01:27.800" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Each line of each recipe is executed""" start="00:01:29.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""by a fresh shell.""" start="00:01:32.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""That pretty much""" start="00:01:33.920" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""is the high level overview""" start="00:01:35.120" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""of getting started to use this tool.""" start="00:01:36.360" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""This tool assumes the presence of a shell""" start="00:01:38.520" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""which is bash in most GNU/Linux systems,""" start="00:01:40.760" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""but you can configure it""" start="00:01:43.480" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""to explicitly use any specific shell""" start="00:01:44.840" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""you have in mind.""" start="00:01:47.160" video="mainVideo-justl" id="subtitle"]]
+[[!template new="1" text="""Let me in fact go and try executing""" start="00:01:48.520" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""the first recipe.""" start="00:01:50.480" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I will first execute it""" start="00:01:52.600" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""without any arguments,""" start="00:01:53.760" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""which will force it to run the first recipe.""" start="00:01:55.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""As you can see, it listed all the recipes.""" start="00:01:59.000" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Now I can actually execute""" start="00:02:01.800" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""a particular recipe""" start="00:02:03.200" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""by passing an explicit recipe name.""" start="00:02:04.200" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Let me execute the hello recipe now""" start="00:02:06.640" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""which will basically print &quot;hello world&quot;.""" start="00:02:08.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""It works as expected.""" start="00:02:11.920" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""As you can see, that's all that's required""" start="00:02:15.320" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""to get started with this tool.""" start="00:02:17.040" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""You create a file named justfile""" start="00:02:18.600" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""in a directory, define some recipes""" start="00:02:20.349" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and then run them""" start="00:02:22.800" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""via the just executable.""" start="00:02:23.640" video="mainVideo-justl" id="subtitle"]]
+[[!template new="1" text="""Note that there are""" start="00:02:27.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""various other features in justfile.""" start="00:02:28.440" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""You can define variables,""" start="00:02:30.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""mark some variables""" start="00:02:32.240" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""to be exported as environment variables,""" start="00:02:33.280" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""have optional parameters""" start="00:02:35.520" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""that can be passed to a recipe.""" start="00:02:37.280" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""You can also set up dependency""" start="00:02:38.800" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""between recipes""" start="00:02:40.960" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and also write scripts within a recipe""" start="00:02:42.480" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""in a language of your choice.""" start="00:02:44.920" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I won't be going into the details,""" start="00:02:46.800" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""but I encourage you to go through""" start="00:02:48.560" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""the very helpful manual page""" start="00:02:50.120" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""to learn more about it.""" start="00:02:51.640" video="mainVideo-justl" id="subtitle"]]
+[[!template new="1" text="""Also, let me compare it with Makefiles.""" start="00:02:56.440" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I do think it's kind of unfair""" start="00:02:59.200" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""to compare both the tools""" start="00:03:00.800" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""since make is a build automation tool""" start="00:03:02.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""whereas just's goal is a task runner,""" start="00:03:04.760" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and since just doesn't try to be""" start="00:03:07.520" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""a build system,""" start="00:03:09.320" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""it can avoid the associated complexity""" start="00:03:10.440" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""that comes with the tool like make.""" start="00:03:12.480" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""There is one nice historical fact""" start="00:03:15.080" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""about just.""" start="00:03:17.040" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""The initial version of just""" start="00:03:18.200" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""relied on make command being available,""" start="00:03:19.560" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""so it was basically""" start="00:03:21.640" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""a glorified wrapper around it.""" start="00:03:23.360" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""But it was removed,""" start="00:03:25.440" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and justfile doesn't have""" start="00:03:26.440" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""that dependency anymore.""" start="00:03:27.760" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""If you are using make as a task runner""" start="00:03:29.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""then you would have to use""" start="00:03:31.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""something called phony targets.""" start="00:03:33.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I don't want to go into the details,""" start="00:03:35.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""but makefiles have good reason""" start="00:03:37.240" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""for why they need something like that.""" start="00:03:39.240" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Since justfile is not a build system,""" start="00:03:41.040" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""it doesn't have to deal with them.""" start="00:03:44.080" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""The error message""" start="00:03:45.200" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and user experience of this tool,""" start="00:03:47.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""in my opinion, is better.""" start="00:03:48.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""To show you a concrete example,""" start="00:03:50.480" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""justfile errors out by default""" start="00:03:52.760" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""if you have duplicate recipes.""" start="00:03:54.920" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""This is in contrast with make""" start="00:03:56.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""where I believe it prints out""" start="00:03:58.840" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""a warning about it,""" start="00:04:00.720" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""but still executes the target action.""" start="00:04:01.760" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Justfile also gives you the ability""" start="00:04:03.840" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""to easily create scripts""" start="00:04:06.600" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""written in any language within a recipe.""" start="00:04:08.200" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""My personal opinion is that""" start="00:04:10.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""if you are using makefile""" start="00:04:12.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""as a task runner,""" start="00:04:14.200" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""you might want to check out justfile""" start="00:04:15.200" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""to see if it will suit your workflow.""" start="00:04:17.440" video="mainVideo-justl" id="subtitle"]]
+[[!template new="1" text="""With that, I'll move on to justl.el,""" start="00:04:19.280" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""which is basically an Emacs package""" start="00:04:25.000" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""for driving justfiles.""" start="00:04:26.800" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I started writing this tool""" start="00:04:28.120" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""around a year ago""" start="00:04:29.920" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""when my usage of justfile increased.""" start="00:04:31.200" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""The objective of the tool""" start="00:04:33.720" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""is to reduce the usage of the CLI""" start="00:04:35.440" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and drive the execution of the recipes""" start="00:04:37.480" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""natively within the editor.""" start="00:04:40.040" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Let me take you back to the justfile""" start="00:04:41.480" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""which we saw previously.""" start="00:04:44.000" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""This time we will drive it""" start="00:04:45.240" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""within the editor itself,""" start="00:04:47.320" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""instead of executing commands via vterm""" start="00:04:48.840" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""as done previously.""" start="00:04:51.400" video="mainVideo-justl" id="subtitle"]]
+[[!template new="1" text="""So the idea is you either""" start="00:04:52.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""open the justfile,""" start="00:04:54.640" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""or any other file in the directory.""" start="00:04:56.000" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""That doesn't matter, actually.""" start="00:04:57.840" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Once you do that,""" start="00:04:59.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""you call the justl command.""" start="00:05:00.720" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Now as you can see, it lists down""" start="00:05:02.360" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""all the recipes,""" start="00:05:06.640" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""along with the description if present.""" start="00:05:07.520" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""You can move on to different recipes""" start="00:05:09.280" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""by your usual keybinding.""" start="00:05:11.520" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""And for executing a specific recipe,""" start="00:05:13.080" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""you have to press the e keybinding,""" start="00:05:15.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and that will run the recipe""" start="00:05:18.240" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and show its output""" start="00:05:19.720" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""on a special buffer named *just*""" start="00:05:21.600" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""which is built on top of""" start="00:05:23.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""the compilation mode available in Emacs.""" start="00:05:25.000" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Let me actually try""" start="00:05:27.040" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""executing the hello recipe""" start="00:05:28.760" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""which we previously executed in vterm.""" start="00:05:30.240" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""As you can see,""" start="00:05:32.440" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""it executed the recipe""" start="00:05:38.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and the &quot;hello world&quot; output""" start="00:05:39.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""is visible in the just buffer.""" start="00:05:41.120" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""You can also see that there is""" start="00:05:42.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""other metadata like""" start="00:05:44.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""when it started executing""" start="00:05:45.880" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and when did it finish executing.""" start="00:05:47.480" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""If a recipe execution fails,""" start="00:05:49.520" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""it will also change the color""" start="00:05:51.520" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and print the corresponding exit code.""" start="00:05:53.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Let me actually show you""" start="00:05:55.760" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""by modifying the hello recipe""" start="00:05:57.320" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and making it exit.""" start="00:05:59.080" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""As you can see,""" start="00:06:03.600" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""it clearly indicates the error message now.""" start="00:06:08.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""That is a pretty much""" start="00:06:10.480" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""a good high level overview""" start="00:06:12.720" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""of how to execute recipes""" start="00:06:14.240" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""using this Emacs extension.""" start="00:06:15.680" video="mainVideo-justl" id="subtitle"]]
+[[!template new="1" text="""If I press the h or the ? key,""" start="00:06:17.280" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""it will display the various ways""" start="00:06:21.720" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""to drive it.""" start="00:06:23.520" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Now as you can see,""" start="00:06:24.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""you can pass various options to it.""" start="00:06:27.480" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I find the dry run option effective""" start="00:06:29.320" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""whenever I have to print the recipe contents""" start="00:06:31.600" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""without actually executing the recipe.""" start="00:06:34.560" video="mainVideo-justl" id="subtitle"]]
+[[!template new="1" text="""There are also various ways to execute it.""" start="00:06:36.600" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""You can use Emacs's eshell to execute it""" start="00:06:39.720" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""by pressing the E keybinding.""" start="00:06:42.960" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Let me try executing the hello recipe again,""" start="00:06:45.040" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""but this time via Emacs's eshell.""" start="00:06:48.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""As you can see now I have an eshell instance""" start="00:06:50.760" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""where it executed the just hello recipe.""" start="00:06:54.840" video="mainVideo-justl" id="subtitle"]]
+[[!template new="1" text="""You can also directly""" start="00:06:57.320" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""go to the recipe line""" start="00:07:02.440" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""by pressing the return key.""" start="00:07:03.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""So let's say if I want to""" start="00:07:05.000" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""go to the recipe build app""" start="00:07:08.040" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""all I have to do is press the return key""" start="00:07:09.360" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and it will go to the just file""" start="00:07:12.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""with the proper line.""" start="00:07:14.400" video="mainVideo-justl" id="subtitle"]]
+[[!template new="1" text="""You can also re-execute the same recipe""" start="00:07:15.520" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""from the output just buffer.""" start="00:07:19.800" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I find this very helpful""" start="00:07:21.320" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""when iterating on certain things.""" start="00:07:23.320" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""In my day job,""" start="00:07:25.080" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I often have to work with a Kubernetes cluster,""" start="00:07:26.720" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and I would have to write""" start="00:07:29.240" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""resource manifest files for applications.""" start="00:07:30.480" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Having the ability to run the recipes""" start="00:07:33.360" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""while iterating on the project""" start="00:07:36.377" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""is very useful, in my opinion.""" start="00:07:37.943" video="mainVideo-justl" id="subtitle"]]
+[[!template new="1" text="""Let me actually show you""" start="00:07:39.560" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""an example of what I am talking about.""" start="00:07:42.000" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Let me run the build app recipe now,""" start="00:07:43.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""which will basically build the manifest""" start="00:07:46.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and print it out.""" start="00:07:48.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Now let me open one of the application files.""" start="00:07:49.600" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I will open the ingress.yaml file.""" start="00:07:58.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""So I have this YAML file which I am working on,""" start="00:07:59.960" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and I also have this output buffer""" start="00:08:06.120" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""which is basically the output""" start="00:08:08.600" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""of the build app recipe.""" start="00:08:10.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Now I can basically go through this buffer""" start="00:08:11.840" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and see if everything is alright,""" start="00:08:14.200" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""but I find out that I didn't want""" start="00:08:18.320" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""the hostname to be emacs2022.""" start="00:08:21.760" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I wanted it to be just emacs.""" start="00:08:23.920" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I can go and fix it in my YAML file,""" start="00:08:25.840" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and then I can go on""" start="00:08:29.000" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""to the output buffer""" start="00:08:34.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and basically just re-run the command""" start="00:08:36.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""by pressing the g key binding.""" start="00:08:38.520" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""As you can see,""" start="00:08:40.080" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""it executed the same recipe again,""" start="00:08:42.800" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and I can see that""" start="00:08:48.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""the hostname is indeed emacs.""" start="00:08:49.440" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I find this kind of workflow very convenient""" start="00:08:51.280" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""while I am working on a project.""" start="00:08:55.000" video="mainVideo-justl" id="subtitle"]]
+[[!template new="1" text="""Another way of interacting""" start="00:08:56.600" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""with the justl extension""" start="00:08:59.320" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""is by using the interactive function""" start="00:09:00.440" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""justl-exec-recipe-in-dir.""" start="00:09:02.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""The use case of this function""" start="00:09:04.280" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""is executing a one-off recipe""" start="00:09:06.040" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""while you are working on something else.""" start="00:09:07.840" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Let me show you an example of it.""" start="00:09:09.920" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""As you can see, it shows me""" start="00:09:11.960" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""a drop down of various recipes""" start="00:09:19.800" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""available in the justfile.""" start="00:09:21.320" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""You can choose any particular one""" start="00:09:22.640" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and execute the corresponding recipe.""" start="00:09:24.880" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""In this case, I will choose""" start="00:09:26.800" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""the build-app recipe,""" start="00:09:28.360" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and we will get the output""" start="00:09:29.640" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""in the *just* buffer""" start="00:09:31.320" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""which should be similar""" start="00:09:32.280" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""to what we saw previously.""" start="00:09:33.200" video="mainVideo-justl" id="subtitle"]]
+[[!template new="1" text="""So this was a quick introduction""" start="00:09:34.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""to what justfile is""" start="00:09:43.920" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and how to drive them within Emacs.""" start="00:09:45.120" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Hopefully it was helpful""" start="00:09:46.800" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and it would encourage you""" start="00:09:48.600" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""to use justfiles in your workflow.""" start="00:09:50.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Thank you for allowing me to present.""" start="00:09:51.480" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I am available in IRC""" start="00:09:53.800" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""if you have any questions.""" start="00:09:55.480" video="mainVideo-justl" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [psibi2000@gmail.com](mailto:psibi2000@gmail.com?subject=Comment%20for%20EmacsConf%202022%20justl%3A%20justl%3A%20Driving%20recipes%20within%20Emacs)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/justl-before.md b/2022/info/justl-before.md
new file mode 100644
index 00000000..584be749
--- /dev/null
+++ b/2022/info/justl-before.md
@@ -0,0 +1,22 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Sibi Prabakaran shares how to use justl to run justfile tasks from inside Emacs, including a comparison with Makefiles. Afterwards, he will handle questions over IRC.
+
+<div class="vid"><video controls preload="none" id="justl-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="justl-mainVideo" data="""
+00:00.000 Introduction
+00:39.320 Justfiles
+01:48.520 Executing recipes
+02:27.680 Other features
+02:56.440 Comparison with Makefiles
+04:19.280 justl.el
+04:52.400 Executing recipes in Emacs
+06:17.280 Options
+06:36.600 Eshell
+06:57.320 Going to the recipe line
+07:15.520 Re-executing recipes
+07:39.560 Example
+08:56.600 justl-exec-recipe-in-dir
+09:34.680 End
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--main.webm">Download --main.webm (52MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--slides.pdf">Download --slides.pdf</a></li><li><a href="https://toobnix.org/w/tonDBKQYxzZMXQhreMpoca">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/justl-nav.md b/2022/info/justl-nav.md
new file mode 100644
index 00000000..57ceda4b
--- /dev/null
+++ b/2022/info/justl-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/orgsuperlinks">Linking headings with org-super-links (poor-man's Zettelkasten)</a>
+Next by track: <a href="/2022/talks/orgvm">orgvm: a simple HTTP server for org</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/links-after.md b/2022/info/links-after.md
new file mode 100644
index 00000000..12818346
--- /dev/null
+++ b/2022/info/links-after.md
@@ -0,0 +1,5 @@
+<!-- Automatically generated by emacsconf-generate-after-page -->
+
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20links%3A%20Linking%20headings%20with%20org-super-links%20%28poor-man%27s%20Zettelkasten%29)
+<!-- End of emacsconf-generate-after-page -->
diff --git a/2022/info/links-before.md b/2022/info/links-before.md
new file mode 100644
index 00000000..7b781ff6
--- /dev/null
+++ b/2022/info/links-before.md
@@ -0,0 +1,2 @@
+<!-- Automatically generated by emacsconf-generate-before-page -->
+<!-- End of emacsconf-generate-before-page --> \ No newline at end of file
diff --git a/2022/info/links-nav.md b/2022/info/links-nav.md
new file mode 100644
index 00000000..66faaeb3
--- /dev/null
+++ b/2022/info/links-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/rolodex">Build a Zettelkasten with the Hyperbole Rolodex</a>
+Next by track: <a href="/2022/talks/buttons">Linking personal info with Hyperbole implicit buttons</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/localizing-after.md b/2022/info/localizing-after.md
new file mode 100644
index 00000000..bd8b2bbf
--- /dev/null
+++ b/2022/info/localizing-after.md
@@ -0,0 +1,248 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="localizing-mainVideo-transcript"></a>
+# Transcript
+
+[[!template text="""Hello everyone, I am Jean-Christophe Helary,""" start="00:00:00.000" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""I live in Japan, and I'm a translator.""" start="00:00:05.400" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Here is my second presentation on this very""" start="00:00:09.680" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""prestigious stage that is the Emacs conference.""" start="00:00:12.633" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Following my &quot;Let's Translate the 2 million words""" start="00:00:15.300" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""in the Emacs manual&quot; in 2021, my topic this year,""" start="00:00:18.367" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""always related to translation, is""" start="00:00:21.767" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""pre-localizing Emacs or much less pretentiously,""" start="00:00:25.167" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""&quot;Just make sure that your strings don't mix up plurals&quot;.""" start="00:00:28.400" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So, for some reason I resumed Emacs use""" start="00:00:31.933" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""around 2016, and as I was rediscovering the thing""" start="00:00:36.133" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""I found really old outline-mode files here""" start="00:00:39.940" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and there on my machine.""" start="00:00:42.800" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And I started to experiment""" start="00:00:44.033" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""again and write again with Emacs.""" start="00:00:45.140" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""I think that at the time,""" start="00:00:47.167" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""I was coming from Aquamacs and because of""" start="00:00:48.564" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""an integration bug with macOS, I decided""" start="00:00:50.433" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""to check what was going on in the code.""" start="00:00:53.400" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""That was my first official contribution.""" start="00:00:55.440" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So as I was happily installing and uninstalling""" start="00:00:59.040" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""things, I noticed something weird one day.""" start="00:01:02.233" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Let me enlarge that picture.""" start="00:01:05.267" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""See? And even if I were not a translator,""" start="00:01:09.080" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""I would not like that string, and obviously""" start="00:01:12.400" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""the same bug bites you when the string""" start="00:01:14.960" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""tells you to erase the package.""" start="00:01:16.833" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Boom, so we agree that we have a problem here.""" start="00:01:20.520" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So, I started to do some spelunking into the code,""" start="00:01:26.720" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and at least that was my feeling""" start="00:01:29.067" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""because I really am not a programmer""" start="00:01:31.067" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""by any stretch of the imagination.""" start="00:01:33.100" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And what I found was an amazing piece of""" start="00:01:37.240" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""natural language engineering that was mixing code""" start="00:01:39.467" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""with English suffixes and all that,""" start="00:01:41.840" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and I could see that the people who had""" start="00:01:44.267" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""written that code were pretty smart,""" start="00:01:46.267" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""but had missed a number of edge cases""" start="00:01:47.767" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""that produced the above bugs.""" start="00:01:49.533" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""That was my first experience with""" start="00:01:51.280" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""all the message related functions,""" start="00:01:53.500" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""&quot;format&quot;, &quot;concat&quot;, &quot;message&quot;, etc.""" start="00:01:55.033" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""But even with my beginner's eyes I could see that""" start="00:01:58.360" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""something was off because when you want""" start="00:02:00.433" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""to produce natural language strings you never ever""" start="00:02:03.040" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""should use &quot;replace-regex-in-string&quot; to""" start="00:02:06.000" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""add an &quot;ing&quot; or an &quot;ed&quot; suffix""" start="00:02:08.600" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""to change the mode of a sentence.""" start="00:02:11.067" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""But that's what I was seeing was happening.""" start="00:02:12.980" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So, what we had to deal with here""" start="00:02:16.840" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""was way more than just a missed plural.""" start="00:02:20.333" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""It was an attempt at engineering all""" start="00:02:22.220" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""the message strings destined to the user""" start="00:02:24.000" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""with the smart code that was making assumptions""" start="00:02:26.400" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""on the structure of words,""" start="00:02:28.567" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and in the localization world that's a big no-no.""" start="00:02:30.067" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""I'm a translator, and such UI strings issues""" start="00:02:33.220" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""have been sorted out decades ago.""" start="00:02:36.667" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So I was a bit shocked.""" start="00:02:38.433" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""The final patch took me about a year to write,""" start="00:02:41.320" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""because I'm slow, because I needed to verify""" start="00:02:43.533" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and understand a lot, because there are""" start="00:02:45.380" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""plenty of rules and plenty of people who are""" start="00:02:47.167" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""explaining you very nicely what the rules are,""" start="00:02:49.100" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""because I have kids, and because the""" start="00:02:51.433" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Emacs development list is such a cool place to be""" start="00:02:53.733" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""that you often forget why you're there sometimes.""" start="00:02:55.600" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Anyway, for people who can't click on a video,""" start="00:02:58.560" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and I can't either, here are the relevant""" start="00:03:01.800" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""parts with some short comments.""" start="00:03:03.640" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""I'll be talking with localization in mind,""" start="00:03:05.840" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""knowing full well that Emacs localization""" start="00:03:07.800" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""is not on the map at the moment.""" start="00:03:09.640" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So first, there is this thing""" start="00:03:12.800" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""about &quot;format&quot; and &quot;concat&quot;.""" start="00:03:14.167" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And if I remember correctly,""" start="00:03:15.520" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""&quot;format&quot; is better for user-facing things,""" start="00:03:17.800" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and &quot;concat&quot; is better for internal things.""" start="00:03:20.300" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Here, there are two things.""" start="00:03:25.160" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""First, a rule that we have when we prepare""" start="00:03:26.800" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""strings that need to be localized is""" start="00:03:28.800" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""never ever make assumptions on the way""" start="00:03:30.700" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""numbers are expressed in the language.""" start="00:03:33.333" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Here, the assumption is that""" start="00:03:35.780" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""we have either a singular or plural form,""" start="00:03:37.067" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and that's not always the case.""" start="00:03:40.000" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""That usually means that you should externalize""" start="00:03:42.040" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""numbers and find a generic way to express them.""" start="00:03:44.067" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So it makes for slightly less natural""" start="00:03:48.280" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""language strings, but it's better anyway.""" start="00:03:50.833" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Then we have that comma there that's trying""" start="00:03:54.400" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""to be externalized and that's weird,""" start="00:03:56.667" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""so I put it back into the sentence.""" start="00:03:58.167" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Here we have another construct, or two rather,""" start="00:04:02.620" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""that really should not be used like this.""" start="00:04:04.967" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""It's &quot;prin1&quot; that uses quoting characters,""" start="00:04:06.960" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""just like &quot;print&quot;, and &quot;princ&quot; that does not.""" start="00:04:10.033" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And you see why they were combined together.""" start="00:04:12.480" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And they were both trying to be really smart""" start="00:04:15.400" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""about which article to put in front of a vowel.""" start="00:04:17.133" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And you just don't do that.""" start="00:04:19.780" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""You just keep things simple.""" start="00:04:20.960" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Here again, the code is trying to be smart,""" start="00:04:25.000" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""but it's really not much more efficient than""" start="00:04:26.633" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""plainly stating what you want.""" start="00:04:28.480" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And here again, we have &quot;concat&quot; things""" start="00:04:34.940" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""that we could just use to plainly state""" start="00:04:36.500" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""what we want to state.""" start="00:04:40.367" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So, instead of &quot;concat&quot; I just put a &quot;message&quot;.""" start="00:04:41.980" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And here we have something that's very cute.""" start="00:04:49.880" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""It's a computerized plural.""" start="00:04:52.260" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Here again, assuming that""" start="00:04:54.540" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""there are only plural or singular forms.""" start="00:04:55.700" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""But the end string is not that much more natural""" start="00:04:58.640" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""than the fix, the code is less efficient""" start="00:05:00.867" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and is harder to understand.""" start="00:05:02.700" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Here again, the code is trying to make""" start="00:05:07.760" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""smart things where it could be much simpler.""" start="00:05:09.433" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""That is the part where you get the""" start="00:05:13.520" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""number of packages and their names.""" start="00:05:14.667" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Here the whole sentence with the semicolons""" start="00:05:19.480" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and the question mark is split in parts,""" start="00:05:22.067" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""between which something will be inserted.""" start="00:05:26.333" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""That's really ugly and difficult to read.""" start="00:05:29.180" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Here again, another &quot;ing&quot; waiting to be""" start="00:05:34.240" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""regex-inserted into the code.""" start="00:05:37.700" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And here at last, we get to the point""" start="00:05:44.840" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""where everything started.""" start="00:05:46.633" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And you can see that unlike in the other spots,""" start="00:05:48.760" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""there is no possibility for the expression""" start="00:05:50.833" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""to be singular.""" start="00:05:52.400" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So, I guess that if it hadn't been for that bug,""" start="00:05:54.680" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""I would not have found the other items,""" start="00:05:57.600" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and we would be left with code that works,""" start="00:05:59.320" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""of course, but that is""" start="00:06:01.033" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""harder to understand, and maintain.""" start="00:06:02.033" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Last but not least, a last version of""" start="00:06:06.020" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""&quot;just plainly state what you mean to state&quot;.""" start="00:06:08.333" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Keep it simple.""" start="00:06:10.920" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So first, we have this wonderful CONTRIBUTE file""" start="00:06:14.880" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""that is very explicit about""" start="00:06:19.267" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""how we must proceed when contributing code.""" start="00:06:21.267" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So, that's really the first place""" start="00:06:23.520" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""that we should all read.""" start="00:06:25.233" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""The README file is pretty cool too,""" start="00:06:27.760" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""especially at the beginning of the process,""" start="00:06:29.333" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""when you're not sure whether""" start="00:06:30.967" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""you want to fix that bug or just report it.""" start="00:06:31.867" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And then we've got packages.""" start="00:06:36.240" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""We've got a number of packages that are really""" start="00:06:37.920" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""helpful when it comes to reading""" start="00:06:39.900" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""the information and the manuals.""" start="00:06:42.600" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""I'm mentioning three of them here,""" start="00:06:45.880" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and I think they are the most important for us.""" start="00:06:48.000" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So &quot;helpful&quot; is on the right,""" start="00:06:53.720" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and it's overflowing the window with""" start="00:06:55.600" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""all the contextualized information it provides,""" start="00:06:58.667" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and the standard &quot;help&quot; is on the left.""" start="00:07:01.900" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""I mean, really there are like two or three""" start="00:07:05.280" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""screen-full of information in the &quot;helpful&quot; output,""" start="00:07:07.933" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""so you really only see a part,""" start="00:07:11.567" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""but I guess if you use it, you know what I'm saying.""" start="00:07:13.233" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""What I like the most here is the &quot;view in manual&quot;""" start="00:07:16.320" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""part, where you can actually click and even get""" start="00:07:18.867" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""more information that's sometimes""" start="00:07:21.800" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""easier to read and understand.""" start="00:07:23.667" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And then you've got the &quot;info&quot; versus &quot;inform&quot; formats.""" start="00:07:28.400" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""When you're in the manual,""" start="00:07:33.640" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""&quot;inform&quot; makes a huge difference.""" start="00:07:34.567" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""You can see here that you've got colorized items,""" start="00:07:37.140" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and also in the middle you've got that""" start="00:07:39.367" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""'read' part that's green and bold.""" start="00:07:42.000" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""In &quot;info&quot; it's not a specific object,""" start="00:07:45.000" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""it's just a string. In 'inform' it's actually""" start="00:07:49.333" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""a link that you can click,""" start="00:07:52.200" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and actually go to that 'read' manual page.""" start="00:07:53.800" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Now, we've got &quot;which-key&quot;.""" start="00:07:58.320" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""&quot;which-key&quot; is a savior for beginners too.""" start="00:08:01.300" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Just wait half a second or something,""" start="00:08:03.400" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and Emacs will show you all the keys""" start="00:08:04.867" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""that you can access from the prefix combination""" start="00:08:06.500" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""that you just typed.""" start="00:08:08.433" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So, it's really helpful for discovering functions""" start="00:08:09.920" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and learning new functions, getting used to them.""" start="00:08:13.200" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And so that whole process started…,""" start="00:08:19.160" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""it was May 23, 2017,""" start="00:08:21.500" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""with that thread when I found the bug.""" start="00:08:26.533" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""I just bumped into an English/code bug""" start="00:08:30.440" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""this morning. In package.el, when one package""" start="00:08:32.800" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""is not needed anymore, the message is:""" start="00:08:36.920" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""&quot;Package menu: Operation finished.""" start="00:08:39.033" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""1 packages are no longer needed&quot;, etc.""" start="00:08:41.300" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So, I was asking whether we had best practices""" start="00:08:44.880" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""for using messages, and we had a whole thread""" start="00:08:49.633" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""about that. And while I was discussing on that""" start="00:08:53.800" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""thread, I started that new thread, which is:""" start="00:08:57.867" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""&quot;package.el strings&quot;.""" start="00:09:01.240" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""The whole thing actually ended on June 27, 2018.""" start="00:09:02.867" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So, a year after, with that message from Noam""" start="00:09:09.900" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""telling me that &quot;Yes I can close the bug,&quot;""" start="00:09:15.400" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and that was it.""" start="00:09:18.567" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So, it took about a year to finish that.""" start="00:09:22.040" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""What I did learn basically is that""" start="00:09:24.000" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""helping with Emacs is not that difficult.""" start="00:09:28.133" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""It takes time when you're not fluent with the code,""" start="00:09:32.160" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""but that's okay because the reference""" start="00:09:36.100" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""is excellent, and there are lots of people""" start="00:09:37.100" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""who are here to help.""" start="00:09:39.300" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Basically, the solution to all our problems is""" start="00:09:41.520" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""&quot;Keep It Simple and Straightforward&quot;.""" start="00:09:45.700" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""As you can see in that patch,""" start="00:09:47.733" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""even if it's a beginner's patch,""" start="00:09:51.033" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""what I did shows what can be done by Emacs Lisp""" start="00:09:53.233" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""beginners to help with &quot;straightening&quot; the strings""" start="00:09:57.733" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""to reduce the number of potential English bugs.""" start="00:09:59.533" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And then to make Emacs strings easier""" start="00:10:02.267" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""to be handled by real localization processes one day.""" start="00:10:04.533" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""But it doesn't have to be about strings""" start="00:10:07.233" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""because strings can be an easy entry point to Emacs,""" start="00:10:09.067" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""but it can be any itch that you want to scratch.""" start="00:10:12.767" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And my real conclusion is that""" start="00:10:16.720" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Emacs is free software, and what that means is mostly""" start="00:10:18.267" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""that it allows you to do things that you would""" start="00:10:22.160" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""never have thought of being able to do before.""" start="00:10:24.067" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""That's really the biggest lesson to be learned here.""" start="00:10:27.920" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So, I want to thank all the people""" start="00:10:32.000" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""who allowed this to be happening, allowed me to""" start="00:10:33.400" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""learn a bit and contribute a bit to that wonderful""" start="00:10:37.920" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""piece of software that Emacs is.""" start="00:10:41.267" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And thank you everyone for listening,""" start="00:10:42.800" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and hopefully I'll see you next year""" start="00:10:44.533" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""with a different translation related presentation.""" start="00:10:46.700" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Thank you very much.""" start="00:10:51.520" video="mainVideo-localizing" id="subtitle"]]
+
+
+
+Captioner: jean-christophe
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20localizing%3A%20Pre-localizing%20Emacs)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/localizing-before.md b/2022/info/localizing-before.md
new file mode 100644
index 00000000..91f3f803
--- /dev/null
+++ b/2022/info/localizing-before.md
@@ -0,0 +1,30 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sun 2022-12-04. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="localizing">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(126,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect x="378" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(399,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect stroke-width="3" x="658" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 11-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-localizing>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: TO_CAPTION_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-04T21:00:00Z" end="2022-12-04T21:10:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~4:00 PM - 4:10 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 4 2022, ~3:00 PM - 3:10 PM CST (US/Central)<br />Sunday, Dec 4 2022, ~2:00 PM - 2:10 PM MST (US/Mountain)<br />Sunday, Dec 4 2022, ~1:00 PM - 1:10 PM PST (US/Pacific)<br />Sunday, Dec 4 2022, ~9:00 PM - 9:10 PM UTC <br />Sunday, Dec 4 2022, ~10:00 PM - 10:10 PM CET (Europe/Paris)<br />Sunday, Dec 4 2022, ~11:00 PM - 11:10 PM EET (Europe/Athens)<br />Monday, Dec 5 2022, ~2:30 AM - 2:40 AM IST (Asia/Kolkata)<br />Monday, Dec 5 2022, ~5:00 AM - 5:10 AM +08 (Asia/Singapore)<br />Monday, Dec 5 2022, ~6:00 AM - 6:10 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/dev/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="localizing-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--main.webm">Download --main.webm (23MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/7E7zo6E6KvrWamsQUxfRuR">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="localizing-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="localizing-qanda" data="""
+06:11.680 Is Emacs localized/localizable?
+10:07.160 You mention regex on strings is a red flag for localization, are there others to look out for?
+13:49.980 So, your project is to localize all of Emacs?
+14:47.325 How deep would usefull localization go? Because at the core of Emacs are docstrings and localizing them could also imply localizing Elisp.
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="localizing-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--answers.webm">Download --answers.webm (36MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--answers.opus">Download --answers.opus (6.1MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/localizing-nav.md b/2022/info/localizing-nav.md
new file mode 100644
index 00000000..d2aac021
--- /dev/null
+++ b/2022/info/localizing-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/indieweb">Putting Org Mode on the Indieweb</a>
+Next by track: <a href="/2022/talks/devel">Emacs development updates</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/lspbridge-after.md b/2022/info/lspbridge-after.md
new file mode 100644
index 00000000..848d11a0
--- /dev/null
+++ b/2022/info/lspbridge-after.md
@@ -0,0 +1,332 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="lspbridge-mainVideo-transcript"></a>
+# Transcript
+
+[[!template text="""Good morning folks, I'm Matthew.""" start="00:00:00.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Welcome to another year of EmacsConf.""" start="00:00:04.640" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""It's looking fantastic this year.""" start="00:00:07.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Firstly, I have to apologize for my voice""" start="00:00:10.320" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and occasional cough today.""" start="00:00:13.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""I am currently recovering from a cold,""" start="00:00:15.880" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""hopefully it's not Covid or flu,""" start="00:00:18.040" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""so please bear with me today.""" start="00:00:21.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Actually, this talk was supposed to be brought to you""" start="00:00:24.720" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""by Manatee Lazycat, the author of lsp-bridge.""" start="00:00:27.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""But verbal English isn't Lazycat's strongest skill,""" start="00:00:31.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and we are good friends as we maintain""" start="00:00:36.080" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the Emacs Application Framework together,""" start="00:00:38.600" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""so here I am today presenting to you this package.""" start="00:00:41.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Welcome to my talk on lsp-bridge:""" start="00:00:46.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""a smooth-as-butter asynchronous LSP client.""" start="00:00:48.480" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""What is LSP?""" start="00:00:50.321" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""The first question is, what is LSP?""" start="00:00:57.201" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""For anyone who doesn't know here,""" start="00:01:01.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""LSP stands for Language Server Protocol,""" start="00:01:03.200" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""it is a set of protocols defined by Microsoft""" start="00:01:06.800" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""that provides smart features like autocomplete,""" start="00:01:09.720" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""go to definition, documentation, etc.,""" start="00:01:13.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""that can be implemented across different editors and IDEs.""" start="00:01:17.600" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""It was initially created""" start="00:01:23.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""for their Visual Studio Code product,""" start="00:01:25.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""then publically shared with everyone.""" start="00:01:28.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""So there are language servers out there""" start="00:01:33.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""that implemented this procotol,""" start="00:01:36.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and editors need to implement the same procotols""" start="00:01:38.120" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""to talk to the language servers""" start="00:01:41.240" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""in order to retrieve necessary information.""" start="00:01:43.120" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Emacs has 2 LSP clients already, the lsp-mode and eglot,""" start="00:01:46.800" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""both implemented the protocols and both are very good.""" start="00:01:53.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Now comes to the second question, of course,""" start="00:02:00.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""given lsp-mode and eglot, why another LSP client?""" start="00:02:03.200" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""I used to use lsp-mode all the time,""" start="00:02:09.520" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""I have to say I really appreciate Ivan Yonchovski""" start="00:02:12.360" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and the team's efforts. Also, I'd like to congratuate eglot""" start="00:02:16.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""for making into Emacs 29! These are fantastic packages,""" start="00:02:20.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""they are very mature and robust.""" start="00:02:27.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""However, with all due respect, both of the implementation""" start="00:02:31.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""are fundamentally limited""" start="00:02:35.120" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""by the single-threaded nature of Emacs,""" start="00:02:36.720" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""it is neither the fault of lsp-mode nor eglot.""" start="00:02:39.640" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Although in recent years there have been""" start="00:02:46.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""improvements to Emacs core such as native JSON support,""" start="00:02:47.960" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""there are still scenarios where Emacs clog""" start="00:02:51.800" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""for a brief second when processing large amounts of data,""" start="00:02:55.320" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""as Emacs is processing everything in the single thread.""" start="00:02:59.360" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""This problem is especially apparent in some LSP servers""" start="00:03:03.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""that feeds in tens of thousands of JSON data""" start="00:03:08.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""with every single key press.""" start="00:03:11.840" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Additionally, the large amount of data""" start="00:03:15.200" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""sent by the LSP server, such as the completion candidates,""" start="00:03:17.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the diagnostics and documentation,""" start="00:03:21.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""they are temporarily stored in the Emacs memory,""" start="00:03:23.960" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""which will trigger garbage collection very frequently,""" start="00:03:27.360" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""this also causes stuttering user experience.""" start="00:03:31.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Increasing the gc-cons-threshold helps,""" start="00:03:34.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""but doesn't eliminate the problem.""" start="00:03:37.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""For something like the LSP,""" start="00:03:43.760" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the language servers need time to compute,""" start="00:03:45.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and Emacs needs capacity to process and filter""" start="00:03:48.320" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""all the data coming from the language servers.""" start="00:03:52.360" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""A large codebase project with a slow language server""" start="00:03:55.800" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""that sends tens of thousands of JSON""" start="00:03:59.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""will significantly increase the time needed to process it,""" start="00:04:02.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""when we don't have a multi-thread,""" start="00:04:06.520" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the single thread originally allocated for perhaps,""" start="00:04:08.080" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""handling user input will be used to process all the data,""" start="00:04:12.720" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and don't even talk about the garbage collection along the way.""" start="00:04:17.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""The unfortunate truth is that the size of the codebase""" start="00:04:22.720" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and the efficiency of the language server""" start="00:04:26.240" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""is completely out of Emacs' control,""" start="00:04:28.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""it is also out of both the lsp-mode and eglot's control.""" start="00:04:31.760" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""If there's an LSP client""" start="00:04:38.520" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""that can completely eliminate stuttering""" start="00:04:40.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and provide a seamless feedback,""" start="00:04:42.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""that would be great, isn't it?""" start="00:04:45.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""However, we're vaguely talking about speed right now,""" start="00:04:50.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""what is considered fast?""" start="00:04:53.840" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""What is considered seamless?""" start="00:04:56.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""What we really mean when we say""" start="00:04:58.360" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the current LSP implementation is slow?""" start="00:05:01.480" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Let's first look at the problem fundamentally.""" start="00:05:05.240" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""We interact with Emacs through a keyboard,""" start="00:05:12.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""so what we perceive as a fast and smooth feedback""" start="00:05:17.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""completely depends on how long it takes""" start="00:05:22.720" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""for a keyboard input to display on the Emacs buffer.""" start="00:05:26.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""From a pure graphical perspective,""" start="00:05:29.360" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""we need a minimum of 24 frames per second,""" start="00:05:32.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the standard in the media industry,""" start="00:05:36.520" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""for us humans to perceive something as seamless.""" start="00:05:39.080" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Say we need 25 frames per second, this means,""" start="00:05:42.360" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""if we divide 1000 milliseconds by 25,""" start="00:05:47.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""we only have approximately 40 millisecond window""" start="00:05:50.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""for the response time to spare.""" start="00:05:54.760" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Even if we relax the constraint a bit more,""" start="00:05:57.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""on average a typist takes about 100 to 200 milliseconds""" start="00:06:01.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""between typing each character,""" start="00:06:06.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""so as long as we see a response within this timeframe,""" start="00:06:09.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""it is tolerable. However, using a slow language server""" start="00:06:12.600" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""on a large codebase easily exceeds""" start="00:06:19.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the hundred millisecond mark,""" start="00:06:22.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and sometimes takes more than 200 milliseconds,""" start="00:06:24.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and inevitably will cause an inconsistent delay""" start="00:06:27.480" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""for the end user.""" start="00:06:32.040" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""At this point, someone might want to point out""" start="00:06:33.200" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""that nobody is gonna type at the maximum pace all the time.""" start="00:06:37.960" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""That's right, frankly speaking most of my time""" start="00:06:41.080" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""spent at programming is not writing code,""" start="00:06:45.040" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""but staring at the screen""" start="00:06:47.640" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""thinking about how to write the code.""" start="00:06:49.040" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""However, when we do actually type,""" start="00:06:51.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""maybe only a sentence, a variable name, a keyword,""" start="00:06:55.600" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""or just performing keybinding shortcuts,""" start="00:07:00.360" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""that's when we want to see our input feedback immediately.""" start="00:07:03.040" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""We've already spend so much time""" start="00:07:08.480" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""thinking about how to write,""" start="00:07:10.480" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""we don't want to waste any more time waiting for Emacs""" start="00:07:12.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""to process and show us what we've written""" start="00:07:16.480" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""half a second ago. Otherwise the frustration will build up.""" start="00:07:19.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""In the past two years of EmacsConf, I've talked about""" start="00:07:28.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the Emacs Application Framework, a project that extended""" start="00:07:32.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Emacs Lisp to Python, Qt and JavaScript ecosystems.""" start="00:07:35.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""The EAF project specializes in improving""" start="00:07:39.840" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the graphical and multimedia capabilities of Emacs""" start="00:07:43.760" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""through other languages, it was a great success.""" start="00:07:47.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""It demonstrated the endless possibilities of Emacs""" start="00:07:51.760" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""by embracing the strengths in other ecosystems.""" start="00:07:55.760" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""If anyone is interested for more information on EAF,""" start="00:08:00.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""please see the EAF repo and refer to my talks""" start="00:08:04.240" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""from EmacsConf2020 and 2021.""" start="00:08:08.520" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""""" start="00:08:12.960" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""The EAF project was created by Manatee Lazycat as well,""" start="00:08:12.960" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""so he thought if there is a way to design""" start="00:08:16.240" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""an LSP client similar to EAF""" start="00:08:20.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""that takes the advantage of Python's multi-threading,""" start="00:08:22.760" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""it will be able to solve our problem.""" start="00:08:25.760" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Conveniently EAF had already done most of the ground work""" start="00:08:27.840" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and demonstrated the possibility""" start="00:08:32.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""of cooperating Elisp and Python using the Emacs RPC effectively.""" start="00:08:34.360" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""LSP Bridge has several goals in mind.""" start="00:08:42.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Firstly, performance is the number one priority.""" start="00:08:45.040" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Secondly, use Python multi-threading to bypass""" start="00:08:50.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the aforementioned bottlenecks of a single-threaded Emacs.""" start="00:08:55.840" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Thirdly, provide a simple solution that requires""" start="00:08:59.240" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""minimal setup for someone who just wants to have""" start="00:09:04.520" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""a fast autocomplete system in Emacs.""" start="00:09:07.520" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""This means, LSP Bridge does not intend""" start="00:09:10.080" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and will not implement the entire LSP protocol,""" start="00:09:16.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""which is a vastly different approach""" start="00:09:21.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""than a solution like lsp-mode,""" start="00:09:23.640" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""we do not want to compete this way.""" start="00:09:25.760" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""We also believe some of the LSP Protocol features""" start="00:09:28.480" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""are unnecessary, or we already have better solutions""" start="00:09:33.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""in the Emacs ecosystem,""" start="00:09:37.760" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""such as tree-sitter for syntax highlighting.""" start="00:09:38.960" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""So we will not reinvent the wheel.""" start="00:09:42.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Ultimately, we want to provide the fastest, butter-smooth""" start="00:09:44.960" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and performant LSP client out of the box.""" start="00:09:50.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Design.""" start="00:09:53.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Now let's look at the design architecture diagram.""" start="00:09:54.561" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""As you can see, it is split into""" start="00:10:01.240" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the top half and bottom half.""" start="00:10:04.640" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""The top is the design for a single file model,""" start="00:10:07.080" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and the bottom half is for project model.""" start="00:10:10.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""We make this distinction because we don't want a new user""" start="00:10:13.360" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""to be troubled on choosing a project root directory""" start="00:10:18.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""as the first impression to LSP""" start="00:10:22.600" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""before even start writing code.""" start="00:10:25.200" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""""" start="00:10:27.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""From a new user's perspective,""" start="00:10:27.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""they've just installed this package,""" start="00:10:30.480" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and all they are expecting""" start="00:10:32.960" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""is using a smart autocomplete system,""" start="00:10:35.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""what does root directory even mean in this context?""" start="00:10:37.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""So we make the decision for them""" start="00:10:41.520" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""based on whether this file is part of a git repository.""" start="00:10:44.120" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Often times we write code in its own standalone file,""" start="00:10:48.200" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""this is extremely common for scripting languages""" start="00:10:56.720" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""like bash or python. So in the single file model,""" start="00:10:59.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""LSP Bridge will start a dedicated LSP server""" start="00:11:03.320" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""for this particular file based on file type,""" start="00:11:07.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and every file corresponds to a LSP server,""" start="00:11:10.320" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""so each server doesn't interfere with one another.""" start="00:11:13.480" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""The project model will have every file of the same type""" start="00:11:17.840" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""under the same project share one server.""" start="00:11:23.720" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""We believe this is a positive trade-off for user experience.""" start="00:11:25.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""""" start="00:11:30.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""LSP Bridge internally implemented two main threads,""" start="00:11:30.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""one is the Request Thread, the other is Response Thread.""" start="00:11:36.600" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""The Request Thread is used to handle all the requests""" start="00:11:40.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""coming from Emacs, it does not answer immediately,""" start="00:11:45.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""this is important because Emacs doesn't need to wait""" start="00:11:48.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""for any response under any reason,""" start="00:11:52.840" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""even if the server is buggy or died out,""" start="00:11:54.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""it shouldn't matter to the performance of Emacs.""" start="00:11:58.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""The Response Thread is used to handle""" start="00:12:01.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the response coming from LSP servers.""" start="00:12:04.040" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""After retrieving a response, regardless of the JSON size,""" start="00:12:06.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""it sends to its own thread for computation,""" start="00:12:11.240" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""such as candidate filtering and renaming.""" start="00:12:14.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Once the computation is finished,""" start="00:12:17.080" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""it will determine if this information is expired,""" start="00:12:20.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""if not, then push it to Emacs.""" start="00:12:23.640" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""""" start="00:12:26.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""From the Emacs side, when it receives the LSP information,""" start="00:12:26.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""it only needs to determine the course of action,""" start="00:12:31.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""either popup completion, jump to definition,""" start="00:12:34.640" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""renaming action, or show references and show documentions.""" start="00:12:39.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""You see, from a user, all LSP Bridge doing""" start="00:12:44.800" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""is these 5 things, the user doesn't need to care about""" start="00:12:49.120" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""anything else like the complicated""" start="00:12:52.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Language Server Protocols.""" start="00:12:54.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""""" start="00:12:56.480" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Python side caches heavy data""" start="00:12:56.480" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""such as candidate documentation and diagnostics.""" start="00:13:02.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""We process as much server data as possible in Python,""" start="00:13:06.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and only pass to Emacs as little data as possible""" start="00:13:11.080" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""so it doesn't clog the Emacs thread""" start="00:13:15.760" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and triggers garbage collection.""" start="00:13:18.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""""" start="00:13:19.800" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""This design is critical, because all Emacs needs to do""" start="00:13:19.800" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""is sending LSP requests to LSP Bridge,""" start="00:13:24.320" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""it doesn't wait for a response,""" start="00:13:27.040" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""it simply knows what to do *when* there is a response.""" start="00:13:29.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""So the user's input immediately displays on the buffer""" start="00:13:33.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""well within the 40 millisecond window,""" start="00:13:37.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and in the mean time, the user can continue to type""" start="00:13:39.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""if he doesn't need the help from LSP right away,""" start="00:13:45.200" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""it fundamentally resolves the stuttering problem.""" start="00:13:48.200" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Now I want to talk about acm-mode,""" start="00:13:51.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""which stands for asynchronous completion menu,""" start="00:13:59.080" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""it is a completion framework""" start="00:14:09.600" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""that currently bundled with LSP Bridge""" start="00:14:12.480" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""designed to accomodate for""" start="00:14:15.040" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the asynchronous nature of LSP servers.""" start="00:14:17.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""It is a replacement for the built-in capf,""" start="00:14:20.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""short for completion-at-point-functions,""" start="00:14:26.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""used in almost everywhere""" start="00:14:30.360" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""including company-mode and corfu-mode.""" start="00:14:32.520" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Yes, we unfortunately reinvented a very fundamental wheel.""" start="00:14:35.760" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""No, it wasn't an easy decision.""" start="00:14:40.840" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""However we still believe it's worth it.""" start="00:14:44.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""LSP Bridge initially used company-mode,""" start="00:14:47.880" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""then moved on to corfu-mode for a while,""" start="00:14:53.360" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""but eventually Lazycat determined""" start="00:14:56.120" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""that it is much more painful to write""" start="00:14:59.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""a lot of workaround code to force LSP Bridge""" start="00:15:00.720" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""to handle capf nicely than to just fork Corfu,""" start="00:15:05.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""remove all the capf code,""" start="00:15:09.960" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and write a new completion framework from the remainings.""" start="00:15:12.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""""" start="00:15:15.240" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Performance wise, capf requires Emacs to store""" start="00:15:15.240" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the entire candidate list""" start="00:15:20.720" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""when looking up candidate annotations.""" start="00:15:23.120" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""It needs to search through the entire candidate list first,""" start="00:15:27.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""then use the candidate as a key""" start="00:15:30.640" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""to search for the actual information.""" start="00:15:32.600" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""This entire process will be repeated every time""" start="00:15:34.800" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""when drawing the completion menu.""" start="00:15:38.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""This is truly intensive computing task for Emacs to handle.""" start="00:15:40.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""On top of that, the existing capf frameworks assume""" start="00:15:45.200" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the candidate list, which is retrieved from the LSP server,""" start="00:15:50.520" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""to be ready and finalized in place""" start="00:15:54.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""when the completion popup occurred.""" start="00:15:56.840" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""However given the design of LSP Bridge,""" start="00:15:58.720" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Emacs will not sit there and wait for the server response,""" start="00:16:02.120" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""instead the Response Thread may feed Emacs data""" start="00:16:05.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""whenever it's ready. This makes capf almost impossible""" start="00:16:10.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""to form a finalized candidate list during popup.""" start="00:16:14.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""""" start="00:16:21.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""The complete reasons regarding why capf is incompatible""" start="00:16:21.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""with the asynchronous nature of LSP servers""" start="00:16:26.080" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""are very complicated and deserves its own talk.""" start="00:16:28.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Lazycat wrote an entire blog post detailing his reasonings,""" start="00:16:32.480" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""while Corfu's author Daniel Mendler a.k.a minad""" start="00:16:37.080" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""also done his own investigations and experiments,""" start="00:16:41.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and reached a common conclusion.""" start="00:16:44.240" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""For anyone interested, I've pasted the links""" start="00:16:47.240" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""to the corresponding posts here.""" start="00:16:50.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Therefore, keep in mind that LSP Bridge""" start="00:16:52.760" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""can only use acm-mode to work nicely,""" start="00:16:57.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""so please disable other completion frameworks""" start="00:16:59.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""like company and corfu before trying LSP Bridge.""" start="00:17:03.360" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""By designing ACM with asynchronous server response in mind,""" start="00:17:07.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""this unlocks LSP Bridge project's potential""" start="00:17:14.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""to provide completions from almost any backends.""" start="00:17:18.760" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""ACM has blended all the backends together,""" start="00:17:22.200" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and configured a priority to display""" start="00:17:25.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""important completion results like LSP before other backends.""" start="00:17:28.800" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""It can autocomplete LSP, TabNine, Elisp symbols, yasnippets,""" start="00:17:32.840" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""even English dictionaries and much more.""" start="00:17:38.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""As long as you have the backends installed,""" start="00:17:41.040" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""they all work out-of-the-box!""" start="00:17:43.960" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Although LSP Bridge is a relatively new package""" start="00:17:46.320" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""with just over 7 months old, it is already a success!""" start="00:17:55.240" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""As of December of 2022, we have 67 contributors""" start="00:18:00.040" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""making more than 1000 commits,""" start="00:18:06.600" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and we reached more than 600 stars on Github!""" start="00:18:08.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""LSP Bridge is easily extensible,""" start="00:18:12.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""developing a new language backend is very simple too,""" start="00:18:16.360" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""feel free to join us!""" start="00:18:18.880" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""LSP Bridge is another successful example""" start="00:18:20.640" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""of extending Emacs Lisp with Python, and just like EAF,""" start="00:18:25.600" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""it demonstrated the potential Emacs can achieve""" start="00:18:29.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""when we jump out of the Lisp-only world""" start="00:18:33.640" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and embrace other ecosystems.""" start="00:18:37.040" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Recently Lazycat created a package called blink-search""" start="00:18:39.200" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""that leveraged similar ideas""" start="00:18:43.480" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""but an asynchronous search framework,""" start="00:18:45.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""as well as a package called deno-bridge""" start="00:18:48.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""that extended Emacs Lisp""" start="00:18:51.240" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""with Deno JavaScript TypeScript runtimes.""" start="00:18:53.120" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Please check it out,""" start="00:18:56.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""if consider joining the development too!""" start="00:18:57.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""This is the entirety of my presentation, thanks for joining!""" start="00:19:05.200" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Me and Lazycat will be available""" start="00:19:08.600" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""to answer questions on IRC and Etherpad.""" start="00:19:11.320" video="mainVideo-lspbridge" id="subtitle"]]
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20lspbridge%3A%20lsp-bridge%3A%20a%20smooth-as-butter%20asynchronous%20LSP%20client)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/lspbridge-before.md b/2022/info/lspbridge-before.md
new file mode 100644
index 00000000..536ac2cb
--- /dev/null
+++ b/2022/info/lspbridge-before.md
@@ -0,0 +1,4 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+<div class="vid"><video controls preload="none" id="lspbridge-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-lspbridge--lspbridge-a-smooth-as-butter-asynchronous-lsp-client--andy-stewart-matthew-zeng--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-lspbridge--lspbridge-a-smooth-as-butter-asynchronous-lsp-client--andy-stewart-matthew-zeng--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-lspbridge--lspbridge-a-smooth-as-butter-asynchronous-lsp-client--andy-stewart-matthew-zeng--main.webm">Download --main.webm (34MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-lspbridge--lspbridge-a-smooth-as-butter-asynchronous-lsp-client--andy-stewart-matthew-zeng--main.opus">Download --main.opus (9.4MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-lspbridge--lspbridge-a-smooth-as-butter-asynchronous-lsp-client--andy-stewart-matthew-zeng--main.org">Download --main.org</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-lspbridge--lspbridge-a-smooth-as-butter-asynchronous-lsp-client--andy-stewart-matthew-zeng--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/oWZ7s5B5pw6vayDKPJQVBG">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/lspbridge-nav.md b/2022/info/lspbridge-nav.md
new file mode 100644
index 00000000..bbffa0d4
--- /dev/null
+++ b/2022/info/lspbridge-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/handwritten">How to incorporate handwritten notes into Emacs Orgmode</a>
+Next by track: <a href="/2022/talks/science">Writing and organizing literature notes for scientific writing</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/mail-after.md b/2022/info/mail-after.md
new file mode 100644
index 00000000..e1221cf9
--- /dev/null
+++ b/2022/info/mail-after.md
@@ -0,0 +1,581 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="mail-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Greetings. Salaam. This is Mohsen Banan. محسن بنان.""" start="00:00:00.000" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I am a software and internet engineer.""" start="00:00:09.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I have been interested in email and""" start="00:00:12.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Emacs for a very long time.""" start="00:00:14.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""My interest in email started with X.400""" start="00:00:17.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and the Red and Blue CCITT books -- circa 1988.""" start="00:00:21.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Early on, in the very early 1990s, I jumped ship""" start="00:00:27.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and joined the Internet email movement.""" start="00:00:32.000" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I am the primary author of two mobile email""" start="00:00:35.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""related Internet RFCs, RFC-2188 and RFC-2524.""" start="00:00:38.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""My interest in Emacs started in 1986 --""" start="00:00:45.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""It was Emacs version 17 then. By around 1988""" start="00:00:49.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""when Emacs version 18 was well in place,""" start="00:00:54.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I started living inside of Emacs.""" start="00:00:58.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""My primary digital environment has been Emacs ever since.""" start="00:01:01.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""It has been a good life.""" start="00:01:06.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""It turns out that Emacs and email mix up really well.""" start="00:01:11.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Here, in this presentation and in the context of""" start="00:01:17.000" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Revisiting The Anatomy of Emacs Mail User Agents,""" start="00:01:21.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""With MARMEE (Multi-Account Resident""" start="00:01:26.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Message Exchange Environment)""" start="00:01:30.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I am offering my thoughts on this topic""" start="00:01:33.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""in this Emacs Conference 2022.""" start="00:01:35.560" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""Long ago, I asked myself:""" start="00:01:41.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""&quot;What should my ultimate mail environment be?&quot;""" start="00:01:43.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Over the past 20+ years, I have been exploring""" start="00:01:49.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""the concept of the &quot;Ultimate Mail User Agent (MUA)&quot;.""" start="00:01:52.141" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""We do care about privacy, autonomy,""" start="00:01:58.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""morality, ethics, society and philosophy,""" start="00:02:01.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""so from the get go, proprietary (Haraam) environments""" start="00:02:05.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""such as Microsoft Office's Outlook""" start="00:02:10.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and Google Office's Gmail were non-starters for me.""" start="00:02:14.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""But these are significant realities""" start="00:02:20.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and we need to deal with these realities.""" start="00:02:23.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Notice how Microsoft and Google""" start="00:02:27.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""have both framed their MUAs in the context of &quot;office&quot;.""" start="00:02:30.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""That type of framing is correct.""" start="00:02:36.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""an MUA must be fully integrated""" start="00:02:38.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""in the totality of one's digital ecosystem.""" start="00:02:41.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""So, the Ultimate Mail User Agent""" start="00:02:46.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""must be part of the Ultimate Usage Environment""" start="00:02:49.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""of the Ultimate Digital Ecosystem.""" start="00:02:53.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""In the non-proprietary (Halaal) universe, clearly""" start="00:02:57.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""the ultimate usage environment is Emacs.""" start="00:03:02.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Emacs is today's most potent and convivial""" start="00:03:07.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""non-proprietary usage environment.""" start="00:03:10.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""So, clearly, the ultimate Mail User Agent""" start="00:03:15.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""must be an integral part of Emacs.""" start="00:03:19.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Having reached that conclusion,""" start="00:03:22.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""we then need to determine the specifics""" start="00:03:24.158" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""of the shape and the anatomy of Emacs' MUAs.""" start="00:03:28.125" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""We could have arrived at this conclusion""" start="00:03:33.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""from the reverse direction as well.""" start="00:03:36.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Zawinski's Law states:""" start="00:03:38.240" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Every program attempts to expand until it can read mail.""" start="00:03:41.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Those programs which cannot so expand""" start="00:03:46.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""are replaced by ones which can.""" start="00:03:49.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Jamie's point is very simple and obvious.""" start="00:03:52.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The &quot;App&quot; that you &quot;live in&quot; all day""" start="00:03:56.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""should be your MUA and mail environment.""" start="00:03:59.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I ask those who jumped ship, who abandoned Emacs""" start="00:04:05.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""in favor of VS Code: What about mail?""" start="00:04:09.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Long ago, Emacs expanded to including MUAs.""" start="00:04:15.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""In fact there are many Emacs MUAs that you can choose from.""" start="00:04:21.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""If you are already hip with Emacs And Linux,""" start="00:04:27.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""you should definitely consider doing email in Emacs.""" start="00:04:30.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""But if you are not already hip with Emacs,""" start="00:04:34.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I mean for new Emacs users, unfortunately,""" start="00:04:39.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""setting up and using email is not straight forward.""" start="00:04:43.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""We (I mean, Emacs developers) should work on that!""" start="00:04:48.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Emacs offers a good number of MUAs with""" start="00:04:54.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""different characteristics to suit differing tastes.""" start="00:04:57.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""As of 2022, you can choose from the following MUAs:""" start="00:05:01.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Gnus, VM, WanderLust, Mew, mu4e, notmuch.el, mh-e and Rmail.""" start="00:05:06.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Over the years I have tried several of these""" start="00:05:15.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and eventually landed on Gnus.""" start="00:05:17.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The relevance column in this table simply and only""" start="00:05:20.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""reflects my taste.""" start="00:05:25.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Throughout the rest of this presentation, I focus on Gnus.""" start="00:05:28.080" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""I have 3 types of audiences in mind for this presentation.""" start="00:05:32.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""First, if you are already using Emacs""" start="00:05:36.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""as more than an editor,""" start="00:05:39.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""it makes good sense for you to also use Emacs as your MUA.""" start="00:05:42.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""There may well be some relevant information here for you""" start="00:05:47.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""in that situation.""" start="00:05:50.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Second, for those interested in philosophy of Emacs,""" start="00:05:52.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I go on some bigger picture tangents""" start="00:05:57.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""that may be of value to you.""" start="00:06:00.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Third, I address some Emacs developers with some feedback,""" start="00:06:02.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""some suggestions, and some requests.""" start="00:06:08.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The general model here is that""" start="00:06:11.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""we would collectively work towards""" start="00:06:14.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""improving what is on the table.""" start="00:06:17.080" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""When a Mail User Agent is self-contained""" start="00:06:19.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and includes implementation of mail protocols,""" start="00:06:22.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""we call it a Monolithic-MUA.""" start="00:06:26.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Just as it is with the physical mail postal service,""" start="00:06:29.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""sending mail and receiving mail""" start="00:06:33.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""are fundamentally separate activities.""" start="00:06:36.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""And then there is mail processing.""" start="00:06:40.640" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""Based on these categorizations,""" start="00:06:42.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Emacs has a set of mature libraries""" start="00:06:45.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""for composing mail, sending mail, and receiving mail.""" start="00:06:49.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""These are all independently well-documented""" start="00:06:53.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and are part of the basic emacs Distribution.""" start="00:06:58.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Emacs MUAs then use these common libraries""" start="00:07:02.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""to process mail (each somewhat differently).""" start="00:07:06.240" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The primary benefit of the Monolithic-MUA approach""" start="00:07:09.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""is that Emacs MUAs then become self-contained""" start="00:07:15.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and therefore multi-platform.""" start="00:07:19.600" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""But, when it comes to the question of merits of""" start="00:07:22.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""implementation of mail protocols in Elisp inside of Emacs,""" start="00:07:25.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""there is also another approach:""" start="00:07:30.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""that of a Split-MUA.""" start="00:07:33.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Concept of a split-MUA is that of""" start="00:07:36.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""splitting the MUA into two different parts:""" start="00:07:40.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""One being the usage environment,""" start="00:07:44.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and the other being mail protocols processing.""" start="00:07:47.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The interface between these can be either""" start="00:07:50.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""direct (the upper box)""" start="00:07:54.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""or through protocols (the lower box).""" start="00:07:57.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""With Gnus, we primarily use the direct interface.""" start="00:08:00.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The split-MUA model has many advantages""" start="00:08:05.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""over the monolithic-MUA model.""" start="00:08:09.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""With Split-MUAs, your messages are local,""" start="00:08:12.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""you can search them privately""" start="00:08:17.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and access to your email is faster.""" start="00:08:19.840" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""Gnus can be used as both a Monolithic-MUA""" start="00:08:22.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and also as a Split-MUA.""" start="00:08:28.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Gnus and other Emacs MUAs are flexible enough""" start="00:08:30.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""to allow you to create your own split-MUA.""" start="00:08:35.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""For outgoing mail, Gnus can""" start="00:08:39.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""invoke a sendmail-like interface program.""" start="00:08:42.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""For incoming mail, Gnus can access Maildirs directly""" start="00:08:45.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and let other programs imap-retrieve""" start="00:08:50.008" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and update into maildirs.""" start="00:08:53.725" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""You can then search through your maildirs""" start="00:08:56.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""locally and privately""" start="00:08:59.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""with various mail-oriented search engines,""" start="00:09:01.375" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and many have done so.""" start="00:09:04.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""For example, what we are seeing on this slide""" start="00:09:07.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""is from a 2014 Do It Yourself (DIY) recipe""" start="00:09:11.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""that one of our fellow Emacs conference participants,""" start="00:09:15.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Adolfo, had published at the mentioned URL.""" start="00:09:20.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The recipe in that slide is based on the following tools:""" start="00:09:24.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""mbsync, mu, mu4e, and msmtp.""" start="00:09:29.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""All our choices are different.""" start="00:09:35.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""There are many such recipes out there on the web.""" start="00:09:38.280" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""So, here, I don't want to provide""" start="00:09:42.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""yet another Emacs Split-MUA recipe.""" start="00:09:46.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I want to do more.""" start="00:09:50.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Instead, I want to target the contours of the ultimate MUA""" start="00:09:51.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""in the non-proprietary universe of digital ecosystems.""" start="00:09:56.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""But, first, let's take a look at what is""" start="00:10:01.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""happening in the proprietary universe.""" start="00:10:05.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The 5 big American proprietary tech companies""" start="00:10:07.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""(Google, Microsoft, Apple, Facebook and Amazon)""" start="00:10:11.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""have created 5 competing enclaves as mostly separate""" start="00:10:14.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and isolated digital ecosystem.""" start="00:10:20.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""In this slide, I am focusing on the first 3""" start="00:10:23.000" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and each of their office and email environments.""" start="00:10:27.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Let's clearly recognize that the economic model""" start="00:10:31.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""of these proprietary digital ecosystems is:""" start="00:10:36.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""&quot;Surveillance Capitalism&quot;.""" start="00:10:40.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""So, when any of us goes there to get""" start="00:10:42.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""a free-of-charge email account,""" start="00:10:45.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""he has chosen to voluntarily forgo much of his privacy.""" start="00:10:47.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""And many have done so.""" start="00:10:53.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Sadly, the rest of the world is becoming""" start="00:10:55.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Americanized through the American Internet.""" start="00:10:59.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""As of 2022, almost %90 of Facebook's""" start="00:11:02.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""daily active users come from outside of the US.""" start="00:11:08.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Also, with respect to email, each of the enclaves""" start="00:11:11.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""have MUAs that are fully integrated""" start="00:11:17.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""in their digital ecosystems""" start="00:11:20.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""in the form of an office environment""" start="00:11:22.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""comprising of address book, calendar, time management""" start="00:11:24.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and planning tools and multi-lingual authoring""" start="00:11:29.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and various other integrated tools.""" start="00:11:33.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Now, let's focus on the right side of this picture.""" start="00:11:36.240" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""On the non-proprietary side,""" start="00:11:40.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""based on the Western FLOSS model,""" start="00:11:43.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""we have ended up with lots of components.""" start="00:11:46.240" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""We have Debian as a platform,""" start="00:11:49.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""we have Emacs as an editor-centered office environment""" start="00:11:52.240" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and we have Gnus as an incredibly powerful MUA.""" start="00:11:58.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""But on the non-proprietary side we don't have anything""" start="00:12:03.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""that can reasonably be considered a digital ecosystem.""" start="00:12:07.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I mean, the services aspect is missing.""" start="00:12:12.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Over the past two decades I have created""" start="00:12:16.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""quite an elaborate digital ecosystem for myself.""" start="00:12:20.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""It is called: By*.""" start="00:12:24.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The Libre-Halaal ByStar Digital Ecosystem""" start="00:12:26.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""is being built to provide autonomy-oriented services""" start="00:12:30.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""on internet scale.""" start="00:12:35.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The * in ByStar stands for Unix's globbing symbol,""" start="00:12:37.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""signifying that our scope is everything.""" start="00:12:42.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Notice in this bigger picture that in the red box,""" start="00:12:46.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""our focus remains to be Emacs, Gnus and the ultimate MUA.""" start="00:12:52.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I am not here to sell you ByStar, but perhaps""" start="00:12:58.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""you should be in the market for something like that.""" start="00:13:03.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""We need non-proprietary digital ecosystems.""" start="00:13:06.240" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""Very briefly, I'll give you""" start="00:13:10.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""some pointers to the full ByStar story.""" start="00:13:13.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The full ByStar story is a 250 plus pages book titled:""" start="00:13:16.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Nature Of Polyexistentials,""" start="00:13:23.240" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Basis For Abolishment Of""" start="00:13:26.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The Western Intellectual Property Rights Regime,""" start="00:13:28.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""And Introduction Of""" start="00:13:31.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The Libre-Halaal ByStar Digital Ecosystem.""" start="00:13:33.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I have it self-published on my own ByName public web page.""" start="00:13:36.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The ByStar story starts with understanding of the""" start="00:13:42.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Nature Of Polyexistentials.""" start="00:13:46.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Polyexistentials inherently exist in multiples.""" start="00:13:48.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Software is a polyexistential.""" start="00:13:53.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Polyexistentials are naturally non-scarce,""" start="00:13:56.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and making polyexistential artificially scarce,""" start="00:14:01.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""which is what the Western""" start="00:14:06.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""intellectual property rights regime does,""" start="00:14:08.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""is counter to nature.""" start="00:14:11.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Polyexistentials are unownable""" start="00:14:13.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and should not be considered property.""" start="00:14:17.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The Western IPR regime is in conflict with nature.""" start="00:14:20.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""But, the book is more than just philosophy.""" start="00:14:25.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""In that book I also cover""" start="00:14:29.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""the bigger picture of healthy digital ecosystems""" start="00:14:32.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""which also includes the topic of this presentation.""" start="00:14:35.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I'd be interested in your thoughts and your feedback,""" start="00:14:39.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""if you choose to dig deeper.""" start="00:14:43.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""And if you want to dig deeper, here are some links.""" start="00:14:45.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""By* is about re-decentralization""" start="00:14:51.000" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""of Internet application services.""" start="00:14:55.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Among other things, ByStar provides""" start="00:14:57.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""complete own-your-email services. I mean,""" start="00:15:00.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""private Hillary-Clinton-Style mail servers for everyone.""" start="00:15:05.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""There is an overview of ByStar at by-star.net.""" start="00:15:10.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""You may have noticed that I consistently use""" start="00:15:16.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""the &quot;Libre-Halaal&quot; label with ByStar.""" start="00:15:21.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Halaal is a very sensitive word.""" start="00:15:25.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I am a Moslem.""" start="00:15:28.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""But my use of Halaal is not in a religious context.""" start="00:15:30.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""It is in a philosphical context.""" start="00:15:35.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""And the scope of the &quot;Libre-Halaal&quot; label""" start="00:15:39.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""is manner-of-existence of Software and Services.""" start="00:15:42.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""It is not about Halaal-ness with respect to""" start="00:15:46.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""function and use of Software and Services.""" start="00:15:50.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Unfortunately, the word Halaal""" start="00:15:54.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and the concept of Halaal does not exist in English.""" start="00:15:58.240" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""So, first I introduce it into Globish.""" start="00:16:02.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I have done so in PLPC-120039.""" start="00:16:06.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Further, I explain as to why labels""" start="00:16:12.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""of Open Source and Free Software are both ill-directed.""" start="00:16:18.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""We then carefully define""" start="00:16:22.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""&quot;Libre-Halaal Software&quot; and &quot;Libre-Halaal Services&quot;.""" start="00:16:25.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Notice that last link.""" start="00:16:30.000" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I bet, this is the first time""" start="00:16:33.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""that anyone includes a link to his &quot;Open Business Plan&quot;""" start="00:16:36.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""in an Emacs Conference.""" start="00:16:40.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I hope others would do this as well.""" start="00:16:43.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""There is appetite out there""" start="00:16:46.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""for privacy- and autonomy-oriented digital ecosystems,""" start="00:16:49.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and there is no conflict between honest business,""" start="00:16:53.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""honest profit, and Libre-Halaal Software""" start="00:16:57.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and Libre-Halaal Services.""" start="00:17:01.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The sub-title of our open business plan is:""" start="00:17:02.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""&quot;An Inversion to the Proprietary Internet Services Model&quot;.""" start="00:17:08.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""And here are the same links as a native Reveal slide.""" start="00:17:12.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""If instead of a video, you are viewing""" start="00:17:20.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""this presentation as a Reveal web page,""" start="00:17:24.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""you can just click on the pointers and URLs.""" start="00:17:27.400" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""So, what was the point of bringing ByStar""" start="00:17:31.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""into this presentation?""" start="00:17:36.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""In tangible terms, what have we gotten out of""" start="00:17:38.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""the tangent we took on the ByStar bigger picture?""" start="00:17:42.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Of course we have the ByStar Digital Ecosystem itself.""" start="00:17:45.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""But that is not immediately relevant to this presentation.""" start="00:17:50.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Here, through BISOS we now have""" start="00:17:54.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""an integration framework, which we definitely needed.""" start="00:17:59.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""We now have BISOS-MARMEE,""" start="00:18:04.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Multi-Account Resident Mail Exchange Environment,""" start="00:18:07.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""which is a consistent set""" start="00:18:11.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""of MUA-related software components --- which we need.""" start="00:18:13.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""We also needed to augment Emacs in our own terms,""" start="00:18:17.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""so we have Blee for that,""" start="00:18:23.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""ByStar Libre-Halaal Emacs Environment,""" start="00:18:25.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""is ByStar ecosystemized Emacs.""" start="00:18:29.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""And finally Blee-Gnus, which is""" start="00:18:32.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Gnus and MARMEE integrated with Blee.""" start="00:18:37.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""With these in place, we can now dive deeper into MARMEE.""" start="00:18:40.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The idea of MARMEE, is that of packaging together""" start="00:18:46.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""the mail protocols parts of the Split-MUA.""" start="00:18:53.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""MARMEE (which is of course in the context of BISOS)""" start="00:18:56.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""is the green box in this slide.""" start="00:19:00.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""For outgoing mail, we use an altered qmail.""" start="00:19:03.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""We will be looking deeper into qmail a bit later.""" start="00:19:08.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""For incoming mail, we are using offlineimap""" start="00:19:12.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""which is oauth2 aware.""" start="00:19:17.560" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""Before going into more details,""" start="00:19:20.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""let's take a look at the parts lists for""" start="00:19:23.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""BISOS-MARMEE and Blee-Gnus.""" start="00:19:26.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""MARMEE is a collection of Python-based libraries""" start="00:19:29.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and Debian packages that provide for rich sending""" start="00:19:33.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and receiving of email outside of Emacs.""" start="00:19:37.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Here is our BISOS-MARMEE parts list.""" start="00:19:40.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""MARMEE features include tracked mail Sending""" start="00:19:44.240" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""for confirmed mail communications""" start="00:19:48.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and email distribution facilities""" start="00:19:51.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""(say, similar to Constant Contact).""" start="00:19:54.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""For Delivery Status Notification (DSN),""" start="00:19:57.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""we have adopted flufl.bounce.""" start="00:20:02.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I'll be touching on everything that is qmail-related,""" start="00:20:06.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""namely qmail-remote.cs and mailfront, in a separate slide.""" start="00:20:10.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""notmuch is our choice of mail search engine.""" start="00:20:17.320" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""Similarly, here is our Blee-Gnus Parts List.""" start="00:20:21.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Blee-Gnus is Gnus and MARMEE integrated with BISOS and Blee.""" start="00:20:27.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Notice mentions of org-msg and polymode here.""" start="00:20:33.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Later, I'll expand on these in the context of""" start="00:20:38.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""transitioning from Message-Mode to Message-Polymode.""" start="00:20:42.880" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""With these parts in place,""" start="00:20:47.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""now let's see how they will all come together.""" start="00:20:52.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Gnus is very flexible, and in combination with MARMEE,""" start="00:20:55.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""it can create an incredibly powerful MUA.""" start="00:21:00.000" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""On this slide, note the boxes""" start="00:21:03.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""that include the FPs label.""" start="00:21:07.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""FP stand for File Parameters.""" start="00:21:10.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""It is the basis of BISOS's configuration""" start="00:21:14.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and secrets management.""" start="00:21:18.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Notice that it has consistent agents""" start="00:21:20.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""inside of Emacs and on the OS.""" start="00:21:24.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""This is a big deal""" start="00:21:27.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""in that it can reduce user visible configuration complexity.""" start="00:21:29.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Also, notice the X822-Bus here.""" start="00:21:34.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The idea of X822-Bus is that of""" start="00:21:39.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""allowing for communication among user's preferences, Gnus""" start="00:21:44.000" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and MARMEE-qmail through addition of X- fields""" start="00:21:49.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""in RFC-822 message headers.""" start="00:21:53.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""X822-Bus is used for selection of mail sending agents""" start="00:21:57.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and specification of delivery status parameters.""" start="00:22:03.600" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""Of key significance in this picture""" start="00:22:08.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""is our choice of qmail for outgoing mail.""" start="00:22:12.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Compared to sendmail, postfix, exim,""" start="00:22:15.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and other conventional MTAs;""" start="00:22:22.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""the qmail ecosystem is far more flexible and potent.""" start="00:22:25.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""We are not using qmail as is.""" start="00:22:31.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Ours is called bystar-qmail.""" start="00:22:34.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""When we use it as a traditional MTA,""" start="00:22:38.000" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""we refer to it as PALS-qmail.""" start="00:22:41.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""And when we use it on the MUA side, we call it MARMEE-qmail.""" start="00:22:45.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Just like Emacs, qmail has""" start="00:22:52.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""a solid core and a flexible periphery.""" start="00:22:56.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""All our alterations have been on the periphery.""" start="00:22:59.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""We have replaced qmail-remote""" start="00:23:04.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""with our own Python implementation called qmail-remote.cs.""" start="00:23:07.891" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""By being in Python, it can do a lot more a lot more easily.""" start="00:23:14.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""For example, qmail-remote.cs interacts with""" start="00:23:20.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Google Oauth2 APIs and allows you to send through Gmail.""" start="00:23:26.541" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""This is shown with the red circle.""" start="00:23:33.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""We have also replaced qmail-smtpd with mailfront,""" start="00:23:36.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""shown with a blue circle.""" start="00:23:43.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""This allows us to use MARMEE Split-MUA""" start="00:23:46.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""through protocol interfaces.""" start="00:23:51.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Let's take a look at that.""" start="00:23:54.000" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""Previously we looked at the &quot;Direct Interface&quot; of MARMEE,""" start="00:23:56.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""specifically, qmail-inject and Maildir for Gnus.""" start="00:24:02.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""But what if we wanted to use""" start="00:24:08.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""MARMEE with other MUAs outside of Emacs?""" start="00:24:11.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""That can be done through the &quot;Protocol Interface&quot;.""" start="00:24:15.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""MARMEE also includes &quot;mailfront&quot;""" start="00:24:18.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""which can function as an SMTP submit server for localhost.""" start="00:24:22.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""This way, we can configure""" start="00:24:27.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""the outgoing mail part of any MUA to point to the localhost""" start="00:24:30.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and have MARMEE-qmail function as an outgoing proxy.""" start="00:24:36.240" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""For incoming mail, MARMEE-Split-MUA-Protocol-Interface""" start="00:24:41.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""includes &quot;Courier&quot;, which can function""" start="00:24:47.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""as an IMAP server for localhost.""" start="00:24:51.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""This way, we can configure the incoming mail part""" start="00:24:54.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""of any MUA to point to the localhost""" start="00:24:58.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and have MARMEE function as an incoming proxy""" start="00:25:02.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""by serving the local Maildir to the MUA.""" start="00:25:06.520" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""All sources for all of ByStar, BISOS,""" start="00:25:10.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Blee and MARMEE are subject to Affero GPL.""" start="00:25:18.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The sources and documentation are all republished""" start="00:25:23.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""under various &quot;Organizations&quot;""" start="00:25:28.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""under github.com/mohsenBanan""" start="00:25:30.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""All of ByStar, BISOS, Blee and MARMEE""" start="00:25:35.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""reflect work in progress,""" start="00:25:40.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and we are NOT recruiting users at this time.""" start="00:25:42.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""For more than two decades,""" start="00:25:46.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I have been using these all in that bigger context.""" start="00:25:49.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""They are mostly real,""" start="00:25:53.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""but so far, just for myself and a few other engineers.""" start="00:25:56.240" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Our model is similar to God's early days.""" start="00:26:01.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""You may ask:""" start="00:26:06.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""&quot;How did God create all of this in just 7 days?&quot;""" start="00:26:08.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Well, easy, He did not have an installed base to deal with.""" start="00:26:12.120" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""You can obtain and install MARMEE in two ways. As is:""" start="00:26:17.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""as standalone-MARMEE, you can just""" start="00:26:24.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""pip install bisos.marmee.""" start="00:26:29.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""For the Gnus part you are completely on your own.""" start="00:26:31.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Or on a Debian-11, you can just run""" start="00:26:35.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""the bisos bootstrap script.""" start="00:26:40.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""That way you will have all of BISOS, which includes MARMEE""" start="00:26:43.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and you will have Blee, which includes Blee-Gnus.""" start="00:26:48.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""If you plan to do so,""" start="00:26:52.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I suggest that you first try it in a disposable VM.""" start="00:26:54.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""BISOS and Blee are large.""" start="00:26:58.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Many apt and pip packages will be installed!""" start="00:27:02.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""And here are the same links as a native Reveal slide.""" start="00:27:06.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""If you are viewing this presentation as Reveal.js web page,""" start="00:27:11.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""you can just click on the pointers and URLs.""" start="00:27:17.520" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""Let's consider MARMEE as an Emacs &quot;Common Agent&quot;.""" start="00:27:20.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""By &quot;Common-Agent&quot; I mean a capability""" start="00:27:25.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""which Emacs builds on""" start="00:27:28.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and which other Apps can also use.""" start="00:27:30.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Emacs has a very rich applications development framework""" start="00:27:33.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""for absorbing common-agents.""" start="00:27:38.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Consider how magit has absorbed git,""" start="00:27:41.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""or how flycheck has absorbed mypy""" start="00:27:45.475" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""or how EAF does its work outside of Emacs ---""" start="00:27:49.775" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""that too can be considered a common-agent.""" start="00:27:54.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The common-agent model permits us""" start="00:27:57.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""to do more outside of Emacs.""" start="00:28:02.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Common-agents maximize social benefits""" start="00:28:04.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and are more convivial.""" start="00:28:08.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""For example, any MUA can profit from MARMEE.""" start="00:28:10.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""But we don't have good ways of""" start="00:28:15.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""packaging Emacs and its packages""" start="00:28:18.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""with their common-agents.""" start="00:28:21.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Instead, we usually end up with DIY recipes.""" start="00:28:23.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""This is why I am contextualizing""" start="00:28:28.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Emacs inside of Blee and BISOS.""" start="00:28:32.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""That is what they are for.""" start="00:28:35.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""And that is why I consider them""" start="00:28:38.000" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""immediately relevant to this presentation.""" start="00:28:40.425" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""With an incredibly powerful Display Engine,""" start="00:28:43.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and an incredibly powerful Elisp Engine,""" start="00:28:47.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and an incredibly powerful Input Methods Engine,""" start="00:28:51.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and an incredibly powerful Common-Agents paradigm,""" start="00:28:55.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Emacs has the potential of being""" start="00:28:59.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""any non-proprietary digital ecosystem's""" start="00:29:02.708" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""preferred usage environment.""" start="00:29:06.408" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I am in favor of putting more around Emacs""" start="00:29:08.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and strengthening integration of Emacs""" start="00:29:14.091" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""with Debian, explicitly,""" start="00:29:17.441" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""perhaps even at the cost of""" start="00:29:19.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""de-emphasizing its multi-platform attribute.""" start="00:29:22.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""A smaller Emacs is a better Emacs.""" start="00:29:26.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Notice that in this slide,""" start="00:29:30.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I have used many arrows in many colors.""" start="00:29:33.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Much of Emacs's power comes from its ability""" start="00:29:37.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""to absorb and to integrate.""" start="00:29:45.600" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""Tomohiro is right on the mark when he says,""" start="00:29:47.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""&quot;The reason why Emacs platform is good""" start="00:29:51.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""is that it cooperates with OS,""" start="00:29:55.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""not because it is good by itself.&quot;""" start="00:29:58.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I am suggesting that we should""" start="00:30:00.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""raise the bar from the OS""" start="00:30:04.000" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""to the entirety of our digital ecosystem.""" start="00:30:06.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""There are many models""" start="00:30:09.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""for Emacs to cooperate with the OS""" start="00:30:13.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and with applications and with services.""" start="00:30:15.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The colors of arrows in the previous slide correspond to""" start="00:30:19.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""the model of interface of the common-agent:""" start="00:30:25.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""for example, sub-process invocation, pipe-based""" start="00:30:28.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""asynchronous interface, or file-based interactions.""" start="00:30:34.000" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""One important aspect of common-agent paradigm is that""" start="00:30:39.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""both the common-agent and its Emacs App""" start="00:30:44.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""need to be configured consistently.""" start="00:30:50.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""In MARMEE and Blee-Gnus,""" start="00:30:53.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""we use File-Params to accomplish this.""" start="00:30:57.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""In BISOS, there is a Python interface to File-Params,""" start="00:31:01.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""there is a Bash interface to File-Params,""" start="00:31:06.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and in Blee, there is an Elisp interface to File-Params.""" start="00:31:10.240" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""So, configurations are extended.""" start="00:31:15.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Furthermore, File-Params can be encrypted,""" start="00:31:18.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and credentials can be protected and shared.""" start="00:31:23.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""This is a significant improvement over .authinfo""" start="00:31:26.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and its more recent incarnations.""" start="00:31:33.920" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""EmacsConf could be a great place""" start="00:31:36.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""for users to provide feedback to developers""" start="00:31:41.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and for developers to suggest to developers.""" start="00:31:44.375" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""In that spirit, my primary audience in this part""" start="00:31:47.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""are fellow Emacs developers.""" start="00:31:52.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""BISOS-MARMEE and Blee-Gnus are starting points.""" start="00:31:54.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""We can collectively work""" start="00:32:00.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""towards improving what is in place.""" start="00:32:02.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Some such improvements involve""" start="00:32:04.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""collaboration among various Emacs developers.""" start="00:32:07.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Here, I am making some explicit requests""" start="00:32:11.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""from some of the relevant emacs developers.""" start="00:32:16.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""At most, these are requests and invitations.""" start="00:32:19.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""For each of these requests, I am providing links""" start="00:32:24.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""for additional details.""" start="00:32:28.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""In due course, I'll follow up""" start="00:32:30.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""in the Emacs developers mailing list.""" start="00:32:33.040" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""Gnus uses X-Message-SMTP-Method""" start="00:32:35.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""for selection of Mail-Sending-Agent.""" start="00:32:41.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Even though all the qmail injection code is still in Gnus,""" start="00:32:45.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""support for &quot;X-Message-SMTP-Method: qmail&quot; is missing.""" start="00:32:50.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""It takes 2 lines of code to revive it.""" start="00:32:58.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""With regards to (1), qmail was previously supported in Gnus.""" start="00:33:02.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Lars, can you please reactivate it? Thanks.""" start="00:33:07.400" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""(2) is a terminology suggestion.""" start="00:33:11.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The term X-Message-SMTP-Method violates conceptual layering.""" start="00:33:16.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Please consider changing it to X-Message-Send-Method.""" start="00:33:21.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""In a Split-MUA setup, Gnus need not know about SMTP at all.""" start="00:33:27.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""We just need to pass information""" start="00:33:33.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""to a Mail-Sending-Agent selector.""" start="00:33:36.600" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""(3) is simply a design suggestion for""" start="00:33:39.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""which I prepared the context.""" start="00:33:44.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text=""".authinfo and Emacs auth-source library""" start="00:33:46.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""are too Emacs-centric.""" start="00:33:51.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""We need to share config info and secrets""" start="00:33:54.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""between common-agents and Emacs.""" start="00:33:57.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The File Parameters approach""" start="00:34:00.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""can be a general-purpose solution.""" start="00:34:03.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Is it reasonable to extend auth-source library to""" start="00:34:05.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""support File Params?""" start="00:34:10.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I'll cover (4) in the next slide.""" start="00:34:12.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""(5) is a philosophical common suggestion""" start="00:34:16.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""to all Emacs developers. We need to better cultivate""" start="00:34:21.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""the model of Common-Agents integration with Emacs.""" start="00:34:26.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""And here are the same links as a native Reveal slide.""" start="00:34:30.880" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""A mail message comprises of""" start="00:34:39.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Envelope, Header and BodyParts.""" start="00:34:42.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Each of these have their own syntax (their own mode).""" start="00:34:45.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Conceivably Each BodyPart has its own mode.""" start="00:34:49.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""So, we need to evolve Message-Mode into Message-Polymode.""" start="00:34:53.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""More or less by default, org-mode has become""" start="00:34:59.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""the beginnings of &quot;Emacs Native Markup Language -- ENML&quot;.""" start="00:35:03.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""With org-msg you can write your emails in org-mode ---""" start="00:35:09.000" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""destined as html.""" start="00:35:14.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""org-msg needs to become""" start="00:35:16.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""an integral part of Message-Polymode.""" start="00:35:19.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""It would be heavenly""" start="00:35:22.240" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""if Lars, Jérémy and Vitalie could collaborate""" start="00:35:25.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and give us the needed Message-Polymode. Thank you.""" start="00:35:29.960" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""One way to verify that we have not gone astray""" start="00:35:34.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""in our horizontal bigger pictures is to verify them""" start="00:35:38.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""through the concept of &quot;Vertical Slice Use Cases&quot;.""" start="00:35:42.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Let one use case be reading and writing""" start="00:35:46.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""of mail on multiple gmail accounts with Gnus.""" start="00:35:50.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Google now requires use of oauth2 tokens""" start="00:35:54.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""which MARMEE can do outside of emacs.""" start="00:35:59.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""There is a recent email thread""" start="00:36:02.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""on that in the emacs-devel mailing list.""" start="00:36:05.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Let another use case be that of tracking delivery""" start="00:36:09.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and non-delivery reports for custom envelope addresses""" start="00:36:14.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""of byname.net (part of ByStar) autonomous mail services.""" start="00:36:18.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I would have loved to walk you through these""" start="00:36:26.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""vertical slice use cases""" start="00:36:30.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""as screen captures of my Blee environment.""" start="00:36:32.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""For that, I need at least another 20 minutes.""" start="00:36:36.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""But my time is up.""" start="00:36:40.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""So, let's consider this as the first""" start="00:36:43.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""in a series of presentations""" start="00:36:46.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""where next in this series could be""" start="00:36:48.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""the mentioned two vertical slice use cases.""" start="00:36:51.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Perhaps there could be another presentation""" start="00:36:55.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""on this topic in EmacsConf 2023.""" start="00:36:59.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""This document was produced entirely with""" start="00:37:02.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Libre-Halaal Software, and is published using""" start="00:37:06.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Libre-Halaal Internet Services.""" start="00:37:10.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I want to thank all the EmacsConf Organizers""" start="00:37:13.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""for their great work,""" start="00:37:17.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and Sacha, Leo, and Amin in particular.""" start="00:37:19.520" video="mainVideo-mail" id="subtitle"]]
+
+
+
+Captioner: mohsen
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20mail%3A%20Revisiting%20the%20anatomy%20of%20Emacs%20mail%20user%20agents)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/mail-before.md b/2022/info/mail-before.md
new file mode 100644
index 00000000..bb7ce309
--- /dev/null
+++ b/2022/info/mail-before.md
@@ -0,0 +1,64 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Mohsen Banan describes how Emacs mail can be part of a comprehensive digital ecosystem. Afterwards, he will handle questions via BigBlueButton.
+
+
+The following image shows where the talk is in the schedule for Sat 2022-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="mail">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect stroke-width="3" x="454" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 38-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-mail>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: TO_CAPTION_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-03T18:50:00Z" end="2022-12-03T19:30:00Z"><div class="conf-time">Saturday, Dec 3 2022, ~1:50 PM - 2:30 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 3 2022, ~12:50 PM - 1:30 PM CST (US/Central)<br />Saturday, Dec 3 2022, ~11:50 AM - 12:30 PM MST (US/Mountain)<br />Saturday, Dec 3 2022, ~10:50 AM - 11:30 AM PST (US/Pacific)<br />Saturday, Dec 3 2022, ~6:50 PM - 7:30 PM UTC <br />Saturday, Dec 3 2022, ~7:50 PM - 8:30 PM CET (Europe/Paris)<br />Saturday, Dec 3 2022, ~8:50 PM - 9:30 PM EET (Europe/Athens)<br />Sunday, Dec 4 2022, ~12:20 AM - 1:00 AM IST (Asia/Kolkata)<br />Sunday, Dec 4 2022, ~2:50 AM - 3:30 AM +08 (Asia/Singapore)<br />Sunday, Dec 4 2022, ~3:50 AM - 4:30 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/dev/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="mail-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mail-mainVideo" data="""
+00:00.000 Introduction
+01:41.080 Mail and the digital ecosystem
+03:33.600 Platformization and Mail
+05:32.400 Contours of this presentation
+06:19.800 Anatomy of monolithic MUAs
+06:42.840 Existing Elisp mail libraries and modes
+07:22.960 Concept of a split-MUA
+08:22.320 Emacs and the culture of DIY split-MUAs
+09:42.400 A glimpse of the bigger picture
+13:10.880 The full ByStar story
+17:31.320 ByStar DE context, assets, and terminology
+19:20.120 MARMEE parts list
+20:21.760 Blee-Gnus parts list
+20:47.680 Deep integration of BISOS-MARMEE and Blee-Gnus
+22:08.840 qmail and bystar-qmail
+23:56.560 MARMEE: common-agent for split-MUA implementations
+25:10.760 Obtaining, installing, and configuring MARMEE
+26:17.200 Installing MARMEE
+27:20.480 Emacs inside of ByStar
+29:47.760 Emacs common-agent models and interfaces
+31:36.960 Evolution of Gnus with MARMEE
+32:35.280 X-Message-SMTP-Method: qmail
+33:11.320 X-Message-Send-Method
+33:39.320 Shared common-agents configuration and secrets management
+34:39.600 Evolution of message-mode into message-polymode
+35:34.080 Two vertical-slice mail use cases
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main.webm">Download --main.webm (88MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main.opus">Download --main.opus (22MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/dAg6eAtVYa2oVuSBcMZE9q">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="mail-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mail-qanda" data="""
+07:25.000 Why Gnus over Notmuch?
+08:59.000 So the idea is more about Emacs as a holistic computing experience with other packages and services rather than about email specifically?
+10:38.000 Early on you expressed misgivings about the western copyright regime, but you're using a GPL license. Is this a conflict?
+15:15.000 Do you know of GNU Guix? How do you think about using it for packaging/configuring Emacs and your various packages?
+16:47.000 Is this being split up in a heavily configured server for email hosting and a thin client package for your local client to integrate with your Emacs packages, maybe with a client thin docker container for other packages like notmuch locally?
+23:23.000 So do you combine tagging facilities of Notmuch into Gnus as well?
+25:38.000 Could you expand on the definition of libre-halaal?
+31:30.000 What is the scope of what you are imagining? Just software?
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="mail-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--answers.webm">Download --answers.webm (34MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--answers.opus">Download --answers.opus (12MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/mail-nav.md b/2022/info/mail-nav.md
new file mode 100644
index 00000000..f527ff0e
--- /dev/null
+++ b/2022/info/mail-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/buttons">Linking personal info with Hyperbole implicit buttons</a>
+Next by track: <a href="/2022/talks/realestate">Real estate and Org table formulas</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/maint-after.md b/2022/info/maint-after.md
new file mode 100644
index 00000000..761bfb3d
--- /dev/null
+++ b/2022/info/maint-after.md
@@ -0,0 +1,400 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="maint-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""When we think about the problems of the world""" start="00:00:00.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""we see global warming, war, appropriation, poverty,""" start="00:00:06.320" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and among numerous other problems,""" start="00:00:12.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""also the inability to make a living""" start="00:00:13.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""as an open source developer.""" start="00:00:16.200" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""Now this last problem may seem a lot less consequential""" start="00:00:18.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""compared to the other ones,""" start="00:00:22.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""but what if I told you that the solution to this problem""" start="00:00:23.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and the solutions to the others are one and the same?""" start="00:00:26.760" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""And it's because there's a common underlying problem""" start="00:00:30.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""at the heart of all of these problems.""" start="00:00:33.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""I'm going to tell you what that problem is in one sentence.""" start="00:00:36.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""You ready for it? It is ...""" start="00:00:39.280" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""the deviation of market value from _true_ value.""" start="00:00:42.520" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Let's think about this in the context of""" start="00:00:48.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""existing economic systems such as capitalism and communism.""" start="00:00:50.440" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""And of these, I want to focus on capitalism""" start="00:00:55.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""because it is the only nontrivial economic system, really.""" start="00:00:58.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Communism is more sort of a political means""" start="00:01:02.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""to achieve economic ends.""" start="00:01:04.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And the other economic systems exist""" start="00:01:07.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""sort of on a spectrum between these two.""" start="00:01:09.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""So let's focus on capitalism.""" start="00:01:11.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Capitalism has as its basis of value supply and demand.""" start="00:01:14.320" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And consequently, there is a great emphasis""" start="00:01:19.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""on this idea of ownership.""" start="00:01:21.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Now ownership is an idea that made some kind of sense""" start="00:01:25.200" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""when you have goods and services""" start="00:01:28.720" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that are constrained in some way,""" start="00:01:31.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that are essentially finite in supply.""" start="00:01:33.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""But when you have things like""" start="00:01:36.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""works of software, art, and music,""" start="00:01:37.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""which are essentially infinite in supply,""" start="00:01:41.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""the idea of ownership and supply and demand""" start="00:01:43.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""don't make sense anymore.""" start="00:01:46.360" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And yet we employ the institution of property""" start="00:01:48.320" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""to constrain supply and introduce the idea of supply""" start="00:01:51.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""just so that we can induce a market value""" start="00:01:56.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""in terms of supply and demand""" start="00:01:58.400" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""in a capitalist economic system. And it's wrongheaded.""" start="00:02:00.320" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""How many of us have written copyright declarations""" start="00:02:05.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""like these on our work.""" start="00:02:10.320" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""It's a lot of work!""" start="00:02:12.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Especially when we have version control.""" start="00:02:14.720" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Now in this example,""" start="00:02:18.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""almost every line is written by a different person,""" start="00:02:19.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""so who owns the code in this case?""" start="00:02:23.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Who owns the copyright here?""" start="00:02:25.520" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Is it some of them, is it all of them,""" start="00:02:27.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""do they share it in some way?""" start="00:02:30.040" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""It doesn't really make sense,""" start="00:02:32.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""especially when the reason we're employing""" start="00:02:34.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""copyright and ownership in this case""" start="00:02:37.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""is to approximate the idea of attribution,""" start="00:02:40.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""which is what we really care about here.""" start="00:02:44.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And that brings us to the nature of the solution,""" start="00:02:46.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""which is to move away from an economic system""" start="00:02:51.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""based on ownership and supply and demand,""" start="00:02:53.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""to an economic system based on attribution, instead.""" start="00:02:55.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""That is, moving away from who _owns_ what""" start="00:02:59.400" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""to who _did_ what and how important was it.""" start="00:03:02.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And we can do this by the process of""" start="00:03:07.320" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Dialectical Inheritance Attribution,""" start="00:03:09.720" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""which just means that we do it in a collective way""" start="00:03:12.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""using common collectively agreed upon standards""" start="00:03:16.640" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that are applied transparently to all.""" start="00:03:20.640" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And when we have an economic system""" start="00:03:24.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that is based on attribution""" start="00:03:25.600" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""as the source of value in this way,""" start="00:03:26.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""we call it attribution based economics.""" start="00:03:28.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Now, once we have that, it gives us fairness,""" start="00:03:34.720" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""effective empowerment of expertise,""" start="00:03:39.280" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""freedom through incentives rather than through coercion.""" start="00:03:43.640" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And privacy as well.""" start="00:03:46.360" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""But I could tell you all of those things""" start="00:03:49.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and some may still say, &quot;Why should I care about this?&quot;""" start="00:03:52.360" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""There are those who would say""" start="00:03:57.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that fairness is not a good goal,""" start="00:03:58.280" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and that might makes right,""" start="00:04:00.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and that as Darwin showed us,""" start="00:04:03.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""the nature of nature is violence.""" start="00:04:04.600" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Now I know that many of us reject this ideology,""" start="00:04:09.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and we feel in our bones that it is wrong.""" start="00:04:12.440" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""But luckily we don't have to resort to high philosophy""" start="00:04:16.360" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and gut feeling in order to convince ourselves""" start="00:04:19.280" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that an attribution-based system is truly better.""" start="00:04:21.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Because in addition to all of""" start="00:04:24.720" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""those other properties we talked about,""" start="00:04:26.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""an attribution-based economic system is also efficient.""" start="00:04:28.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And I say this from the perspective of having""" start="00:04:33.400" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""an admiration for the efficiency of capitalism.""" start="00:04:36.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""So understand that that is my perspective""" start="00:04:39.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""when I say that this system --""" start="00:04:43.400" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""an attribution-based economic system --""" start="00:04:45.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""is significantly more efficient than capitalism.""" start="00:04:47.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And it achieves that by virtue of eliminating the waste""" start="00:04:51.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that is inherent in adversarial competition,""" start="00:04:55.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""while still preserving market forces!""" start="00:04:58.480" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""In addition to this property""" start="00:05:01.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""there is also this other property""" start="00:05:05.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that I think is truly profound,""" start="00:05:07.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and I want to motivate it by this example of a gyroscope.""" start="00:05:10.600" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Now many of us have had the opportunity to play with""" start="00:05:15.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""a gyroscope at some point in our lives.""" start="00:05:19.400" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""If you haven't, I encourage you to go out and get one""" start="00:05:21.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and try it out. It also makes a good gift""" start="00:05:23.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""if you're thinking about giving it""" start="00:05:25.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""to somebody else this year.""" start="00:05:27.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""But if you've played with a gyroscope""" start="00:05:28.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""then you've had the experience, perhaps,""" start="00:05:32.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""of putting it on your hand and moving it around.""" start="00:05:35.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And no matter what you do, it will always maintain its axis.""" start="00:05:37.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Even if you try to push it""" start="00:05:42.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and try to make it deviate from that axis,""" start="00:05:45.520" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""it will fight you. It will resist you,""" start="00:05:48.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and keep to that axis no matter what.""" start="00:05:50.400" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And if you've had this experience,""" start="00:05:53.040" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""then believe it or not,""" start="00:05:56.640" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""you have some insight into the nature of economic systems.""" start="00:05:58.040" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Because if we try to get an economic system to do something""" start="00:06:02.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""other than what it wants to do,""" start="00:06:07.040" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""other than what is its nature,""" start="00:06:09.280" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""then it will resist us and it will fight that change.""" start="00:06:11.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Now, I don't know about you,""" start="00:06:14.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""but I'd prefer to avoid fighting these gyroscopic forces.""" start="00:06:17.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""I'd rather have these forces work with me""" start="00:06:22.720" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""rather than against me. Now in a capitalist system,""" start="00:06:25.040" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""there is another problem, which is that""" start="00:06:29.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""not only do you have these gyroscopic forces at work,""" start="00:06:32.600" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""but these forces aren't even all working together.""" start="00:06:35.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""They're working against each other, in many cases.""" start="00:06:39.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""They represent misaligned interests.""" start="00:06:42.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And indeed, these misaligned interests""" start="00:06:46.440" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""are the very means by which these forces operate at all.""" start="00:06:50.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""So in a way, war is not just""" start="00:06:53.640" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""an inevitable consequence in this system""" start="00:06:57.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""but is rather the very nature of such a system.""" start="00:06:59.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""In an attribution-based system, on the other hand,""" start="00:07:05.280" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""by virtue of the source of value""" start="00:07:08.360" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""being collective attribution,""" start="00:07:11.400" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""we are able to achieve alignment""" start="00:07:13.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""of all of these interests at every scale,""" start="00:07:17.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""so that at every scale of society,""" start="00:07:19.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""from the smallest to the largest scales,""" start="00:07:22.720" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""the interests will be aligned,""" start="00:07:24.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""will be consonant and harmonious.""" start="00:07:26.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""I think this is a very important, profound quality""" start="00:07:28.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that I think is the fundamental problem of economics -""" start="00:07:33.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""the fundamental goal of economics to solve.""" start="00:07:38.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And I believe that an attribution-based economic system""" start="00:07:40.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""addresses it and solves it.""" start="00:07:43.840" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""So without further ado, I want to bring it home""" start="00:07:45.200" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""to the prototype that we have in mind""" start="00:07:50.280" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""for the Emacs community.""" start="00:07:52.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Now we want to start in the Emacs community""" start="00:07:53.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""because Emacs has a long tradition""" start="00:07:56.280" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""of exploring better ways of doing things""" start="00:07:58.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and pursuing better alternatives to the status quo.""" start="00:08:02.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Now, to give you an overview of the prototype""" start="00:08:05.280" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that we've implemented for open source projects.""" start="00:08:09.400" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""The prototype is composed of two broad phases,""" start="00:08:12.640" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that is, the appraisal phase and the accounting phase.""" start="00:08:15.440" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Any project is composed of ideas, capital and labor.""" start="00:08:18.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""The appraisal phase is involved in assessing the work done""" start="00:08:21.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""in terms of how much value was created""" start="00:08:26.280" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and who created the value and how important that value is.""" start="00:08:29.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""The output of this stage is an attributions file.""" start="00:08:31.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And the second phase, of accounting, is about, you know,""" start="00:08:35.200" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""how do you handle payments that come in""" start="00:08:42.040" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and how do you pay people out.""" start="00:08:43.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Now the first part has more of a social component to it""" start="00:08:45.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and the second part has more of""" start="00:08:48.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""a technological component to it that can be automated.""" start="00:08:50.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""So in order to implement this prototype,""" start="00:08:53.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""we have two things.""" start="00:08:56.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""We have founding documents that describe the social aspects,""" start="00:08:57.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and an accounting system that automates""" start="00:09:01.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""some of the technological aspects.""" start="00:09:04.040" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""The founding documents, in the noble tradition""" start="00:09:05.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""of the Gayaneshagowa and the US constitution,""" start="00:09:10.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""include a constitution which describes""" start="00:09:14.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""the guiding principles of ABE,""" start="00:09:17.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and the two main prongs are forward-looking empowerment""" start="00:09:20.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and backward-looking fairness.""" start="00:09:25.400" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""This means that we want to empower""" start="00:09:26.640" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""those individuals and groups""" start="00:09:28.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that are most likely to create value in the future,""" start="00:09:31.600" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""while also recognizing and fairly compensating""" start="00:09:33.600" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""those who've created value in the past,""" start="00:09:36.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""to set a good example and incentivize others""" start="00:09:38.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""to take chances in creating value.""" start="00:09:41.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And it describes high level principles of""" start="00:09:45.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""dialectical inheritance attribution""" start="00:09:50.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""as proceeding by means of""" start="00:09:52.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""common, collectively agreed-upon standards""" start="00:09:53.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that are applied to all.""" start="00:09:56.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And the key thing here is these improvements feed back""" start="00:09:56.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""to the whole and apply to everyone.""" start="00:09:59.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And this is an important quality""" start="00:10:01.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""to ensuring fairness and accuracy.""" start="00:10:03.640" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""There's also a declaration of non-ownership.""" start="00:10:05.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""We saw already that ownership is an overused institution.""" start="00:10:09.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""This just codifies that and allows us to shed""" start="00:10:13.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""the baggage of this idea of ownership""" start="00:10:20.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""where it doesn't make any sense.""" start="00:10:22.440" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""A third document is the financial model""" start="00:10:24.320" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""which describes how payments are to be treated,""" start="00:10:28.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and a key idea here is that when you pay money""" start="00:10:31.320" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""to an open source project, you know,""" start="00:10:34.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""today you don't really have an incentive to do so,""" start="00:10:37.360" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and it essentially is kind of like a donation.""" start="00:10:40.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""But in this model, in an attribution-based model,""" start="00:10:42.440" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""when you pay money to a project,""" start="00:10:46.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""you're creating value in a way.""" start="00:10:48.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""You're contributing value to the project""" start="00:10:50.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and that itself is attributable.""" start="00:10:51.600" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And the manner in which we'll treat this""" start="00:10:53.280" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""is in terms of the fair market price that, again,""" start="00:10:56.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""we agree upon collectively.""" start="00:10:58.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And any payment that exceeds the fair market price""" start="00:11:00.200" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""is going to be treated as investment.""" start="00:11:04.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And the goal here for this financial model""" start="00:11:06.400" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""is for the system to be self-sustaining,""" start="00:11:10.200" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""so I think there are many open problems here""" start="00:11:11.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and any finance experts or any other experts""" start="00:11:15.440" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""who are interested in contributing here,""" start="00:11:18.440" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""your help is needed, certainly.""" start="00:11:21.480" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""There's also an attribution model document,""" start="00:11:23.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""which describes some of the theoretical ideas""" start="00:11:26.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that would guide dialectical inheritance attribution,""" start="00:11:29.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and there are many interesting ideas here.""" start="00:11:33.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""One that I'd like to mention is &quot;backpropagation,&quot;""" start="00:11:36.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""which is the idea that""" start="00:11:40.360" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""as we're improving the standards over time""" start="00:11:42.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and they're likely to get more accurate and fair over time,""" start="00:11:45.200" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""we'd like these more accurate and fair standards""" start="00:11:48.280" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""to &quot;backpropagate&quot; and calibrate the value assignments""" start="00:11:51.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that were done in the past.""" start="00:11:56.520" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And this means that some people might have been""" start="00:11:57.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""underpaid in the past""" start="00:12:01.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and we would pay them what they were underpaid,""" start="00:12:02.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""or the balance,""" start="00:12:05.200" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and some people may have been overpaid.""" start="00:12:06.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Now in that case we're not going to go and say,""" start="00:12:08.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""&quot;hey we overpaid you, give us the money back.&quot;""" start="00:12:11.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Instead the system as a whole is going to bear""" start="00:12:14.440" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""the cost of being wrong,""" start="00:12:18.200" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and so it's kind of an insurance policy.""" start="00:12:19.520" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""But I think another more interesting quality here is that""" start="00:12:22.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""the system in practice wouldn't really""" start="00:12:25.600" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""absorb any negative impact here""" start="00:12:29.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""because there is an incentive""" start="00:12:33.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""for these people who've been overpaid""" start="00:12:34.320" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""to reinvest that money.""" start="00:12:37.600" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""So I think they would want to invest the money""" start="00:12:38.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""in other places that the system has valued""" start="00:12:42.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""as being valuable and showing potential.""" start="00:12:45.520" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""The second component of the implementation""" start="00:12:49.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""is the accounting system. All accounting is public.""" start="00:12:54.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""All payments into the repo are public""" start="00:12:58.600" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and all payments out of the project are also public.""" start="00:13:00.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""We can do some things for privacy,""" start="00:13:03.400" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and again, the basis of this system is dialogue.""" start="00:13:05.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""It's not a fundamentally technologically system.""" start="00:13:08.520" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""It's a fundamentally dialogue-based system,""" start="00:13:10.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and that, to be honest with you, is everything.""" start="00:13:12.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""It's all systems that we have in place.""" start="00:13:14.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""But by embracing that, it means that""" start="00:13:17.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""we can do whatever we want to do by discussion,""" start="00:13:21.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and if there's something""" start="00:13:25.040" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that we cannot achieve in a technological way,""" start="00:13:26.040" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""we'll achieve it in a non-technological way.""" start="00:13:27.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""But anyway, the point is, all accounting is public,""" start="00:13:30.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and text files in the repository""" start="00:13:36.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""form the inputs and outputs of the accounting system""" start="00:13:40.400" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""which is implemented as a GitHub action.""" start="00:13:43.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""So typically a source repository will have""" start="00:13:48.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""an ABE folder containing these three inputs:""" start="00:13:51.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""attributions, payments,""" start="00:13:54.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and payouts. And we'll see how that works.""" start="00:13:55.600" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""This is the drym.org Github organization account.""" start="00:13:59.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""This is an example of a repository that uses""" start="00:14:04.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""the GitHub action accounting system.""" start="00:14:09.600" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""So there will be a payments folder, a payouts folder,""" start="00:14:12.440" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""as well as an attributions file.""" start="00:14:16.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""The payments: essentially each file""" start="00:14:18.640" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""just represents a payment that's made to the repository.""" start="00:14:23.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Payouts is the same except it's payments""" start="00:14:26.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""made by the admins of the repository to contributors.""" start="00:14:29.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And the attributions file breaks down""" start="00:14:32.360" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""the attribution of the value in the repository""" start="00:14:37.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""by contributor. And then the billing system runs""" start="00:14:40.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""on every relevant commit,""" start="00:14:47.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""which is typically changes to the ABE folder,""" start="00:14:50.360" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""generates a set of transactions""" start="00:14:53.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that are owed to various people from various payments,""" start="00:14:57.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and then creates an issue with the outstanding balances""" start="00:15:00.520" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that need to be paid out to contributors,""" start="00:15:05.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and tells you what those balances are.""" start="00:15:07.280" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""So for repository or project maintainers,""" start="00:15:09.520" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""it automates all these accounting details""" start="00:15:11.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and you just have to worry about fulfilling the payments.""" start="00:15:14.880" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""An interesting property of the prototype""" start="00:15:17.600" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""is that boundary incentives expand the boundary,""" start="00:15:23.520" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and that is that the incentives in the system""" start="00:15:28.400" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""are so constructed that those on the periphery""" start="00:15:33.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""of the attribution-based economic system""" start="00:15:38.440" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""have an incentive to join in.""" start="00:15:40.440" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And we'll see how that works.""" start="00:15:42.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Well, as I mentioned, we're starting this prototype""" start="00:15:45.520" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""in the Emacs community with the""" start="00:15:51.360" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Symex repo. Symex is a structural editing package,""" start="00:15:52.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and this prototype will recognize direct contributors""" start="00:15:59.600" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""as well as antecedents and related projects""" start="00:16:05.320" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""through the process of collective attribution.""" start="00:16:08.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""We all decide how financial contributions to the Symex repo""" start="00:16:09.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""are going to be distributed to the direct contributors""" start="00:16:14.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""as well as to antecedents and related projects.""" start="00:16:18.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""So the power is yours!""" start="00:16:21.040" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And that's what I meant when I said""" start="00:16:23.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that the boundary incentives expand the boundary,""" start="00:16:27.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""because projects that we agree are owed money""" start="00:16:29.520" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""from the Symex repo now would have an incentive to join,""" start="00:16:32.360" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""because once they join they would get that money.""" start="00:16:37.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And we'll also be implementing this in the""" start="00:16:39.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Racket community. Racket is a Scheme dialect,""" start="00:16:43.200" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and Emacs has great support for Racket in Racket Mode""" start="00:16:47.200" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""so I encourage you to try it.""" start="00:16:50.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And we'll be prototyping it in the Qi repository.""" start="00:16:52.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Qi is a language written in Racket which is, you know,""" start="00:16:56.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""it's for functional programming and things like that.""" start="00:16:59.600" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And once again, we'll recognize direct contributors""" start="00:17:02.720" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""as well as antecedents and we all decide""" start="00:17:06.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and agree on how those are done.""" start="00:17:09.240" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""So how do you adopt this?""" start="00:17:11.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""You can add the github action to a repo""" start="00:17:14.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that you are a maintainer of.""" start="00:17:18.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""You can financially support an ABE project.""" start="00:17:20.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""This is important to do""" start="00:17:23.320" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""because the system won't get started""" start="00:17:25.200" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""without money as an input.""" start="00:17:26.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And it also has network effects, as we saw -""" start="00:17:28.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""the more money you contribute,""" start="00:17:31.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""the more incentive there is""" start="00:17:33.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""for other people to join the system.""" start="00:17:35.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And contributions are also attributable,""" start="00:17:36.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""as we said earlier.""" start="00:17:39.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Some of them can be treated as investments.""" start="00:17:41.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Any help you can provide with funding""" start="00:17:43.720" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""would be attributable and very helpful, of course.""" start="00:17:48.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And yeah, if you can help us achieve""" start="00:17:50.520" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""the goal of self-sufficiency""" start="00:17:54.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""without relying on capitalist entry points,""" start="00:17:55.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that would be very helpful as well.""" start="00:17:59.040" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""I'd like to acknowledge the help of many individuals""" start="00:18:01.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""for this presentation""" start="00:18:06.320" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""as well as many of the supporting things""" start="00:18:09.400" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that have gone on behind the scenes for years.""" start="00:18:12.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And in particular for now I want to mention""" start="00:18:14.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Jair and Ariana who wrote the accounting system""" start="00:18:19.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that we saw earlier, and Salim who encouraged me""" start="00:18:25.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""to take this social approach to the prototype.""" start="00:18:28.320" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And so many more people who have believed and invested""" start="00:18:32.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""in the cause of &quot;attribution, not ownership!&quot;""" start="00:18:36.560" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""I want to leave you with this closing thought.""" start="00:18:39.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""The electromagnetic attraction between two objects""" start="00:18:42.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""is 10^42 stronger (!) than the gravitational attraction""" start="00:18:46.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""between these same objects.""" start="00:18:49.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And yet, a stone falls to the Earth""" start="00:18:51.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""under the influence of gravity, not magnetism.""" start="00:18:53.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""The reason is that the e/m forces are polarized,""" start="00:18:56.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""much like our world, and cancel each other out.""" start="00:19:00.880" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""Now in this world, we are told""" start="00:19:04.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that we should look out for ourselves""" start="00:19:07.720" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""because no one is going to look out for us.""" start="00:19:09.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""That we should take care of our own""" start="00:19:11.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""because we can't rely on others to care.""" start="00:19:14.040" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""An attribution-based economy is nothing like that.""" start="00:19:17.360" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""We care about each other,""" start="00:19:22.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""we take care of each other,""" start="00:19:23.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""because taking care of one another is valuable,""" start="00:19:25.440" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and an attribution-based economic system""" start="00:19:29.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""is capable of recognizing that value, in financial terms.""" start="00:19:32.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And as a result, we are safe in the embrace of the world.""" start="00:19:39.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""So, um, yeah. Let's go!""" start="00:19:43.880" video="mainVideo-maint" id="subtitle"]]
+
+
+
+Captioner: sid
+
+Questions or comments? Please e-mail [sid@drym.org](mailto:sid@drym.org?subject=Comment%20for%20EmacsConf%202022%20maint%3A%20Maintaining%20the%20Maintainers%3A%20Attribution%20as%20an%20Economic%20Model%20for%20Open%20Source)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/maint-before.md b/2022/info/maint-before.md
new file mode 100644
index 00000000..b37e44d3
--- /dev/null
+++ b/2022/info/maint-before.md
@@ -0,0 +1,60 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sat 2022-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="maint">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect stroke-width="3" x="549" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 20-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-maint>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: TO_CAPTION_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-03T19:50:00Z" end="2022-12-03T20:10:00Z"><div class="conf-time">Saturday, Dec 3 2022, ~2:50 PM - 3:10 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 3 2022, ~1:50 PM - 2:10 PM CST (US/Central)<br />Saturday, Dec 3 2022, ~12:50 PM - 1:10 PM MST (US/Mountain)<br />Saturday, Dec 3 2022, ~11:50 AM - 12:10 PM PST (US/Pacific)<br />Saturday, Dec 3 2022, ~7:50 PM - 8:10 PM UTC <br />Saturday, Dec 3 2022, ~8:50 PM - 9:10 PM CET (Europe/Paris)<br />Saturday, Dec 3 2022, ~9:50 PM - 10:10 PM EET (Europe/Athens)<br />Sunday, Dec 4 2022, ~1:20 AM - 1:40 AM IST (Asia/Kolkata)<br />Sunday, Dec 4 2022, ~3:50 AM - 4:10 AM +08 (Asia/Singapore)<br />Sunday, Dec 4 2022, ~4:50 AM - 5:10 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/dev/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="maint-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="maint-mainVideo" data="""
+00:00.000 Problems
+00:18.840 Solution?
+00:30.840 A common underlying problem
+00:55.840 Capitalism
+02:05.760 Copyright
+03:49.840 An attribution-based economic system is efficient
+05:01.760 Gyroscopes
+07:45.200 Prototypes
+09:05.920 Founding documents
+10:05.920 Declaration of non-ownership
+10:24.320 The financial model
+11:23.240 The attribution model
+12:49.120 The accounting system
+13:59.920 drym.org Github account
+15:17.600 Expanding the boundary
+17:11.560 Adopting this idea
+18:39.160 Closing thoughts
+19:04.080 Taking care of one another
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main.webm">Download --main.webm (64MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main.opus">Download --main.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/6vrCBs7r9RELh2byQ4CMsj">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="maint-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="maint-qanda" data="""
+00:18.720 Short recap of what the talk was about?
+02:09.280 What's the incentive to pay?
+04:04.014 What do you think of projects like OpenQ?
+04:23.305 Are you aware of SourceCred?
+07:39.889 How is this different from money?
+08:58.080 How would you approach a viable experiment for ABE?
+10:33.999 How do you constrain the cognitive and time burdens of deciding the values of attributed contributions?
+13:29.360 How are the attribution amounts calculated?
+16:29.820 Synchronicity with Bastien's talk last year
+17:28.960 What are your assumptions about human nature?
+21:17.680 What is the URL of the project?
+21:45.002 Check out the prototype, "Old Abe"
+22:29.520 Closing Remarks
+23:50.320 A flicker of light and following your curiosity
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="maint-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers.webm">Download --answers.webm (114MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers.opus">Download --answers.opus (15MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/maint-nav.md b/2022/info/maint-nav.md
new file mode 100644
index 00000000..44197598
--- /dev/null
+++ b/2022/info/maint-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/realestate">Real estate and Org table formulas</a>
+Next by track: <a href="/2022/talks/health">Health data journaling and visualization with Org Mode and gnuplot</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/meetups-after.md b/2022/info/meetups-after.md
new file mode 100644
index 00000000..e05ba4c0
--- /dev/null
+++ b/2022/info/meetups-after.md
@@ -0,0 +1,899 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="meetups-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hello everyone, welcome to my talk.""" start="00:00:00.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""I hope you all have been""" start="00:00:09.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""enjoying EmacsConf so far, like I am.""" start="00:00:11.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""But you might be wondering,""" start="00:00:14.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;How do I meet fellow Emacs users""" start="00:00:15.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""after the conference?&quot;""" start="00:00:18.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""What if I tell you there is a way?""" start="00:00:21.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""The answer is local meetups.""" start="00:00:23.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""These are user groups who arrange events""" start="00:00:26.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""at some frequency, they meet at some frequency.""" start="00:00:29.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""That's what we are going to talk about today:""" start="00:00:34.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""attending and organizing Emacs meetups.""" start="00:00:36.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""In other words, enjoying your Emacs journey""" start="00:00:39.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""with more folks!""" start="00:00:41.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""I am Bhavin, I am from India,""" start="00:00:43.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and I have been organizing""" start="00:00:45.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Emacs Asia Pacific meetup""" start="00:00:47.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""since last few months [almost 2 years].""" start="00:00:49.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""We will be talking about online meetups""" start="00:00:52.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""most of the time.""" start="00:00:54.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""The beauty of online meetups is,""" start="00:00:57.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""you can join any meetups""" start="00:00:59.251" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""if the time permits,""" start="00:01:01.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""if the time zone is same.""" start="00:01:03.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""And there is no barrier.""" start="00:01:05.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So let's get started.""" start="00:01:07.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Let's see how a meetup looks like.""" start="00:01:10.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""We will see one of the Emacs APAC meetup's""" start="00:01:14.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""snippet, basically.""" start="00:01:18.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""[Ihor]: There is something called org-indent-mode.""" start="00:01:25.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So, it's like this org-adapt-indentation""" start="00:01:29.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""which is like electric indent.""" start="00:01:33.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Like when you press enter, it will indent.""" start="00:01:34.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""There is org-indent-mode, which does not require you""" start="00:01:37.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to actually make the indents physically""" start="00:01:41.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""in the file.""" start="00:01:44.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""It will make things appear indented.""" start="00:01:45.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""This one?""" start="00:01:54.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Yeah.""" start="00:01:55.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""[Bhavin]: org-adapt-indentation.""" start="00:01:56.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Okay.""" start="00:01:57.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Looks interesting, right?""" start="00:02:03.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So, let's get into more details.""" start="00:02:04.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""You might have a question:""" start="00:02:08.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;Why I should attend meetups?&quot;""" start="00:02:09.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""That's a good question.""" start="00:02:11.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You should always ask &quot;why&quot;.""" start="00:02:12.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""It's an opportunity to learn together.""" start="00:02:14.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You basically meet like-minded people,""" start="00:02:19.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""like-minded Emacs users,""" start="00:02:21.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and you can always have fun, right?""" start="00:02:23.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""You still might have a question:""" start="00:02:27.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;I am a beginner.&quot;""" start="00:02:29.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""I would say that's a great avenue for you.""" start="00:02:31.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You get to discover more things.""" start="00:02:34.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can get help if you are facing""" start="00:02:36.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""any issues, any errors.""" start="00:02:38.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""And always keep in mind that it's okay""" start="00:02:41.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""if you don't understand everything""" start="00:02:42.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""from the discussions.""" start="00:02:44.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""There are going to be times where everything is…,""" start="00:02:45.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""all the topics you are not able to understand,""" start="00:02:49.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""which is totally fine.""" start="00:02:51.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""&quot;I am an experienced user.&quot;""" start="00:02:56.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""I would say that's even better""" start="00:02:58.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""because you can help others""" start="00:03:00.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""during the meetup.""" start="00:03:01.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""And usually, in Emacs or in general,""" start="00:03:03.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""there is always something new to learn.""" start="00:03:06.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""There are plenty of packages.""" start="00:03:08.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""There might be something""" start="00:03:10.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""you have never tried.""" start="00:03:11.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""And there are always going to be""" start="00:03:12.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""different workflows of using something.""" start="00:03:13.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""So now, how do I become part of a meetup, right?""" start="00:03:16.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;How do I become part of a meetup group?&quot;""" start="00:03:23.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""The first step you might be doing is""" start="00:03:26.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""finding a meetup.""" start="00:03:29.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""There is this page,""" start="00:03:30.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""EmacsWiki page called Usergroups,""" start="00:03:32.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""currently maintained""" start="00:03:35.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""by Leo and Sacha.""" start="00:03:37.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So, let's see how that page looks like.""" start="00:03:38.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""As you can see, this page tells you""" start="00:03:46.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""about all the upcoming events.""" start="00:03:48.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""And it also has a list of all the meetup groups.""" start="00:03:51.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So, you can find all the groups there.""" start="00:04:05.485" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Once you find one,""" start="00:04:10.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""you need to join them, right?""" start="00:04:11.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""How to join differs from group to group""" start="00:04:13.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""but usually you will find a way to subscribe""" start="00:04:17.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to their mailing list or RSS feed,""" start="00:04:20.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""join their IRC channels.""" start="00:04:23.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""They might have accounts on some platforms""" start="00:04:24.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""like Mobilizon or meetup.com.""" start="00:04:27.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can just go there and join,""" start="00:04:29.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""so that you get notified""" start="00:04:31.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""whenever there is a new event.""" start="00:04:32.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Now, seeing that list,""" start="00:04:36.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""you might say, &quot;There are too many events""" start="00:04:39.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""of my interest.&quot;""" start="00:04:42.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Don't worry, there is a solution.""" start="00:04:42.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""There is an Emacs calendar,""" start="00:04:47.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""you can subscribe to this calendar.""" start="00:04:49.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Let's see what all events""" start="00:04:51.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""are there in this particular calendar.""" start="00:04:55.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""This month there is Emacs Berlin to start with""" start="00:04:56.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and then there is EmacsConf,""" start="00:05:00.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""then Emacs APAC is also there.""" start="00:05:02.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Let's see…, there is a companion website""" start="00:05:06.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""for this calendar as well.""" start="00:05:15.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Let's go to the website also.""" start="00:05:17.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You will see all the options, how to import it.""" start="00:05:19.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""There is ICS file,""" start="00:05:24.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""there are different time zones,""" start="00:05:26.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Org mode files.""" start="00:05:28.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can just go there and subscribe.""" start="00:05:29.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""&quot;How do I make most of it?""" start="00:05:33.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""If I am attending a meetup,""" start="00:05:38.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""how do I make most of it?&quot;""" start="00:05:40.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""I would say never hesitate""" start="00:05:42.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""from asking questions.""" start="00:05:44.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""If there is something new,""" start="00:05:45.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""something you don't understand,""" start="00:05:46.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""just go ahead and ask questions.""" start="00:05:47.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Ask for help if you are stuck somewhere.""" start="00:05:49.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""There are going to be new things,""" start="00:05:51.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""so make sure you note them down,""" start="00:05:54.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and you can try those later.""" start="00:05:56.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""If possible, have a microphone or webcam on,""" start="00:05:58.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""so that you can connect with others very easily.""" start="00:06:04.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""If that's not an option for some reason,""" start="00:06:07.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""it's fine, you can always use chat""" start="00:06:10.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and interact with everyone.""" start="00:06:12.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So, don't make that a reason for not attending.""" start="00:06:13.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Go ahead and attend,""" start="00:06:18.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""even if you just have chat as an option""" start="00:06:20.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to interact with others.""" start="00:06:22.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;Wait, I still have questions.&quot;""" start="00:06:23.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Definitely.""" start="00:06:27.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""If you have more questions,""" start="00:06:28.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""go ahead and post those.""" start="00:06:30.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""I will come to them at the end.""" start="00:06:31.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Now we know how to attend,""" start="00:06:34.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""what are the things you need to do""" start="00:06:42.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""if you want to attend.""" start="00:06:44.651" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""&quot;What if I want to start my own meetup group?&quot;""" start="00:06:45.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Because there is no regional group,""" start="00:06:48.418" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""or there is something very specific""" start="00:06:51.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""which you want to start a group about.""" start="00:06:53.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Again, &quot;Why should I start a meetup group?&quot;""" start="00:06:55.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""It is a way, I would say, to give back""" start="00:07:01.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to the community by creating a platform""" start="00:07:05.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""for people to interact.""" start="00:07:08.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You give speakers a platform,""" start="00:07:10.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""you also give a platform to the attendees.""" start="00:07:15.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""And obviously to have fun with others.""" start="00:07:17.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""There are some common questions""" start="00:07:19.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""which might come up,""" start="00:07:25.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""something like,""" start="00:07:26.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;How much effort do I need to put?&quot;""" start="00:07:28.051" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Personally, I don't have to put""" start="00:07:29.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""more than two hours a month,""" start="00:07:32.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""that's including the time""" start="00:07:34.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""I attend the meetup.""" start="00:07:36.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""&quot;What if I'm new to Emacs?&quot;""" start="00:07:37.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""That's totally fine.""" start="00:07:42.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You don't have to know Emacs,""" start="00:07:43.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""you don't have to be an expert""" start="00:07:45.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to start a meetup group.""" start="00:07:47.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""That's totally fine.""" start="00:07:48.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You will have more folks joining in""" start="00:07:49.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""with different experiences.""" start="00:07:51.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""That's totally fine to be a beginner""" start="00:07:54.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""in Emacs to start a meetup.""" start="00:07:57.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""&quot;How do I do it now?&quot;""" start="00:07:58.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So, let's look at some specifics,""" start="00:08:02.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""some questions you might need to answer""" start="00:08:05.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""in order to start your meetup group.""" start="00:08:08.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Format of the meetup.""" start="00:08:10.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""What participants will do during the meetup?""" start="00:08:13.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Let's see one of the options,""" start="00:08:17.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""this is one of my favorites.""" start="00:08:20.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Keep it simple, a bit unstructured""" start="00:08:23.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and have free flowing discussions.""" start="00:08:26.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""What does that mean?""" start="00:08:28.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""That basically means letting people""" start="00:08:30.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""ask questions, share new things they have found,""" start="00:08:32.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""let them ask doubts, let them ask for help.""" start="00:08:35.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""During this free flowing discussions,""" start="00:08:39.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""you can go through Emacs News as well,""" start="00:08:44.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""go through the topics, and you might find""" start="00:08:46.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""something interesting which you can talk about.""" start="00:08:49.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Why I prefer discussions?""" start="00:08:52.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Discussions basically give an opportunity""" start="00:08:57.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to all the participants to participate.""" start="00:09:00.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""They get to talk about what they know""" start="00:09:03.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""rather than just having one way talk.""" start="00:09:06.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""They can basically participate""" start="00:09:09.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""by putting up their thoughts.""" start="00:09:12.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Everyone gets to learn more""" start="00:09:13.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""as topics change.""" start="00:09:17.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Usually during these free flowing discussions,""" start="00:09:18.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""topics keep changing""" start="00:09:21.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and that's how you get to learn more.""" start="00:09:22.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""This also has less friction for the speakers.""" start="00:09:25.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""They won't have a burden that,""" start="00:09:29.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;Okay, I have a talk in the meetup""" start="00:09:31.651" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""I need to prepare.&quot;""" start="00:09:34.485" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""That just increases friction for them""" start="00:09:35.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to participate.""" start="00:09:38.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""If you are having a free flowing discussion,""" start="00:09:39.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""it's basically just a matter of saying,""" start="00:09:42.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;Hey, maybe I would like to share my screen,""" start="00:09:44.685" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and I'll talk about this particular thing.&quot;""" start="00:09:47.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""What about talks?""" start="00:09:49.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Everyone loves talks, even I do.""" start="00:09:53.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So, make sure you are also accommodating talks,""" start="00:09:55.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""allow people to submit talks,""" start="00:09:58.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and have talks plus discussions.""" start="00:10:00.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can also host watch parties.""" start="00:10:03.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can pick up""" start="00:10:07.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""any of the talks from EmacsConf""" start="00:10:09.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""for anything which is out there,""" start="00:10:11.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and you can watch it together,""" start="00:10:14.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and you can have discussion""" start="00:10:15.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""about that particular talk.""" start="00:10:17.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""The next question""" start="00:10:18.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""you might need to answer""" start="00:10:23.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""is frequency of the meetup.""" start="00:10:24.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""How often the group is going to meet?""" start="00:10:25.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""One option is recurring meetups.""" start="00:10:28.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So something like, you meet every month""" start="00:10:32.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""on a specific day time.""" start="00:10:37.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Another option is one-off meetups.""" start="00:10:39.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can meet whenever you have""" start="00:10:43.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""some specific talk,""" start="00:10:46.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""some specific discussion topic.""" start="00:10:47.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""What you can do about the timing is,""" start="00:10:49.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""if you are targeting a specific region,""" start="00:10:52.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""make sure [people from] all the time zones""" start="00:10:54.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""from that region are able to attend.""" start="00:10:56.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Now you have figured out everything""" start="00:10:58.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and you are going to schedule the meetup.""" start="00:11:04.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So, &quot;Should I schedule and just wait?&quot;""" start="00:11:06.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""No.""" start="00:11:08.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Go ahead and spread the word about it.""" start="00:11:08.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Let's see what we can do.""" start="00:11:10.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can post on social media about your event.""" start="00:11:12.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Usually do it a week or two before,""" start="00:11:16.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""so that people can plan their other things.""" start="00:11:19.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Share it on local GNU/Linux user groups.""" start="00:11:24.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""They might have IRC channels, mailing lists,""" start="00:11:27.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""so you should share your event there.""" start="00:11:30.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Reddit seems to be a popular place as well.""" start="00:11:32.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Many people follow and are there,""" start="00:11:35.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""so you can post about your event there as well.""" start="00:11:37.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""The next option is adding your event""" start="00:11:39.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to Emacs calendar.""" start="00:11:43.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You should get your event added""" start="00:11:45.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to the EmacsWiki and the calendar,""" start="00:11:47.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""which we saw in the first part.""" start="00:11:49.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""And the instructions are given there.""" start="00:11:51.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So, whenever you schedule a meetup,""" start="00:11:53.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""you should definitely add your event""" start="00:11:55.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to those places.""" start="00:11:58.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Next thing you should do is…,""" start="00:11:58.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""these are few points""" start="00:12:02.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""which you should do during the meetup.""" start="00:12:04.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You should start with the introductions.""" start="00:12:07.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Introductions serve as an icebreaker, usually.""" start="00:12:10.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""They make everyone speak about themselves,""" start="00:12:14.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""so that everyone knows each other""" start="00:12:18.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""a bit at least.""" start="00:12:20.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Make sure it is possible for others""" start="00:12:21.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to participate via chat.""" start="00:12:24.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So, if there are some messages in the chat,""" start="00:12:27.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""make sure you relay those to others""" start="00:12:30.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""who are talking via audio/video.""" start="00:12:32.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Share your website at the end,""" start="00:12:35.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""so that people know and they can follow it,""" start="00:12:39.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and they can join the next event.""" start="00:12:41.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""The next is keeping track of time.""" start="00:12:44.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Make sure you keep track of time.""" start="00:12:48.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Have some time, let's say, 1 hour""" start="00:12:50.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""or slightly more than that""" start="00:12:52.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and time-bound your event,""" start="00:12:54.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""so that we respect everyone's time""" start="00:12:56.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and we conclude in time.""" start="00:12:58.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Now your meetup was done,""" start="00:13:00.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""it was good, people attended.""" start="00:13:05.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""What's next?""" start="00:13:06.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Publishing the recordings, I would say.""" start="00:13:07.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You should consider publishing the talks""" start="00:13:10.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""or discussions both.""" start="00:13:14.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""The reason being people can revisit the things.""" start="00:13:15.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Usually people go back""" start="00:13:20.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and watch the recordings again.""" start="00:13:21.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""And those who were not able to attend,""" start="00:13:23.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""they can also participate""" start="00:13:26.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""by watching the recording.""" start="00:13:27.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can do even more.""" start="00:13:28.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can have captions for the videos,""" start="00:13:32.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""so that people can enjoy the talks""" start="00:13:34.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""way better than just audio video.""" start="00:13:37.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""And you can even have written summaries""" start="00:13:40.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""of the discussions,""" start="00:13:43.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""something like with links.""" start="00:13:44.451" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Let's see some of the examples of summaries.""" start="00:13:45.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""This is one of the summaries""" start="00:13:48.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""for Austin meetup""" start="00:13:55.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and this is written by someone""" start="00:13:56.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""who is participating during that meetup.""" start="00:13:59.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can see they have put up their thoughts,""" start="00:14:01.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""what they think about something""" start="00:14:04.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""they got to know in the event.""" start="00:14:05.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Another example we can see is M-x Research.""" start="00:14:08.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can see they have put up""" start="00:14:14.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""all the discussion points.""" start="00:14:16.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""They even have action items from the meetup.""" start="00:14:18.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""One more example we can see is Emacs APAC.""" start="00:14:21.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""What I have done here is,""" start="00:14:25.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""I have mentioned the topic and links,""" start="00:14:28.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""who shared what.""" start="00:14:30.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""And that's about post meetup stuff.""" start="00:14:32.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can keep it simple.""" start="00:14:36.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Just start with hosting your video recordings,""" start="00:14:38.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and just start with basic links and details.""" start="00:14:40.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""So, are we ready to start a meetup?""" start="00:14:44.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Definitely.""" start="00:14:50.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Let's see some of the points""" start="00:14:52.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""or checklist, I would say,""" start="00:14:54.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""you should do before you start""" start="00:14:56.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""a meetup group.""" start="00:14:57.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""What are the next steps?""" start="00:14:58.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Have a co-organizer.""" start="00:14:59.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So, have at least one co-organizer or person""" start="00:15:04.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to talk to during the meetup,""" start="00:15:07.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""so that even if no one shows up""" start="00:15:09.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""you will have someone to talk to""" start="00:15:12.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and you both can discuss""" start="00:15:14.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""about the topic you decided to.""" start="00:15:16.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""If your friend or the person""" start="00:15:20.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""you have reached out to""" start="00:15:22.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""are hesitant to become a &quot;co-organizer&quot;,""" start="00:15:23.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""because that feels like responsibility,""" start="00:15:26.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""it's fine.""" start="00:15:28.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can ask them to just come with you""" start="00:15:29.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and have the discussion during the event.""" start="00:15:32.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""And like Andrea explained""" start="00:15:36.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""in his talk about 'buddy',""" start="00:15:38.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""buddy is someone who is helping you""" start="00:15:40.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""with your Emacs journey.""" start="00:15:43.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Buddies and their mentees""" start="00:15:45.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""can make their meeting public,""" start="00:15:48.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and that can be a good way to start""" start="00:15:52.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""or spin-off a meetup.""" start="00:15:56.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Have a website for your meetup.""" start="00:15:57.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You should definitely have a website""" start="00:16:01.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""where people can go and read""" start="00:16:04.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""about your event or the group.""" start="00:16:05.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Keep it simple.""" start="00:16:08.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Have RSS feed, so that people can subscribe.""" start="00:16:10.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""And whenever you have new talks,""" start="00:16:13.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""make sure you add those talks""" start="00:16:15.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to the announcement pages.""" start="00:16:17.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Let's quickly see some of the example websites.""" start="00:16:18.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""The first one here is again""" start="00:16:23.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Emacs Asia-Pacific event.""" start="00:16:32.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can see we have details,""" start="00:16:34.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""what is the timing, how to submit a talk,""" start="00:16:36.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""how to attend.""" start="00:16:41.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Next example is Emacs Berlin.""" start="00:16:42.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So, you can see they have mentioned""" start="00:16:45.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""what is the next event,""" start="00:16:47.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""which were the previous events,""" start="00:16:48.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""how to participate, how to stay updated.""" start="00:16:51.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""And similarly, there is M-x Research as well.""" start="00:16:53.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""They have mentioned what are the events,""" start="00:16:57.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""what are the upcoming events and all.""" start="00:16:59.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can just get started""" start="00:17:00.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""by taking any of the websites,""" start="00:17:09.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and just modify it to your liking.""" start="00:17:11.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""That's totally fine.""" start="00:17:13.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""The next thing you will need""" start="00:17:14.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""is a video conferencing tool.""" start="00:17:17.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""It should support video, screen share, chat.""" start="00:17:19.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""These are the few of""" start="00:17:23.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""the free software options.""" start="00:17:25.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""One is BigBlueButton""" start="00:17:27.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and another is Jitsi Meet.""" start="00:17:29.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can request for an account""" start="00:17:31.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""on the given instance to EmacsConf organizers""" start="00:17:33.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""on this mailing list,""" start="00:17:36.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""or you can stick to any""" start="00:17:38.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""of the Jitsi Meet instances.""" start="00:17:40.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Communication media.""" start="00:17:42.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You should have at least some way""" start="00:17:45.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""for people to interact post meetup""" start="00:17:47.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""or before the meetup.""" start="00:17:51.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can use any of the existing IRC channels, #emacsconf,""" start="00:17:53.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""or maybe you can use the existing""" start="00:17:57.386" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""GNU/Linux user groups lists.""" start="00:17:59.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""I would recommend you to read or watch""" start="00:18:01.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;Starting an Emacs meetup&quot; by Harry Schwartz.""" start="00:18:07.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""They have mentioned details""" start="00:18:11.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""about in-person meetups,""" start="00:18:13.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""but there are many important points""" start="00:18:14.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to consider in that post""" start="00:18:17.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""as well as in the recording.""" start="00:18:20.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So, go ahead and definitely watch""" start="00:18:21.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""before you start your meetup.""" start="00:18:23.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""If you need any help with""" start="00:18:24.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""BigBlueButton account, hosting,""" start="00:18:29.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""or captioning the talk recordings""" start="00:18:32.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""for very specific or good talks,""" start="00:18:35.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""don't hesitate to reach out to""" start="00:18:37.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""EmacsConf organizers.""" start="00:18:38.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""There are many volunteers""" start="00:18:40.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""subscribed to that list,""" start="00:18:42.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""so you will definitely find""" start="00:18:43.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""someone to help you.""" start="00:18:45.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""I had one idea.""" start="00:18:50.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""If you are one of the organizers,""" start="00:18:50.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""or if you plan to start a meetup,""" start="00:18:53.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""I was thinking if""" start="00:18:55.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""we can have a common platform""" start="00:18:57.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""for all the organizers""" start="00:18:59.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to discuss what they are doing,""" start="00:19:00.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""what they are experimenting.""" start="00:19:01.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""If you are interested,""" start="00:19:04.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""drop me an email at this email address.""" start="00:19:06.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""If I get somewhere with this idea,""" start="00:19:10.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""I will definitely involve everyone""" start="00:19:13.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""who is interested.""" start="00:19:15.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""With that, we come to the end of my talk.""" start="00:19:16.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""I would like to thank Sacha and Leo""" start="00:19:21.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""for their inputs while I was creating this talk,""" start="00:19:23.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and thank you for joining.""" start="00:19:26.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Now it is time for the questions.""" start="00:19:30.040" video="mainVideo-meetups" id="subtitle"]]
+
+<a name="meetups-mainVideo-transcript-es"></a>
+# Spanish
+
+[[!template new="1" text="""Hola a todos y todas. Bienvenidos y bienvenidas a mi conferencia.""" start="00:00:00.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Espero que todos y todas hayan disfrutado hasta ahora""" start="00:00:09.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""de EmacsConf, como lo hago yo.""" start="00:00:11.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Pero podrían preguntarse,""" start="00:00:14.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;¿Cómo me encuentro con usuarios y usuarias de Emacs""" start="00:00:15.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""luego de la conferencia?&quot;""" start="00:00:18.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""¿Qué pasaría si les digo que hay una manera?""" start="00:00:21.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""La respuesta son los encuentros locales.""" start="00:00:23.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Estos son grupos locales que organizan eventos""" start="00:00:26.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Se encuentran con cierta frecuencia.""" start="00:00:29.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Eso es de lo que vamos a hablar hoy:""" start="00:00:34.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""asistir a encuentros de Emacs y también organizarlos.""" start="00:00:36.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""En otras palabras,""" start="00:00:39.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""disfrutar de tu peregrinaje por Emacs con más gente!""" start="00:00:41.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Soy Bhavin. Vengo de India,""" start="00:00:43.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y he organizado""" start="00:00:45.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""el encuentro Emacs Asia Pacific""" start="00:00:47.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""desde hace casi 2 años.""" start="00:00:49.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Hablaré acerca de los encuentros en línea""" start="00:00:52.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""la mayoría del tiempo.""" start="00:00:54.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""La belleza de los encuentros en línea es""" start="00:00:57.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""que puedes unirte a cualquier encuentro,""" start="00:00:59.251" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""si tu tiempo lo permite,""" start="00:01:01.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""sin importar la zona horaria.""" start="00:01:03.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""... y no existen barreras.""" start="00:01:05.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que comencemos.""" start="00:01:07.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Veamos qué aspecto tienen los encuentros.""" start="00:01:10.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Básicalmente, veremos una parte""" start="00:01:14.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""de un encuentro Emacs APAC.""" start="00:01:18.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""[Ihor]: Existe algo llamado org-indent-mode.""" start="00:01:25.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""[Ihor]: Es como org-adapt-indentation""" start="00:01:29.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""[Ihor]: que es como la indentación eléctrica.""" start="00:01:33.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""[Ihor]: Cuando presionas enter, [el texto] será indentado.""" start="00:01:34.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""[Ihor]: Existe org-indent-mode, que no requiere""" start="00:01:37.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""[Ihor]: que insertes las indentaciones físicamente""" start="00:01:41.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""[Ihor]: en el archivo.""" start="00:01:44.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""[Ihor]: Hará que las cosas parezcan indentadas.""" start="00:01:45.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""¿Este?""" start="00:01:54.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""""" start="00:01:55.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""org-adapt-indentation""" start="00:01:56.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""De acuerdo.""" start="00:01:57.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Parece interesante, ¿verdad?""" start="00:02:03.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que entremos en detalles.""" start="00:02:04.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Podrías tener una pregunta:""" start="00:02:08.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;¿Por qué debo asistir a encuentros?&quot;""" start="00:02:09.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Esa es una buena pregunta.""" start="00:02:11.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Siempre debieras preguntar &quot;¿por qué&quot;.""" start="00:02:12.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Es una oportunidad de aprender juntos y juntas.""" start="00:02:14.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Tú basicamente te encuentras con gente que piensa igual,""" start="00:02:19.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""usuarios y usuarias de Emacs que piensan igual.""" start="00:02:21.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""... y siempre puedes divertirte, ¿verdad?""" start="00:02:23.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Podrías tener una preocupación:""" start="00:02:27.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;Soy un novato o una novata.&quot;""" start="00:02:29.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Yo diría que hay una gran oportunidad para tí.""" start="00:02:31.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes descubrir más cosas.""" start="00:02:34.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes conseguir ayuda, si encuentras""" start="00:02:36.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""dificultades, errores.""" start="00:02:38.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Y siempre recuerda que estará bien""" start="00:02:41.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""si no entiendes todo""" start="00:02:42.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""en las conversaciones.""" start="00:02:44.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Habrá momentos cuando todo sea...""" start="00:02:45.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""que otros temas no sean comprensibles;""" start="00:02:49.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""lo cual es totalmente comprensible.""" start="00:02:51.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""&quot;Soy un usuario experimentado o una usuaria experimentada.&quot;""" start="00:02:56.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Diría que esta situación es aún mejor""" start="00:02:58.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""porque puedes ayudar a otros y otras""" start="00:03:00.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""durante un encuentro.""" start="00:03:01.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Y usualmente, en Emacs o en general,""" start="00:03:03.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""siempre hay algo nuevo que aprender.""" start="00:03:06.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Hay abundancia de paquetes.""" start="00:03:08.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Podría haber algo""" start="00:03:10.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""que nunca haz probado.""" start="00:03:11.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Y siempre habrá""" start="00:03:12.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""diferentes flujos de trabajo para usar [un paquete].""" start="00:03:13.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Así que ahora te preguntarás: ¿cómo me vuelvo parte de un encuentro? ¿Verdad?""" start="00:03:16.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;¿Cómo me vuelvo parte del grupo de un encuentro?&quot;""" start="00:03:23.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""El primer paso que podrías emprender""" start="00:03:26.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""es buscar un encuentro.""" start="00:03:29.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Existe una página""" start="00:03:30.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""del EmacsWiki https://www.emacswiki.org/emacs/Usergroups""" start="00:03:32.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""mantenida actualmente""" start="00:03:35.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""por Leo y por Sacha.""" start="00:03:37.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que, veamos cómo se ve esa página.""" start="00:03:38.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Como puedes ver, esta página se refiere""" start="00:03:46.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""a todos los eventos que vendrán.""" start="00:03:48.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Además, tiene una lista de todos los grupos de encuentros.""" start="00:03:51.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que, puedes encontrar todos los grupos ahí.""" start="00:04:05.485" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""En cuanto encuentres uno,""" start="00:04:10.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""debes unirte a ellos, ¿verdad?""" start="00:04:11.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Cómo unirte difiere de grupo a grupo""" start="00:04:13.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""pero usualmente encontrarás una forma de suscribirte""" start="00:04:17.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""a su lista de correo o a sus noticias RSS,""" start="00:04:20.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""únete a su canal de IRC.""" start="00:04:23.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Podrían tener cuentas en diferentes plataformas""" start="00:04:24.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""como Mobilizon o meetup.com [cuidado de que contengan Javascript privativo].""" start="00:04:27.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes ir allá y unirte,""" start="00:04:29.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para que te notifiquen""" start="00:04:31.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""cuando hay un evento nuevo.""" start="00:04:32.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Ahora, al ver esa lista""" start="00:04:36.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""puedes decir, &quot;Hay demasiados eventos""" start="00:04:39.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""de mi interés.&quot;""" start="00:04:42.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""No te preocupes. Hay una solución.""" start="00:04:42.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Existe un calendario Emacs.""" start="00:04:47.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes suscribirte a este calendario.""" start="00:04:49.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Veamos qué eventos""" start="00:04:51.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""hay en este calendario en particular.""" start="00:04:55.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Este mes hay Emacs Berlin para comenzar""" start="00:04:56.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y luego hay EmacsConf.""" start="00:05:00.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Luego hay Emacs APAC, que también está ahí.""" start="00:05:02.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Veamos ... existe un sitio web acompañante""" start="00:05:06.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para este calendario también.""" start="00:05:15.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Vayamos a ese sitio web.""" start="00:05:17.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Verás todas las opciones, como importarlo a tu software.""" start="00:05:19.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Hay un archivo ICS.""" start="00:05:24.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Hay diferentes zonas horarias,""" start="00:05:26.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""archivos Org mode.""" start="00:05:28.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes simplemente ir allá y suscribirte.""" start="00:05:29.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""&quot;¿Cómo lo aprovecho al máximo?""" start="00:05:33.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Si asisto a un encuentro,""" start="00:05:38.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""¿cómo aprovecho al máximo?&quot;""" start="00:05:40.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Yo diría que nunca dudes""" start="00:05:42.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""en hacer preguntas.""" start="00:05:44.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Si hay algo nuevo,""" start="00:05:45.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""algo que no entiendas,""" start="00:05:46.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""solamente haz las preguntas.""" start="00:05:47.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Pide ayuda, si te encuentras atascado con algún problema.""" start="00:05:49.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""También existirán asuntos nuevos.""" start="00:05:51.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que asegúrate de tomar nota""" start="00:05:54.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y podrás intentar probarlos luego.""" start="00:05:56.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Si es posible, ten listo un micrófono o cámara web encendidas.""" start="00:05:58.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""De esa manera podrás conectarte con otres de manera rápida.""" start="00:06:04.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Si esa no es una opción por alguna razón,""" start="00:06:07.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""está bien. Siempre puedes usar el chat""" start="00:06:10.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""e interactuar con todas y con todos.""" start="00:06:12.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que esa no es una razón para no asistir.""" start="00:06:13.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Anímate y asiste,""" start="00:06:18.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""aunque solamente tengas el chat como única opción""" start="00:06:20.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para interactuar con otras y otros.""" start="00:06:22.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;Espera. Aún tengo preguntas.&quot;""" start="00:06:23.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Seguro.""" start="00:06:27.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Si tienes más preguntas,""" start="00:06:28.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""plantéalas.""" start="00:06:30.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Llegaré a ellas al final.""" start="00:06:31.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Ahora sabemos cómo asistir,""" start="00:06:34.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""cuáles son las cosas que debes hacer""" start="00:06:42.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""si deseas asistir.""" start="00:06:44.651" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""&quot;¿Qué pasa si deseo iniciar mi propio grupo de encuentro?&quot;""" start="00:06:45.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""porque no hay un grupo regional""" start="00:06:48.418" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""o existe un tema muy específico""" start="00:06:51.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""del que quieres tener un grupo particular.""" start="00:06:53.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""De nuevo, &quot;¿Por qué debería iniciar un grupo de encuentro?&quot;""" start="00:06:55.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Es una manera, diría yo, para tener reciprocidad""" start="00:07:01.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""con la comunidad, mediante la creación de una plataforma""" start="00:07:05.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para que la gente interactúe.""" start="00:07:08.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Ofreces a los conferencistas una plataforma.""" start="00:07:10.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""También le ofreces una platforma a los asistentes.""" start="00:07:15.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Y, obviamente, para divertirse junto con otros.""" start="00:07:17.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Hay preguntas comunes""" start="00:07:19.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""que pueden presentarse.""" start="00:07:25.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Algo como:""" start="00:07:26.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;¿Cuánto esfuerzo se requiere?&quot;""" start="00:07:28.051" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Personalmente, yo no debo poner""" start="00:07:29.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""más de dos horas por mes.""" start="00:07:32.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Eso incluye el tiempo""" start="00:07:34.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para atender al encuentro.""" start="00:07:36.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""&quot;¿Qué pasa si soy novato en Emacs?&quot;""" start="00:07:37.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Eso no importa.""" start="00:07:42.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""No necesitas saber Emacs.""" start="00:07:43.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""No necesitas ser un experto""" start="00:07:45.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""par iniciar un groupo de encuentro.""" start="00:07:47.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Está muy bien.""" start="00:07:48.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Tendrás más gente que se una""" start="00:07:49.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""con diferente experiencia.""" start="00:07:51.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Es totalmente aceptable ser un novato""" start="00:07:54.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""en Emacs para iniciar un encuentro.""" start="00:07:57.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""&quot;Ahora, ¿cómo lo hago?&quot;""" start="00:07:58.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que, veamos algunos detalles,""" start="00:08:02.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""algunas preguntas que podrías necesitar contestar""" start="00:08:05.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para iniciar tu grupo de encuentro.""" start="00:08:08.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Formato del encuentro.""" start="00:08:10.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""¿Qué harán los participantes durante el encuentro?""" start="00:08:13.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Veamos una de las opciones.""" start="00:08:17.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Esta es una de mis favoritas.""" start="00:08:20.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Mantenlo sencillo, un poco desestructurado""" start="00:08:23.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y asegúrate de que las conversaciones fluyan libremente.""" start="00:08:26.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""¿Qué sígnifica eso?""" start="00:08:28.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Basicamente significa dejar a las personas""" start="00:08:30.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""preguntar, compartir nuevas cosas que han encontrado.""" start="00:08:32.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Permíteles preguntar sobre sus dudas. Premíteles pedir ayuda.""" start="00:08:35.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Durante estas conversaciones de libre flujo,""" start="00:08:39.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""puedes también cubrir Noticas de Emacs.""" start="00:08:44.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Revisa los temas y podrías encontrar""" start="00:08:46.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""algo interesante de lo que puedas hablar.""" start="00:08:49.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""¿Por qué prefiero las conversaciones?""" start="00:08:52.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Básicamente, las conversaciones brindan una oportunidad""" start="00:08:57.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para todos los asistentes a participar.""" start="00:09:00.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Logran hablar de lo que conocen,""" start="00:09:03.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""en lugar de solamente tener un monólogo.""" start="00:09:06.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Pueden participar, básicamente""" start="00:09:09.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""al exponer sus pensamientos.""" start="00:09:12.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Todos consiguen aprender más""" start="00:09:13.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""mientras cambian los temas.""" start="00:09:17.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Usualmente durante estas conversaciones de libre flujo,""" start="00:09:18.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""los temas siguen cambiando""" start="00:09:21.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y esa es la manera en que consigues aprender más.""" start="00:09:22.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Esto también ofrece menos fricción para les conferencistas.""" start="00:09:25.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""No sentirán el peso de:""" start="00:09:29.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;De acuerdo, tengo que dar una conferencia en este encuentro""" start="00:09:31.651" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""que requiero preparar.&quot;""" start="00:09:34.485" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Eso solamente incrementa la fricción para que ellos""" start="00:09:35.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""participen.""" start="00:09:38.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Si logras una conversación de libre flujo,""" start="00:09:39.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""solamente es asunto de decir:""" start="00:09:42.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;Hey, Quizá quiera compartir mi pantalla""" start="00:09:44.685" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y hablaré de este tema en particular.&quot;""" start="00:09:47.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""¿Qué hay sobre las conferencias?""" start="00:09:49.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Todos adoran las conferencias, incluso yo.""" start="00:09:53.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que asegúrate de acomodar las conferencias también.""" start="00:09:55.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Permite a la gente presentar sus conferencias""" start="00:09:58.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y sostén conferencias y conversaciones.""" start="00:10:00.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""También puedes sostener proyecciones.""" start="00:10:03.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes tomar""" start="00:10:07.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""cualquiera de las conferencias de EmacsConf,""" start="00:10:09.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""de lo que quiera que se encuentre ahí,""" start="00:10:11.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y puedes mirarla juntos.""" start="00:10:14.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Luego pueden tener una conversación""" start="00:10:15.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""acerca de esa conferencia en particular.""" start="00:10:17.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""La siguiente pregunta""" start="00:10:18.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""que podrías necesitar contestar""" start="00:10:23.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""es acerca de la frecuencia de los encuentros.""" start="00:10:24.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""¿Qué tan a menudo se reunirá el grupo?""" start="00:10:25.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Una opción son los encuentros recurrentes.""" start="00:10:28.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que algo como, reunirse cada mes""" start="00:10:32.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""un día específico a cierta hora.""" start="00:10:37.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Otra opción son los encuentros de una sola ocasión.""" start="00:10:39.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes reunirte cuando sea""" start="00:10:43.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""que ofrezcas una conferencia en particular,""" start="00:10:46.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""algún tema específico de conversación.""" start="00:10:47.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Lo que harías sobre los usos horarios es,""" start="00:10:49.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""si apuntas a una región específica,""" start="00:10:52.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""asegúrate que todos puedan asistir""" start="00:10:54.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""desde los distintos usos horarios de esa región.""" start="00:10:56.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Ahora haz descifrado todo""" start="00:10:58.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y que vas a agendar el encuentro.""" start="00:11:04.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que &quot;¿Debiría agendar y solamente esperar?&quot;""" start="00:11:06.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""No.""" start="00:11:08.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Difunde la noticia.""" start="00:11:08.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Veamos qué podemos hacer.""" start="00:11:10.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes publicar en redes sociales el evento.""" start="00:11:12.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Usualmente se debe hacer con una o dos semanas de antelación""" start="00:11:16.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para que la gente pueda planificar sus otros asuntos.""" start="00:11:19.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Compártelo en los grupos locales de usuarios de GNU con linux.""" start="00:11:24.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Podrían tener canales de IRC, listas de correo.""" start="00:11:27.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que debes compartir [la convocatoria] a tu evento ahí.""" start="00:11:30.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Reddit también parece ser un lugar popular para anunciar.""" start="00:11:32.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Hay mucha gente y seguidores que están ahí.""" start="00:11:35.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que puedes anunciar sobre tu evento ahí tambien.""" start="00:11:37.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""La siguiente opción es agregar tu evento""" start="00:11:39.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""al calendario Emacs.""" start="00:11:43.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Debes conseguir que tu evento se añada""" start="00:11:45.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""a EmacsWiki y al calendario,""" start="00:11:47.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""que vimos en la primera parte [de esta conferencia].""" start="00:11:49.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Y las instrucciones se encuentran ahí.""" start="00:11:51.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que, cuando sea que agendes un encuentro,""" start="00:11:53.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""debes definitivamente añadir tu evento""" start="00:11:55.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""a aquellos lugares.""" start="00:11:58.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Lo siguiente que debes hacer es ...""" start="00:11:58.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""estos son algunos puntos""" start="00:12:02.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""que debes realizar durante el encuentro.""" start="00:12:04.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Debes iniciar con las introducciones.""" start="00:12:07.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Las introducciones sirven para romper el hielo, usualmente.""" start="00:12:10.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Hacen que todos hablen acerca de sí mismos""" start="00:12:14.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para que todos se conozcan""" start="00:12:18.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""al menos un poco.""" start="00:12:20.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Haz posible que otros""" start="00:12:21.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""participen via chat.""" start="00:12:24.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""De tal manera que, si hay mensajes en el chat,""" start="00:12:27.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""asegúrate de relegarlos""" start="00:12:30.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""a quienes están hablando via audio/video.""" start="00:12:32.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Comparte tu sitio web al final""" start="00:12:35.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para que las personas lo sepan y lo sigan""" start="00:12:39.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y para que puedan venir al siguiente evento.""" start="00:12:41.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Lo siguiente es controlar el tiempo.""" start="00:12:44.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Asegúrate de controlar el tiempo.""" start="00:12:48.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Reserva un tiempo, puede ser una hora,""" start="00:12:50.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""o algo más que eso,""" start="00:12:52.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y fija ese horario para tu evento""" start="00:12:54.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""con el fin de respetar el tiempo de todos""" start="00:12:56.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y que se termine a tiempo.""" start="00:12:58.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Ahora tu encuentro termina,""" start="00:13:00.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""fue bueno y la gente vino.""" start="00:13:05.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""¿Qué sigue?""" start="00:13:06.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Publicar las grabaciones, diría yo.""" start="00:13:07.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Deberías considerar publicar las conferencias""" start="00:13:10.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""o las conversaciones, o ambas.""" start="00:13:14.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""La razón es que las personas pueden revisitarlas.""" start="00:13:15.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Usualmente, la gente vuelve""" start="00:13:20.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y mira las grabaciones nuevamente.""" start="00:13:21.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Y aquellos que no pudieron asistir,""" start="00:13:23.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""ellos también pueden participar""" start="00:13:26.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""al observar la grabación.""" start="00:13:27.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes hacer aún más.""" start="00:13:28.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes tener subtítulos para los vídeos""" start="00:13:32.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para que la gente pueda disfrutar de las conferencias""" start="00:13:34.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""de mejor manera que solamente el audio y el vídeo.""" start="00:13:37.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""E inclusive tú puedes tener resúmenes escritos""" start="00:13:40.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""de las conversaciones,""" start="00:13:43.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""o algo parecido con los hipervínculos.""" start="00:13:44.451" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Veamos algunos de los ejemplos con los resúmenes.""" start="00:13:45.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Este es uno de los resúmenes""" start="00:13:48.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""del encuentro en Austin [Texas, EEUUA]""" start="00:13:55.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y fue escrito por alguien""" start="00:13:56.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""quien participó durante el encuentro.""" start="00:13:59.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes ver que publicó sus pensamientos,""" start="00:14:01.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""lo que pensaban sobre un asunto""" start="00:14:04.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""que aprendieron en el evento.""" start="00:14:05.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Otro ejemplo que podemos ver es M-x investigar.""" start="00:14:08.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes ver lo que han publicado ...""" start="00:14:14.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""todos los puntos de la conversación.""" start="00:14:16.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Incluso han recopilado puntos de acción mediante el encuentro.""" start="00:14:18.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Un ejemplo más que podemos ver es Emacs APAC.""" start="00:14:21.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Lo que he hecho es,""" start="00:14:25.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""yo he mencionado el tema y los hipervínculos ...""" start="00:14:28.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""quién compartió qué.""" start="00:14:30.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Y eso es lo que hay sobre asuntos para después del evento.""" start="00:14:32.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes mantenerlo sencillo.""" start="00:14:36.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Solamente inicia con alojar las grabaciones de vídeo""" start="00:14:38.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y solamente inicia con los hipervínculos básicas y con los detalles.""" start="00:14:40.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Así que, ¿estamos listos para iniciar un encuentro?""" start="00:14:44.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""¡Definitivamente!""" start="00:14:50.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Repasemos algunos de los puntos""" start="00:14:52.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""o hagamos una lista, yo diría,""" start="00:14:54.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""sobre lo que debes hacer antes de iniciar""" start="00:14:56.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""un grupo de encuentro.""" start="00:14:57.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""¿Cuáles son los siguientes pasos?""" start="00:14:58.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Consigue un co-organizador.""" start="00:14:59.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Entonces, ten al menos un co-organizador""" start="00:15:04.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""o persona con quien hablar durante el encuentro""" start="00:15:07.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para que, aunque nadie más venga,""" start="00:15:09.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""tengas con quien hablar""" start="00:15:12.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y ambos pueden conversar""" start="00:15:14.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""sobre el tema que pretendían.""" start="00:15:16.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Si tu amigo o la persona""" start="00:15:20.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""que conseguiste""" start="00:15:22.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""duda en convertirse en co-organizadora""" start="00:15:23.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""porque siente que es una responsabilidad,""" start="00:15:26.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""está bien.""" start="00:15:28.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes pedirle que solamente te acompañe""" start="00:15:29.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y sostén la conversación durante el evento.""" start="00:15:32.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Y, como Andrea explicó""" start="00:15:36.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""en su conferencia sobre los 'compañeros',""" start="00:15:38.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""'compañero' es quien te ayuda""" start="00:15:40.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""en tu travesía de Emacs.""" start="00:15:43.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Compañeros y pupilos""" start="00:15:45.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""pueden hacer de su encuentro uno que sea público""" start="00:15:48.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y esa puede ser una buena manera de comenzar""" start="00:15:52.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""a poner a rodar un encuentro.""" start="00:15:56.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Ten un sitio web para tu encuentro.""" start="00:15:57.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Definitivamente debes tener un sitio web""" start="00:16:01.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""donde la gente pueda leer""" start="00:16:04.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""sobre tu evento o sobre el grupo.""" start="00:16:05.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Mantenlo simple.""" start="00:16:08.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Levanta noticias de RSS para que las personas puedan suscribirse.""" start="00:16:10.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Y cuando tengas nuevas conferencias,""" start="00:16:13.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""asegúrate de añadir esas conferencias""" start="00:16:15.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""a las páginas de anuncios.""" start="00:16:17.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Rápidamente, veamos algunos sitios web de ejemplo.""" start="00:16:18.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""El primero es nuevamente""" start="00:16:23.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""el del evento de Emacs Asia-Pacific.""" start="00:16:32.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes ver que mostramos detalles,""" start="00:16:34.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""el horario, cómo proponer una conferencia,""" start="00:16:36.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""cómo asistir.""" start="00:16:41.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""El siguiente ejemplo es Emacs Berlin.""" start="00:16:42.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Ahí puedes ver que han mencionado""" start="00:16:45.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""cuál es el siguiente evento,""" start="00:16:47.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""cuáles fueron los eventos previos,""" start="00:16:48.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""cómo participar, cómo mantenerse actualizado.""" start="00:16:51.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Y de igual manera, existe M-x investigar.""" start="00:16:53.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Han mencionado cuáles son los eventos,""" start="00:16:57.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""cuáles son los eventos venideros y todo lo demás.""" start="00:16:59.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes iniciar,""" start="00:17:00.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""simplemente tomando cualquiera de estos sitios web""" start="00:17:09.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y solamente modifícalos a tu gusto.""" start="00:17:11.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Es totalmente aceptable.""" start="00:17:13.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Lo siguiente que requerirás""" start="00:17:14.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""es de una herramienta para videoconferencia.""" start="00:17:17.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Debería soportar vídeo, compartir escritorio, chat.""" start="00:17:19.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Estas son algunas""" start="00:17:23.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""de las opciones en software libre.""" start="00:17:25.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Una es BigBlueButton""" start="00:17:27.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y otra es Jitsi Meet.""" start="00:17:29.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes solicitar una cuenta en la instancia apropiada""" start="00:17:31.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""a los organizadores de EmacsConf""" start="00:17:33.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""que están en esta lista de correo,""" start="00:17:36.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""o puedes mantenerte en cualquiera""" start="00:17:38.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""de las instancias de Jitsi Meet.""" start="00:17:40.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Medios de comunicación.""" start="00:17:42.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Deberías tener al menos una manera""" start="00:17:45.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para que la gente interactúe después del encuentro""" start="00:17:47.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y antes del encuentro.""" start="00:17:51.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes utilizar cualquiera de los canales existentes en IRC,""" start="00:17:53.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""\#emacsconf, o quizá desees""" start="00:17:55.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""usar las listas de grupos de usuarios de GNU con Linux.""" start="00:17:59.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Recomendaría que leas o mires""" start="00:18:01.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;Starting an Emacs meetup&quot; por Harry Schwartz.""" start="00:18:07.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Ha mencionado los detalles""" start="00:18:11.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""sobre encuentros personales""" start="00:18:13.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""pero hay mucho puntos importantes""" start="00:18:14.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""a considerar en esa publicación""" start="00:18:17.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""tanto como en la grabación.""" start="00:18:20.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que, ve y definitivamente mira [ese vídeo]""" start="00:18:21.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""antes de iniciar tu encuentro.""" start="00:18:23.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Si necesitas ayuda""" start="00:18:24.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""con la cuenta, el alojamiento""" start="00:18:29.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""o para poner subtítulos a las grabaciones de BigBlueButton""" start="00:18:32.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para conferencias muy específicas o buenas,""" start="00:18:35.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""no dudes en buscar""" start="00:18:37.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""a los organizadores de EmacsConf.""" start="00:18:38.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Hay muchos voluntarios""" start="00:18:40.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""suscritos a esa lista [de correo].""" start="00:18:42.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que definitivamente encontrarás""" start="00:18:43.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""alguien quien te ayude.""" start="00:18:45.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Tuve una idea.""" start="00:18:50.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Si tu eres uno de les organizadores""" start="00:18:50.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""o si planeas iniciar un encuentro,""" start="00:18:53.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""pensaba en que si tendríamos""" start="00:18:55.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""una plataforma común""" start="00:18:57.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para que todos les organizadores""" start="00:18:59.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""conversen sobre lo que están haciendo,""" start="00:19:00.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""lo que están expermentando.""" start="00:19:01.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Si estás interesado, envíame un correo a este correo electrónico""" start="00:19:04.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""bhavin192 [arroba] geeksocket [punto] in.""" start="00:19:06.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Si logro llegar a algún lado con esta idea,""" start="00:19:10.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""definitivamente involucraré a todos""" start="00:19:13.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""quienes estén interesados.""" start="00:19:15.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Con eso, llegamos al final de mi conferencia.""" start="00:19:16.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Me gustaría agradecer a Sacha y a Leo""" start="00:19:21.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""por sus recomendaciones mientras creaba esta conferencia""" start="00:19:23.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y a ustedes por unirse.""" start="00:19:26.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Ahora es el momento para las preguntas.""" start="00:19:30.040" video="mainVideo-meetups" id="subtitle"]]
+
+
+
+Captioners: bhavin192, translated to Spanish by quiliro
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20meetups%3A%20Attending%20and%20organizing%20Emacs%20meetups)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/meetups-before.md b/2022/info/meetups-before.md
new file mode 100644
index 00000000..9c5b53b5
--- /dev/null
+++ b/2022/info/meetups-before.md
@@ -0,0 +1,63 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Bhavin Gandhi shares how to participate in Emacs meetups and even how to organize your own. Afterwards, he will handle questions over BigBlueButton. Spanish captions are also available for this talk. You can find them on the talk page.
+
+
+The following image shows where the talk is in the schedule for Sat 2022-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="meetups">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect stroke-width="3" x="376" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 20-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-meetups>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: TO_INDEX_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-03T18:00:00Z" end="2022-12-03T18:20:00Z"><div class="conf-time">Saturday, Dec 3 2022, ~1:00 PM - 1:20 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 3 2022, ~12:00 PM - 12:20 PM CST (US/Central)<br />Saturday, Dec 3 2022, ~11:00 AM - 11:20 AM MST (US/Mountain)<br />Saturday, Dec 3 2022, ~10:00 AM - 10:20 AM PST (US/Pacific)<br />Saturday, Dec 3 2022, ~6:00 PM - 6:20 PM UTC <br />Saturday, Dec 3 2022, ~7:00 PM - 7:20 PM CET (Europe/Paris)<br />Saturday, Dec 3 2022, ~8:00 PM - 8:20 PM EET (Europe/Athens)<br />Saturday, Dec 3 2022, ~11:30 PM - 11:50 PM IST (Asia/Kolkata)<br />Sunday, Dec 4 2022, ~2:00 AM - 2:20 AM +08 (Asia/Singapore)<br />Sunday, Dec 4 2022, ~3:00 AM - 3:20 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/gen/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="meetups-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main.vtt" default /><track label="Spanish" kind="captions" srclang="es" src="/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main_es.vtt" />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="meetups-mainVideo" data="""
+00:00.000 Introduction
+01:10.120 Example from Emacs APAC
+02:08.320 "Why should I attend meetups?"
+02:27.400 "I am a beginner"
+02:56.800 "I am an experienced user"
+03:16.160 Finding meetups
+04:10.000 How to join
+04:36.840 Emacs Calendar
+05:33.200 Making the most of a meetup
+06:45.560 "What if I want to start my own meetup group?"
+07:19.680 "How much effort do I need to put?"
+07:37.880 "What if I'm new to Emacs?"
+07:58.480 "How do I do it now?"
+08:52.600 Why I prefer discussions
+09:49.440 What about talks?
+10:18.240 Frequency of the meetup
+10:58.480 "Should I schedule and just wait?"
+11:39.960 Adding your event to the Emacs Calendar
+11:58.920 What to do during the meetup
+13:00.280 After the meetup
+14:44.240 Checklist
+14:59.800 Co-organizers
+15:57.240 Website
+17:14.200 Video conferencing
+17:42.280 Communication
+18:01.720 Other resources
+18:50.080 Connecting with other organizers
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main.webm">Download --main.webm (104MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main_es.vtt">Download --main_es.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/nk37ygsa4ijMhV7uY94Lw2">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="meetups-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="meetups-qanda" data="""
+02:05.680 Thoughts on physical meetups
+07:34.841 Hybrid meetings
+10:03.680 How much time does it take you to organize a meetup?
+11:29.280 How do we use the workshops to make content that lasts after the workshop?
+14:25.800 Automation
+15:23.160 Emacs User Group
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="meetups-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--answers.webm">Download --answers.webm (49MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--answers.opus">Download --answers.opus (6.1MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/meetups-nav.md b/2022/info/meetups-nav.md
new file mode 100644
index 00000000..1a89e616
--- /dev/null
+++ b/2022/info/meetups-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/wayland">Emacs should become a Wayland compositor</a>
+Next by track: <a href="/2022/talks/sqlite">Using SQLite as a data source: a framework and an example</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/news-after.md b/2022/info/news-after.md
new file mode 100644
index 00000000..c7118f3d
--- /dev/null
+++ b/2022/info/news-after.md
@@ -0,0 +1,5 @@
+<!-- Automatically generated by emacsconf-generate-after-page -->
+
+
+Questions or comments? Please e-mail [sacha@sachachua.com](mailto:sacha@sachachua.com?subject=Comment%20for%20EmacsConf%202022%20news%3A%20Emacs%20News%20highlights)
+<!-- End of emacsconf-generate-after-page -->
diff --git a/2022/info/news-before.md b/2022/info/news-before.md
new file mode 100644
index 00000000..eeee30e3
--- /dev/null
+++ b/2022/info/news-before.md
@@ -0,0 +1,17 @@
+<!-- Automatically generated by emacsconf-generate-before-page -->
+
+<div class="schedule-in-context schedule-svg-container" data-slug="news">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:05- 9:25 Results of the 2022 Emacs Survey</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 10:00-10:20 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="94" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(123,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:10 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(483,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:30- 2:50 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="517" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(546,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:20- 3:40 Putting Org Mode on the Indieweb</title> <rect x="596" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(625,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:00- 4:10 Fanfare for the Common Emacs User</title> <rect x="658" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(671,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 5:00- 5:10 Sunday closing remarks</title> <rect x="752" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(765,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:20 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(687,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:20 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(123,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:45-10:55 justl: Driving recipes within Emacs</title> <rect x="164" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(177,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to" data-slug="tramp"> <title> 11:05-11:35 Elisp and the TRAMP: How to NOT write code you don't have to</title> <rect x="196" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(241,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:00- 1:10 Getting detached from Emacs</title> <rect x="376" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(389,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:35- 1:45 Top 10 reasons why you should be using Eshell</title> <rect x="431" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(444,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:10- 2:30 Emacs was async before async was cool</title> <rect x="486" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(515,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:05- 3:25 The Wheels on D-Bus</title> <rect x="572" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(601,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(94,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(188,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(282,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(376,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(470,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(564,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(658,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(752,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 5</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 5-min talk followed by IRC Q&A (<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-nil">#emacsconf-nil</a>)
+Pad: <https://pad.emacsconf.org/2022-news>
+Status: Talk cancelled
+<div>Times in different timezones:</div><div class="times" start="2022-12-04T23:00:00Z" end="2022-12-04T23:05:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~6:00 PM - 6:05 PM EST (US/Eastern)</div><div class="others">Sunday, Dec 4 2022, ~6:00 PM - 6:05 PM EST (US/Eastern)</div></div><div><a href="/2022/watch/nil/">Find out how to watch and participate</a></div>
+
+
+# Description
+
+
+<!-- End of emacsconf-generate-before-page --> \ No newline at end of file
diff --git a/2022/info/news-nav.md b/2022/info/news-nav.md
new file mode 100644
index 00000000..130fb5b1
--- /dev/null
+++ b/2022/info/news-nav.md
@@ -0,0 +1,2 @@
+Back to the [[talks]]
+Previous: <a href="/2022/talks/fanfare">Fanfare for the Common Emacs User</a>
diff --git a/2022/info/orgsuperlinks-after.md b/2022/info/orgsuperlinks-after.md
new file mode 100644
index 00000000..c218e3d6
--- /dev/null
+++ b/2022/info/orgsuperlinks-after.md
@@ -0,0 +1,184 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="orgsuperlinks-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hello, my name is Karl Voit""" start="00:00:00.000" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and I'm going to show you a little demo""" start="00:00:05.600" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""on how I'm working with links""" start="00:00:08.720" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""between arbitrary headings""" start="00:00:10.920" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and how I define dependencies between tasks""" start="00:00:12.760" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""when I'm working with projects and so forth.""" start="00:00:16.240" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template new="1" text="""For that purpose, I've created a repository""" start="00:00:18.680" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""that contains the files we are going to work with,""" start="00:00:22.680" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""with the overall setup and so forth.""" start="00:00:27.680" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""So you just have to download this repository""" start="00:00:30.000" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and you're able to replay everything""" start="00:00:32.840" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""which you are going to see here.""" start="00:00:36.400" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""If you've downloaded the configuration of the demo,""" start="00:00:38.120" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""you see those files, and you start the Emacs""" start="00:00:44.360" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""with an empty configuration""" start="00:00:49.160" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and link demo file, like that.""" start="00:00:52.800" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""So let me just briefly increase the font size.""" start="00:00:59.480" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""Setting up the demo is easy.""" start="00:01:03.800" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""I've done the key visualization,""" start="00:01:05.760" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""the webcam part, and I've started the Emacs""" start="00:01:08.600" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and increased the font size.""" start="00:01:11.840" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""And the last thing and the most important thing""" start="00:01:13.920" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""you need to do here""" start="00:01:17.720" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""is executing the babel block,""" start="00:01:18.680" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""which consists of more or less dirty Elisp code""" start="00:01:20.360" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""that installs the necessary packages, functions,""" start="00:01:23.800" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and bindings required in this demo.""" start="00:01:27.040" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""You need to acknowledge the execution""" start="00:01:29.800" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""with yes and return, and after a couple of seconds,""" start="00:01:32.400" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""everything is downloaded""" start="00:01:36.160" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and set up nicely for your demo.""" start="00:01:37.920" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template new="1" text="""The first demo is the demo""" start="00:01:42.680" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""where I'm going to show you""" start="00:01:45.040" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""how I'm working with links""" start="00:01:46.960" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""between arbitrary headings.""" start="00:01:48.480" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""It consists of two commands,""" start="00:01:50.120" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""org-super-links-quick-insert-inline-link,""" start="00:01:52.440" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and the second one is""" start="00:01:55.480" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""org-super-links-quick-insert-drawer-link.""" start="00:01:56.640" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""So the difference is,""" start="00:01:59.160" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""the first one is an inline link,""" start="00:02:01.040" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and the second one only depends""" start="00:02:03.720" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""on the drawers of the headings.""" start="00:02:07.640" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""So let's show you what I mean.""" start="00:02:09.960" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""If I'm inserting here the inline link""" start="00:02:12.800" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""to the second one, which I have to choose""" start="00:02:15.240" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""from the result set here,""" start="00:02:18.680" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""you see that there is this second heading link""" start="00:02:21.200" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""included here in the first heading.""" start="00:02:26.440" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""Let's open up the first and second heading.""" start="00:02:29.480" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""You see that I can jump this link""" start="00:02:34.920" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""to the second heading. The first heading""" start="00:02:37.120" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""as well as the second heading""" start="00:02:40.520" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""get human readable IDs,""" start="00:02:42.000" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""which I personally prefer.""" start="00:02:43.880" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""The second one gets""" start="00:02:46.040" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""a backheading in a link drawer,""" start="00:02:49.320" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""which was created automatically.""" start="00:02:51.600" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""So this is a method where I link arbitrary headings,""" start="00:02:53.680" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and that's the main reason""" start="00:02:57.440" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""why I personally don't need any""" start="00:02:59.168" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""Zettelkasten-based method like Org Roam.""" start="00:03:01.215" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template new="1" text="""The next command which I want to show you""" start="00:03:03.920" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""is the link between those drawers.""" start="00:03:08.600" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""So in order to link the third to the fourth,""" start="00:03:13.480" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""I need to look for the fourth.""" start="00:03:17.720" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""In this case, you do not see""" start="00:03:20.320" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""any inline link like here above,""" start="00:03:24.200" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""but you see the :PROPERTIES: drawers""" start="00:03:27.400" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and the :LINKS: drawers in both headings.""" start="00:03:31.520" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""So there is a forward- and a back-link""" start="00:03:35.400" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""between those two headings,""" start="00:03:38.480" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and if you see a links drawer""" start="00:03:40.200" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""you know that there are""" start="00:03:42.920" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""linked headings you can follow.""" start="00:03:45.440" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""I do find this method very very handy.""" start="00:03:47.560" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template new="1" text="""Of course, this doesn't only work""" start="00:03:51.640" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""within one single Org mode file.""" start="00:03:53.600" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""It works between arbitrary Org mode files""" start="00:03:57.120" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""as long as they are""" start="00:04:01.440" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""part of your Org Mode agenda list.""" start="00:04:02.634" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""So that was the first heading""" start="00:04:05.760" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""with the bi-directional links.""" start="00:04:08.280" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template new="1" text="""The second one is a little bit""" start="00:04:09.960" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""more complicated than that""" start="00:04:11.640" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""because I show you how I'm working with projects.""" start="00:04:13.080" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""Usually, I start the project""" start="00:04:17.280" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""by adding a &quot;Why?&quot; statement""" start="00:04:19.534" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""so that I remember why this project""" start="00:04:22.080" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""needs to be done in the first place.""" start="00:04:25.200" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""I do a brainstorming on the tasks""" start="00:04:27.440" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""that need to be done in the project""" start="00:04:32.280" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""as a simple list.""" start="00:04:33.934" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""With this handy command (C-c *),""" start="00:04:36.280" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""I'm converting it to a list of Org mode headings.""" start="00:04:39.360" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""Now let's add the NEXT keyword,""" start="00:04:43.840" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""which is my default to-do keyword,""" start="00:04:47.040" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""to the first heading.""" start="00:04:49.001" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""You notice that there is a CREATED property""" start="00:04:49.760" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""which is not relevant to the demo itself,""" start="00:04:53.320" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""but it's part of my setup.""" start="00:04:56.480" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""I really like those created headings""" start="00:04:57.840" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""because when I add arbitrary headings,""" start="00:05:00.840" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""this CREATED property is added automatically.""" start="00:05:03.640" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template new="1" text="""So now I want to define a dependency""" start="00:05:07.680" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""between &quot;Empty garage&quot;""" start="00:05:11.480" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and &quot;Paint walls and floor.&quot;""" start="00:05:12.968" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""I do that by invoking my command here,""" start="00:05:14.800" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and look for the &quot;Paint walls&quot; heading.""" start="00:05:18.480" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""In this dialogue, you may add a scheduled date""" start="00:05:22.520" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and/or a deadline date""" start="00:05:28.600" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and/or a to-do statement. For this demo""" start="00:05:30.234" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""I only choose the to-do keyword.""" start="00:05:34.240" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""You notice that there is""" start="00:05:37.640" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""this TRIGGER property added.""" start="00:05:39.400" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""That's default behavior of org-edna""" start="00:05:41.000" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""which is managing the dependencies, in my case.""" start="00:05:43.280" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""In the other one, there is this BLOCKER property.""" start="00:05:47.200" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template new="1" text="""It's very handy to know that those IDs""" start="00:05:51.600" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""might be used for jumping""" start="00:05:55.360" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""between those dependencies again.""" start="00:05:57.880" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""Those two headings don't have to be necessarily""" start="00:06:00.640" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""in the very same Org Mode file.""" start="00:06:03.600" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""They may be scattered around""" start="00:06:05.560" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""your Org Mode agenda files all over the place.""" start="00:06:07.920" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""So continuing this definition of dependency""" start="00:06:11.000" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""between the second and the third one...""" start="00:06:16.160" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""I'm using the search &quot;Bring back stuff&quot;...""" start="00:06:19.040" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""the search functionality...""" start="00:06:23.000" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""I choose the NEXT keyword here, its dependency.""" start="00:06:24.800" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""The same holds true for the last two.""" start="00:06:28.800" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""&quot;Is painted&quot;, for example. I'm going to use""" start="00:06:32.480" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""the NEXT keyword again.""" start="00:06:37.400" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template new="1" text="""I tend to use the last task of any project""" start="00:06:39.320" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""to close the overall project.""" start="00:06:44.520" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""So if I show you this one,""" start="00:06:47.120" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""I'm using the dependency to &quot;Garage&quot; project,""" start="00:06:49.880" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and this time I'm using the DONE keyword.""" start="00:06:57.040" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""Of course, the properties""" start="00:07:02.200" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""look like that all the time,""" start="00:07:04.920" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""so there is a trigger from the first task""" start="00:07:07.920" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""to the second one, and there is a blocker""" start="00:07:11.640" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""from the second one back to the first one,""" start="00:07:13.920" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and when I'm actually doing the project,""" start="00:07:17.120" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""I may now mark the first task as DONE,""" start="00:07:21.640" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and you notice that the second one""" start="00:07:25.520" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""automatically gets a next keyword.""" start="00:07:28.360" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""This happened, of course, for all those tasks.""" start="00:07:31.440" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""The neat thing is when I close the last one,""" start="00:07:34.600" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""the overall project gets its DONE keyword as well.""" start="00:07:38.920" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""So this is how I'm working with""" start="00:07:42.760" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""projects and dependencies.""" start="00:07:46.360" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template new="1" text="""Most of the time, task dependencies""" start="00:07:49.120" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""are not even within the same Org Mode subheading,""" start="00:07:53.720" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""let's say. Also, I'm using dependencies""" start="00:07:58.160" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""between different Org Mode files.""" start="00:08:01.600" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""This is a very, very cool way of defining""" start="00:08:03.720" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""what to do next in a project,""" start="00:08:07.160" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""without looking for tasks""" start="00:08:10.040" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""that can't be done at that stage.""" start="00:08:12.668" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template new="1" text="""You can have a look at the details of the demo""" start="00:08:15.640" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""by checking out the files in the repository.""" start="00:08:20.240" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""That's it for the demo,""" start="00:08:23.800" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and therefore I thank you for your patience.""" start="00:08:27.080" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""I wish you good luck,""" start="00:08:30.720" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and I hope that I could show you one or two tricks""" start="00:08:32.160" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""that you can add to your Org Mode setup""" start="00:08:39.520" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""in order to help you with your daily work.""" start="00:08:42.080" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""So bye from me, till next time.""" start="00:08:47.040" video="mainVideo-orgsuperlinks" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [EmacsConf22@Karl-Voit.at](mailto:EmacsConf22@Karl-Voit.at?subject=Comment%20for%20EmacsConf%202022%20orgsuperlinks%3A%20Linking%20headings%20with%20org-super-links%20%28poor-man%27s%20Zettelkasten%29)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/orgsuperlinks-before.md b/2022/info/orgsuperlinks-before.md
new file mode 100644
index 00000000..e39c08d1
--- /dev/null
+++ b/2022/info/orgsuperlinks-before.md
@@ -0,0 +1,51 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Karl Voit shares how he uses org-edna and org-super-links to manage dependencies and links betweentasks in Org Mode. Afterwards, he will handle questions over BigBlueButton.
+
+
+The following image shows where the talk is in the schedule for Sun 2022-12-04. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="orgsuperlinks">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(126,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect stroke-width="3" x="156" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect x="378" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(399,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 9-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-orgsuperlinks>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: TO_INDEX_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-04T15:40:00Z" end="2022-12-04T15:50:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~10:40 AM - 10:50 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 4 2022, ~9:40 AM - 9:50 AM CST (US/Central)<br />Sunday, Dec 4 2022, ~8:40 AM - 8:50 AM MST (US/Mountain)<br />Sunday, Dec 4 2022, ~7:40 AM - 7:50 AM PST (US/Pacific)<br />Sunday, Dec 4 2022, ~3:40 PM - 3:50 PM UTC <br />Sunday, Dec 4 2022, ~4:40 PM - 4:50 PM CET (Europe/Paris)<br />Sunday, Dec 4 2022, ~5:40 PM - 5:50 PM EET (Europe/Athens)<br />Sunday, Dec 4 2022, ~9:10 PM - 9:20 PM IST (Asia/Kolkata)<br />Sunday, Dec 4 2022, ~11:40 PM - 11:50 PM +08 (Asia/Singapore)<br />Monday, Dec 5 2022, ~12:40 AM - 12:50 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/gen/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="orgsuperlinks-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="orgsuperlinks-mainVideo" data="""
+00:00.000 Introduction
+00:18.680 Setting up the demo
+01:42.680 Linking between headings
+03:03.920 Link drawers
+03:51.640 Bi-directional links
+04:09.960 Projects
+05:07.680 Dependencies
+05:51.600 Jumping between dependencies
+06:39.320 Closing the project
+07:49.120 Task dependencies between files
+08:15.640 Conclusion
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--main.webm">Download --main.webm (38MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/ff1YxBEgR9LxJ51trJwyYk">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="orgsuperlinks-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="orgsuperlinks-qanda" data="""
+02:04.360 Can you filter out blocked tasks?
+03:07.720 Do you ever have any issues having so much meta-level information?
+05:01.160 Bidirectional links
+10:22.491 Does this change how you use TODO keywords NEXT, TODO, BLOCKED?
+11:14.300 Is your PhD published?
+12:32.466 Org Brain
+13:38.841 Do you find that the links are fragile, hard to maintain?
+14:19.383 Would it be of interest to make auto descriptions for links in Org?
+15:24.960 Why not Org UUIDs for IDs?
+16:19.360 Do you use anything for "What links here to this heading?"
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="orgsuperlinks-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--answers.webm">Download --answers.webm (62MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--answers.opus">Download --answers.opus (6.8MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/orgsuperlinks-nav.md b/2022/info/orgsuperlinks-nav.md
new file mode 100644
index 00000000..266b6c1c
--- /dev/null
+++ b/2022/info/orgsuperlinks-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/rde">rde Emacs introduction</a>
+Next by track: <a href="/2022/talks/justl">justl: Driving recipes within Emacs</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/orgvm-after.md b/2022/info/orgvm-after.md
new file mode 100644
index 00000000..6e56988a
--- /dev/null
+++ b/2022/info/orgvm-after.md
@@ -0,0 +1,746 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="orgvm-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""And so this little application--""" start="00:00:36.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""well, I'll skip that and just kind of""" start="00:00:42.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""jump right into my thesis for those of you""" start="00:00:42.504" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that might be planning to duck out for the RMS talk,""" start="00:00:49.143" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""starting in a little bit.""" start="00:00:53.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So essentially, my thesis here is really that""" start="00:00:55.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""the Emacs toolchain can easily be combined""" start="00:00:55.546" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""with other skills and used in kind of""" start="00:00:59.379" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""a Unix paradigm of having sort of different tools""" start="00:01:08.794" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to do different steps.""" start="00:01:13.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""We might actually use the same tool""" start="00:01:14.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to implement a couple of steps.""" start="00:01:17.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But with that paradigm, each step""" start="00:01:19.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""is an individual item that can be sort of""" start="00:01:22.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""dropped in and replaced.""" start="00:01:22.087" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So over the course of the talk,""" start="00:01:26.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""hopefully I'll come back to that thesis.""" start="00:01:26.421" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""But I'll now jump back and start walking through""" start="00:01:31.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""what is orgvm?""" start="00:01:31.087" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So this is a very simple proof of concept program.""" start="00:01:37.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""We'll just jump over to perhaps""" start="00:01:39.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""a prettier view of the source code for it.""" start="00:01:39.587" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""This is implemented-- oops.""" start="00:01:45.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""There's some cruft, I think, in my local.""" start="00:01:49.200" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, so this config block at the top...""" start="00:01:53.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And we'll be jumping back and forth""" start="00:01:56.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""between the code and the documentation.""" start="00:01:58.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""So the first thing I want to point out""" start="00:02:01.880" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""is that this is written in Node.js,""" start="00:02:04.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""but I think you'll find it'd be pretty trivial to implement""" start="00:02:05.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""in any language.""" start="00:02:08.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Certainly, you're more than welcome to use this.""" start="00:02:10.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'd be happy to accept your patches or feature requests""" start="00:02:13.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and things like that.""" start="00:02:17.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Of course, bug reports.""" start="00:02:20.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But I'd also encourage others to roll their own.""" start="00:02:21.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""You might well come up with a different version of this""" start="00:02:25.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that's even cooler.""" start="00:02:28.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And we can learn from each other.""" start="00:02:29.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""If you heard one of my talks before,""" start="00:02:32.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""you probably recognize a common theme.""" start="00:02:34.200" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm a big fan of head-first development""" start="00:02:36.200" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""as a way to get invested in both""" start="00:02:40.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""the tool chain and a culture.""" start="00:02:40.337" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, so let's come back to orgvm.""" start="00:02:44.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""First of all, we'll start with""" start="00:02:49.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""the itch I was trying to scratch.""" start="00:02:49.587" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I wanted to be able to quickly use a web browser""" start="00:02:52.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to browse my Org documents.""" start="00:02:58.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""It's particularly handy when the documents""" start="00:03:00.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""are full of cross links to each other.""" start="00:03:01.421" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""That meant I wanted to automatically export,""" start="00:03:05.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""particularly to HTML.""" start="00:03:10.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But it made sense for me to include Markdown, PDF,""" start="00:03:12.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""or whatever format I want.""" start="00:03:17.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Because many times, I'm going to look at that file""" start="00:03:18.880" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and then pop it into an email or upload it somewhere.""" start="00:03:22.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And then finally, it should be, therefore,""" start="00:03:29.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""pretty easy to download the document""" start="00:03:33.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""rather than view it, once I'm done.""" start="00:03:33.754" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""So let's just run a quick demo.""" start="00:03:38.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""You'll see I'm still a Windows user.""" start="00:03:42.200" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Yeah, I'm working on it.""" start="00:03:44.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So all right, first thing that we're going to do""" start="00:03:45.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""is fire up the program.""" start="00:03:52.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Actually, for simplicity, let's just""" start="00:03:53.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""admit we live in a DOS world.""" start="00:04:00.200" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And as you can see, there's not much to it""" start="00:04:01.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to get the application running.""" start="00:04:19.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So with that done, then, I can run out to my localhost.""" start="00:04:22.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And we'll just start by plugging in the name of an Org file.""" start="00:04:25.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So I've got a little Org file that I prepared""" start="00:04:37.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that just kind of provides a proof of concept to this.""" start="00:04:37.587" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And you can see, as imagined, we're automatically""" start="00:04:49.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""turning that Org file...""" start="00:04:53.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Let's just take a quick look at it.""" start="00:04:54.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And here's that file now.""" start="00:04:56.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""You can see, nothing up my sleeve.""" start="00:05:10.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""This is a very basic Org file""" start="00:05:11.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that I use for testing this program.""" start="00:05:11.962" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Images work.""" start="00:05:16.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""We've got some nicely syntax-highlighted code blocks""" start="00:05:17.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""in a couple different languages,""" start="00:05:21.837" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and not really that much going on there.""" start="00:05:25.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""All right, let's come back to the documentation.""" start="00:05:29.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I pretty well covered this, I think.""" start="00:05:33.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But you'll need a relatively recent version of Emacs.""" start="00:05:36.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I haven't taken any pains to make this backward compatible.""" start="00:05:39.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""To be fair, I haven't tested it extensively.""" start="00:05:43.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""It may well work on Emacs 26 or older versions.""" start="00:05:46.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm personally running 27.1 and 28,""" start="00:05:50.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""as well as recent builds of 29.""" start="00:05:55.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""There's some quick start instructions here,""" start="00:05:57.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""which I'm going to take as read.""" start="00:06:02.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""You probably saw the key element of this,""" start="00:06:03.900" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""which involves starting the program.""" start="00:06:08.601" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""You do-- I will call out Yale.""" start="00:06:11.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""If you're trying to play with this yourself,""" start="00:06:13.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""don't forget to run the npm install command.""" start="00:06:15.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""That'll bring in express.js,""" start="00:06:20.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""which the JavaScript we're about to look at is built on.""" start="00:06:20.087" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""So let's just take a look at the usage patterns real quick.""" start="00:06:24.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""To use this, we're simply giving the document name""" start="00:06:33.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""without the .org extension in whatever file path--""" start="00:06:35.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""or I'm sorry, whatever we've configured the server""" start="00:06:42.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to run on, in this case, port 3000.""" start="00:06:46.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I also want to call attention to the fact""" start="00:06:50.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that nothing in this program protects you""" start="00:06:52.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""from damaging yourself.""" start="00:06:55.880" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""This isn't meant as a production capability.""" start="00:06:57.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""This is something that's used to publish""" start="00:07:00.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""your own note files""" start="00:07:00.587" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and roll them out to yourself.""" start="00:07:04.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""That's something I'll definitely look at adding,""" start="00:07:06.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""but I want people to be careful of it""" start="00:07:08.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""while this is in an alpha state.""" start="00:07:12.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So the default response is HTML, and we saw that here.""" start="00:07:14.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But we also can modify the response format.""" start="00:07:22.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""We're currently supporting HTML, Markdown, and PDF.""" start="00:07:26.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And that's really enough to select a different format.""" start="00:07:29.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""That's really nothing more than adding type. Okay.""" start="00:07:34.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Not sure what's going on there.""" start="00:07:48.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Okay, well, there goes my demo.""" start="00:07:50.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Shows me for doing my talk live.""" start="00:07:57.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But this, fortunately, this error message""" start="00:08:03.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""is a nice segue to the part of the talk""" start="00:08:06.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that I'd really like to focus on,""" start="00:08:08.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""hopefully bringing me back to that thesis.""" start="00:08:10.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""So as we start to look at code, what we're looking for""" start="00:08:13.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""is really this Emacs Lisp that's getting generated here.""" start="00:08:17.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And you'll notice that's the stuff""" start="00:08:21.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I thought was important to produce as diagnostics""" start="00:08:24.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""for the programs running as well.""" start="00:08:27.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So, spoiler, this Elisp is dynamically""" start="00:08:29.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""generated by the program.""" start="00:08:34.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And that's really the core of the way""" start="00:08:35.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""orgvm or my orgvm works.""" start="00:08:38.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So this should look pretty similar to the view of the code""" start="00:08:42.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""we had a moment ago.""" start="00:08:47.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""You can see I've got some bases.""" start="00:08:48.880" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""This is all hard-coded into the program,""" start="00:08:51.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""nothing fancy going on here.""" start="00:08:53.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""The debug is simply controlling that diagnostic output""" start="00:08:56.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that we looked at.""" start="00:09:00.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""There's some other, hopefully fairly self-explanatory""" start="00:09:01.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""programs or properties, where to find Emacs and so forth.""" start="00:09:04.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""And then finally, we come in to the meat of it,""" start="00:09:09.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""the variables that are used to control what Elisp""" start="00:09:16.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""we can generate dynamically.""" start="00:09:16.337" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So here, we're controlling the extension""" start="00:09:24.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that it should look for Org files.""" start="00:09:27.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Hopefully not too many people out there""" start="00:09:29.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""with a weird extension for the Org files,""" start="00:09:31.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""but this should support that.""" start="00:09:34.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm afraid that is something I've been known to do.""" start="00:09:37.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Then we define a list of additional export types.""" start="00:09:40.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Here's one that ought to work.""" start="00:09:49.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Let's take a look at type=org.""" start="00:09:50.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And, aha, it's giving us the file.""" start="00:09:54.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So I'm not going to open that up,""" start="00:09:59.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""but now we can see that that's definitely working,""" start="00:10:00.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""for certain versions of working.""" start="00:10:02.421" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So this list of type parameters is""" start="00:10:09.200" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""controlling the supported types.""" start="00:10:14.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Hopefully it should be fairly easy to add in different ones.""" start="00:10:15.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""The fancy footwork here is just a list""" start="00:10:18.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""of the types that we're going to be using.""" start="00:10:21.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""The fancy footwork here involves, first of all,""" start="00:10:23.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""there's the extension and the MIME type.""" start="00:10:29.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""That's, as you might guess, used to control""" start="00:10:32.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""the response content type.""" start="00:10:32.254" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""We also have this replace variable.""" start="00:10:38.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""This prevents-- there's an optimization""" start="00:10:40.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to send an existing PDF or HTML file""" start="00:10:44.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""if that's already there,""" start="00:10:48.837" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""but only if the original source Org file""" start="00:10:50.464" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""hasn't been modified since.""" start="00:10:51.004" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""This `replace` effectively can turn that off.""" start="00:10:56.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""If I remove the `replace: true` attribute,""" start="00:10:59.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""then I'll be prevented from overwriting that.""" start="00:11:03.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""In other words, I'll always send a cached version.""" start="00:11:07.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""That might be helpful if, for example,""" start="00:11:10.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""you've got hand-tuned PDFs""" start="00:11:13.879" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and you don't want to accidentally overwrite them.""" start="00:11:15.066" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""All right, let's get into the code a little bit more.""" start="00:11:19.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm going to skip past the really good stuff""" start="00:11:23.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and jump into the boring parts""" start="00:11:28.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""so that we have them as context.""" start="00:11:28.296" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Here's the default path.""" start="00:11:34.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And it is going to send me the readme from the project--""" start="00:11:37.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""from the project repo if I don't specify a path.""" start="00:11:41.880" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And then we have a couple of different endpoints""" start="00:11:47.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that we support.""" start="00:11:51.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""We'll come back to this first one.""" start="00:11:52.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""For now, let's start with the more normal one,""" start="00:11:55.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""which is just giving us a file name.""" start="00:11:55.587" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So we can see we start by figuring out""" start="00:12:01.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""what the physical file name should be called.""" start="00:12:04.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And assuming that that exists--""" start="00:12:08.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""sorry, I've confused myself.""" start="00:12:15.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So this is the caching or the optimization""" start="00:12:17.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that I mentioned, sending the existing file.""" start="00:12:23.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""This file exists is where the optimization is""" start="00:12:25.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that regenerates the file if the source""" start="00:12:31.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""or document for the HTML generator has changed.""" start="00:12:38.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Again, this is a short talk, so I'm not""" start="00:12:45.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""going to go into all the nuances of this JavaScript code.""" start="00:12:46.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""It's pretty far from an Emacs-related thing.""" start="00:12:49.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So with that said, then, the rest of this program""" start="00:12:52.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""is really mostly just handling the different errors:""" start="00:12:56.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""&quot;I didn't understand that type.&quot;""" start="00:12:59.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""&quot;I don't know the document.&quot;""" start="00:13:01.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""&quot;I failed.&quot;""" start="00:13:02.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Otherwise, there's the caching.""" start="00:13:03.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""And here's really where things get interesting,""" start="00:13:06.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""where we've generated some Elisp,""" start="00:13:14.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and then we're calling Emacs with that Elisp.""" start="00:13:19.200" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""If everything works, we'll send the file.""" start="00:13:22.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""If it doesn't, we'll send the 500.""" start="00:13:24.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And we've already seen the 500, so we know that works.""" start="00:13:27.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, let's get to the interesting part.""" start="00:13:30.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Sorry, one more footnote.""" start="00:13:33.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""There is a capability built in that will""" start="00:13:37.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""allow us to execute an Org block.""" start="00:13:39.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Let's see if that's working in our local.""" start="00:13:41.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'll remind myself how to do it.""" start="00:13:44.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""It's run.""" start="00:13:47.200" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I think it's called test.""" start="00:13:49.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And that's returning a 500.""" start="00:13:53.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm suspecting that's running because I'm running""" start="00:13:56.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""in command instead of bash.""" start="00:13:58.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Oh, yeah, so the failure is happening""" start="00:13:59.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""after I generate the Elisp.""" start="00:14:06.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm pretty confident that is what the actual problem is.""" start="00:14:07.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""If we have time, I'll jump back over there""" start="00:14:10.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and relaunch it in mingw bash.""" start="00:14:12.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And we can see it actually work.""" start="00:14:19.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But this works pretty well for me on my work laptop.""" start="00:14:21.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I didn't have to make any changes to it.""" start="00:14:24.200" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So I have a fairly high amount of confidence,""" start="00:14:25.860" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""at least in trivial cases, this works pretty well.""" start="00:14:28.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""All right, so what I actually wanted to talk about today--""" start="00:14:32.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and I'm going to be kind of hand-waving around""" start="00:14:37.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""this ES5 class that I've got and kind of the way that works.""" start="00:14:41.731" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Hopefully, this will be pretty familiar to you""" start="00:14:46.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""if you are a JavaScript programmer.""" start="00:14:49.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""The interesting stuff comes when we want to build some Lisp.""" start="00:14:53.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Here, you can see that I really don't have""" start="00:15:01.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""a whole lot of code around formatting LISP.""" start="00:15:01.962" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""You can see that I've special-cased""" start="00:15:11.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""whether the arguments that were passed""" start="00:15:14.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""happen to be a function.""" start="00:15:19.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""If they are, I'm going to call that function.""" start="00:15:20.880" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And then the result will be formatted as Lisp.""" start="00:15:25.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So this would be a recursive call here.""" start="00:15:31.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Otherwise, I'm just going to return the arguments.""" start="00:15:35.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Sorry, otherwise, I will slap a pair of parentheses""" start="00:15:40.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""around the result of walking that list if I get...""" start="00:15:48.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""formatting each element of the list of arguments""" start="00:15:57.879" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that this `formatLisp` process calls""" start="00:15:57.880" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and separating them with spaces.""" start="00:16:02.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So in short form, this program walks through a list.""" start="00:16:04.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""If the list it receives is a function,""" start="00:16:10.880" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""it calls that function.""" start="00:16:14.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Once that's handled or otherwise,""" start="00:16:16.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""we simply walk the list, taking the arguments,""" start="00:16:19.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""concatenating them on strings, and finally,""" start="00:16:22.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""wrap the results in parentheses.""" start="00:16:26.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So what I didn't mention there but might be obvious""" start="00:16:28.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""is if I have a nested list, the inner list""" start="00:16:31.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""will be subjected to the same treatment.""" start="00:16:36.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So this is a recursive sort of algorithm.""" start="00:16:38.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""All right, so now when I go to export,""" start="00:16:43.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""actually, in the interest of time,""" start="00:16:51.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm going to avoid walking through that piece of code""" start="00:16:53.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and let's focus instead on the more interesting part""" start="00:16:55.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""of how that Lisp gets encoded.""" start="00:16:58.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So coming back to the PDF is a good example here,""" start="00:17:02.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""because it's got a special case.""" start="00:17:07.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""You can see I've specified this `exportFun`""" start="00:17:10.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""or export function.""" start="00:17:10.337" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""That's a property none of these other types have.""" start="00:17:15.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And you can see it contains some Elisp telling us""" start="00:17:22.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""how to call the export for it.""" start="00:17:27.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Let's go see how that's used.""" start="00:17:29.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""At the very end of what I just skipped over,""" start="00:17:32.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""the detailed &quot;how the Org export process works,&quot;""" start="00:17:35.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""you'll see that I am ending with a step""" start="00:17:40.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to call the export function.""" start="00:17:45.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Here, I look to see whether I have""" start="00:17:48.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""an export function property.""" start="00:17:48.004" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""If I do, I call that function.""" start="00:17:55.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And if I don't, I build this list with the default""" start="00:18:00.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""`org-export-to-file` function""" start="00:18:00.921" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""using the filename and an output filename.""" start="00:18:07.072" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So this, hopefully, is pretty familiar to anybody""" start="00:18:15.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that's manually messed around""" start="00:18:18.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""with calling `org-export-to-file`.""" start="00:18:18.504" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""If it isn't, you can pretty well trust me for it.""" start="00:18:23.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""There's nothing very special going on.""" start="00:18:25.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""This looks rather like...""" start="00:18:28.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Poor example there.""" start="00:18:30.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Let's go back to our markdown.""" start="00:18:37.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And there, we can see--""" start="00:18:46.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Leo]: I'm going to make a quick announcement.""" start="00:18:47.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Can you hear me?""" start="00:18:49.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Corwin]: Yes, go for it.""" start="00:18:50.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Leo]: OK, let me just show my face.""" start="00:18:52.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Oh, I'm not showing my face.""" start="00:18:54.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Damn it.""" start="00:18:55.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""OK, I'll make the announcement.""" start="00:18:55.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""You won't see my face quite yet.""" start="00:18:57.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""We are about to get started.""" start="00:18:58.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Well, we actually just got started on dev""" start="00:19:00.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""with the talk by RMS.""" start="00:19:02.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So if you want to hop over to watch the talk by RMS,""" start="00:19:06.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""feel free to do so.""" start="00:19:08.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Otherwise, we will be continuing on Gen with Corwin""" start="00:19:09.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to finish his talk and have a Q&A.""" start="00:19:12.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Corwin, you can feel free to go now.""" start="00:19:12.254" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Corwin]: Okay, bye, everybody.""" start="00:19:16.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And for those sticking around,""" start="00:19:18.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm just going to keep pressing on with this.""" start="00:19:22.796" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""In fact, I'm going to dive back into the part""" start="00:19:25.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that I skipped here, which is the rest of how""" start="00:19:30.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""this export functionality works.""" start="00:19:35.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So just to make sure the dot is tied together,""" start="00:19:37.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""the core of how this program works""" start="00:19:41.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""is generating some Elisp and then passing it""" start="00:19:44.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to Emacs in batch mode.""" start="00:19:49.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So if that wasn't perfectly clear,""" start="00:19:51.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that's really what's going on with this program.""" start="00:19:53.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""The rest of the implementation is just""" start="00:19:57.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""a way to do that or certain features that""" start="00:19:59.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""are supported in that generated Elisp, if you will.""" start="00:20:01.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So this is, you could say, the minimum implementation""" start="00:20:08.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I could come up with to create a web server""" start="00:20:11.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""for my local Org documents.""" start="00:20:11.754" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And I will also interrupt myself to just pull up""" start="00:20:17.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""the Etherpad real quick.""" start="00:20:24.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Actually, if somebody is listening""" start="00:20:28.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and can share a link to that, I closed my browser window""" start="00:20:29.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""with my links in it.""" start="00:20:34.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But sure, I'm happy to take questions at any point, Leo,""" start="00:20:36.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""if there are any questions for me.""" start="00:20:44.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Are you hanging out with me,""" start="00:20:48.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""instead of watching RMS? You can go.""" start="00:20:49.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm teasing.""" start="00:20:53.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Leo]: No, I mean, we know that some people can""" start="00:20:54.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""have both streams open.""" start="00:20:58.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""It's fine.""" start="00:21:00.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And right now, it's not the Q&A with RMS.""" start="00:21:01.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""It's just the presentation.""" start="00:21:03.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So feel free to hang out a little longer""" start="00:21:04.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""if you just want the live stuff.""" start="00:21:07.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Don't worry about it.""" start="00:21:09.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""You're fine.""" start="00:21:09.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Corwin]: Yeah, and forgive me, everybody,""" start="00:21:10.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""if you were hoping for a quick, succinct talk.""" start="00:21:13.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I happen to know I was going to be opposite RMS,""" start="00:21:16.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""so I awarded myself the liberty of rambling.""" start="00:21:18.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So if you do have a question, something that I alluded to""" start="00:21:23.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and haven't come back to yet, you should, by all means,""" start="00:21:26.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""prompt me.""" start="00:21:29.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Leo]: Corwin, I might do--""" start="00:21:30.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm just giving you a little heads up.""" start="00:21:33.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I might need to go help at some point of dev.""" start="00:21:35.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So if I need to do so, I will let you know right now""" start="00:21:38.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""inside the BBB room,""" start="00:21:43.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and you'll be on your own to manage the chat.""" start="00:21:44.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And you can just talk backstage to us""" start="00:21:46.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to manage what we do with the stream, OK?""" start="00:21:47.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Corwin]: Yep, that should be no problem at all.""" start="00:21:50.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I've got my pad up now.""" start="00:21:52.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Thank you, ??.""" start="00:21:53.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And I'm sorry about butchering your name there.""" start="00:21:55.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And yep, I've got my chat open.""" start="00:21:58.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And I think I'm pretty well set to self-manage.""" start="00:22:03.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Oh, I don't have a camera on.""" start="00:22:06.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So you can't see me giving you the thumbs up.""" start="00:22:07.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Leo]: Okay, good.""" start="00:22:09.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""All right, so let's just walk through,""" start="00:22:09.860" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""because it's sort of an interesting code.""" start="00:22:16.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Let's just take a look real quick""" start="00:22:18.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""at how we generated our Elisp here,""" start="00:22:20.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""because it is--""" start="00:22:24.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""there we go.""" start="00:22:26.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""It is a little bit interesting.""" start="00:22:27.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So here is the method.""" start="00:22:29.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So I didn't get into detail on this.""" start="00:22:32.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But there's an ES5 class that represents""" start="00:22:34.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""an Org mode document.""" start="00:22:34.087" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""It has the static debug property that,""" start="00:22:38.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""as you might imagine,""" start="00:22:38.921" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""can be overridden by that debug setting""" start="00:22:42.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""we looked at in the defaults.""" start="00:22:45.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""We also have a static variable that--""" start="00:22:48.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""a static property that does nothing more than getting""" start="00:22:51.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""the path to Emacs out of those defaults.""" start="00:22:57.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Similarly, we have a class method""" start="00:23:00.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to spawn out an Emacs, as I mentioned, in batch mode,""" start="00:23:02.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""eval-ing some arbitrary Lisp that's passed in.""" start="00:23:09.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, so the type--""" start="00:23:12.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""this is where things start to get interesting.""" start="00:23:20.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So this is an implementation detail,""" start="00:23:23.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""but-- that it's written as a static method.""" start="00:23:26.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But essentially, what's going on here""" start="00:23:30.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""is looking up from that type list""" start="00:23:32.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to try to find a type that's passed in,""" start="00:23:34.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and that's returning one of these blocks.""" start="00:23:37.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Let's say I requested HTML, which would be the default.""" start="00:23:41.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Then I'm going to get this set of properties back.""" start="00:23:44.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right.""" start="00:23:50.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Essentially, this program generates a program""" start="00:23:51.260" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""or a little block of executable elisp.""" start="00:24:04.200" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""However, in some cases, where if the `load-path` has""" start="00:24:10.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""been customized in that type block,""" start="00:24:15.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""or I think that's the only case I supported.""" start="00:24:20.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""There was another complexity I removed.""" start="00:24:25.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So in that case, then I can simply""" start="00:24:28.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""replace that program with a let.""" start="00:24:32.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Either way, I'm going to have everything I generate""" start="00:24:33.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""be encapsulated in a single block.""" start="00:24:41.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""The-- then I'm calling that formatLisp process""" start="00:24:45.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that we talked about, appending to that--""" start="00:24:49.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""or inserting into, you could say, the outer scope.""" start="00:24:52.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And we start by finding the file.""" start="00:25:01.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""We then load any libraries that might be needed.""" start="00:25:05.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""In some cases, the type might not""" start="00:25:11.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""have any external libraries.""" start="00:25:13.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So we just-- so that's a no-op.""" start="00:25:15.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And then finally, we're going to execute""" start="00:25:18.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that logic I mentioned before about selecting""" start="00:25:24.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""either the default org-export-to-file,""" start="00:25:27.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""or else whatever Elisp we've staged for exporting""" start="00:25:30.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that particular file type.""" start="00:25:36.200" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And again, in the case of PDF, there's a special function""" start="00:25:38.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that's used to trigger that export.""" start="00:25:43.113" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Or you may be aware that that's a little more complicated.""" start="00:25:46.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""There's intermediate forms there.""" start="00:25:49.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right.""" start="00:25:50.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So just reminding myself if there's anything else""" start="00:25:56.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I have to cover on background.""" start="00:26:01.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And I think that pretty well covers the basics.""" start="00:26:03.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""All right, let's look at that source block execute.""" start="00:26:07.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""This is the other use of the format list function.""" start="00:26:09.880" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So here, rather than looking at the type""" start="00:26:14.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and passing that through our Org export method,""" start="00:26:16.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and then that type is used to get the list""" start="00:26:24.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that we want to create.""" start="00:26:29.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""In the case of source block execute,""" start="00:26:30.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""we're kind of rolling it a lot more by hand.""" start="00:26:37.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So this gives us a good chance to sort of unwind""" start="00:26:40.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""how that list looks when it's staged as JavaScript data.""" start="00:26:43.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So here again, I wrap everything in a `progn`.""" start="00:26:49.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I start by preventing an interactive prompt""" start="00:26:52.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""for the Babel execution.""" start="00:26:58.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And then we load languages.""" start="00:27:01.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""This relates to another piece of our configuration""" start="00:27:04.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""where we've specified a set of languages""" start="00:27:12.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that it's OK to execute.""" start="00:27:17.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So if that type isn't in this list,""" start="00:27:19.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""then we won't be able to execute it in line""" start="00:27:24.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""through our trivial little web server.""" start="00:27:28.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right.""" start="00:27:32.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""With that done, then, loading the selected language,""" start="00:27:33.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""we then once again open the file.""" start="00:27:40.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And we're-- whoops.""" start="00:27:43.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Let-bind a return value, which is""" start="00:27:46.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""calculated by using Org source block execute [`org-sbe`]""" start="00:27:51.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""on the name of the block that's given.""" start="00:27:55.167" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And then we use a temp buffer to write that out""" start="00:27:58.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to a temporary file.""" start="00:28:05.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""This is actually a little clumsy,""" start="00:28:06.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""but I haven't put the effort in to have this written out""" start="00:28:08.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to the standard output cleanly instead of using a temp file.""" start="00:28:12.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So under-- this is another example of where it may not""" start="00:28:17.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""be production-- well, it definitely""" start="00:28:20.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""is not production-worthy code in that under heavy load,""" start="00:28:22.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""this would certainly break with collisions""" start="00:28:27.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""on the Babel file,""" start="00:28:30.167" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""the name of the Babel file.""" start="00:28:32.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""In any case, once we've staged up our Elisp, which is--""" start="00:28:34.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""this is basically variable interpolation,""" start="00:28:37.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""then we just call Emacs on that.""" start="00:28:42.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And if we look down to where that's called,""" start="00:28:47.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""you can see that the Org Babel filename calculated here.""" start="00:28:49.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Leo]: Is there a problem?""" start="00:29:12.795" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Corwin]: No, I'm fine.""" start="00:29:15.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm just lost in my code.""" start="00:29:15.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Leo]: OK, cool.""" start="00:29:18.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Uh-oh means, oh, I need to intervene.""" start="00:29:19.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""What is going on?""" start="00:29:21.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Carry on, please.""" start="00:29:22.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Corwin]: No, I'm fine, Leo.""" start="00:29:23.200" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Thank you.""" start="00:29:24.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, so then--""" start="00:29:25.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""so you can see we get--""" start="00:29:27.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""we send the Babel file here,""" start="00:29:28.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""which is calculated manually.""" start="00:29:35.538" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""A bit sloppy there, since I have essentially the same--""" start="00:29:41.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I have two different places where""" start="00:29:45.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm calculating the Org doc file in two different ways.""" start="00:29:47.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Have I encouraged you to write your own yet?""" start="00:29:52.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Or send patches.""" start="00:29:54.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, so that's pretty much the nuts and bolts""" start="00:29:56.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""of this program.""" start="00:30:01.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Let's go back to just seeing if we can't make it run.""" start="00:30:02.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right.""" start="00:30:22.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, well, I apologize for not""" start="00:30:22.620" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""having taken the time to stage my demo this morning.""" start="00:30:45.880" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm going to try to make it better for you.""" start="00:30:49.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But apparently, it's going to be non-trivial""" start="00:30:52.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to make the program work.""" start="00:30:59.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Let's just-- before I completely give up,""" start="00:31:04.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""let's go ahead and try our Babel execute.""" start="00:31:07.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And that, too, is failing.""" start="00:31:13.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So there's something unhappy in my local world.""" start="00:31:14.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""There it goes.""" start="00:31:18.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But in any case, let's go ahead and just take a look at""" start="00:31:19.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that.""" start="00:31:26.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Let's see.""" start="00:31:28.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Control Enter.""" start="00:31:30.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Let's take a look at that generated .el""" start="00:31:36.628" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and compare it to-- whoa--""" start="00:31:40.200" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and compare it to--""" start="00:31:42.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm just going to format this manually,""" start="00:31:44.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""because I've forgotten my key bindings to auto-format it.""" start="00:31:52.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""There we go.""" start="00:31:56.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right.""" start="00:32:02.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So now we can see, as promised, there's really""" start="00:32:07.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""nothing going on here other than the interpolation""" start="00:32:13.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""of the variables in.""" start="00:32:16.200" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""We're inserting-- we're using an insert and write file""" start="00:32:18.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""method, which is, again, rather sloppy,""" start="00:32:24.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to generate the text file.""" start="00:32:27.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right.""" start="00:32:32.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Let's come back to our documentation""" start="00:32:32.880" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and see if we can put a bow on the project.""" start="00:32:34.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""So I hope I've convinced you that this was actually""" start="00:32:39.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""rather easy to do.""" start="00:32:43.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""The entirety of my index.js file is 262 lines,""" start="00:32:45.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and that includes a good 40 of whitespace and configuration.""" start="00:32:52.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""It has only one dependency, the Express,""" start="00:33:03.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""which really builds the web server.""" start="00:33:06.506" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Any language you'd rather implement this in""" start="00:33:08.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""will have a similar capability for building""" start="00:33:11.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""some type of trivial web server.""" start="00:33:14.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And I think you may find--""" start="00:33:16.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I certainly found that a large portion of the code base""" start="00:33:18.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""is really making the errors meaningful,""" start="00:33:22.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""in that, in some cases, sending an appropriate HTTP status""" start="00:33:28.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""based on what happened.""" start="00:33:32.420" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""In other cases-- let's see if""" start="00:33:34.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I've got an explicit `throw` left in here--""" start="00:33:38.003" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""in other cases, just trapping different types""" start="00:33:42.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""of failure conditions.""" start="00:33:45.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm going to look at my pad, and I do see a question here.""" start="00:33:47.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So let me jump in here.""" start="00:33:54.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""[Leo]: Corwin, just to make sure, are you switching to Q&A?""" start="00:33:58.880" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Are you finished with your presentation?""" start="00:34:00.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Corwin]: Well, as I said, I'm happy to take Q&A throughout.""" start="00:34:02.380" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But yes, let's say yes to that.""" start="00:34:05.260" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Leo]: Okay, so Corwin, what I'm going to need to do now--""" start="00:34:08.420" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""you are in charge of the room.""" start="00:34:10.900" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""We are going to open up the room so""" start="00:34:12.140" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that if people have questions watching right now on Gen,""" start="00:34:14.060" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""feel free to come in.""" start="00:34:17.220" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And there was something else I needed to say.""" start="00:34:18.700" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Yes, Corwin, if there's any problem,""" start="00:34:22.780" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""whisper to us on Mumble.""" start="00:34:24.620" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So you might want to unmute Mumble""" start="00:34:25.700" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and be able to listen to us over there.""" start="00:34:27.500" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Corwin]: I can't do that, Leo.""" start="00:34:29.620" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""If I unmute, Mumble is going to bleed through.""" start="00:34:32.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Leo]: Okay, sure.""" start="00:34:36.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Well, if you have any problem,""" start="00:34:36.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""type in #emacsconf-org channel,""" start="00:34:39.417" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and we'll be with you, OK?""" start="00:34:41.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Corwin]: Or I'll PM somebody.""" start="00:34:42.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But I don't anticipate having any problems.""" start="00:34:43.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'll put something in -org when I run out of steam here.""" start="00:34:45.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""How's that?""" start="00:34:49.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Leo]: Amazing, cool.""" start="00:34:50.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So I will have to leave the room, though.""" start="00:34:51.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm leaving the recording going so that we have your Q&A.""" start="00:34:53.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And whenever you're available--""" start="00:34:56.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Corwin]: I'll shut off the recording when I close the room.""" start="00:34:58.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Leo]: Okay, great.""" start="00:35:02.180" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Good luck, Corwin.""" start="00:35:02.980" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Corwin]: Thank you.""" start="00:35:04.460" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, and if you're still with me, well, thanks.""" start="00:35:06.500" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I appreciate that.""" start="00:35:09.780" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I did offer to be opposite RMS.""" start="00:35:13.620" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And I'm in no way offended if people do want to jump over,""" start="00:35:16.740" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""especially as that starts to shift over to Q&A.""" start="00:35:20.060" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm taking Leo's leaving as a pretty good indication""" start="00:35:23.540" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that that's happening now-ish.""" start="00:35:26.980" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So I totally understand""" start="00:35:28.780" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""if folks are more excited to do that.""" start="00:35:31.386" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Meanwhile, let me just jump over to the question""" start="00:35:35.020" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that I received.""" start="00:35:37.940" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'll show the pad here so that I save myself""" start="00:35:38.660" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""reading the question out.""" start="00:35:46.460" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But I'll paraphrase it.""" start="00:35:47.860" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""Why am I not running the web server in Emacs?""" start="00:35:48.940" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""That would be a great way to do it.""" start="00:35:52.660" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I chose to build it in Node.js""" start="00:35:54.380" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""because that was trivially easy for me.""" start="00:35:56.341" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""And then finally, am I using org-info-js?""" start="00:36:22.140" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""No, I learned about this essentially at this conference.""" start="00:36:24.780" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So that's something I'll be learning more about.""" start="00:36:27.540" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And it could well influence this project.""" start="00:36:30.660" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, and thanks for the questions.""" start="00:36:34.900" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, I'm going to slow my roll just a little bit here""" start="00:36:59.020" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""because I think I kind of have all the time in the world.""" start="00:37:02.820" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I will be wrapping up within about 15 or 20 minutes""" start="00:37:06.980" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""at the latest just to avoid stressing out""" start="00:37:11.540" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""my fellow organizers, especially Leo and Sacha""" start="00:37:15.620" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that have the bulk of the heavy lifting this year,""" start="00:37:18.828" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and Amin, and really, thanks all to everybody.""" start="00:37:22.260" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""God, the nicest part of doing my own talk""" start="00:37:26.820" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""is that I get to say that.""" start="00:37:29.540" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""It's just so much fun to contribute to EmacsConf.""" start="00:37:31.980" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""And if you're at all interested, there's""" start="00:37:35.460" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""plenty of completely backstage, behind the curtain role.""" start="00:37:38.740" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Behind the curtain roles doesn't mean""" start="00:37:43.100" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""you have to be somebody that likes""" start="00:37:45.340" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""talking or being on webcam.""" start="00:37:47.866" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Sorry that my camera isn't working this year.""" start="00:37:50.060" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I spent quite a while fussing with that""" start="00:37:52.300" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and lost all my time to get my prerec working.""" start="00:37:53.980" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, so trying to think where I can take us""" start="00:37:56.740" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""without my demo working.""" start="00:38:10.140" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I was really hoping to show the Org Babel piece.""" start="00:38:11.540" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""That's really fun.""" start="00:38:14.540" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""So let me just mention briefly how I'm using this at work.""" start="00:38:15.580" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So at work, I'll have some type of Org document.""" start="00:38:20.420" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And usually, it's a project.""" start="00:38:25.980" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So the title of the document is My Project.""" start="00:38:27.700" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And then I'll have a requirements section.""" start="00:38:32.900" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And I'll have a meeting notes section.""" start="00:38:37.820" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""That's probably the key thing.""" start="00:38:43.540" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And then as the project goes on, I'll start having--""" start="00:38:44.980" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm a solutions architect.""" start="00:38:49.540" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So my job is formalizing design in large part.""" start="00:38:50.740" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So then I'll have a design documents section.""" start="00:38:55.420" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And this is where I'll be doing a lot of my work.""" start="00:39:01.740" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So I'll start out saying--""" start="00:39:05.020" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And maybe Bob is a subject matter expert""" start="00:39:26.620" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""whose buy-in I need to have on how we're going""" start="00:39:29.340" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to do the high-level design.""" start="00:39:32.460" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Maybe a lead engineer or a dev manager""" start="00:39:34.820" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""or something like that.""" start="00:39:37.297" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, as my work goes on,""" start="00:39:39.460" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""then this will start getting into more detail.""" start="00:39:42.654" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And things of this nature.""" start="00:40:16.620" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""As things get further and further,""" start="00:40:18.660" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'll actually have documentation""" start="00:40:20.180" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that I'm adding in here.""" start="00:40:21.740" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Oh, I see.""" start="00:40:22.820" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""It's a big mess.""" start="00:40:28.900" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, well, we'll just reuse this.""" start="00:40:29.740" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So I can insert those all in line.""" start="00:40:32.140" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And now for the fun part,""" start="00:40:40.380" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""let's see if the most trivial case""" start="00:40:42.158" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""is working here.""" start="00:40:44.460" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""No.""" start="00:40:49.940" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, completely broken.""" start="00:40:51.180" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Let me drag.""" start="00:40:52.900" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, well, apologies again for the poor quality""" start="00:40:57.260" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""of my demo today.""" start="00:41:05.180" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And let me just look real quick at my Etherpad once more.""" start="00:41:06.260" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And I'll glance at BBB to see if there's anybody""" start="00:41:13.900" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""jumping in with questions.""" start="00:41:16.820" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And then I'll go back to IRC and look for questions there.""" start="00:41:18.140" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""OK, and I don't see any additional questions on the pad.""" start="00:41:23.740" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm just going to scan IRC real quick.""" start="00:41:33.180" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I suspect that the TreeSitter comment isn't for me.""" start="00:41:35.780" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, and I'm not seeing a lot of questions there.""" start="00:41:44.900" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So I'm just going to vamp for just a minute or two.""" start="00:41:56.620" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""As I mentioned, I'm a conference volunteer.""" start="00:42:04.340" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""This is my third year volunteering""" start="00:42:07.980" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""with the conference.""" start="00:42:09.700" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And probably if you take one thing away from my talk,""" start="00:42:11.940" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""it should be I really like volunteering""" start="00:42:15.140" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""for the conference.""" start="00:42:17.740" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""It's fun.""" start="00:42:18.500" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""It makes me feel sort of close to the pulse.""" start="00:42:19.900" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And it gives me a chance to just interact with people""" start="00:42:23.500" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that have very different perspectives on Emacs,""" start="00:42:27.297" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""which is something that I really value a lot.""" start="00:42:30.107" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Emacs, like anything else sort of in the internet world,""" start="00:42:32.740" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""has a real echo chamber factor.""" start="00:42:40.220" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""If you do or don't like use-package,""" start="00:42:42.940" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""you probably interact with a lot of people""" start="00:42:46.505" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that feel the same way about that.""" start="00:42:49.136" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And so I really recommend volunteering for EmacsConf""" start="00:42:53.500" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""as a way to sort of mix it up and get""" start="00:42:57.420" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to know people that may not use Emacs""" start="00:43:01.340" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""the same way that you do.""" start="00:43:03.859" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""Or perhaps more on topic, though,""" start="00:43:08.380" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""the log line for this talk is it's really quite easy""" start="00:43:10.420" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to build a program that uses Emacs in a pipeline capability.""" start="00:43:14.300" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I think there's a ton of opportunity in this space.""" start="00:43:20.980" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""This particular example is just a trivial web server""" start="00:43:23.780" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""written using Node.js.""" start="00:43:27.700" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But as was pointed out, we could have used elnode""" start="00:43:30.780" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""as a web server""" start="00:43:31.546" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and done the entire thing within Emacs Lisp.""" start="00:43:40.060" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Or really, almost any technology""" start="00:43:44.060" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""would get us this capability.""" start="00:43:48.766" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""From an implementation standpoint,""" start="00:43:52.900" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I had a lot of fun building""" start="00:43:54.660" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""this trivial little Elisp parser,""" start="00:43:56.848" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and I'm rather pleased with the fact""" start="00:43:59.580" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that the entirety of that--""" start="00:44:03.220" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""the entire algorithm for turning JavaScript or JSON data,""" start="00:44:07.340" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""we could say, into Elisp is really a one-liner,""" start="00:44:14.180" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""albeit a nasty one-liner. That was pretty cool""" start="00:44:20.420" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to discover how simple that was.""" start="00:44:25.820" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So in my mind, that opens up a lot of possibility.""" start="00:44:28.180" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""If it's this easy in JavaScript,""" start="00:44:31.220" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I wouldn't expect it to be hard,""" start="00:44:32.890" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""any more difficult in your favorite language.""" start="00:44:34.709" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Glance one more time to see if there""" start="00:44:36.860" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""happen to be any other questions.""" start="00:44:41.140" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And not seeing any, I'm going to go ahead and start""" start="00:44:42.940" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""wrapping up my chat now.""" start="00:44:47.300" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""It will take me a couple of minutes to do that.""" start="00:44:49.500" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So if you do have any other questions that you""" start="00:44:51.620" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""want to drop into the pad or any comments,""" start="00:44:54.580" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""you're more than welcome to hit me with those""" start="00:44:56.460" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""as I coordinate closing this chat, this talk,""" start="00:44:59.740" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""with the organizer team.""" start="00:45:03.820" video="mainVideo-orgvm" id="subtitle"]]
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20orgvm%3A%20orgvm%3A%20a%20simple%20HTTP%20server%20for%20org)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/orgvm-before.md b/2022/info/orgvm-before.md
new file mode 100644
index 00000000..46c4c612
--- /dev/null
+++ b/2022/info/orgvm-before.md
@@ -0,0 +1,46 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sun 2022-12-04. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="orgvm">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(126,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect stroke-width="3" x="203" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect x="378" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(399,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 47-min talk followed by included in main video Q&A (<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-dev,emacsconf-gen">#emacsconf-gen</a>)
+Etherpad: <https://pad.emacsconf.org/2022-orgvm>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: TO_INDEX_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-04T16:10:00Z" end="2022-12-04T16:20:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~11:10 AM - 11:20 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 4 2022, ~10:10 AM - 10:20 AM CST (US/Central)<br />Sunday, Dec 4 2022, ~9:10 AM - 9:20 AM MST (US/Mountain)<br />Sunday, Dec 4 2022, ~8:10 AM - 8:20 AM PST (US/Pacific)<br />Sunday, Dec 4 2022, ~4:10 PM - 4:20 PM UTC <br />Sunday, Dec 4 2022, ~5:10 PM - 5:20 PM CET (Europe/Paris)<br />Sunday, Dec 4 2022, ~6:10 PM - 6:20 PM EET (Europe/Athens)<br />Sunday, Dec 4 2022, ~9:40 PM - 9:50 PM IST (Asia/Kolkata)<br />Monday, Dec 5 2022, ~12:10 AM - 12:20 AM +08 (Asia/Singapore)<br />Monday, Dec 5 2022, ~1:10 AM - 1:20 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/gen/">Find out how to watch and participate</a></div>
+
+
+
+<div class="vid"><video controls preload="none" id="orgvm-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="orgvm-mainVideo" data="""
+00:36.000 Introduction
+01:31.080 What is orgvm?
+02:01.880 Nodejs
+02:49.560 The itch I was trying to scratch
+03:38.320 Demo
+05:29.760 Needs a relatively recent version of Emacs
+06:24.920 Usage patterns
+08:13.520 Emacs Lisp
+09:09.160 Variables
+10:38.720 Replace
+11:19.120 Getting into the code some more
+13:06.480 Generating Elisp
+13:37.320 Org blocks
+14:32.400 Building some Lisp
+16:43.000 How Elisp gets encoded
+19:25.040 How the export works
+22:09.860 Walking through the code
+26:07.440 Executing the source block
+32:39.760 Conclusion
+33:58.880 Questions and answers
+35:48.940 Why am I not running the web server in Emacs?
+36:22.140 Is this using org-info-js?
+37:35.460 EmacsConf
+38:15.580 How I'm using this at work
+42:04.340 Volunteering for EmacsConf
+43:08.380 It's easy to build a program that uses Emacs in the pipeline
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--main.webm">Download --main.webm (159MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/9Ybxov8eVA763kRvHuM6zY">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/orgvm-nav.md b/2022/info/orgvm-nav.md
new file mode 100644
index 00000000..a6936218
--- /dev/null
+++ b/2022/info/orgvm-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/justl">justl: Driving recipes within Emacs</a>
+Next by track: <a href="/2022/talks/rms">What I'd like to see in Emacs</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/orgyear-after.md b/2022/info/orgyear-after.md
new file mode 100644
index 00000000..b1e57ef7
--- /dev/null
+++ b/2022/info/orgyear-after.md
@@ -0,0 +1,406 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="orgyear-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hello. If you're listening to this talk,""" start="00:00:00.000" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""then you should be at least a bit interested""" start="00:00:04.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""in Org mode, which is fantastic""" start="00:00:06.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""because there have been quite a few""" start="00:00:09.200" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""interesting developments over the past year or so.""" start="00:00:11.253" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""I'm Timothy, as you may have gathered from the last talk,""" start="00:00:14.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and I'm also quite involved with the Org project,""" start="00:00:19.400" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""so I'd like to go through a few of those developments""" start="00:00:21.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""over the past year or so and give you a few hints as well""" start="00:00:24.000" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""as to what potentially lies around the corner with Org mode.""" start="00:00:27.440" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""The starters, slightly on the more boring side""" start="00:00:32.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""but rather significant change to the project,""" start="00:00:35.880" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""occurred with the housekeeping or organisation.""" start="00:00:37.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""The codebase for the Org project has actually shifted over""" start="00:00:40.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""from a self-hosted Gogs instance over to Savannah,""" start="00:00:43.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which means it's now living right alongside""" start="00:00:46.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""the Emacs codebase.""" start="00:00:49.720" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""This has been accompanied by the creation""" start="00:00:51.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of a whole bunch of Org-related repos under""" start="00:00:53.280" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Bastien's (Org's maintainer) personal sourceHut account.""" start="00:00:58.220" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""We've got the source of the website, the Org wiki Worg,""" start="00:01:03.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""as well as Org contrib.""" start="00:01:06.760" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""Another recent addition to this list of Org-related repos""" start="00:01:08.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""is the new Org mode tests--continuous integration.""" start="00:01:13.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Now, this is rather important, because while we do recommend""" start="00:01:17.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""that all contributors actually run make tests""" start="00:01:22.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""before submitting patches to the Org project,""" start="00:01:25.880" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""this doesn't always happen.""" start="00:01:29.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""It can also actually be a bit harder than you expect""" start="00:01:31.280" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to run the tests because there are a lot""" start="00:01:34.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of trans-dependencies you get with Org;""" start="00:01:35.720" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""for instance, with all of the various Babel libraries""" start="00:01:37.760" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which actually require other packages""" start="00:01:40.200" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""or programming language to be installed on the system.""" start="00:01:42.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Having a single self-contained test system""" start="00:01:46.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to actually make sure that Org can be regularly""" start="00:01:50.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and thoroughly tested should be a great help for actually""" start="00:01:53.320" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""ensuring the quality of the contributions.""" start="00:01:57.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""The funding structure for Org has also undergone a bit""" start="00:02:04.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of a shift. Historically, we've just directed everybody""" start="00:02:07.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""who's interested in financially supporting the Org project""" start="00:02:10.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to the maintainer Bastien's personal GitHub sponsors""" start="00:02:14.200" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and LibrePay accounts. Now, early this year,""" start="00:02:18.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Bastion has created the Librepay Org mode team account,""" start="00:02:22.400" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which means that you can actually now""" start="00:02:27.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""support the Org project as opposed to""" start="00:02:29.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""the person leading the Org project.""" start="00:02:33.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Currently, this just distributes donations between Bastien,""" start="00:02:34.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Ihor, and myself. However, the idea is that""" start="00:02:39.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""as the active contributors for the Org project""" start="00:02:42.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""come and go over time, the list of people on this team""" start="00:02:45.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""can be changed as seems sensible. The hope here is that""" start="00:02:50.840" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""it will simplify both how easy it is""" start="00:02:57.000" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to actually financially support the Org project""" start="00:03:00.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""as well as how easily people contributing""" start="00:03:02.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to the Org project can be supported.""" start="00:03:04.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""If you're interested in supporting the Org project,""" start="00:03:09.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""there's never been a better time than now""" start="00:03:13.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to have a look at this""" start="00:03:15.440" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and let anybody who might also might be interested know.""" start="00:03:16.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Hopefully, this leads to a healthier funding structure""" start="00:03:23.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""that will scale better into the long term""" start="00:03:25.280" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and thus better support the work that happens with Org.""" start="00:03:28.200" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""Now, the project itself has of course also seen quite a bit""" start="00:03:32.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of development over the past year.""" start="00:03:37.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""We've had about 800 comments from 80 contributors.""" start="00:03:38.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Within these comments, there's been a lot of polishing""" start="00:03:44.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""quality-of-life improvements,""" start="00:03:46.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and also quite a few new features.""" start="00:03:48.760" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Now, I haven't got nearly enough time""" start="00:03:50.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to go through this exhaustively,""" start="00:03:52.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""so we're just going to go through a quick highlight reel.""" start="00:03:54.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""There's a collection of export improvements""" start="00:03:58.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""from things which affect all export backends,""" start="00:04:00.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""like including remote content""" start="00:04:04.320" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and adding new things like DOI links""" start="00:04:07.320" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and support for encrypted Org files,""" start="00:04:09.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""as well as a whole lot of export-backend-specific changes.""" start="00:04:11.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""For example, quite a few backends--""" start="00:04:14.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""I've mentioned the LaTeX one here,""" start="00:04:17.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""but also others such as Texinfo--have now got""" start="00:04:18.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""rich support for various types of attributes and objects.""" start="00:04:23.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""The HTML backend has had a few things boosted up and well,""" start="00:04:26.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""if you want to see the full list,""" start="00:04:31.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""just take a look at the release notes.""" start="00:04:33.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""We've also seen a similar collection of improvements""" start="00:04:36.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""with the Babel backends. Once again, this is scattered--""" start="00:04:39.320" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""or well, it can be split into two sets of changes.""" start="00:04:43.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""There's some which affect all of Babel, essentially.""" start="00:04:46.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""For instance, the new syntax of parsing""" start="00:04:49.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""the raw content of code blocks, or the changes with Noweb.""" start="00:04:52.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""For example, :noweb-prefix is a new option that can be used.""" start="00:04:56.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""And then there's also a collection""" start="00:05:01.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of backend-specific changes. So ASCII graphics with PlantUML""" start="00:05:03.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""or enhanced return capabilities with the ob-python library.""" start="00:05:07.440" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""And then of course, as before, a whole collection""" start="00:05:12.280" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of more changes which you can find in the release notes.""" start="00:05:17.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Last but by no means least,""" start="00:05:19.840" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""there have been quite a few changes within the rest of Org.""" start="00:05:22.840" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""So this is, once again, far too many things to list,""" start="00:05:26.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""but it's things like improved refiling,""" start="00:05:30.840" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""capture templates, image preview sizing,""" start="00:05:33.760" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""clocktable settings, agenda tweaks,""" start="00:05:36.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and well, a whole lot more.""" start="00:05:38.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Yes, basically, the essence of what's here""" start="00:05:41.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""is a lot of little changes""" start="00:05:45.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which just address particular use cases in ways""" start="00:05:48.000" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""that I don't think anybody's going to be seeing""" start="00:05:50.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""the impact of all of them,""" start="00:05:55.053" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""but I think most people should at least""" start="00:05:55.787" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""find one or two things""" start="00:05:57.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which actually improve their own usage.""" start="00:06:00.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""Now these are the sort of assorted""" start="00:06:04.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""relatively minor improvements,""" start="00:06:06.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""but there are also some major ones.""" start="00:06:07.400" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""And one in particular, citations.""" start="00:06:09.960" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""So I think this has been, at this point,""" start="00:06:12.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""over a decade in the making,""" start="00:06:15.880" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""but Org finally has first-class support for citations.""" start="00:06:17.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""And I have to say, it is marvellous.""" start="00:06:21.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""You'd hope so, after the labour. I think it is.""" start="00:06:23.760" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""It can be said that it's actually worth the wait.""" start="00:06:27.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""I think out of the various options you've got now,""" start="00:06:30.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""(for example, the way that Pandoc""" start="00:06:31.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and Markdown otherwise[??] do it)""" start="00:06:34.280" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Org has a fantastically succinct and flexible""" start="00:06:35.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""syntax for citations, which scales really well for all sorts""" start="00:06:40.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of different use cases.""" start="00:06:45.960" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Additionally, on the backend side of things,""" start="00:06:47.200" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""we've now got a generalised way for handling citations""" start="00:06:51.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which has been quite helpful for the--I think""" start="00:06:55.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""I could say rather rapid development""" start="00:06:57.840" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of multiple citation backends for Org.""" start="00:07:00.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""And I think it's just fantastic, really, seeing""" start="00:07:03.280" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""how quickly Org has gone""" start="00:07:07.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""from having no support for citations""" start="00:07:09.840" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""at the start of this year""" start="00:07:12.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to what can be described as""" start="00:07:13.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""a wonderfully rich and flexible support""" start="00:07:17.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""with, well, multiple backends for citations.""" start="00:07:20.200" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""I think that's something that we can really be proud of.""" start="00:07:23.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""And it's been a fantastic contribution""" start="00:07:27.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""for everybody involved in this process.""" start="00:07:30.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""Okay, so we've had features.""" start="00:07:31.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""There have also been a whole lot of""" start="00:07:36.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""quality of life improvements.""" start="00:07:38.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Once again, many more than I can reasonably mention here.""" start="00:07:39.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""So I'm just going to flick it through""" start="00:07:43.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""a few of them. A few big ones though,""" start="00:07:46.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""Ihor is responsible for three lovely developments with Org,""" start="00:07:48.320" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""one of which is Org fold. So this is a generalisation""" start="00:07:52.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of the way that content is folded in Org.""" start="00:07:55.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""And I think quite a few of you will actually underestimate""" start="00:07:57.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""how much can be folded in Org.""" start="00:08:00.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""It's not just a matter of headlines.""" start="00:08:01.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""It's headlines, code blocks, lists, environments,""" start="00:08:03.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""all sorts of things can actually be folded in Org.""" start="00:08:07.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""And the introduction of Org fold is important""" start="00:08:10.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""for two reasons. One is that it has allowed for""" start="00:08:14.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""text-property-based folding,""" start="00:08:18.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which in Emacs versions less than 29""" start="00:08:21.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""has a huge difference in performance,""" start="00:08:24.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which is particularly apparent with larger files.""" start="00:08:27.720" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""The second significant thing about this is that""" start="00:08:29.960" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""it now actually provides a more general way""" start="00:08:32.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to actually describe changes to the folding structure.""" start="00:08:36.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""So before there was direct modification of""" start="00:08:39.880" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""messing with overlays scattered around the Org code base.""" start="00:08:42.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Now we have a much more well organised system""" start="00:08:45.960" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""where we use Org fold to say what is and isn't folded""" start="00:08:49.400" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and to manage the state of all of that,""" start="00:08:53.320" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which is, I think, just from a sort of design,""" start="00:08:54.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""sort of project design approach, a much better system.""" start="00:08:59.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""We've also got the Org element cache by Ihor.""" start="00:09:02.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""This is actually something which was discussed""" start="00:09:06.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""quite a while ago, but has somewhat stalled""" start="00:09:09.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""due to the difficulty of cache invalidation.""" start="00:09:12.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Ihor has sunk a tremendous amount of effort into this""" start="00:09:14.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and has improved it to the point""" start="00:09:17.280" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""where we've now actually been able to""" start="00:09:19.760" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""enable this by default. So what this basically does is""" start="00:09:21.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""it records lots of information""" start="00:09:25.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""about the structure of the Org document""" start="00:09:28.000" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and allows for, well, with the appropriate modifications""" start="00:09:30.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""that Ihor has also made throughout the Org element library""" start="00:09:34.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to use this information to speed up various operations""" start="00:09:37.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""based on the Org document syntax tree.""" start="00:09:41.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""And so this has been quite--""" start="00:09:44.880" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""the improvements have been scattered all over the place,""" start="00:09:48.280" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""but for a good example for libraries""" start="00:09:49.840" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""or anybody who's wanting to quickly map over Org elements""" start="00:09:52.720" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""is `org-element-cache-map', which now provides""" start="00:09:57.720" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""a much, much faster way to map over""" start="00:10:00.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""all of the Org elements in a document.""" start="00:10:04.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""This also ties into the third major feature from Ihor""" start="00:10:07.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which I'd like to mention, which is Org persist.""" start="00:10:10.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""So this provides a method of persisting values""" start="00:10:13.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""across Emacs sessions, basically saving them""" start="00:10:17.960" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to a file somewhere and loading them.""" start="00:10:20.280" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Now this works for Elisp values and it also works for files,""" start="00:10:21.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which we made use of with the improved capabilities""" start="00:10:25.720" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""for remote files and exports.""" start="00:10:29.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""This has also been used with the `org-element-cache' data.""" start="00:10:32.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""So now, if you've got a massive Org file""" start="00:10:35.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and you open it once, that data can be saved to""" start="00:10:37.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""with the Org element cache to Org persist,""" start="00:10:41.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and the next time you load this file""" start="00:10:44.320" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""in another Emacs session,""" start="00:10:46.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""we can just start with the cached data""" start="00:10:47.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""instead of having to construct everything from scratch,""" start="00:10:50.960" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which is quite nice. Once again, a change which""" start="00:10:53.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""much like the other ones,""" start="00:10:56.440" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""we will see more of an impact in larger files,""" start="00:10:57.720" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""but a very welcome one everywhere.""" start="00:11:00.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""Now with remote files, there's also been the beginnings""" start="00:11:02.720" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of a bit of an effort with Org""" start="00:11:06.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to improve the approach we have to safety.""" start="00:11:09.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""So in this case previously,""" start="00:11:13.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Org would unconditionally download""" start="00:11:15.000" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""all the remotes of files that's all referenced.""" start="00:11:17.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""And now, it's actually going to maintain a list of""" start="00:11:19.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""sort of safe resources and prompt you""" start="00:11:23.760" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""when it's surprised by something,""" start="00:11:25.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to work out whether it should""" start="00:11:26.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""just download this one resource,""" start="00:11:29.887" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""mark the whole domain as safe, and a few other options.""" start="00:11:31.840" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""We're also going to probably see""" start="00:11:35.280" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""a similar approach extend to, for instance,""" start="00:11:36.760" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""bits of Babel execution in the future.""" start="00:11:39.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""Okay bug fixes. It will be remiss of me not to mention that""" start="00:11:40.200" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""along with all of the features""" start="00:11:45.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and quality of life improvements,""" start="00:11:46.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""there has been a huge pile of bug fixes.""" start="00:11:49.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""I think the best way to actually get a look at this""" start="00:11:51.880" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""would be to look at the release notes""" start="00:11:57.320" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""or maybe even the actual commit log,""" start="00:11:59.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""but you could also just take my word and say that""" start="00:12:00.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""there have been a whole load of them""" start="00:12:04.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""over the past year. So just yes, the code base, I think,""" start="00:12:05.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""is just gradually getting into better and better shape.""" start="00:12:11.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""Asynchronous session evaluation is I think possibly""" start="00:12:15.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""the final quality-of-life improvement""" start="00:12:18.200" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""I want to mention. This came early in the year,""" start="00:12:19.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""just with ob-python, and it's been delayed""" start="00:12:22.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""because in order to actually make it work,""" start="00:12:24.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""they've required some fundamental changes to the way""" start="00:12:26.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""that ob-comint works.""" start="00:12:29.400" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Now that's been implemented,""" start="00:12:31.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""we've since seen support extended to ob-R,""" start="00:12:33.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and hopefully, we'll see more languages join this list""" start="00:12:36.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""in the not-too-distant future.""" start="00:12:38.720" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""Now I guess one bonus which I tacked on just for fun is""" start="00:12:42.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""it's now more convenient than ever""" start="00:12:45.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to actually specify the permissions for tangled files.""" start="00:12:47.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Previously you had to give a list expression""" start="00:12:52.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which should be evaluated.""" start="00:12:55.000" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Now you can give it directly in octal form""" start="00:12:55.840" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""instead of being a list expression""" start="00:12:58.320" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""that produces an integer representation""" start="00:12:59.720" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of the octal permissions.""" start="00:13:01.960" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Or you can use ls style: rwx and dashes.""" start="00:13:03.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Or even just chmod. I want to be able to execute this""" start="00:13:08.440" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""as a user, which will basically modify""" start="00:13:13.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""the default permission to add that capability.""" start="00:13:16.387" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""Alrighty. So that's the Org project itself,""" start="00:13:18.280" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""but there's also a whole ecosystem.""" start="00:13:22.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""So what have we got here?""" start="00:13:24.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Well a whole bunch of Zettelkasten""" start="00:13:27.440" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""or personal-knowledge-base-type projects.""" start="00:13:30.320" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""One of which is logseq, so that's an online open source""" start="00:13:32.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Zettelkasten which supports both Markdown""" start="00:13:36.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and also Org mode as a first-class format.""" start="00:13:39.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Then of course we have Org Roam, which provides""" start="00:13:41.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""a Zettelkasten built directly on top of Org within Emacs.""" start="00:13:45.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Both of these are seen considerably interesting""" start="00:13:48.880" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""over the past year.""" start="00:13:51.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""Moving on to visuals, minad has produced""" start="00:13:52.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""another lovely minad package in the form of org-modern""" start="00:13:56.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which just spruces up the visuals of all documents""" start="00:14:00.440" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and seems to have been quite well received recently""" start="00:14:04.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""since its release.""" start="00:14:09.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""Building on top of the citations from earlier,""" start="00:14:10.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Andras Simonyi has produced""" start="00:14:13.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""the wonderful citeproc-org library,""" start="00:14:14.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which, if you're not familiar,""" start="00:14:16.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""allows the capabilities of the citation style language""" start="00:14:20.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which has now become something""" start="00:14:25.000" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which is quite widely supported""" start="00:14:26.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to be used for Org citation exports.""" start="00:14:28.000" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""This means that you've got access to I think at this point""" start="00:14:31.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""is it thousands or tens of thousands""" start="00:14:33.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of different bibliography and citation formats""" start="00:14:35.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which is obviously a huge boon to org citations.""" start="00:14:39.880" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Lastly, just to be slightly critical,""" start="00:14:42.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""I'm actually going to mention the Neovim Org mode project,""" start="00:14:46.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""because I think this really shows the interest""" start="00:14:49.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""in Org as the format, beyond just Emacs.""" start="00:14:52.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""I think I haven't gone into it much here,""" start="00:14:55.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""but there's been quite a lot of development""" start="00:14:58.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""with external tools making use of the Org format.""" start="00:15:00.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Clearly, we've done quite a few things right,""" start="00:15:04.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and so I think it's interesting to see the interest""" start="00:15:07.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""that exists outside of Emacs,""" start="00:15:11.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""even without all the lovely tooling we've built,""" start="00:15:13.320" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""just out of appreciation of the formatting, its potential.""" start="00:15:15.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Speaking of the format, though,""" start="00:15:18.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""we've also seen three new parsers on the scene this year.""" start="00:15:21.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""We've got one in Julia, Haskell""" start="00:15:24.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and another one for Tree sitter.""" start="00:15:27.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""The last one, I think, is currently the least capable,""" start="00:15:28.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""but also potentially the most interesting""" start="00:15:31.000" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""in terms of what possibilities it allows for.""" start="00:15:32.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Okay. So that's a quick speed run through""" start="00:15:36.960" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""some of the developments over the past year.""" start="00:15:42.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""What's coming next? So there's been""" start="00:15:44.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""quite a lot of work done with the Org syntax document.""" start="00:15:47.960" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""In fact, I've completely written it,""" start="00:15:51.000" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and we've now taken it up to spec""" start="00:15:54.200" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to actually accurately describe the way""" start="00:15:57.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""that the Org format is, as of Org 9.6.""" start="00:15:59.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Now, I think this is quite an important document""" start="00:16:03.200" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""for the growth in parsing tools""" start="00:16:08.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to help actually ensure""" start="00:16:09.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""that the way that external tools process Org""" start="00:16:11.280" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""is actually in sync with the way that Org mode does.""" start="00:16:16.440" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""I think it's worth doing everything we can, really,""" start="00:16:20.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to avoid the sort of implementation drift""" start="00:16:22.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""that we've seen with Markdown.""" start="00:16:24.840" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""I don't want anything near that.""" start="00:16:27.720" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""This is also quite good for the Org format itself because,""" start="00:16:29.840" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""in the process of going through this sort of effort,""" start="00:16:32.487" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""it brings attention to irregularities in the syntax""" start="00:16:34.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which you might want to resolve, and as well as""" start="00:16:38.200" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""helping the robustness of org mode itself.""" start="00:16:41.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""So ultimately, this is to everybody's benefit, really.""" start="00:16:43.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""It's also my personal hope that this might actually""" start="00:16:46.280" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""get to the point where we consider submitting this""" start="00:16:51.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""as a text format to the Internet Engineering Task Force""" start="00:16:54.880" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""as a new text format. So that would be quite nice.""" start="00:16:59.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""The Org project itself has a layer on top""" start="00:17:06.320" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of the mailing list called Woof developed by Bastien,""" start="00:17:09.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and that's about to have another major release.""" start="00:17:13.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""So what this is going to do is improve the ease of which""" start="00:17:16.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""we can actually monitor what's going on""" start="00:17:21.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""with the mailing list. So this is when people have patches,""" start="00:17:23.320" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""bug reports, or other types of things""" start="00:17:27.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""raised on the mailing list.""" start="00:17:29.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""It's a nice way to collect the status of those""" start="00:17:30.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and put them all in one place.""" start="00:17:34.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""So improvements to this improve the ease of which""" start="00:17:35.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""the Org mode project can be managed,""" start="00:17:37.880" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which is always quite nice to see.""" start="00:17:40.400" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""There's also been--jumping back to the export""" start="00:17:41.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which is mentioned right at the start of this presentation--""" start="00:17:46.320" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""we've got the introduction of engraved faces""" start="00:17:48.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to LaTeX export. Now what's quite interesting about this""" start="00:17:51.840" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""is that it's actually used as Emacs' native font lock""" start="00:17:54.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and allows for processing that in a generalized way""" start="00:17:57.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to different output formats. So at the moment,""" start="00:18:01.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""this is just integrated with ox-latex,""" start="00:18:03.840" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""but it contains the functionality needed for HTML and ASCII,""" start="00:18:06.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and it could also be extended to other formats like ODT.""" start="00:18:11.200" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""So we could potentially have full syntax highlighting""" start="00:18:13.720" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""based on Emacs exported to, well,""" start="00:18:18.280" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""really all of the Org mode backends,""" start="00:18:20.960" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""except, I suppose, the plain text ones like Markdown.""" start="00:18:24.200" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""And I think from both the capabilities perspective--""" start="00:18:27.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""because I think, really, font lock in Emacs""" start="00:18:29.760" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""from Emacs major modes""" start="00:18:33.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""tends to blow basically everything else vaguely used""" start="00:18:34.200" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""out of the water, whether it be listings, minted""" start="00:18:37.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""or other efforts--and also from a consistency point of view,""" start="00:18:39.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""this could be quite a nice development.""" start="00:18:45.000" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Alrighty. Now this talk is &quot;This Year in Org,&quot;""" start="00:18:49.720" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and I think you all may have guessed""" start="00:18:51.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""this is very much tied into my work with This Month in Org""" start="00:18:52.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which started, I think, a bit over a year ago.""" start="00:18:57.760" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""And so, as you're all avid readers,""" start="00:19:00.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""I'm sure you've noticed""" start="00:19:04.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""that there haven't been as many posts as of late.""" start="00:19:05.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Now this isn't because my interest in This Month in Org""" start="00:19:08.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""has been diminishing. Simply, it's the consequence""" start="00:19:11.880" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of an evaporation of my free time.""" start="00:19:15.880" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""However, This Month in Org is still going to stick around.""" start="00:19:18.760" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""The only change really is that the title is going to be--""" start="00:19:22.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""probably continue to be""" start="00:19:26.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""a bit more aspirational than descriptive""" start="00:19:28.000" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""in the near future. We'll see how this goes.""" start="00:19:30.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Well, thanks for listening to this overview""" start="00:19:32.960" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of the state of Org at the moment,""" start="00:19:36.720" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and hopefully, I'll see you next year.""" start="00:19:38.600" video="mainVideo-orgyear" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20orgyear%3A%20This%20Year%20in%20Org)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/orgyear-before.md b/2022/info/orgyear-before.md
new file mode 100644
index 00000000..2c6ed2bc
--- /dev/null
+++ b/2022/info/orgyear-before.md
@@ -0,0 +1,29 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+<div class="vid"><video controls preload="none" id="orgyear-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-orgyear--this-year-in-org--timothy--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-orgyear--this-year-in-org--timothy--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-orgyear--this-year-in-org--timothy--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="orgyear-mainVideo" data="""
+00:00.000 Introduction
+00:32.080 Project housekeeping
+01:08.800 Continuous integration
+02:04.680 Funding contributors
+03:32.560 New features
+03:58.640 An assortment of export improvements
+04:36.520 A collection of babel improvements
+05:12.280 A multitude of general org-mode improvements
+06:04.160 Citations
+07:31.600 Quality of life improvements
+07:48.320 Org fold
+09:02.480 Org element cache
+10:07.360 Org persist
+11:02.720 More careful resource downloading
+11:40.200 Bug fixes
+12:15.800 Asynchronous session evaluation
+12:42.800 Nicer tangle mode syntax
+13:18.280 A flourishing ecosystem
+13:52.600 Org-modern
+14:10.120 citeproc-org
+15:44.040 Continuing work on the Org format
+17:06.320 Mailing list management
+17:41.920 Further engraving
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgyear--this-year-in-org--timothy--main.webm">Download --main.webm (28MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgyear--this-year-in-org--timothy--main.opus">Download --main.opus (13MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgyear--this-year-in-org--timothy--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgyear--this-year-in-org--timothy--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgyear--this-year-in-org--timothy--main.pdf">Download --main.pdf</a></li><li><a href="https://toobnix.org/w/qed3SGg4ZMo8fLuzwXoeNP">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/orgyear-nav.md b/2022/info/orgyear-nav.md
new file mode 100644
index 00000000..7419bb9f
--- /dev/null
+++ b/2022/info/orgyear-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/survey">Results of the 2022 Emacs Survey</a>
+Next by track: <a href="/2022/talks/rolodex">Build a Zettelkasten with the Hyperbole Rolodex</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/python-after.md b/2022/info/python-after.md
new file mode 100644
index 00000000..b388d9d2
--- /dev/null
+++ b/2022/info/python-after.md
@@ -0,0 +1,298 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="python-mainVideo-transcript"></a>
+# Transcript
+
+[[!template text="""Hi! My name is Eduardo Ochs. I'm the author""" start="00:00:00.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""of an Emacs package called eev...""" start="00:00:04.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and eev is about taking executable notes""" start="00:00:06.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""of everything that you do, and this""" start="00:00:10.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""presentation is about how I use this...""" start="00:00:13.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""how I finally found a way to take""" start="00:00:16.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""executable notes of what the python docs""" start="00:00:18.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""say.""" start="00:00:22.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Let me explain that in another way. I've""" start="00:00:23.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""try to Learn Python many times, but""" start="00:00:28.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""hm, my brain is wired in a weird way, so""" start="00:00:31.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""it didn't work... and finally a few""" start="00:00:34.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""months ago I found a way of studying""" start="00:00:37.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Python that finally clicked for me.""" start="00:00:40.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""The idea is that... well, it's here in""" start="00:00:44.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the title - is a way to create short""" start="00:00:47.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""hyperlinks to the""" start="00:00:50.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""documentation of python.""" start="00:00:52.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Here's an example.""" start="00:00:54.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""This file contains some some chunks""" start="00:00:56.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""of code from the Python tutorial and""" start="00:01:00.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""some links to the places in which""" start="00:01:03.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""I found these chunks of code.""" start="00:01:05.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""for example, if I run this link here""" start="00:01:07.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""it opens a certain page of the Python""" start="00:01:12.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""tutorial in my browser - note that it""" start="00:01:14.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""opens the local copy of the""" start="00:01:18.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""documentation -""" start="00:01:19.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and if I""" start="00:01:22.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""run this link here it opens the source""" start="00:01:25.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""in .rst""" start="00:01:29.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""of the same page. So the first link opens""" start="00:01:30.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the HTML and this one opens the""" start="00:01:34.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""RST. This is useful because in the""" start="00:01:37.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""beginning""" start="00:01:39.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""I was copying these chunks of code in""" start="00:01:40.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the obvious way - I would simply""" start="00:01:44.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""visit the the documentation in HTML and""" start="00:01:46.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""I would mark""" start="00:01:50.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""a chunk... a snippet of code here and I""" start="00:01:51.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""would copy it to my notes.""" start="00:01:54.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""And then after a while I""" start="00:01:58.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""realized that it was much easier to""" start="00:02:01.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""simply go to the RST sources and to copy""" start="00:02:03.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the chunks of code from there... and""" start="00:02:07.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""note that these links look quite similar.""" start="00:02:10.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""There's one difference here, that is""" start="00:02:14.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this `r` that is prepended to the name""" start="00:02:17.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""of the function... the `r` means""" start="00:02:20.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""&quot;open the RST&quot;...""" start="00:02:23.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and if I use the suffix `w` it means""" start="00:02:26.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""use the documentation on the web instead""" start="00:02:30.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""of using the local copy.""" start="00:02:32.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""So this one""" start="00:02:34.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""opens a local copy""" start="00:02:36.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and this one""" start="00:02:38.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""takes a while""" start="00:02:42.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and opens the""" start="00:02:46.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the page of the documentation in the""" start="00:02:49.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""site of Python blah blah...""" start="00:02:52.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and this thing here is""" start="00:02:56.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""executable in the usual eev sense, that""" start="00:02:58.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""we ca... if we type f8 several times here""" start="00:03:02.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the f8s on the lines that start""" start="00:03:05.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""with red stars create a target buffer""" start="00:03:08.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""here... and in this case it creates a""" start="00:03:12.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""target buffer running Python, and if I""" start="00:03:14.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""type f8 on these other lines these are""" start="00:03:17.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the lines are sent""" start="00:03:20.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""to that REPL.""" start="00:03:23.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""But anyway, let me go back.""" start="00:03:25.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Most of the things that I'm going to""" start="00:03:30.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""present here are in the tutorial of this...""" start="00:03:32.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""package...""" start="00:03:35.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""we can go to the source code""" start="00:03:37.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""here in the eev directory - it's a file""" start="00:03:41.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""called eev-rstdoc.el but the best""" start="00:03:44.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""docs are in the tutorial, here...""" start="00:03:50.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and the tutorial also has some""" start="00:03:53.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""executable""" start="00:03:56.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""chunks... some snippets of python""" start="00:03:58.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""code that are executable, but they""" start="00:04:02.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""don't have those nice colors... so""" start="00:04:05.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""apologies for that.""" start="00:04:07.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""We need to run this thing here to make""" start="00:04:11.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""everything work.""" start="00:04:13.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""This thing will define some functions""" start="00:04:15.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""with funny names that I will""" start="00:04:17.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""explain later.""" start="00:04:19.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Let me explain something new.""" start="00:04:26.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""let's compare all these""" start="00:04:30.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""links here. They take this argument""" start="00:04:35.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""here and they expand the the argument in""" start="00:04:38.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""a certain way. For example this string is""" start="00:04:41.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""expanded to this long URL here... note that""" start="00:04:44.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""it got a prefix here,""" start="00:04:49.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""that's quite long... it got the .html here,""" start="00:04:52.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and then the hash and the anchor here...""" start="00:04:56.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and each one of the functions in the""" start="00:04:59.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""pydoc family expands this""" start="00:05:03.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""argument in a different way.""" start="00:05:06.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""The one that that opens the doc in the""" start="00:05:09.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""web uses another prefix -""" start="00:05:12.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this one - and the one that opens the rst""" start="00:05:16.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""file ignores the part after the hash""" start="00:05:20.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""for technical reasons... I was never""" start="00:05:24.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""able to to find a good way to convert""" start="00:05:28.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this hash into a string to search for,""" start="00:05:30.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""so to make something that goes to""" start="00:05:33.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the right section in the link to the rst""" start="00:05:35.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""doc I have to convert by hand, and by""" start="00:05:38.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""trial and error, this thing here into a""" start="00:05:42.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""pointer to that section, like""" start="00:05:46.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this one...""" start="00:05:48.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""in which the &quot;_numeric-types:&quot;""" start="00:05:50.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""is here.""" start="00:05:55.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""So all these links here are based on""" start="00:05:58.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""expansion, and this is easy to""" start="00:06:02.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""understand...""" start="00:06:04.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""but suppose that I want to""" start="00:06:05.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""create a link like this, or suppose that""" start="00:06:08.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""I'm browsing the docs here""" start="00:06:11.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and I just I follow some some links...""" start="00:06:16.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""let me do something random here...""" start="00:06:21.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""suppose that I decide that this""" start="00:06:31.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""section is very interesting. How can I""" start="00:06:34.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""create a link to that? I can""" start="00:06:35.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""use this pilcrow symbol and the""" start="00:06:39.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""&quot;Copy link address&quot;,""" start="00:06:44.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and copy the link to""" start="00:06:45.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""my notes...""" start="00:06:49.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and then the Python family...""" start="00:06:51.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""well, we saw the the functions in the""" start="00:06:55.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Python family have a certain way - have""" start="00:06:58.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""several ways of expanding these""" start="00:07:00.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""short arguments... and they also have a""" start="00:07:03.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""certain way of""" start="00:07:06.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""shortening URLs like this one. If I type""" start="00:07:07.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""`M-x pdk` the message is this one.""" start="00:07:11.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""`pdk` is a mnemonic for""" start="00:07:12.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""&quot;Python doc kill&quot;, and this""" start="00:07:17.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""&quot;kill&quot; means &quot;copy to the kill ring&quot;""" start="00:07:20.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""so if I type `M-x pdk` here it""" start="00:07:23.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""considers that this thing is a link""" start="00:07:27.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""to the python Docs, and it""" start="00:07:31.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""shortens this link in a certain way, and""" start="00:07:34.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""it kills a short link.""" start="00:07:36.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""I can insert the short link with C-y""" start="00:07:42.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""(yank)""" start="00:07:45.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and then I can test this link to be sure""" start="00:07:46.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""that it points to where I want, and""" start="00:07:49.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""then I can delete this thing, and ta-da,""" start="00:07:52.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""now I have a short link, and of course I""" start="00:07:55.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""can modify this link by adding a suffix""" start="00:07:57.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""here...""" start="00:08:00.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and in this case here""" start="00:08:02.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""I will have to change the identifier""" start="00:08:06.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""to something else...""" start="00:08:09.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""but I'm not going to do that now.""" start="00:08:12.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""This module of eev comes with three""" start="00:08:18.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""families predefined. One is a family that""" start="00:08:20.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""points to the the documentation of""" start="00:08:24.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Python itself, another one points the""" start="00:08:26.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""documentation of SymPy, that is a program""" start="00:08:28.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""for symbolic computation, like for doing""" start="00:08:30.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""mathematics equations...""" start="00:08:34.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and the other one points to the""" start="00:08:37.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""documentation of MatPlotLib.""" start="00:08:40.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""How do these families work?""" start="00:08:43.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Each family has to be defined in two""" start="00:08:47.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""parts.""" start="00:08:51.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Remember that""" start="00:08:53.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""eev has lots of functions""" start="00:08:55.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""like this one... this one""" start="00:08:58.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""is the most basic, and it is explained""" start="00:09:03.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""here, in this section of the main""" start="00:09:06.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""tutorial. This section explains that""" start="00:09:08.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""a sexp like this one produces lots of""" start="00:09:13.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""functions - produces a family of""" start="00:09:16.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""functions - and it does that by producing""" start="00:09:19.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""a certain chunk of code and then""" start="00:09:23.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""executing this chunk of code... and if we""" start="00:09:25.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""add a certain prefix here... `find-` and we""" start="00:09:28.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""execute this we can... instead of executing""" start="00:09:31.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""that chunk of code we can see what is""" start="00:09:35.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""that chunk of code. In the case of `code-c-d`""" start="00:09:37.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""it is this. It is a `setq`, several""" start="00:09:39.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""`defun`s, and some comments here, with""" start="00:09:43.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""links to the documentation.""" start="00:09:47.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""In the case of rstdoc it's the same.""" start="00:09:49.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""We have this function here that defines""" start="00:09:52.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the function in the python family...""" start="00:09:54.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and we can run this to understand what""" start="00:09:56.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this `code-rstdoc` does.""" start="00:09:59.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""It creates this temporary buffer here...""" start="00:10:03.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""with lots of `defun`s, a `code-c-d` here,""" start="00:10:05.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and lots of comments here... and the""" start="00:10:09.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""comments include some tests. For example""" start="00:10:10.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""we can use these functions here to test""" start="00:10:13.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""how the expansion works.""" start="00:10:16.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""And""" start="00:10:21.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""note that in this buffer here we don't""" start="00:10:23.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""have the paths that that this family""" start="00:10:26.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""uses. We don't have for example""" start="00:10:28.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the URL that points to the site of""" start="00:10:31.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Python, to the directory that contains""" start="00:10:33.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the reference manual, or whatever... all""" start="00:10:36.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""these things are in another part of the""" start="00:10:40.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""definition of that family - that is a""" start="00:10:42.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""variable.""" start="00:10:44.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""If we execute this we go to the""" start="00:10:45.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""source code of eev-rstdoc,""" start="00:10:48.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""to the parts in which""" start="00:10:50.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this variable is defined...""" start="00:10:54.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and""" start="00:10:57.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""for each family we have a variable like""" start="00:10:59.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this,""" start="00:11:01.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""whose value is a property""" start="00:11:02.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""list with several fields...""" start="00:11:05.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""these first fields are very easy to""" start="00:11:07.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""understand - they are used in the""" start="00:11:09.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""expansion... this one too. And these""" start="00:11:10.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""two fields are used in the shrinking -""" start="00:11:16.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""in the shortening - and""" start="00:11:19.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this field here""" start="00:11:21.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""tells what is the name of the""" start="00:11:25.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""killing function""" start="00:11:28.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""so the fields of this thing here are""" start="00:11:30.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""used""" start="00:11:33.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""to generate...""" start="00:11:34.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""some fields are used to generate the""" start="00:11:36.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""code that appears here, and some fields""" start="00:11:39.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""are simply""" start="00:11:41.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""read by functions like this one, that""" start="00:11:44.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""consults the variable.""" start="00:11:47.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Now the natural question is: how can we""" start="00:11:51.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""define new families? Or: how can we change""" start="00:11:53.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""a family like this one to point to""" start="00:11:57.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""another version of Python?""" start="00:11:59.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""There are some template-based functions""" start="00:12:03.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""for doing that. They are explained in""" start="00:12:06.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this section of the tutorial...""" start="00:12:09.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""where is that?...""" start="00:12:10.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""oh God, it's far away...""" start="00:12:14.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""here.""" start="00:12:17.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Suppose that we have a package foo, that""" start="00:12:20.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""we want to create a family that points""" start="00:12:23.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""to the docs""" start="00:12:25.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""of that package foo... so, we""" start="00:12:27.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""can execute this thing here, and it""" start="00:12:31.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""generates this""" start="00:12:32.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this thing from a template.""" start="00:12:34.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""If we just want to modify a current""" start="00:12:37.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""definition we can run something like""" start="00:12:40.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this - note that the family `:py`""" start="00:12:42.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""already exists, and instead of using""" start="00:12:44.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""placeholders in some of these""" start="00:12:47.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""URLs it will use the current values of""" start="00:12:51.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the fields...""" start="00:12:53.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""so we can also use this modify""" start="00:12:55.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""existing families.""" start="00:12:59.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Well these are the technical details.""" start="00:13:01.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Now the natural question is: why do I""" start="00:13:05.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""want this? This doesn't""" start="00:13:08.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""any sense to me! Why should I""" start="00:13:12.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""try this?""" start="00:13:14.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""And the best answer: is for most people""" start="00:13:15.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this way of using""" start="00:13:18.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""executable notes do not make any sense""" start="00:13:21.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""at all at first sight...""" start="00:13:24.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""so what I'm trying to do is: I'm trying""" start="00:13:27.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""to write to these tutorials with""" start="00:13:30.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""many examples that are very easy to run,""" start="00:13:33.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and that examine data structures,""" start="00:13:35.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and functions, and test things,""" start="00:13:38.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and so on... so my main argument""" start="00:13:40.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""for convincing people to""" start="00:13:46.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""test this is: this is trivial to test -""" start="00:13:48.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""simply install eev and run this thing""" start="00:13:52.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""here, and run the examples, and probably""" start="00:13:54.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""you're going to find that this""" start="00:13:56.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""tutorial is fun to follow.""" start="00:13:58.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""So that's it! =)""" start="00:14:01.000" video="mainVideo-python" id="subtitle"]]
+
+
+
+Captioner: eduardo
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20python%3A%20Short%20hyperlinks%20to%20Python%20docs)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/python-before.md b/2022/info/python-before.md
new file mode 100644
index 00000000..b666a3b6
--- /dev/null
+++ b/2022/info/python-before.md
@@ -0,0 +1,18 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sun 2022-12-04. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="python">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(126,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect x="378" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(399,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect stroke-width="3" x="705" y="75" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 15-min talk followed by IRC Q&A (<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-gen,emacsconf-dev">#emacsconf-dev</a>)
+Etherpad: <https://pad.emacsconf.org/2022-python>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: Q&A finished, IRC and pad will be archived on this page
+
+
+
+
+<div class="vid"><video controls preload="none" id="python-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-python--short-hyperlinks-to-python-docs--eduardo-ochs--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-python--short-hyperlinks-to-python-docs--eduardo-ochs--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-python--short-hyperlinks-to-python-docs--eduardo-ochs--main.webm">Download --main.webm (48MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-python--short-hyperlinks-to-python-docs--eduardo-ochs--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/rK5n3EhFisCJPQsCueZdmn">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/python-nav.md b/2022/info/python-nav.md
new file mode 100644
index 00000000..6dd8f920
--- /dev/null
+++ b/2022/info/python-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/fanfare">Fanfare for the Common Emacs User</a>
+Next by track: <a href="/2022/talks/sun-close">Sunday closing remarks</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/rde-after.md b/2022/info/rde-after.md
new file mode 100644
index 00000000..c3d6852f
--- /dev/null
+++ b/2022/info/rde-after.md
@@ -0,0 +1,391 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="rde-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hello and welcome everyone at EmacsConf 2022.""" start="00:00:00.000" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I'm Andrew Tropin, and today""" start="00:00:11.480" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""we will talk about my Emacs setup.""" start="00:00:13.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I will tell you the story behind it.""" start="00:00:16.280" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""We will discuss what rde and rde Emacs are,""" start="00:00:19.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and we'll make a small Emacs configuration.""" start="00:00:23.960" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""My original motivation was to have""" start="00:00:28.760" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""a ready for work development environment""" start="00:00:30.920" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""which is reliable and guaranteed to work""" start="00:00:34.000" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""every time I need it,""" start="00:00:36.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""preferably performant and consistent.""" start="00:00:37.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I say development environment,""" start="00:00:42.680" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""but it actually applies to""" start="00:00:44.160" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""many other working environment,""" start="00:00:45.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""especially text-heavy.""" start="00:00:47.600" video="mainVideo-rde" id="subtitle"]]
+[[!template new="1" text="""An easy and obvious solution is to""" start="00:00:52.040" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""pick one of existing configuration frameworks""" start="00:00:54.040" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""like Spacemacs, Doom Emacs, Prelude,""" start="00:00:57.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""or something else,""" start="00:01:00.760" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and to get a pre-configured Emacs""" start="00:01:02.520" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""in a minute with all bells and whistles.""" start="00:01:05.040" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""But the problem is: only Emacs.""" start="00:01:09.040" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""In reality, your working environment consists""" start="00:01:12.480" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""not only from elisp packages,""" start="00:01:16.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""but also from system packages""" start="00:01:18.680" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and their configurations, project libraries,""" start="00:01:21.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""compilers, building tools, etc.,""" start="00:01:23.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and thus you already have at least""" start="00:01:27.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""three, or more likely, five things""" start="00:01:31.600" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""for managing your environment:""" start="00:01:34.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""configuration, Emacs configuration framework,""" start="00:01:37.120" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Emacs package manager, system package manager,""" start="00:01:39.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""system/dot files configuration manager,""" start="00:01:42.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""project/language package manager""" start="00:01:46.600" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and maybe something else.""" start="00:01:49.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Even having our Emacs configuration""" start="00:01:51.800" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and package manager covered by framework""" start="00:01:56.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""we still have a lot of things""" start="00:01:59.800" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""which we have to interact with,""" start="00:02:02.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""keep in sync, and more importantly,""" start="00:02:04.240" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""each of them can break.""" start="00:02:08.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""But by &quot;works every time,&quot; I mean""" start="00:02:12.480" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""even if I updated my system packages,""" start="00:02:17.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""configurations, I migrated to a different machine,""" start="00:02:19.560" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""someone on my team updated project dependencies,""" start="00:02:23.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I can get back to work in a matter of seconds,""" start="00:02:29.120" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""or maybe in some cases, minutes.""" start="00:02:31.960" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""If I have multiple tools""" start="00:02:39.040" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""for managing my environment""" start="00:02:40.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and even one of them is broken,""" start="00:02:43.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""the whole setup is broken.""" start="00:02:45.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Also, if one of them doesn't support""" start="00:02:48.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""deterministic rollback,""" start="00:02:51.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I can't guarantee the reliability""" start="00:02:53.560" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""of my working environment.""" start="00:02:58.200" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I can't be sure that I will be able to""" start="00:02:59.200" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""rescue or revive it.""" start="00:03:01.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""The less points of failure we have,""" start="00:03:02.800" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""the easier to stay sane.""" start="00:03:06.760" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Imagine some late breakage notice""" start="00:03:09.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""when you did update a few hours or days ago""" start="00:03:13.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and found it later, and you have""" start="00:03:17.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""a few different tools involved.""" start="00:03:20.920" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""It will be really hard to find the cause""" start="00:03:25.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and to make everything work again.""" start="00:03:28.280" video="mainVideo-rde" id="subtitle"]]
+[[!template new="1" text="""Is it possible to have one tool""" start="00:03:34.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""to cover all the needs I described above?""" start="00:03:37.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Yes, almost. With this tool,""" start="00:03:44.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""you can get a reliable setup.""" start="00:03:48.520" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Now, I talk about functional package managers.""" start="00:03:50.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Functional package managers allow us to""" start="00:03:57.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""manage systems, users, Emacs, project/""" start="00:04:00.680" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""language packages, and their configurations.""" start="00:04:03.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""But more importantly, it allows to do it""" start="00:04:07.560" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""in a declarative and reproducible manner.""" start="00:04:10.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""That means you just define what you need,""" start="00:04:13.200" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and those tools build it for you.""" start="00:04:16.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""No matter what was before, you get what you asked for.""" start="00:04:19.680" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""It doesn't matter what time of day,""" start="00:04:24.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""what you did before, what other packages""" start="00:04:26.200" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""you have installed previously.""" start="00:04:29.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""You just ask for something, and you get it.""" start="00:04:31.680" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Two years ago, I did a talk at EmacsConf 2020""" start="00:04:34.440" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""where I demonstrated a prototype of""" start="00:04:41.440" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Emacs configuration managed by Nix.""" start="00:04:43.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Originally, I wanted to base my work on""" start="00:04:47.480" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""an already existing Emacs configuration framework.""" start="00:04:50.480" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""But later, I decided that it will be easier""" start="00:04:56.160" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and a little more flexible""" start="00:05:01.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""to start from ground up.""" start="00:05:02.440" video="mainVideo-rde" id="subtitle"]]
+[[!template new="1" text="""After the first prototype in Nix,""" start="00:05:04.920" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I decided to switch to Guix. To make it short,""" start="00:05:06.960" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Guix is another functional package manager,""" start="00:05:12.120" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""but more freedom- and reproducibility-oriented,""" start="00:05:14.600" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and written in only one language (Guile Scheme)""" start="00:05:21.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""instead of few custom-made Nix DSL, Bash, and C++.""" start="00:05:24.200" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""So now I can write Lisp code, while this code""" start="00:05:29.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""writes another Lisp code. Very neat indeed.""" start="00:05:34.240" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Unfortunately, at the moment, there was no tool""" start="00:05:37.040" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""to manage user configurations,""" start="00:05:42.760" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""also known as dotfiles, with Guix.""" start="00:05:45.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""So I wrote one. And now it's a part of GNU Guix""" start="00:05:48.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and called Guix Home.""" start="00:05:52.680" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""What do we get from this one tool?""" start="00:05:54.160" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""We can use one language to describe the whole system,""" start="00:05:58.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""the home environment, the project environment,""" start="00:06:05.240" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and everything else.""" start="00:06:09.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""We don't need to worry about""" start="00:06:10.240" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""to keep different tools in sync""" start="00:06:13.000" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and to integrate them between each other.""" start="00:06:17.000" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Also, using one language to describe""" start="00:06:19.760" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""the whole configuration makes it possible""" start="00:06:23.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""to share values between different parts of the system.""" start="00:06:25.440" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""For example, color scheme, fonts, and much more.""" start="00:06:28.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""To sum up the first part of the talk:""" start="00:06:32.920" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I want a working environment which is ready for work,""" start="00:06:39.440" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""configured in minutes to almost what I want.""" start="00:06:43.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""That means it should have some batteries included.""" start="00:06:47.960" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""It should be reliable.""" start="00:06:50.800" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I want to get back to work in seconds""" start="00:06:52.000" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""even if I broke something""" start="00:06:54.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""or someone else broke something.""" start="00:06:56.160" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""For example, using rollbacks.""" start="00:06:58.200" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""It would be nice if it will be performant.""" start="00:07:03.560" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""It's a little subjective thing,""" start="00:07:07.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""but it's nice when things are snappy.""" start="00:07:08.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""And it's cool when things are consistent.""" start="00:07:12.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Different interfaces have""" start="00:07:16.160" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""the same way of interactions with them.""" start="00:07:17.800" video="mainVideo-rde" id="subtitle"]]
+[[!template new="1" text="""Let's get to the next part,""" start="00:07:20.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and let's discuss what rde is.""" start="00:07:25.920" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Originally it was my dotfiles repo,""" start="00:07:29.120" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""but it grew into something bigger.""" start="00:07:33.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Now, it's a set of tools on top of""" start="00:07:35.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""GNU Guix, Guix System, and Guix Home.""" start="00:07:39.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""You can treat it as a GNU/Linux distribution,""" start="00:07:41.680" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""system and home environment manager""" start="00:07:45.800" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""or configuration framework,""" start="00:07:48.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""project environment manager""" start="00:07:50.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""(like virtualenv, but on steroids),""" start="00:07:52.920" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and Emacs distribution.""" start="00:07:55.160" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Usually, you just pick a few features,""" start="00:07:58.200" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""parameterize them and ask the tool""" start="00:08:02.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""to create an operating system for you,""" start="00:08:05.655" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""a home environment, project environment,""" start="00:08:08.120" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""or Emacs configuration.""" start="00:08:10.280" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""That's it. That's simple.""" start="00:08:11.560" video="mainVideo-rde" id="subtitle"]]
+[[!template new="1" text="""And what rde Emacs is and how it tastes...""" start="00:08:15.520" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""It's like an ice cream, vanilla-flavored.""" start="00:08:22.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""No fancy macros for configuration, just plain Elisp.""" start="00:08:26.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""You can find in almost every""" start="00:08:30.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""personal Emacs configuration,""" start="00:08:34.955" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""built-in or vanilla-flavored packages""" start="00:08:36.480" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""are in priority over external""" start="00:08:42.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""or very fancy packages.""" start="00:08:45.589" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""There is practical reason for this.""" start="00:08:46.760" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Maybe sometimes you don't get the things""" start="00:08:52.200" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""you're used to in other text editors,""" start="00:08:55.455" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""or maybe even in other Emacs frameworks,""" start="00:08:57.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""but we want to keep the final result consistent,""" start="00:09:01.920" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""so you can apply the same interaction patterns""" start="00:09:05.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""in different situations and extend your expectations""" start="00:09:08.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""from one tool to another,""" start="00:09:13.480" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""from one package to another.""" start="00:09:15.000" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""For example, we encourage people""" start="00:09:16.560" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""to use the minibuffer completion""" start="00:09:19.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""with orderless and vertico for many tasks:""" start="00:09:22.600" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""code navigation, file navigation,""" start="00:09:26.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""looking through your emails,""" start="00:09:30.680" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""or just for jumping around.""" start="00:09:32.120" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Let's see.""" start="00:09:35.160" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""First, create a new Emacs instance""" start="00:09:36.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and open a repository with my configuration.""" start="00:09:39.480" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""You can see the source code.""" start="00:09:45.280" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Let's open another file which contains""" start="00:09:54.040" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Emacs-related features.""" start="00:09:58.760" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""You can see I use imenu,""" start="00:09:59.960" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and I can filter the list using minibuffer.""" start="00:10:02.280" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Now let's open the Magit interface,""" start="00:10:08.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and now I want to navigate through""" start="00:10:16.600" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""this long list of things here.""" start="00:10:18.920" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Some of them staged. Some of them are recent commits.""" start="00:10:22.240" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Some of them are untracked at all.""" start="00:10:25.560" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I can open imenu: the same interface,""" start="00:10:28.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""but for now, I can navigate around""" start="00:10:31.040" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""the Magit sections and files which are present here.""" start="00:10:34.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""If I want to navigate project files,""" start="00:10:41.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I use almost the same interface.""" start="00:10:45.120" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I can use the same patterns to filter out""" start="00:10:47.520" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""files in my project or items in magit-imenu.""" start="00:10:51.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Very similar and very consistent.""" start="00:11:00.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Also, we try to have hotkeys consistent""" start="00:11:07.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""across different packages and parts of Emacs.""" start="00:11:11.920" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""We usually don't provide alternatives on what to use.""" start="00:11:16.680" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""We provide only one package for one task.""" start="00:11:21.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""But of course this is""" start="00:11:25.520" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""a configuration framework after all.""" start="00:11:28.155" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""You can declare your own features,""" start="00:11:29.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""implement them yourself,""" start="00:11:32.800" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and use whatever you want.""" start="00:11:35.789" video="mainVideo-rde" id="subtitle"]]
+[[!template new="1" text="""Let's get to some real-world examples.""" start="00:11:37.440" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""It's always easy to show""" start="00:11:45.240" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""how things get appended,""" start="00:11:48.222" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""how things get installed,""" start="00:11:50.200" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""but usually people don't show""" start="00:11:51.760" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""how they remove things,""" start="00:11:55.289" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""because it's usually painful.""" start="00:11:56.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""But in our case, it's not.""" start="00:11:58.800" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Let's take my configuration,""" start="00:12:02.120" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""let's find feature-emacs-vertico.""" start="00:12:10.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Vertico's just used to show""" start="00:12:12.960" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""this fancy completion UI""" start="00:12:19.822" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""that you can see here.""" start="00:12:25.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""If I disable this feature""" start="00:12:27.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and rebuild my home environment,""" start="00:12:30.960" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Emacs will lack this feature.""" start="00:12:43.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""It may take some time. It was quite fast,""" start="00:12:46.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I didn't expect it.""" start="00:12:55.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I have Emacs. As you can see here,""" start="00:13:00.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""now it doesn't have this completion UI anymore.""" start="00:13:02.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I just commented it out,""" start="00:13:06.280" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""rebuilt my home environment,""" start="00:13:09.280" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and this thing disappeared from Emacs.""" start="00:13:13.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""But what if I broke something?""" start="00:13:15.600" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I just call guix home roll-back command""" start="00:13:19.960" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and launch Emacs again, and you see""" start="00:13:28.440" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""now we have vertico back.""" start="00:13:31.200" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Very good.""" start="00:13:32.800" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Reliability is one of the most important qualities""" start="00:13:36.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""of working environment.""" start="00:13:41.280" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""We can always get back to""" start="00:13:43.920" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""the working state of our environment""" start="00:13:46.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and be sure that we do the things we want.""" start="00:13:48.440" video="mainVideo-rde" id="subtitle"]]
+[[!template new="1" text="""Now let's see another example.""" start="00:13:52.520" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Here I have a mastodon,""" start="00:13:57.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""a post which contains a gemini link.""" start="00:13:59.960" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I can click it, and you see it opens emacsclient,""" start="00:14:03.600" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""it renders this gemini capsule,""" start="00:14:11.560" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and we can read all the posts of this guy.""" start="00:14:14.480" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Very cool.""" start="00:14:17.800" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""But what if I go back to my configuration,""" start="00:14:21.000" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""we'll find a feature related to elpher,""" start="00:14:26.760" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""the application which handles gemini links,""" start="00:14:32.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""we'll comment it out,""" start="00:14:36.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and we'll rebuild my home environment.""" start="00:14:38.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""What I expect here is that""" start="00:14:41.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""when I will be clicking the link,""" start="00:14:47.120" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""emacsclient won't pop up anymore.""" start="00:14:48.440" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Cool.""" start="00:15:02.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""We rebuilt it and let's click the link.""" start="00:15:02.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Now you see, it just opens another tab""" start="00:15:06.600" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""which doesn't do anything useful.""" start="00:15:08.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Cool.""" start="00:15:10.760" video="mainVideo-rde" id="subtitle"]]
+[[!template new="1" text="""Why it is important?""" start="00:15:14.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""It is important because every time""" start="00:15:15.520" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""you install something and you want to remove it,""" start="00:15:19.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""some parts depending on it can be broken.""" start="00:15:24.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""And also important in the other way around.""" start="00:15:29.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Sometimes you want to install something,""" start="00:15:31.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and it requires a few steps.""" start="00:15:34.920" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""For example, if you want to have""" start="00:15:36.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""a docker.el in your Emacs,""" start="00:15:40.600" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""you need not only docker.el itself""" start="00:15:43.160" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and configuration for it,""" start="00:15:49.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""you also need to add your user to the docker group.""" start="00:15:51.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""But before it, you need to create this group,""" start="00:15:55.240" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and you also need to""" start="00:15:59.000" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""define a system service and run it.""" start="00:16:00.455" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Also you need to install docker package,""" start="00:16:02.800" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""docker-cli package, and containerd package.""" start="00:16:05.800" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""You can forget every of this small step,""" start="00:16:11.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""but if it in your declarative configuration""" start="00:16:15.440" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""in one place, and you just ask""" start="00:16:20.480" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""to enable this feature, each of those steps""" start="00:16:23.589" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""will be performed automatically.""" start="00:16:27.822" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""If you don't need docker anymore,""" start="00:16:30.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""you just disable the feature,""" start="00:16:33.200" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and all the effect of all those steps""" start="00:16:34.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""will be removed from your system.""" start="00:16:38.480" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I won't be showing it because it probably will""" start="00:16:42.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""take more time for reconfiguring,""" start="00:16:46.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""but you can experiment with it on your own.""" start="00:16:48.920" video="mainVideo-rde" id="subtitle"]]
+[[!template new="1" text="""Let's do another interesting thing.""" start="00:16:54.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Let's construct a small""" start="00:17:00.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Emacs configuration from scratch.""" start="00:17:05.922" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Who's this?""" start="00:17:07.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I will open a file which contains only""" start="00:17:10.920" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""emacs-portable feature and feature-user-info.""" start="00:17:14.240" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Now I will build an environment,""" start="00:17:18.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and inside this environment,""" start="00:17:21.120" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I will launch a new Emacs instance.""" start="00:17:24.480" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""As you see, it's very different""" start="00:17:26.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""from what you saw previously.""" start="00:17:28.800" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""And it's almost barebones.""" start="00:17:30.440" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""It doesn't contain anything""" start="00:17:32.120" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""except user-mail-address""" start="00:17:39.520" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""which is set to my mail address,""" start="00:17:41.760" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and user-full-name.""" start="00:17:45.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""How it works:""" start="00:17:46.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""In feature-user-info, I define a few values.""" start="00:17:50.760" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Those values are obtained by Emacs""" start="00:17:54.000" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""feature-emacs-portable""" start="00:18:01.120" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and set inside Emacs configuration.""" start="00:18:03.280" video="mainVideo-rde" id="subtitle"]]
+[[!template new="1" text="""But let's enable a few more features.""" start="00:18:07.480" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I will do it in one go""" start="00:18:12.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""because we already saw how it works overall.""" start="00:18:15.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Let's build another Emacs with Emacs configuration.""" start="00:18:22.120" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""The interesting thing about this Emacs instance""" start="00:18:30.160" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""is that it doesn't contain anything""" start="00:18:39.280" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""that I have in my usual Emacs.""" start="00:18:44.560" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""For example, I don't have much here.""" start="00:18:46.520" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I don't have make installed, and so on.""" start="00:18:49.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""But we have feature-loader-portable package""" start="00:18:55.040" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""which just requires a few configure packages.""" start="00:19:06.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Let's move it to a separate workspace.""" start="00:19:09.960" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""First of all, configure-rde-emacs-portable""" start="00:19:13.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""which just sets a few variables.""" start="00:19:21.680" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""rde configure-keycast which just shows""" start="00:19:23.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""something on the modeline""" start="00:19:27.280" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""which demonstrates the last hotkey pressed""" start="00:19:31.200" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and the command which was invoked.""" start="00:19:34.440" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""We can enable which-key,""" start="00:19:40.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and now when I type a prefix,""" start="00:19:41.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I can see all the possible continuations""" start="00:19:45.040" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""for this prefix.""" start="00:19:48.600" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I can enable vertico,""" start="00:19:49.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and you can see, now we have nice completion UI.""" start="00:19:51.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""We can enable completion-related improvements""" start="00:19:58.160" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and now I have not only UI itself, but also""" start="00:20:03.560" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""some notes here near each command,""" start="00:20:07.560" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and ability to use regular expressions""" start="00:20:15.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""or some orderless matching.""" start="00:20:17.800" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""We can enable eshell,""" start="00:20:21.480" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and now I have a hotkey for invoking Emacs shell.""" start="00:20:26.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I don't have hotkey for vterm yet,""" start="00:20:31.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""but I can enable it,""" start="00:20:35.920" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and now I have a terminal inside my Emacs.""" start="00:20:37.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""As you can see my usual shell is Zsh,""" start="00:20:40.800" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""but here I have a plain bash.""" start="00:20:43.240" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Let's enable feature-git,""" start="00:20:46.040" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and now I will be able to open my project.""" start="00:20:52.280" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""And inside this project,""" start="00:21:04.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I will be able to open Magit""" start="00:21:11.489" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and navigate around using imenu.""" start="00:21:14.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Let's do few more things.""" start="00:21:19.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Let's enable Org Roam""" start="00:21:26.160" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""so I will be able to open my EmacsConf notes.""" start="00:21:29.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Let's enable configure-emacs.""" start="00:21:43.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""As you can see, the way it displayed updated.""" start="00:21:48.240" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Let's enable configure-appearance,""" start="00:21:53.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and you see the appearance of Emacs changed radically.""" start="00:21:59.520" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""And also, let's change the faces.""" start="00:22:03.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""And now you see almost my setup""" start="00:22:06.560" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""that you saw previously,""" start="00:22:13.040" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""but we build it from small tiny pieces.""" start="00:22:14.800" video="mainVideo-rde" id="subtitle"]]
+[[!template new="1" text="""A little summary:""" start="00:22:19.000" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""rde is the one tool that you can use""" start="00:22:27.520" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""to manage the whole computing experience.""" start="00:22:32.280" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""It consists of composable components,""" start="00:22:34.440" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and actually, it provides""" start="00:22:38.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""a reliable configuration framework.""" start="00:22:41.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""You always have a rollback.""" start="00:22:43.240" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""You always can switch to a generation""" start="00:22:46.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""you used a week ago.""" start="00:22:49.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""And of course, it's reproducible and declarative""" start="00:22:50.560" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""which is also very cool.""" start="00:22:57.520" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""rde Emacs is a part of rde""" start="00:22:58.680" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""but it can be used separately.""" start="00:23:05.789" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""You can think of it as an Emacs distribution""" start="00:23:06.920" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""which is vanilla-flavored, consistent,""" start="00:23:11.280" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""well-integrated, and self-contained.""" start="00:23:14.040" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""That's it for today.""" start="00:23:15.960" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Don't hesitate to contact me""" start="00:23:19.560" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""via email or any other way.""" start="00:23:22.055" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Thank you everyone for your attention""" start="00:23:23.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and see you in a bit.""" start="00:23:28.155" video="mainVideo-rde" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20rde%3A%20rde%20Emacs%20introduction)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/rde-before.md b/2022/info/rde-before.md
new file mode 100644
index 00000000..c920f706
--- /dev/null
+++ b/2022/info/rde-before.md
@@ -0,0 +1,52 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Andrew Tropin will demonstrate how to use rde Emacs for reproducible configuration, including how to enable or remove features. Afterwards, he will handle questions over BigBlueButton.
+
+
+The following image shows where the talk is in the schedule for Sun 2022-12-04. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="rde">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(126,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect stroke-width="3" x="94" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect x="378" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(399,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 24-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-rde>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: TO_CAPTION_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-04T15:00:00Z" end="2022-12-04T15:25:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~10:00 AM - 10:25 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 4 2022, ~9:00 AM - 9:25 AM CST (US/Central)<br />Sunday, Dec 4 2022, ~8:00 AM - 8:25 AM MST (US/Mountain)<br />Sunday, Dec 4 2022, ~7:00 AM - 7:25 AM PST (US/Pacific)<br />Sunday, Dec 4 2022, ~3:00 PM - 3:25 PM UTC <br />Sunday, Dec 4 2022, ~4:00 PM - 4:25 PM CET (Europe/Paris)<br />Sunday, Dec 4 2022, ~5:00 PM - 5:25 PM EET (Europe/Athens)<br />Sunday, Dec 4 2022, ~8:30 PM - 8:55 PM IST (Asia/Kolkata)<br />Sunday, Dec 4 2022, ~11:00 PM - 11:25 PM +08 (Asia/Singapore)<br />Monday, Dec 5 2022, ~12:00 AM - 12:25 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/dev/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="rde-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="rde-mainVideo" data="""
+00:00.000 Introduction
+00:52.040 The challenge
+03:34.840 Functional package managers
+05:04.920 Guix Home
+07:20.360 rde
+08:15.520 Vanilla-flavoured
+11:37.440 Removing features
+13:52.520 Another example
+15:14.080 Multiple steps
+16:54.400 A small Emacs configuration
+18:07.480 Enabling features
+22:19.000 Summary
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main.webm">Download --main.webm (278MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main.org">Download --main.org</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/iPos3hVhMrPsnyJskzSkY9">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="rde-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="rde-qanda" data="""
+00:29.720 Do you use this to have multiple configs running side by side for live comparison?
+02:16.760 Are you using Guix System, or Guix on top of another distro? If System, any tips?
+03:25.560 One of the issues I've had managing Emacs packages with Guix is a conflict between the Guix package ethos (read-only) and the Emacs package ethos (hackable in real-time). Any suggestions to resolve this?
+05:40.800 What is next for rde?
+08:08.100 Do you use Emacs without this? If so, for what purposes, and how does it feel compared to rde?
+11:07.220 Are there any plans to push things from rde to guix's main channel?
+13:34.220 How difficult is it to add support for new Emacs packages to Guix?
+15:36.340 Do your reckon RDE is currently opinionated? Or is it a one size fits all framework?
+18:19.020 How to get into RDE? Is there already documentation/getting started guide?
+20:35.420 Can you mix RDE with custom emacs init file?
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="rde-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--answers.webm">Download --answers.webm (42MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--answers.opus">Download --answers.opus (7.7MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/rde-nav.md b/2022/info/rde-nav.md
new file mode 100644
index 00000000..be6581c9
--- /dev/null
+++ b/2022/info/rde-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/rolodex">Build a Zettelkasten with the Hyperbole Rolodex</a>
+Next by track: <a href="/2022/talks/orgsuperlinks">Linking headings with org-super-links (poor-man's Zettelkasten)</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/realestate-after.md b/2022/info/realestate-after.md
new file mode 100644
index 00000000..be27e4fd
--- /dev/null
+++ b/2022/info/realestate-after.md
@@ -0,0 +1,593 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="realestate-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hey, I'm Gopar and this is the""" start="00:00:00.000" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Real Estate and Org Mode Table Formulas talk.""" start="00:00:05.454" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Not very creative, but it is what it is.""" start="00:00:07.640" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Now I just want to say that everything I talk about here""" start="00:00:09.880" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""is in the Org Mode in the Emacs manual.""" start="00:00:13.052" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I posted a link to the web version,""" start="00:00:15.903" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""but it should be inside of Emacs as well.""" start="00:00:17.910" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""Now before I start, I want to showcase the end goal.""" start="00:00:20.480" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""That way you know if you guys want to""" start="00:00:25.097" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""actually see the talk or not.""" start="00:00:26.807" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So I always think that's pretty cool to see""" start="00:00:28.740" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""what you're actually going to build""" start="00:00:30.492" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""before you start building it.""" start="00:00:31.518" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Alright. So let me start off with the goal,""" start="00:00:32.680" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the end goal. Here we have a simple table formula""" start="00:00:34.286" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and we have some constants, some values inside the list--""" start="00:00:38.763" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""inside the table, I'm sorry,""" start="00:00:42.614" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and some other stuff that we will get to,""" start="00:00:44.640" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""but for now... I don't want to spoil too much.""" start="00:00:47.673" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I just want to give you a demo""" start="00:00:49.280" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""of how it actually works.""" start="00:00:50.328" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""We have a few values. Let me first go over the constants.""" start="00:00:51.800" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""We have PMI, which stands for""" start="00:00:56.095" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""private mortgage insurance,""" start="00:00:57.582" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""so it's insurance that you'll have to pay""" start="00:00:57.591" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""depending on how much money you put into the deal.""" start="00:01:00.537" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""The property tax, which is self-explanatory,""" start="00:01:03.640" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the tax that you owe for owning the property,""" start="00:01:06.068" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and then home insurance,""" start="00:01:09.317" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and the interest rate at the loan that you get.""" start="00:01:11.107" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, here we have a few columns.""" start="00:01:13.440" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""The first one is called House,""" start="00:01:15.667" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""which I usually just put a description of the house""" start="00:01:17.412" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""with the link of the posting,""" start="00:01:20.624" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the price of the house,""" start="00:01:21.127" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the percentage down payment (this I play around with""" start="00:01:22.494" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""to see how much the deal will be structured),""" start="00:01:26.190" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the down payment (which is calculated from""" start="00:01:27.474" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the previous two columns),""" start="00:01:30.529" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the monthly mortgage (which is calculated as well),""" start="00:01:31.755" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and then the tenant income (which is what I suppose""" start="00:01:34.145" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""would be an example of the tenant income""" start="00:01:37.996" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""that I can potentially make off the property,""" start="00:01:41.006" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the 1% rule and the ROI.""" start="00:01:42.753" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I'll quickly go over the last two columns.""" start="00:01:45.540" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So first is the 1% rule.""" start="00:01:47.708" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""The 1% rule is essentially""" start="00:01:49.300" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""a &quot;rule,&quot; in quotes, that says that""" start="00:01:50.880" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""if a property matches this specific formula,""" start="00:01:53.589" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""it is a good deal to look into.""" start="00:01:56.278" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So for example, the first two pass,""" start="00:01:58.320" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and the last one does not pass.""" start="00:02:00.890" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""The last one, at a quick glance,""" start="00:02:02.677" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""we can just ignore it and say,""" start="00:02:04.105" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""&quot;hey, that's not going to fly,&quot;""" start="00:02:05.472" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""we'll just ignore it.""" start="00:02:06.477" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I won't go too much into details.""" start="00:02:08.000" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""That's just a brief summary.""" start="00:02:09.891" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""So now the ROI is the return on investment.""" start="00:02:11.520" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So it says &quot;how much of a return am I getting""" start="00:02:14.149" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""on the amount that I invested?&quot;""" start="00:02:17.600" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So let's say you put in $12,000,""" start="00:02:18.960" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and at the end of the year, you cashflow $6,000.""" start="00:02:21.168" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So if you calculate the ROI off of that,""" start="00:02:23.456" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""you get a 50% return on investment.""" start="00:02:26.127" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""In two years, you'll make your money back,""" start="00:02:28.477" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""which is pretty good.""" start="00:02:30.086" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Then all the rest of the years,""" start="00:02:31.734" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""you'll just slowly be reaping in all that,""" start="00:02:32.719" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""all the excess cash flow.""" start="00:02:34.348" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""But yeah, that's it in a nutshell.""" start="00:02:36.640" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""So let me demo it real quick.""" start="00:02:40.040" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So for example, I'm going to change the down payment,""" start="00:02:42.270" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""but I want you to pay attention""" start="00:02:44.259" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""to this column [down payment]""" start="00:02:45.745" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and the monthly mortgage column.""" start="00:02:48.214" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So right here [down payment] is $25,000,""" start="00:02:49.840" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and here [monthly mortgage] is around $1,200,""" start="00:02:51.727" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""a little under $1,300.""" start="00:02:53.473" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So what happens if I say, you know,""" start="00:02:55.180" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""what I'm going to change the down payment""" start="00:02:57.350" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""to 5% instead, because I just""" start="00:02:58.796" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""don't want to put 10.""" start="00:03:00.949" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So let's just put say 5.""" start="00:03:02.560" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Then I tab out of here, and voila -""" start="00:03:04.126" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""you see it updated to half of $25,000.""" start="00:03:06.275" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So now it's $12,000,""" start="00:03:08.523" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and this [monthly mortgage] went up""" start="00:03:09.947" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""over actually $1,300,""" start="00:03:10.690" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and then this [1% rule] hasn't changed at all""" start="00:03:12.234" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and the ROI is there.""" start="00:03:14.784" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So one thing that I should mention is""" start="00:03:17.680" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""everything that I'm putting here""" start="00:03:19.148" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""is just example numbers,""" start="00:03:20.194" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""should not be taken into literal real estate advice.""" start="00:03:21.280" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I just want to put that out there.""" start="00:03:25.635" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""These are just examples to show you""" start="00:03:26.860" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""how you can potentially make it on your own,""" start="00:03:28.368" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""do the formulas on your own.""" start="00:03:30.520" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""Alright, so another cool thing that I did was""" start="00:03:32.240" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""if there is no tenant income and I tab,""" start="00:03:35.651" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""it says &quot;Enter Tenant Income&quot;.""" start="00:03:37.738" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So if I don't put anything,""" start="00:03:40.049" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""it will automatically tell me, hey,""" start="00:03:41.033" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I can't calculate without the tenant income.""" start="00:03:42.400" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I can also do this right here [ROI field],""" start="00:03:44.920" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""say the same thing, Enter Tenant Income,""" start="00:03:46.608" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""but I just didn't put it for whatever reason, but""" start="00:03:48.476" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""after this video, you should be easily able to""" start="00:03:50.564" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""put it without much struggle.""" start="00:03:53.813" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Alright, so if that's something you're interested in,""" start="00:03:57.400" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""then keep watching.""" start="00:04:00.131" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""So let's go over the basics first.""" start="00:04:02.240" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, how do we create a table?""" start="00:04:05.240" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Well, we can do M-x org-table-create.""" start="00:04:07.400" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""If we run that it, will prompt us in a minibuffer.""" start="00:04:10.369" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""It says table size, columns times row.""" start="00:04:14.302" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Usually it's rows times columns,""" start="00:04:16.893" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""but it is what it is.""" start="00:04:18.178" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So let's just leave""" start="00:04:19.602" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the default of 5 times 2, and voila, we get this.""" start="00:04:20.466" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Beautiful. Awesome.""" start="00:04:24.960" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""So the other way is using the magical C-c C-c""" start="00:04:26.400" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""in Org Mode, which basically is context-aware""" start="00:04:29.511" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and does anything, does the right thing like,""" start="00:04:32.402" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""almost 100% of the time, which is pretty amazing.""" start="00:04:36.054" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Alright, let's just say I write a pipe, some words,""" start="00:04:38.600" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and then another pipe, Gopar, and then""" start="00:04:42.432" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""another pipe. Let's just say we're trying to""" start="00:04:44.680" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""write it out via text, because in Org mode""" start="00:04:47.269" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""everything has text.""" start="00:04:50.600" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""There's nothing fancy about it.""" start="00:04:51.547" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""If I do C-c C-c, Org mode should automatically be""" start="00:04:53.380" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""context-aware that this area is a table.""" start="00:04:57.673" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, C-c C-c, boom. So if I press enter, another column.""" start="00:04:59.840" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""If I press tab, it should automatically move me.""" start="00:05:04.295" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So yeah, so that's pretty much it.""" start="00:05:06.964" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""That's how you get started into the column.""" start="00:05:09.392" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, I'm assuming most of the people here already know that.""" start="00:05:11.920" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""This is just the primary basic review.""" start="00:05:15.592" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""So, let's first go...""" start="00:05:17.960" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Let's go dive right into our first formula.""" start="00:05:19.808" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So I copied some values over here,""" start="00:05:22.820" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""just to save time, and the columns.""" start="00:05:24.767" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, let's go ahead and say that""" start="00:05:27.697" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""we have single family house,""" start="00:05:29.164" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and the price is a hundred thousand.""" start="00:05:30.750" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""And, Let's say that I want the price,""" start="00:05:33.019" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the down payment that I want to put is 10%.""" start="00:05:34.164" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Right. Alright. 10%. Now if I tab""" start="00:05:36.432" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""or go to the next column, nothing happens.""" start="00:05:40.528" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Why is that? Well, it's because""" start="00:05:42.394" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""(you probably guessed it)""" start="00:05:43.880" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""we haven't written or tied any table formulas.""" start="00:05:44.985" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So we're saying, alright, enough talk.""" start="00:05:47.756" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""How do we do that?""" start="00:05:49.564" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Well, the answer is very simple.""" start="00:05:50.540" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""We do a pound sign (#), if I can find it.""" start="00:05:52.094" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""\#+ and then we do TBL for table""" start="00:05:54.984" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and then FM for formula.""" start="00:05:58.713" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, table formula, and the column.""" start="00:06:01.120" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So this, you're already halfway""" start="00:06:03.429" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""to writing your first table formula.""" start="00:06:04.935" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So let's say we want to automatically,""" start="00:06:07.064" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Let's just, for exercise,""" start="00:06:09.172" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""we want to put the down payment,""" start="00:06:10.979" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""just put some type of value in there,""" start="00:06:13.190" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""just to make sure that it's working.""" start="00:06:14.616" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So the way Org Mode refers to columns is,""" start="00:06:16.383" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""we start with the dollar sign ($) and then""" start="00:06:20.993" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""we put the number that the column is.""" start="00:06:24.141" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Indexes start with one, not a zero.""" start="00:06:26.869" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""As most of us watching are programmers,""" start="00:06:29.114" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""we're probably used to starting with zero,""" start="00:06:31.624" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""but it starts with one.""" start="00:06:33.793" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So one, two, three, four, five.""" start="00:06:34.960" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So down payment is the fifth column,""" start="00:06:38.331" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""we say five, and then we say equal to,""" start="00:06:39.655" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""let's say Gopar.""" start="00:06:42.304" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Then we do C-c C-c to evaluate it,""" start="00:06:44.289" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and the table is automatically updated.""" start="00:06:47.938" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Look at that.""" start="00:06:50.546" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So when you do just this, dollar sign ($) 5,""" start="00:06:50.957" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""it updates every single column.""" start="00:06:55.863" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""There is a way to specify that this cell only and""" start="00:06:57.806" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""this cell only but this is out of scope and it's""" start="00:07:00.680" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""not that hard it's just not in this video.""" start="00:07:03.324" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I would recommend, I commend you, or, actually""" start="00:07:05.640" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I recommend that you go check out the manual for that.""" start="00:07:08.874" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""All right so, let's say we want to do some basic""" start="00:07:13.000" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""arithmetic we want to do some list values""" start="00:07:17.724" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""instead of just putting in text.""" start="00:07:19.324" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So how do we do that?""" start="00:07:20.490" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Well, we have to pull the expression that we want""" start="00:07:21.540" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""to put in.""" start="00:07:24.557" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, for example, if we want to add we'll do 20 plus""" start="00:07:25.107" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""20 and if we do C-c C-C to evaluate it, it should""" start="00:07:27.959" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""update every single column, the entire column,""" start="00:07:31.457" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the fifth column I mean and, tada, it does.""" start="00:07:34.324" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Cool! So now let's say we want to do a little bit""" start="00:07:38.640" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""more advanced.""" start="00:07:41.899" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Let's say we want to add the previous column to""" start="00:07:42.656" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""this column, so how do we refer to this one?""" start="00:07:45.007" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Well, 1-2-3-4 is the fourth column, so we would""" start="00:07:47.107" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""just simply do $4 and this should automatically""" start="00:07:50.990" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""be referring to this column (% DP).""" start="00:07:55.931" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So we'll do 10 + 20, it's going to be 30 over here,""" start="00:07:58.157" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and let's do C-C C-c.""" start="00:08:02.490" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Ooh, error, what happened?""" start="00:08:04.274" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Oh my god, oh my god.""" start="00:08:07.124" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Well, this seems scary but no worries.""" start="00:08:08.974" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""This is where debugging comes in pretty handy,""" start="00:08:11.720" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""which is actually our next section as you can see.""" start="00:08:14.078" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, what happens if we do, if we go into the""" start="00:08:16.940" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""debugging section, what is the first step?""" start="00:08:19.424" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Well, the first step is to try out, is to enable""" start="00:08:21.440" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""formula debugger.""" start="00:08:24.890" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, if you do C-c {, it will turn on a minor mode""" start="00:08:26.516" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""that whenever you evaluate a table formula,""" start="00:08:31.394" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the debugger will be enabled,""" start="00:08:35.510" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""will automatically kick in.""" start="00:08:38.291" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""And if you want to disable the debugger,""" start="00:08:39.457" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""you just run the command again, and it will turn off.""" start="00:08:41.074" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, let's go ahead and run it. C-c {.""" start="00:08:43.874" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""As you can see in the mini buffer, it says,""" start="00:08:46.608" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""&quot;formula debugging has been turned on&quot;. Awesome!""" start="00:08:48.791" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So if we go back to our table""" start="00:08:51.541" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and we try to run this, and see what's going on, we see...""" start="00:08:53.158" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Oh, first off, before we look""" start="00:08:58.500" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""at the buffer that just opened,""" start="00:09:00.441" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""look at the mini buffer,""" start="00:09:01.391" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""it says &quot;Debugging Formula. Continue to next?&quot;""" start="00:09:02.491" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So if you have multiple or a series of formulas,""" start="00:09:05.074" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""it will say, &quot;hey, do you want to debug this one""" start="00:09:07.974" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""or the next one?&quot;""" start="00:09:09.691" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So this is just saying, &quot;hey, do you want to go""" start="00:09:10.474" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""into the next formula?&quot;""" start="00:09:12.058" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""And since there's no next formula,""" start="00:09:13.190" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""debugger will just exit out""" start="00:09:14.991" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and leave you with the other buffer to see.""" start="00:09:16.058" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""For now, we'll just click no.""" start="00:09:18.299" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Right now, it doesn't matter if you click yes or no""" start="00:09:20.049" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""because there's only one formula,""" start="00:09:22.591" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""but we'll just click no, and let's go ahead and""" start="00:09:23.640" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""pay attention to the new buffer.""" start="00:09:26.172" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Well, over here it might seem a little confusing,""" start="00:09:27.757" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""but don't worry, we're just going to ignore most of this.""" start="00:09:29.808" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""The first thing that we're going to pay""" start="00:09:32.490" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""attention is to the original.""" start="00:09:33.990" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So it says, okay, this is the original, so we have""" start="00:09:35.557" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""a quote expression, which is just trying to add the""" start="00:09:38.167" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""fourth column.""" start="00:09:41.324" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""And if we go over here""" start="00:09:41.840" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""once everything is finalized,""" start="00:09:42.841" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""it says &quot;hey, we're trying to add this 10,""" start="00:09:44.208" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""but it's actually a string 10, and added to 20.""" start="00:09:47.207" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So of course it's going to be an error, so now we""" start="00:09:50.340" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""know what the error is.""" start="00:09:52.425" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""So you're saying all right cool, awesome, now how""" start="00:09:54.099" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""do we transform that string into a number?""" start="00:09:56.190" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Well, Org Mode formulas have these flags""" start="00:09:58.940" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""that you can use, and essentially a flag looks like this.""" start="00:10:02.608" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""It's a semicolon (;) followed by some letter""" start="00:10:05.774" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""or some identifier""" start="00:10:10.258" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""that will let Org mode know that hey,""" start="00:10:13.370" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""this should be turned into a number""" start="00:10:16.590" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""or this should be turned into whatever.""" start="00:10:18.291" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""There's different ones for alpha literal""" start="00:10:20.307" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and for a bunch of...""" start="00:10:22.725" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I think there's even &quot;i&quot; for &quot;integer&quot;,""" start="00:10:23.963" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""so it depends what you want.""" start="00:10:25.474" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So for now we're just going to put &quot;number&quot;""" start="00:10:26.919" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""because it's a real number.""" start="00:10:28.203" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""If we do this and the debugger is still on,""" start="00:10:29.590" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""(remember because it automatically""" start="00:10:33.707" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""stays on until we turn it off),""" start="00:10:35.374" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""if we reevaluate the the formula,""" start="00:10:36.474" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""we should be able to see it.""" start="00:10:41.640" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""But first, before I do that, let's check step two.""" start="00:10:43.724" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I'll now rerun formulas with C-c * and table,""" start="00:10:47.479" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""which calls org-table-recalculate.""" start="00:10:52.340" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""To do this, you actually have to be inside the table.""" start="00:10:54.640" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Otherwise, Org mode will try to do some other stuff""" start="00:10:58.607" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""because it is context-aware, so depending on""" start="00:11:02.454" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the context it might do something else.""" start="00:11:04.425" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So if we do C-c *...""" start="00:11:06.424" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""As you can see the debugger has kicked in,""" start="00:11:09.224" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""says, &quot;Do you want to continue to next?&quot;""" start="00:11:12.824" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Let's press yes (y), and it has been applied.""" start="00:11:14.202" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So as you can see, it only updated one column--""" start="00:11:17.680" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I'm sorry, one row--and the thing is,""" start="00:11:21.071" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""when you run this, the recalculate, it will only""" start="00:11:23.077" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""run for the current row that you're in.""" start="00:11:28.107" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""If you want to run for the entire table,""" start="00:11:30.461" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""you're going to do C-u C-c *.""" start="00:11:32.885" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Before I do that, let me turn off the debugger""" start="00:11:36.340" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""since we no longer are in need of it.""" start="00:11:38.507" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So C-c {, and debugging has been turned off.""" start="00:11:40.907" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Now let me do C-u C-c * and as you can see""" start="00:11:45.077" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the other rows also calculated, updated as well.""" start="00:11:50.808" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Beautiful!""" start="00:11:54.420" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So as I mentioned, feel free to look / browse the""" start="00:11:55.024" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""documentation for more flags""" start="00:11:58.607" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""because each flag has its own special meaning""" start="00:12:00.108" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and will do different things, which is pretty cool.""" start="00:12:02.641" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""All right, cool.""" start="00:12:07.140" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""We're done with debugging and we fixed it.""" start="00:12:08.224" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So there, now we know how to create formulas""" start="00:12:10.107" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and how to debug them whenever they break,""" start="00:12:12.076" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""which is awesome.""" start="00:12:14.307" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""All right, but remember how I said that you can""" start="00:12:15.140" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""only debug... Whenever you run recalculate,""" start="00:12:18.424" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""It will only run the first formula?""" start="00:12:23.660" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Well, let's say you want to have multiple formulas?""" start="00:12:25.440" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""This is completely valid, except the bad thing is""" start="00:12:28.539" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""that you have to do C-c C-c C-c on each each one,""" start="00:12:30.907" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""because C-u C-c * won't recalculate everything.""" start="00:12:34.190" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""It won't.""" start="00:12:39.557" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Sadly, it doesn't do it.""" start="00:12:40.450" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""There is a way that you can do it,""" start="00:12:41.657" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""which is hacking together some elisp.""" start="00:12:44.289" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""You can probably find it""" start="00:12:46.460" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""or you can probably make it yourself""" start="00:12:47.475" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""if you look around, but that's out of scope for this.""" start="00:12:48.807" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""So now, how do we... We can write all the formulas""" start="00:12:51.207" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""we want in one single line.""" start="00:12:57.100" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""There's a way to to distinguish""" start="00:12:59.107" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""when one ends and one begins""" start="00:13:01.741" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and that is the double colon (::).""" start="00:13:03.341" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So right there, and a new formula will begin.""" start="00:13:04.807" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So for example,""" start="00:13:07.707" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""let's say for the seventh column we say &quot;gopar&quot;.""" start="00:13:08.474" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""If I do C-c C-c, it'll run every single thing""" start="00:13:12.324" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""so that... &quot;gopar&quot;. Tada!""" start="00:13:17.507" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""There, awesome.""" start="00:13:19.326" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""But this is going to get very annoying if you're""" start="00:13:20.724" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""simply trying to edit formulas like this, right?""" start="00:13:22.540" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So that's where the nicer debugging,""" start="00:13:25.107" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""nicer editing section comes in.""" start="00:13:27.033" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, yes, just like as mentioned, table calls""" start="00:13:28.890" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""only the first formula.""" start="00:13:32.300" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So what's the step onto this nicer editing section?""" start="00:13:33.607" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Try out &quot;C-c ,&quot; or `org-edit-special`.""" start="00:13:36.449" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So let's go back to the table formula and call it...""" start="00:13:40.524" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""oh my god, look at that,""" start="00:13:44.657" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""a new buffer just for editing,""" start="00:13:47.690" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and each formula is in its own line to make""" start="00:13:49.990" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""it easier, which is beautiful!""" start="00:13:52.699" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, let's just say I want to do another calculation.""" start="00:13:54.724" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Let's do eight times eight, which should be 64,""" start="00:13:58.815" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and we have no need of putting this flag""" start="00:14:02.707" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""because the flag only affects it on the input coming in.""" start="00:14:04.741" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I should have mentioned that earlier.""" start="00:14:07.540" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Only input coming in.""" start="00:14:09.174" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""There is ways to affect the output,""" start="00:14:10.874" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""which we'll also cover in this topic later on,""" start="00:14:13.274" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""but for now, you can either leave the end flag""" start="00:14:16.574" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""or leave it out. It will still work fine.""" start="00:14:19.231" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Let's just leave it out for now.""" start="00:14:21.991" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Let's just do C-c C-c to make sure""" start="00:14:23.508" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""that everything is working. 64. Beautiful.""" start="00:14:26.625" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So there you have it. You can have multiple formulas""" start="00:14:30.790" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""just stacked up into one line,""" start="00:14:33.166" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and whenever you need to edit it,""" start="00:14:34.878" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""just go into that into that line""" start="00:14:36.391" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and &quot;C-c ,&quot;, and tada!""" start="00:14:38.357" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""You have this ready, good to go, and for editing.""" start="00:14:41.124" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Oh and if you want to exit out,""" start="00:14:44.450" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""also just do &quot;C-c ,&quot; again and you're back.""" start="00:14:45.825" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I did not mention that. Sweet!""" start="00:14:49.040" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So now we know how to have""" start="00:14:51.990" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""a better editing experience. Sweet!""" start="00:14:54.775" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""So now comes the formatting section which I talked about.""" start="00:14:57.106" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So what's the first step?""" start="00:15:00.340" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Well for formatting, Org mode uses""" start="00:15:01.974" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the printf function from C.""" start="00:15:05.508" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So those who are familiar with C,""" start="00:15:08.674" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""you'll feel right at home because the way you format it""" start="00:15:10.375" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""is exactly the same way.""" start="00:15:12.923" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So for example, this will print off""" start="00:15:14.040" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""a floating number with two decimal points.""" start="00:15:16.558" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""As you can see here, this is how you will use it.""" start="00:15:18.973" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""It will be after the semicolon and it will be &quot;%.2f&quot;.""" start="00:15:21.640" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So let's go ahead and test that out.""" start="00:15:26.424" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Actually, let's go ahead to our latest function--""" start="00:15:28.158" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I mean, to our latest formula.""" start="00:15:30.690" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Let's go ahead to the nicer buffer""" start="00:15:32.440" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and let's do, Ctrl... Let's enter the semicolon,""" start="00:15:33.841" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and then let's put the percent sign, we do 2f.""" start="00:15:39.208" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Actually, let's make it five""" start="00:15:45.424" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""just to differentiate from the formula, and let's see.""" start="00:15:49.175" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Let's run it, and tada!""" start="00:15:52.690" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So yeah, as you can see, five decimal points.""" start="00:15:57.274" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and if we want zero decimal points, we can also""" start="00:16:00.180" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""just move point zero, and tada!""" start="00:16:01.957" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Just like that.""" start="00:16:05.057" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""We can also just leave it as is how it was before,""" start="00:16:06.224" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""because before, we didn't even actually need it,""" start="00:16:08.874" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""but yeah, just an example.""" start="00:16:10.875" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""And just a reminder, there are""" start="00:16:13.114" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""plenty more ways of formatting,""" start="00:16:15.091" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""just look at the documentation.""" start="00:16:17.358" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""There will be more. Basically every single thing""" start="00:16:19.740" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""that you need, just use the documentation as reference.""" start="00:16:21.725" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Cool! So now we know how to debug,""" start="00:16:25.674" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""how to write formulas""" start="00:16:28.341" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and how to get a better, nicer editing buffer""" start="00:16:29.775" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""for the formula so we don't have to do it all""" start="00:16:32.825" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""in a single line.""" start="00:16:35.125" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""So, what about conditional prompts, like I was""" start="00:16:36.340" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""showing in the first table in the end goal?""" start="00:16:38.757" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Well that's actually pretty simple because we already""" start="00:16:43.490" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""know how to do this.""" start="00:16:47.300" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Yes, if you think about it for a second, if we are""" start="00:16:48.424" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""able to pull lisp s-expressions, then we are able to""" start="00:16:51.233" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""basically do it already. Here's an example.""" start="00:16:54.321" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""We're saying if the second column is empty, is zero--""" start="00:16:56.390" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""so actually, this should be with the N flag""" start="00:17:01.907" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""because we will transform empty values as zero,""" start="00:17:04.620" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and that's how Org mode will read those.""" start="00:17:07.040" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""It's saying if the second flag is zero,""" start="00:17:08.820" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""then I want you to put &quot;Enter the values.&quot;""" start="00:17:12.425" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""And if it's not empty, we're going to put""" start="00:17:17.052" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""&quot;Values entered.&quot; We're going to recognize.""" start="00:17:20.540" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So let's go ahead and actually do this.""" start="00:17:22.290" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So let's grab this, and let's type it in.""" start="00:17:24.540" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So let's go ahead. &quot;Enter the values,&quot; because it""" start="00:17:29.090" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""doesn't have any.""" start="00:17:36.557" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So let's go ahead and say &quot;Hello EmacsConf&quot;""" start="00:17:37.490" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and let's go ahead and run it again.""" start="00:17:42.441" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Since there are values,""" start="00:17:47.324" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""it's going to overwrite what's here and put value entered.""" start="00:17:48.458" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So let's go ahead.""" start="00:17:51.674" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Tada, so there you go.""" start="00:17:53.498" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So that is pretty much how you do conditional props,""" start="00:17:55.790" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""which is pretty straightforward""" start="00:18:00.624" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""once you think about it""" start="00:18:01.941" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""because if you are able to insert Lisp expressions,""" start="00:18:02.725" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""then you are able to just do that check""" start="00:18:05.441" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and do the conditional check yourself.""" start="00:18:08.241" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, custom formulas.""" start="00:18:11.174" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""Yeah, you'll see what I mean.""" start="00:18:13.640" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""We want to be able to put our own custom functions,""" start="00:18:15.424" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and you probably have an idea how to do this already.""" start="00:18:20.024" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Yes, we also know how to do this already.""" start="00:18:23.990" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Before I continue, I'm going to say that I already""" start="00:18:27.060" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""have some formulas that I use""" start="00:18:30.457" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""which are not part of this talk""" start="00:18:31.941" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""because they're just functions that calculate some stuff.""" start="00:18:33.375" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So for example, they calculate the monthly mortgage,""" start="00:18:37.490" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the monthly PMI, property tax, homeowners insurance,""" start="00:18:40.090" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""so a bunch of other stuff.""" start="00:18:43.357" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I have these functions already and they are a bit off,""" start="00:18:44.857" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""but for this example, they're doing everything.""" start="00:18:49.829" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""It's close enough, so don't worry too much.""" start="00:18:52.312" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Just an example, you can have your own function""" start="00:18:54.490" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""that does something else like calculate""" start="00:18:56.924" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""a REI B rental or something like that.""" start="00:18:59.313" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So you can do whatever you want.""" start="00:19:01.640" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""As long as you can call via Lisp,""" start="00:19:03.220" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""you can call it in Org mode, in the table formulas.""" start="00:19:04.824" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So let's exit out of there.""" start="00:19:07.900" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Now that we know how to do everything,""" start="00:19:11.437" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""let me go back to the original table and go from there.""" start="00:19:13.808" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Let me close all these out actually.""" start="00:19:21.024" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Now let's go back and revisit this table,""" start="00:19:26.624" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""since we'll be much, much more familiar""" start="00:19:29.624" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""except for one thing, which I will explain.""" start="00:19:31.620" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So we have the constants right there""" start="00:19:35.518" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and we have the house prices""" start="00:19:38.041" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and we have everything just like I mentioned before.""" start="00:19:39.691" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""The main part that we want to look at""" start="00:19:42.500" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""is the table formula.""" start="00:19:44.123" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So let's open up our special editing buffer,""" start="00:19:45.124" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""&quot;C-c ,&quot;,""" start="00:19:47.574" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and as you can see, I have some right here.""" start="00:19:49.774" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, the fifth column I'm saying,""" start="00:19:52.490" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""&quot;Hey, we're gonna call this function""" start="00:19:53.624" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""rei-calculate-down-payment, and I'm gonna""" start="00:19:55.924" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""pass in the third column and fourth column""" start="00:19:58.657" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and I'm going to pass in t.&quot; (true)""" start="00:20:00.758" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I believe this is just to normalize,""" start="00:20:02.340" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""to convert to the proper decimal place,""" start="00:20:07.174" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""so let's not worry too much about that.""" start="00:20:12.157" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Then for the sixth column, we're going to say""" start="00:20:14.179" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""&quot;I calculate the monthly mortgage.&quot;""" start="00:20:16.790" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""We're going to pass in the third column""" start="00:20:18.145" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the INTEREST_RATE, which we have""" start="00:20:20.224" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""defined over here in the constants.""" start="00:20:21.439" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""The 30, I believe this is for 30 years,""" start="00:20:22.980" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""PMI, the PROPERTY_TAX and HOME_INSURANCE,""" start="00:20:26.374" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and then the fourth column.""" start="00:20:29.423" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Then everything is going to be accepted as numbers,""" start="00:20:30.874" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and we're going to have two decimals""" start="00:20:33.924" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""at the end of the place.""" start="00:20:35.174" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, what else?""" start="00:20:36.274" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Over here is where we have our conditionals.""" start="00:20:37.607" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""We're saying, &quot;hey, if the seventh column is 0,""" start="00:20:40.174" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""press 'Enter Tenant Income'.&quot;""" start="00:20:42.374" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Over here as well, if the seventh column is zero,""" start="00:20:44.402" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""we're going to press 'Enter Tenant Income'""" start="00:20:48.507" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and for this one we're going to say,""" start="00:20:51.824" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""&quot;Hey, we're going to normalize the price.&quot;""" start="00:20:53.705" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I believe this is a 1% rule.""" start="00:20:56.040" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""This could have been extracted into a function,""" start="00:20:59.340" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""but I just did the calculation right here.""" start="00:21:01.490" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""This, I believe, is the ROI, 12 months.""" start="00:21:04.239" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""This is just calculating the cash flow.""" start="00:21:07.990" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""This is a very rudimentary function or formula.""" start="00:21:11.107" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Do not use this because there is way more""" start="00:21:15.407" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""to go into calculating the cash flow""" start="00:21:16.733" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and also, it differs from person to person.""" start="00:21:18.841" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Some people are more conservative,""" start="00:21:21.599" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""other people are way more liberal, so it just""" start="00:21:23.874" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""depends how you want to calculate it.""" start="00:21:26.960" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""As you can see, we have the N flag for numeric number""" start="00:21:28.974" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and then we're saying we're formatting""" start="00:21:34.241" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""to one decimal place.""" start="00:21:36.190" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""The %% sign is just to input a percent sign as itself.""" start="00:21:37.794" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Otherwise, Org mode is going to think""" start="00:21:43.208" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""it's some type of a formatter, which it's not.""" start="00:21:45.420" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""If you do... As I mentioned,""" start="00:21:48.040" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""if you've used the printf function in C or C++,""" start="00:21:49.240" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""then you probably know how to use it.""" start="00:21:51.790" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Okay, so this is pretty much everything in a nutshell.""" start="00:21:55.607" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""So, one thing that I do want to say""" start="00:22:01.924" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""is the last section,""" start="00:22:05.070" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""which is automatically updating,""" start="00:22:06.479" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""which is the part that blew my mind""" start="00:22:07.874" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""when I realized that Org Mode can do this.""" start="00:22:10.175" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So how do we do it?""" start="00:22:11.557" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Well, you probably guessed just from looking at""" start="00:22:12.577" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""at the first table that we have right now.""" start="00:22:14.660" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""We add a column at the beginning""" start="00:22:18.424" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""of the table with a percent (%)--""" start="00:22:20.874" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I'm sorry, with the pound sign (#)""" start="00:22:22.957" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""or hashtag as the younger kids call it.""" start="00:22:24.957" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So this is what we do.""" start="00:22:28.557" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""We added a column at the beginning of the""" start="00:22:31.145" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""table, we do pound sign (#).""" start="00:22:32.820" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So this is what it's for.""" start="00:22:35.084" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""This lets Org mode know that &quot;hey,""" start="00:22:35.890" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I want the values, the table formulas,""" start="00:22:38.840" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""to automatically run on each tab change.&quot;""" start="00:22:41.240" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Now I believe that you can make it so that""" start="00:22:44.057" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""it changes, so that it updates on every keystroke.""" start="00:22:46.340" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I think that's too much.""" start="00:22:49.223" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""And then you can also make it so that""" start="00:22:51.124" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""only certain rows update or certain columns.""" start="00:22:53.107" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""There's a plethora of things that you can do.""" start="00:22:56.020" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""You should definitely read up on the documentation,""" start="00:22:58.319" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""because you will probably make a way better talk,""" start="00:23:01.024" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""a way more advanced talk than I on this one,""" start="00:23:03.525" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""so I'm looking forward for that.""" start="00:23:07.074" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""But this is essentially how you build""" start="00:23:09.674" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""a Org mode table formula that will help you know""" start="00:23:12.460" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""if a property is correct.""" start="00:23:15.508" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, let's go ahead and as a final out to this demo,""" start="00:23:17.225" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""let's go ahead and enter a new column.""" start="00:23:22.440" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Org-mode automatically puts the pound sign (#),""" start="00:23:25.420" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""which is awesome, and let's just say 'Emacs House',""" start="00:23:30.274" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and let's say it is 100k.""" start="00:23:35.540" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So 100k, and as you can see it's already trying to""" start="00:23:39.690" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""calculate the monthly mortgage,""" start="00:23:44.340" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""but we'll see about that,""" start="00:23:46.140" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and let's just put 10% down.""" start="00:23:47.190" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So 10% of 100k should be 10,000.""" start="00:23:49.880" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So 10,000, correct, and the monthly mortgage is that""" start="00:23:53.157" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and let's just say the tenant income is,""" start="00:23:56.408" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""as you can see right here,""" start="00:24:00.190" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""tenant income is, let's say 1500.""" start="00:24:01.757" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Is it passing the 1% rule?""" start="00:24:05.974" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Yep! What's my ROI?""" start="00:24:07.374" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""118%, which is kind of cool actually.""" start="00:24:09.524" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""That's a nice deal.""" start="00:24:13.880" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So this is a rudimentary way of""" start="00:24:14.907" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""calculating deals in Org mode.""" start="00:24:17.757" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I hope you found it interesting, and yeah, that is it.""" start="00:24:20.419" video="mainVideo-realestate" id="subtitle"]]
+
+
+
+Captioner: tom
+
+Questions or comments? Please e-mail [gopardaniel@gmail.com](mailto:gopardaniel@gmail.com?subject=Comment%20for%20EmacsConf%202022%20realestate%3A%20Real%20estate%20and%20Org%20table%20formulas)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/realestate-before.md b/2022/info/realestate-before.md
new file mode 100644
index 00000000..58b26d1d
--- /dev/null
+++ b/2022/info/realestate-before.md
@@ -0,0 +1,40 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Daniel Gopar shares how he uses Org tables as spreadsheets to help him decide on real estate investments. Afterwards, he will handle questions via the Etherpad.
+
+
+The following image shows where the talk is in the schedule for Sat 2022-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="realestate">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect stroke-width="3" x="494" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 25-min talk followed by pad Q&A (<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-dev,emacsconf-gen">#emacsconf-gen</a>)
+Etherpad: <https://pad.emacsconf.org/2022-realestate>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: Q&A finished, IRC and pad will be archived on this page
+
+
+
+
+<div class="vid"><video controls preload="none" id="realestate-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-realestate--real-estate-and-org-table-formulas--daniel-gopar--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-realestate--real-estate-and-org-table-formulas--daniel-gopar--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-realestate--real-estate-and-org-table-formulas--daniel-gopar--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="realestate-mainVideo" data="""
+00:00.000 Introduction
+00:20.480 The end goal
+00:51.800 Constants and variables
+02:11.520 ROI
+02:40.040 Demo
+03:32.240 Detecting input
+04:02.240 Creating a table
+04:26.400 C-c C-c
+05:17.960 Our first formula
+07:13.000 Basic arithmetic
+08:11.720 Debugging
+09:53.600 Flags
+12:07.040 Recalculating
+12:50.040 Multiple formulas
+14:56.777 Formatting
+16:36.202 Conditional prompts
+18:12.203 Custom formulas
+21:57.857 Automatically updating
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-realestate--real-estate-and-org-table-formulas--daniel-gopar--main.webm">Download --main.webm (52MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-realestate--real-estate-and-org-table-formulas--daniel-gopar--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-realestate--real-estate-and-org-table-formulas--daniel-gopar--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/wNqs2ukhcQwCzUkar2bq55">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/realestate-nav.md b/2022/info/realestate-nav.md
new file mode 100644
index 00000000..936d9d38
--- /dev/null
+++ b/2022/info/realestate-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/mail">Revisiting the anatomy of Emacs mail user agents</a>
+Next by track: <a href="/2022/talks/maint">Maintaining the Maintainers: Attribution as an Economic Model for Open Source</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/rms-after.md b/2022/info/rms-after.md
new file mode 100644
index 00000000..455bdfbc
--- /dev/null
+++ b/2022/info/rms-after.md
@@ -0,0 +1,260 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="rms-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hello! I'm going to talk about what I would like to see""" start="00:00:00.000" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""in GNU Emacs in the future,""" start="00:00:08.960" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and what I would prefer not to find there.""" start="00:00:11.240" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""This is all within the context""" start="00:00:17.600" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""of GNU Emacs and its purpose.""" start="00:00:22.080" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""GNU Emacs is a part of the GNU operating system,""" start="00:00:25.360" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and the purpose of the GNU operating system""" start="00:00:30.600" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""is not simply to do a good job technically,""" start="00:00:33.400" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""not simply to be good to use.""" start="00:00:38.840" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Its main purpose, its overall purpose,""" start="00:00:42.640" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""is to give people freedom,""" start="00:00:45.760" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and to help them value and defend that freedom.""" start="00:00:48.560" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""A GNU package, by being a convenient, well-written program,""" start="00:00:54.760" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""should contribute to that overall ethical and social goal,""" start="00:01:00.160" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and not only to the usefulness of our software.""" start="00:01:06.000" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""This is true for GNU Emacs""" start="00:01:10.440" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""as much as it is for any other free program we’ve developed.""" start="00:01:14.080" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""In fact, GNU Emacs is the first GNU program that I released.""" start="00:01:18.720" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""I had written some other things before that,""" start="00:01:25.320" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""but didn't release them at that time.""" start="00:01:28.800" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""There was no particular use in doing so.""" start="00:01:30.600" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""So it was through GNU Emacs""" start="00:01:34.200" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""that I learned about various things""" start="00:01:36.107" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""such as software licenses and how to defend freedom.""" start="00:01:38.407" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""You're of course familiar with what GNU Emacs is today,""" start="00:01:44.240" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""thanks to the contributions of thousands of other people""" start="00:01:50.507" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""who came after me.""" start="00:01:54.340" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""What would I like?""" start="00:01:57.067" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""What would other people like?""" start="00:01:58.880" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Lots of people come to Emacs familiar with VS Code,""" start="00:02:01.533" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and they say, &quot;Please make Emacs more like VS Code.""" start="00:02:06.480" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Change everything that you did in the 1980s and 90s""" start="00:02:10.520" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to be like that other thing.&quot;""" start="00:02:15.840" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""That wouldn't be feasible even if we wanted to.""" start="00:02:18.320" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Our goal is not to be... not resembling VS Code.""" start="00:02:24.200" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Any resemblance is coincidental.""" start="00:02:30.440" video="mainVideo-rms" id="subtitle"]]
+[[!template new="1" text="""But in particular,""" start="00:02:33.640" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""we do not want to have extension languages other than Lisp.""" start="00:02:38.040" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Emacs Lisp is the variant of Lisp""" start="00:02:43.874" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""that we've always supported,""" start="00:02:47.574" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""which has evolved along with Emacs.""" start="00:02:49.574" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""We can conceivably have Scheme as well,""" start="00:02:52.960" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""if we can sufficiently solve the problems,""" start="00:02:57.400" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""the technical problems of making Scheme""" start="00:03:01.140" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and Emacs Lisp interoperate.""" start="00:03:03.760" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""We did some design work, I think that was with Tom Lord,""" start="00:03:06.480" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""whom the community will greatly miss.""" start="00:03:11.600" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""In the 1990s, there are challenges that remain;""" start="00:03:15.880" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""maybe it can be done.""" start="00:03:19.340" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""But a non-Lispy language would be a mistake.""" start="00:03:21.360" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""It would divert our development focus into areas""" start="00:03:27.960" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""that we don't need, languages that are less powerful,""" start="00:03:33.000" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""less beautiful, and less desirable for the purpose.""" start="00:03:37.480" video="mainVideo-rms" id="subtitle"]]
+[[!template new="1" text="""However, the language that we above all shouldn't support""" start="00:03:46.280" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""is JavaScript. That's not because of the language itself.""" start="00:03:52.120" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""I don't know the JavaScript language,""" start="00:03:57.333" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""I've heard people say it's rather clumsy""" start="00:04:00.480" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and not well designed, but I don't know this.""" start="00:04:04.200" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""In any case, it's not what my views are based on.""" start="00:04:07.520" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""There's something much worse about JavaScript,""" start="00:04:12.400" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""which is not the language itself, but how people use it.""" start="00:04:14.840" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Namely, it's been adopted as a way for a network server""" start="00:04:18.800" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to send a program to your machine""" start="00:04:23.640" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""without your even noticing, so that this program,""" start="00:04:26.120" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""written by you don't know who, will run on your computer""" start="00:04:30.120" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and do you don't know what.""" start="00:04:35.107" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""And you're supposed to just trust""" start="00:04:37.200" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""all and sundry developers of software""" start="00:04:39.774" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""for the sites you visit,""" start="00:04:43.640" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""which very commonly do malicious things, often unknown""" start="00:04:45.840" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to the people who are running the server itself.""" start="00:04:51.320" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""They paid someone else to design a website""" start="00:04:55.680" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and they probably said, oh,""" start="00:04:59.320" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""make it fashionable and attractive.""" start="00:05:01.407" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""And they didn't insist, don't snoop on the visitors,""" start="00:05:04.440" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""even if they understood what the issue was.""" start="00:05:09.760" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""So these sites snoop. It's a serious problem.""" start="00:05:12.840" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""The problem comes not from the language JavaScript,""" start="00:05:20.480" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""but from the fact that browsers, by default,""" start="00:05:24.080" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""will pull in JavaScript code that gets sent to them""" start="00:05:28.680" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and run it to do anything at all.""" start="00:05:32.440" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Emacs is supposed to defend your freedom.""" start="00:05:35.933" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""It's supposed to help you to defend your freedom,""" start="00:05:39.320" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and lead you to defend your freedom,""" start="00:05:42.520" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""which means it shouldn't lead you""" start="00:05:45.640" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to throw your freedom away as soon as you visit a site""" start="00:05:47.200" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""that tries to send you a non-free program""" start="00:05:50.960" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to run straight off of that other machine.""" start="00:05:53.920" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""So it's important not to lead users""" start="00:05:58.280" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to do computing this way.""" start="00:06:04.080" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""So what are some good things""" start="00:06:06.520" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""that we would want instead of this?""" start="00:06:10.800" video="mainVideo-rms" id="subtitle"]]
+[[!template new="1" text="""One thing we want""" start="00:06:14.640" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""is to update the &quot;Introduction to Emacs Lisp Programming&quot;""" start="00:06:19.874" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""by the late Bob Chassell.""" start="00:06:26.574" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""It's a book that makes it easy for even non-programmers""" start="00:06:29.480" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to learn to write simple programs in Emacs Lisp.""" start="00:06:34.720" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""And from there, they can go on to do better.""" start="00:06:38.000" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""We made a pretty big change in Emacs Lisp""" start="00:06:41.200" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""a few years ago, implementing lexical scoping by default.""" start="00:06:44.800" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Originally, Emacs Lisp used to be entirely dynamic scoping,""" start="00:06:49.480" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""like some of the earliest Lisp interpreters.""" start="00:06:57.360" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""This is a change that should have a careful job""" start="00:07:01.960" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""of updating for the introduction.""" start="00:07:06.520" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""I'm sure we've made it clear in the reference manual,""" start="00:07:10.560" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""but that's not what beginners read first.""" start="00:07:14.600" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""We need something to teach them in lexical scoping.""" start="00:07:18.400" video="mainVideo-rms" id="subtitle"]]
+[[!template new="1" text="""Another thing we could use is to make it easier""" start="00:07:23.407" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to understand the facilities that we have.""" start="00:07:30.440" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""For instance, I think every package""" start="00:07:33.880" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""that you might load into your Emacs and run""" start="00:07:38.560" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""should have a name that helps you remember what job it does.""" start="00:07:42.200" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""It doesn't have to be super long to tell you""" start="00:07:47.680" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""what job that package does.""" start="00:07:51.374" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""You can read the description to learn that.""" start="00:07:53.607" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""But once you've read the description,""" start="00:07:56.874" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""it should be memorable. When you see that name again,""" start="00:07:59.600" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""you should realize, oh, that's the package I could use""" start="00:08:03.074" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to do &quot;less&quot; and so. We've had a tendency""" start="00:08:06.607" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to give packages names for the sake of pure wordplay""" start="00:08:11.880" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""or lack of obvious meaning,""" start="00:08:17.940" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and I think we should add on, to those packages,""" start="00:08:23.574" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""names that people will remember.""" start="00:08:28.189" video="mainVideo-rms" id="subtitle"]]
+[[!template new="1" text="""Also, there are ways we can simplify the command interface""" start="00:08:31.807" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""of Emacs. For instance, there are many different parameters""" start="00:08:39.200" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""users can specify that can have several values,""" start="00:08:43.760" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and sometimes you do various kinds of editing""" start="00:08:48.000" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""in one session. That's normal in Emacs,""" start="00:08:51.807" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and you might want different parameter settings""" start="00:08:54.440" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""for different kinds of editing.""" start="00:08:57.840" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""So you specify parameter value A, do some editing,""" start="00:09:00.407" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""you specify parameter value B, and do some editing,""" start="00:09:06.200" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and you'd switch back and forth, so you want""" start="00:09:10.240" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to switch back and forth between these parameters.""" start="00:09:13.720" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""I think we should aim ...""" start="00:09:17.440" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""People have added various commands to switch""" start="00:09:22.707" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""between the last two or n values of this parameter,""" start="00:09:26.740" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and another command to switch""" start="00:09:30.500" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""between the last two or n values of this [other] parameter,""" start="00:09:32.774" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and then that parameter, you know, and that parameter.""" start="00:09:36.840" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""I think we should be able to have""" start="00:09:41.360" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""a switch between the last n values command""" start="00:09:44.767" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""that works on various different parameters,""" start="00:09:49.120" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and thus makes it easy to remember""" start="00:09:54.320" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""that there is this facility.""" start="00:09:57.040" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Because right now the commands to do that are all ad-hoc,""" start="00:09:59.340" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and if you don't use a toggling among the last n values""" start="00:10:03.874" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""of a given parameter, you won't know how to do it.""" start="00:10:08.640" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""It won't be obvious that there is a way,""" start="00:10:11.840" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""so you'd have to go to a suitable manual""" start="00:10:15.367" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and study for a while to think of that.""" start="00:10:17.767" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""We could make this easily discoverable.""" start="00:10:20.100" video="mainVideo-rms" id="subtitle"]]
+[[!template new="1" text="""There is another kind of modularity that's important,""" start="00:10:23.620" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and that is modularity at the level of maintenance.""" start="00:10:30.140" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""This is something all programmers know about, of course,""" start="00:10:34.100" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""but in Emacs, various parts interact with other parts,""" start="00:10:38.307" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and we've tried to make them modular in design""" start="00:10:43.300" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""by using lots of hooks,""" start="00:10:47.980" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""but we haven't gone as far as we could.""" start="00:10:50.380" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""With some effort, we could find calls""" start="00:10:54.380" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""from over here to over there""" start="00:10:58.060" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""that could be replaced by use of hooks,""" start="00:11:00.220" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""so that we could reduce the extent""" start="00:11:03.140" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to which you need to know about one part of Emacs""" start="00:11:05.940" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to maintain another part of Emacs,""" start="00:11:09.974" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and I think that as we keep adding more facilities to Emacs,""" start="00:11:12.707" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""this kind of modularity will be an investment that pays off.""" start="00:11:17.580" video="mainVideo-rms" id="subtitle"]]
+[[!template new="1" text="""There’s one big area of features""" start="00:11:22.220" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""that I would like to see in Emacs,""" start="00:11:27.240" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and that's the ability to edit""" start="00:11:30.800" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""formatted documents in WYSIWYG, to be able to edit""" start="00:11:33.180" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""a letter or a scientific mathematical paper with formulas""" start="00:11:40.340" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""or a nicely laid out manual,""" start="00:11:47.940" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""looking at what it's really going to look like.""" start="00:11:52.900" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Now we have free software to do this.""" start="00:11:56.660" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""For instance, I use LibreOffice some of the time.""" start="00:12:00.460" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Sometimes it's faster than writing something""" start="00:12:04.660" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to be formatted with a text formatter""" start="00:12:08.100" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and then formatting it. But when I use LibreOffice,""" start="00:12:11.860" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""I always miss the commands and facilities,""" start="00:12:16.180" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""the editing facilities of Emacs.""" start="00:12:19.220" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""I'd like to have them both together, something with""" start="00:12:22.674" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""the text formatting capabilities of LibreOffice""" start="00:12:26.500" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""or even better of TeX, but the editing commands""" start="00:12:30.340" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and facilities of Emacs. This would be a big job,""" start="00:12:36.060" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""but it can be made up of a lot of medium-sized jobs.""" start="00:12:40.300" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""If people start working on those medium-sized jobs,""" start="00:12:45.980" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""then in a number of years""" start="00:12:50.020" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""we'll have something absolutely amazing.""" start="00:12:52.060" video="mainVideo-rms" id="subtitle"]]
+[[!template new="1" text="""But one thing I think we really shouldn't have""" start="00:12:55.460" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""is the equivalent of a modern web browser.""" start="00:13:01.140" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""The World Wide Web started out in the 1990s""" start="00:13:06.500" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""in a much simpler form,""" start="00:13:10.940" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""where a web page described its contents,""" start="00:13:13.874" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and the web browser laid them out,""" start="00:13:17.820" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and the user could parameterize""" start="00:13:21.180" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""how to lay out various kinds of situations.""" start="00:13:23.807" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""This was not only convenient for users""" start="00:13:27.140" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""who wanted to control things and understand things,""" start="00:13:31.807" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""it was also freedom-respecting""" start="00:13:35.974" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""because the layout was done by your browser.""" start="00:13:39.740" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""If you had a free browser, you were in control,""" start="00:13:43.020" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""even though the browser was complicated already.""" start="00:13:48.100" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""But starting around two decades ago,""" start="00:13:51.620" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""there was an explosion in the complexity of browsers""" start="00:13:54.807" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""as companies wanted to have more and more control""" start="00:13:58.820" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""over exactly what would appear on a user's screen.""" start="00:14:02.780" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""So they invented lots of features to control that,""" start="00:14:07.700" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""features where the user couldn't really customize""" start="00:14:12.474" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""how something would actually appear""" start="00:14:16.007" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""because the whole point was that""" start="00:14:18.407" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""the company could control that.""" start="00:14:21.307" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""And JavaScript was sort of the ultimate level""" start="00:14:23.807" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""of &quot;the company controls everything.&quot;""" start="00:14:27.020" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Because of this, going beyond the simple level""" start="00:14:32.107" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""of web page formatting features in Emacs""" start="00:14:38.500" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""is basically heading down a path that leads to subjugation.""" start="00:14:43.540" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""It's a path that we need to stay away from.""" start="00:14:50.940" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""It's a path to an unjust world of computing""" start="00:14:54.740" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""that you can easily see around you.""" start="00:15:00.407" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Web browsers nowadays are designed to display ads""" start="00:15:03.420" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""that you may not want to see.""" start="00:15:08.700" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""They're designed for DRM.""" start="00:15:11.667" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""They're designed for companies to snoop on you""" start="00:15:17.900" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""in unobvious ways. And all of that""" start="00:15:22.420" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""we should protect ourselves from,""" start="00:15:26.300" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""protect our users from.""" start="00:15:28.980" video="mainVideo-rms" id="subtitle"]]
+[[!template new="1" text="""So I hope that some of you will be enthusiastic""" start="00:15:31.300" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""about some of these changes,""" start="00:15:39.980" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""especially towards editing formatted text.""" start="00:15:42.060" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""If you want to get involved, we have""" start="00:15:46.940" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""a development discussion list called emacs-devel@gnu.org.""" start="00:15:51.980" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""You can join that. You can also,""" start="00:15:57.820" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""if you get interested in working on a package""" start="00:16:02.380" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and you're not an experienced Emacs Lisp developer,""" start="00:16:05.740" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""it's a very good idea to look for an experienced developer""" start="00:16:09.500" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to talk with.""" start="00:16:13.740" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Make sure you can write programs in Emacs Lisp first.""" start="00:16:14.980" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""It's not useful to take up the expert’s time learning that.""" start="00:16:19.220" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""You can still learn it from the introduction.""" start="00:16:24.260" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""But after that, when it's a matter of how to design""" start="00:16:27.407" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""your favorite package, do have a discussion with developers.""" start="00:16:31.660" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""They'll give you design ideas""" start="00:16:36.180" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""that will help you make a package that we put into Emacs.""" start="00:16:39.060" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Now it's time for questions.""" start="00:16:43.180" video="mainVideo-rms" id="subtitle"]]
+
+
+
+Captioner: anush
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20rms%3A%20What%20I%27d%20like%20to%20see%20in%20Emacs)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/rms-before.md b/2022/info/rms-before.md
new file mode 100644
index 00000000..62113c2d
--- /dev/null
+++ b/2022/info/rms-before.md
@@ -0,0 +1,78 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+For context, we will first play Richard Stallman's 2014 TEDx talk called "Free Software, Free Society." The TEDx talk is licensed under the Creative Commons Attribution - No Derivative Works 3.0 license. Afterwards, Richard Stallman will discuss what he believes will be good ways to improve Emacs. The EmacsConf talk will be under the Creative Commons Attribution - ShareAlike license. There will be a moderated Q&A, so please put your questions in the Etherpad or IRC.
+
+
+The following image shows where the talk is in the schedule for Sun 2022-12-04. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="rms">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(126,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect stroke-width="3" x="211" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect x="378" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(399,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 18-min talk followed by moderated Mumble Q&A (<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-gen,emacsconf-dev">#emacsconf-dev</a>)
+Etherpad: <https://pad.emacsconf.org/2022-rms>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: TO_CAPTION_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-04T16:15:00Z" end="2022-12-04T16:35:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~11:15 AM - 11:35 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 4 2022, ~10:15 AM - 10:35 AM CST (US/Central)<br />Sunday, Dec 4 2022, ~9:15 AM - 9:35 AM MST (US/Mountain)<br />Sunday, Dec 4 2022, ~8:15 AM - 8:35 AM PST (US/Pacific)<br />Sunday, Dec 4 2022, ~4:15 PM - 4:35 PM UTC <br />Sunday, Dec 4 2022, ~5:15 PM - 5:35 PM CET (Europe/Paris)<br />Sunday, Dec 4 2022, ~6:15 PM - 6:35 PM EET (Europe/Athens)<br />Sunday, Dec 4 2022, ~9:45 PM - 10:05 PM IST (Asia/Kolkata)<br />Monday, Dec 5 2022, ~12:15 AM - 12:35 AM +08 (Asia/Singapore)<br />Monday, Dec 5 2022, ~1:15 AM - 1:35 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/dev/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="rms-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="rms-mainVideo" data="""
+00:00.000 GNU Emacs and its purpose
+02:33.640 Lisp as the extension language
+03:46.280 JavaScript versus freedom
+06:14.640 Updating "An Introduction to Emacs Lisp Programming"
+07:23.407 More memorable package names
+08:31.807 Simplifying the command interface
+10:23.620 Modularity
+11:22.220 Editing formatted text
+12:55.460 Not the equivalent of a modern web browser
+15:31.300 Getting involved
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main.webm">Download --main.webm (81MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main.opus">Download --main.opus (7.7MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/oWWwS9T9BTQU8DnJ2g56vm">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="rms-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="rms-qanda" data="""
+00:56.800 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?
+03:24.600 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?
+04:52.520 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.
+07:27.000 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?
+08:44.760 Could you give a few examples of the medium-sized jobs necessary for WYSIWYG-editor support in Emacs?
+09:33.480 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)?
+10:57.440 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.?
+13:50.480 Are there any problems or disadvantages using the GNU AGPL for non-networked software like Emacs packages?
+14:50.280 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?
+16:36.840 What roadblocks kept some of the other efforts from being used with Emacs?
+17:36.240 What do you use emacs for beyond editing?
+17:55.120 Song about e-mail
+18:49.556 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?
+20:05.760 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.
+22:42.440 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)
+24:26.920 Do you recommend reaching out in [high] schools for volunteers instead of universities because they are more prone to value the objectives of freedom?
+25:35.040 What was the thought process behind making Emacs Lisp dynamically scoped when you first created it? What advantages did it provide over the alternative?
+27:18.766 It's hard to pick up Emacs if you do not speak English. Can something be done to address that?
+29:28.840 Do you use Org or Org mode, and if so, to what extent?
+33:54.480 What do you have in mind for more modular Emacs development?
+35:19.040 Reframing the school question
+36:18.640 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?
+37:48.800 Do you still intend to merge your patch to the "shorthands" feature to the master branch?
+38:54.880 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.
+40:27.920 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?
+43:35.915 Have you seen Haketilo? It seems similar to LibreJS.
+45:45.568 Do you have any suggestions for helping propective contributers streamline
+the copyright assignment needed to contribute to Emacs (and other FSF software
+projects)?
+47:09.800 Can complexity induced by company-funded free/libre code become a problem, when the company pulls out, leaving the code potentially unmaintainable?
+49:31.280 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
+52:06.251 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?
+53:03.000 What is your opinion on the current state of large machine
+learning/AI models?
+54:14.302 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?
+55:38.840 Do you ever dabble in retro-computing, e.g. logging into TOPS10/20 systems SDF, etc?
+56:38.196 Do you know Gemini?
+58:04.480 stallmansupport.org
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="rms-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers.webm">Download --answers.webm (129MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers.opus">Download --answers.opus (30MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/rms-nav.md b/2022/info/rms-nav.md
new file mode 100644
index 00000000..1ae68acd
--- /dev/null
+++ b/2022/info/rms-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/orgvm">orgvm: a simple HTTP server for org</a>
+Next by track: <a href="/2022/talks/hyperorg">Powerful productivity with Hyperbole and Org Mode</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/rolodex-after.md b/2022/info/rolodex-after.md
new file mode 100644
index 00000000..bcd512c2
--- /dev/null
+++ b/2022/info/rolodex-after.md
@@ -0,0 +1,453 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="rolodex-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hello, attendees of EmacsConf 2022!""" start="00:00:00.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""The title of my talk is:""" start="00:00:06.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""&quot;Build a Zettelkasten with the Hyperbole Rolodex.&quot;""" start="00:00:08.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""My name is Ramin Honary.""" start="00:00:16.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I work as a software engineer""" start="00:00:17.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""writing apps for a small machine learning consultancy.""" start="00:00:19.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I have been using Emacs since roughly 2018""" start="00:00:22.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""after having switched from a workflow""" start="00:00:24.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""using Vim together with Screen/Tmux for over a decade.""" start="00:00:26.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Today I'd like to talk a bit about""" start="00:00:29.440" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""the Hyperbole package for Emacs.""" start="00:00:31.440" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Others are presenting talks later today""" start="00:00:34.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""about Hyperbole as well,""" start="00:00:36.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""including some of the the authors and maintainers,""" start="00:00:37.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""so I won't go into too much detail""" start="00:00:39.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""about how Hyperbole works.""" start="00:00:41.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Instead, I want to present""" start="00:00:43.560" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""a more concrete use case for Hyperbole,""" start="00:00:45.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""which is how to use it to facilitate""" start="00:00:46.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""the Zettelkasten method.""" start="00:00:49.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Most Emacs users will probably be""" start="00:00:51.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""more familiar with Org Roam.""" start="00:00:53.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Org Roam may even be the first thing that comes to mind""" start="00:00:56.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""when you hear the word &quot;Zettelkasten.&quot;""" start="00:00:58.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""But personally, I use Hyperbole""" start="00:01:00.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""because I found it easier to get started with""" start="00:01:02.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""using it as an ideas database.""" start="00:01:05.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""All you need to do is install the Hyperbole package""" start="00:01:07.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""(which is available on GNU-ELPA)""" start="00:01:09.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and then set a few customization options.""" start="00:01:11.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""There is nothing else you really need to do""" start="00:01:13.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""to get started.""" start="00:01:15.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""And also, Hyperbole works nicely with Org Mode.""" start="00:01:16.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""So Hyperbole's built-in functionality""" start="00:01:19.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""can be used as a nice, light-weight alternative""" start="00:01:21.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""to other Emacs Zettelkasten packages.""" start="00:01:24.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""This talk is for people who are curious about""" start="00:01:28.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""getting started with the Zettelkasten method,""" start="00:01:30.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""but are not ready to commit""" start="00:01:34.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""to a more purpose-built solution like Org Roam.""" start="00:01:36.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""So the thing I'd like people""" start="00:01:41.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""to take away from this presentation""" start="00:01:42.720" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""is that the Hyperbole Emacs package""" start="00:01:44.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""provides you with a flat-file database called &quot;HyRolo&quot;""" start="00:01:46.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""which you can use to store ideas.""" start="00:01:50.640" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Then you can use what Hyperbole calls &quot;buttons&quot;""" start="00:01:53.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""(which are hyperlinks)""" start="00:01:56.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""to execute arbitrary Emacs commands""" start="00:01:57.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and by inserting links into your database""" start="00:02:00.520" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that execute queries against the database itself.""" start="00:02:03.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""These query-action links serve as""" start="00:02:06.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""a means to link ideas together,""" start="00:02:08.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""thus creating a functioning &quot;Zettelkasten.&quot;""" start="00:02:10.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""If this doesn't make sense to you,""" start="00:02:13.440" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I'll explain what all of this means presently.""" start="00:02:15.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""So just a quick overview of what &quot;Zettelkasten&quot; is.""" start="00:02:19.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Note that most of what I say""" start="00:02:24.360" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""about the Zettelkasten method""" start="00:02:26.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""comes from a guy called Sascha Fast,""" start="00:02:27.360" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and his website: zettelkasten.de .""" start="00:02:29.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""So a Zettelkasten is, in brief,""" start="00:02:33.120" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""a database containing many nodes of interconnected ideas,""" start="00:02:35.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""each idea being a single quantity of knowledge""" start="00:02:38.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""(about a paragraph)""" start="00:02:40.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and linked to other related ideas.""" start="00:02:42.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""Also, let me quickly mention""" start="00:02:46.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that there are actually many tools I use""" start="00:02:47.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that assist me with the zettelkasten method:""" start="00:02:49.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Hyperbole for hyperlinks;""" start="00:02:51.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Embark for general text editing;""" start="00:02:53.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Org Mode for markup;""" start="00:02:56.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Dired for managing large sets of files;""" start="00:02:57.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Consult, Vertico, Orderless, Marginalia;""" start="00:02:59.440" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for interactive search through directories and documents;""" start="00:03:01.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and Magit for revision control,""" start="00:03:04.520" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and syncing my database of ideas""" start="00:03:06.360" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""across a few of my computers.""" start="00:03:08.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Each of these tools provides some unique functionality,""" start="00:03:10.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""but today I will be focusing mostly on Hyperbole""" start="00:03:12.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and how it is especially useful""" start="00:03:15.440" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for the task of linking information together""" start="00:03:17.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""which is the most important aspect""" start="00:03:19.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""of the Zettelkasten methodology.""" start="00:03:21.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""And now I'll briefly go over what Hyperbole is.""" start="00:03:25.360" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""At it's core, Hyperbole is a simple markup language""" start="00:03:28.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""specifically designed to markup hyperlinks.""" start="00:03:31.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Now, a hyperlink usually is only able to jump to""" start="00:03:34.520" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""ordinary URLs and file paths.""" start="00:03:38.440" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Hyperbole extends the function of a hyperlink to provide""" start="00:03:40.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""a simple human-readable markup""" start="00:03:44.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for executing Emacs commands (called &quot;button actions&quot;)""" start="00:03:46.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and then, on top of this core functionality,""" start="00:03:49.640" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""a few mini applications""" start="00:03:52.360" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for example &quot;HyRolo&quot; and &quot;Koutline&quot;,""" start="00:03:53.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""have been built to make Hyperbole more generally useful""" start="00:03:56.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""as a personal information management tool.""" start="00:04:00.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""&quot;HyRolo&quot; is the feature that I use as my Zettelkasten,""" start="00:04:03.520" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and in particular, the HyRolo search feature""" start="00:04:07.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""in combination with""" start="00:04:11.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""the usual Hyperbole hyperlink markup language.""" start="00:04:12.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""So let me just quote the Hyperbole manual:""" start="00:04:16.720" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""&quot;Hyperbole includes HyRolo for convenient management of""" start="00:04:19.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""hierarchical, record-oriented information.""" start="00:04:24.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Most often, this is used for contact management""" start="00:04:27.440" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""but it can quickly be adapted to most any""" start="00:04:30.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""record-oriented lookup task requiring fast retrieval.&quot;""" start="00:04:33.520" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""So in other words, for example,""" start="00:04:37.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""it can be used to run search queries""" start="00:04:38.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""across the full set of nodes in a set of Org-Mode files.""" start="00:04:41.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""This means we can use an Org-Mode file""" start="00:04:44.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""as a flat-file database""" start="00:04:47.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""in which entries in the database can be linked together.""" start="00:04:49.640" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""This, in essence, is a what a Zettelkasten is.""" start="00:04:52.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""HyRolo needs almost no configuration,""" start="00:04:55.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""even if you are using it""" start="00:04:58.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for the purpose of Zettelkasten,""" start="00:05:00.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""but you should at least make sure""" start="00:05:01.720" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""you set the location of the database""" start="00:05:03.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""in your Emacs config file, using the Customize system""" start="00:05:05.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""or however you prefer to configure your Emacs.""" start="00:05:08.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I use &quot;use-package&quot;, and on this slide I have here""" start="00:05:10.360" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""an abridged version of what my &quot;init.el&quot; file""" start="00:05:13.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""looks like for the Hyperbole package.""" start="00:05:15.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""A few relevant environment variables are set:""" start="00:05:18.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""the &quot;hyrolo-file-list&quot; variable""" start="00:05:21.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""selects where to find Rolo database files""" start="00:05:23.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for the purpose of search. I have it set""" start="00:05:26.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""to just the Zettelkasten flat file database.""" start="00:05:29.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""And I also set &quot;hyrolo-date-format&quot; variable.""" start="00:05:31.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Each database entry has a time stamp, and""" start="00:05:35.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I use the time stamp as a unique ID""" start="00:05:37.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for each entry (that is, each idea node)""" start="00:05:40.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""in the database.""" start="00:05:43.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""Finally, before I get into the actual demo,""" start="00:05:44.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""let me quickly explain""" start="00:05:48.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""the Hyperbole mini-buffer menu system.""" start="00:05:49.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Mini-buffer menus in Hyperbole work just like""" start="00:05:51.560" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""in an ordinary GUI,""" start="00:05:54.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""except you typically enter into the mini-buffer menu""" start="00:05:55.560" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with a key binding instead of a mouse click.""" start="00:05:58.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""To open the Hyperbole menu,""" start="00:06:01.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""you use the Hyperbole universal leader key""" start="00:06:03.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that's C-h h, which by the way,""" start="00:06:06.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""this rebinds the &quot;view-hello-file&quot; command,""" start="00:06:09.520" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""which is a command that probably most people never use.""" start="00:06:13.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""So all Hyperbole menu key sequences begin with C-h h.""" start="00:06:15.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Please remember this:""" start="00:06:20.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""as I explain how to do things,""" start="00:06:23.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""please don't worry too much""" start="00:06:25.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""about the key sequences I use""" start="00:06:26.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""to perform certain actions.""" start="00:06:28.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Really, I am just navigating""" start="00:06:30.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""the Hyperbole mini-buffer menus.""" start="00:06:32.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""It is a very discoverable and fluid user interface.""" start="00:06:33.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""Anyway, now that we have configured our Rolo database,""" start="00:06:37.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""let's see how we enter new ideas into the database.""" start="00:06:42.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""And I will start with an empty database,""" start="00:06:45.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""then I'll switch over to a more complete database""" start="00:06:48.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that I prepared for this demo. So...""" start="00:06:53.640" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""first we type the Hyperbole universal leader key C-h h,""" start="00:06:57.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and then, you can see the menus down here""" start="00:07:04.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""we type &quot;r&quot; for &quot;Rolo&quot; and &quot;a&quot; for &quot;add&quot;.""" start="00:07:08.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""That's C-h h r a to enter a new idea.""" start="00:07:15.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""And this command is available globally so,""" start="00:07:19.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""much like with the &quot;org-capture&quot; feature in Org-Mode,""" start="00:07:23.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""you can run this command at any time,""" start="00:07:26.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""at the very moment you want to enter an idea.""" start="00:07:28.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""First we are prompted for an entry title,""" start="00:07:32.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and if you were using HyRolo as a contact list,""" start="00:07:36.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""this is where you would enter the person's name.""" start="00:07:38.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I am using it as a Zettelkasten,""" start="00:07:40.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""so I instead enter a title for my idea.""" start="00:07:43.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I'll just type in...""" start="00:07:45.440" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and as soon as I press enter after this prompt,""" start="00:07:46.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""my Zettelkasten org file is opened,""" start="00:07:53.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""a new entry with the timestamp is created,""" start="00:07:56.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and the cursor is placed at this entry""" start="00:08:02.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""ready for me to enter the body text of the idea.""" start="00:08:06.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I'll type that in...""" start="00:08:09.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Now I save the &quot;idea&quot; file (C-x C-s)""" start="00:08:14.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and switch back to what I was working on before""" start="00:08:18.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with the usual C-x 0 (delete-window) command.""" start="00:08:20.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""Next, I'd like to talk about""" start="00:08:23.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""the HyRolo database search feature,""" start="00:08:26.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""which is very useful.""" start="00:08:28.720" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""The HyRolo search feature uses""" start="00:08:30.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""only Emacs built-in functions""" start="00:08:33.720" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and there is no indexing""" start="00:08:35.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""as with tools like &quot;mlocate&quot; or Org-Roam.""" start="00:08:36.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""So far, I have not had any trouble with efficiency.""" start="00:08:38.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I don't know if at some point in the future,""" start="00:08:41.440" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""it will start slowing down.""" start="00:08:42.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Emacs built-in search functionality""" start="00:08:44.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""is already pretty efficient as it is.""" start="00:08:46.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""It could also be that I am in the habit""" start="00:08:47.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""of storing larger bodies of text in separate files,""" start="00:08:50.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and not in the flat file database.""" start="00:08:55.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Anyway, you can search""" start="00:08:57.560" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""by regex, by string, or by words.""" start="00:08:59.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I personally find the string search""" start="00:09:02.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""to be the most useful.""" start="00:09:03.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""The difference between word search and string search""" start="00:09:04.720" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""is that string search provides""" start="00:09:07.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""logical query operators like AND, OR, XOR, and NOT.""" start="00:09:09.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Once you run a search query,""" start="00:09:12.120" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""a &quot;*HyRolo*&quot; buffer is opened""" start="00:09:14.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with the query's results.""" start="00:09:16.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""And this is a read-only-mode buffer""" start="00:09:18.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with a few useful single-key action bindings""" start="00:09:20.440" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for navigating the list of results""" start="00:09:23.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""which I will now demonstrate.""" start="00:09:25.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""By the way, I have now switched over""" start="00:09:27.120" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""to a larger example Rolo database that I have created""" start="00:09:31.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""to demonstrate more of the HyRolo features.""" start="00:09:34.640" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""The HyRolo search is available""" start="00:09:36.560" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""in the Hyperbole mini-buffer menu""" start="00:09:39.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""so it is always available to you.""" start="00:09:40.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Start with the Hyperbole universal leader key C-h h""" start="00:09:42.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""then &quot;r&quot; for Rolo and &quot;s&quot; for search. That is C-h h r s.""" start="00:09:46.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Now we are prompted for a search string:""" start="00:09:53.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I type in &quot;Alice Abelton&quot;, and when I press enter,""" start="00:09:56.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""the search results pop up""" start="00:10:02.520" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and the number of results is printed in the mini-buffer.""" start="00:10:04.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""We could also enter a search expression""" start="00:10:06.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""similar to a Lisp S-expression""" start="00:10:09.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with logical operators like AND or NOT,""" start="00:10:12.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""but you would not need to quote the search terms.""" start="00:10:14.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""So, for example (C-h h r s), I could write""" start="00:10:19.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""&quot;(and university character)&quot; within parentheses""" start="00:10:24.520" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and this would find entries""" start="00:10:30.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that only contain both of the words""" start="00:10:31.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""&quot;university&quot; and &quot;character&quot;.""" start="00:10:33.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""For the most part, I only really ever use""" start="00:10:35.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""the ordinary string search without logical operators.""" start="00:10:39.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""So as you can see, a search result buffer""" start="00:10:41.720" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""called &quot;*HyRolo*&quot; has popped up""" start="00:10:44.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with all of the matching entries.""" start="00:10:47.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""And the search results buffer is a read-only buffer""" start="00:10:48.360" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with several useful navigation key bindings:""" start="00:10:51.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I can press &quot;o&quot; to switch to &quot;overview&quot; mode,""" start="00:10:54.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""which shows all of the headings, but no content.""" start="00:11:01.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""This would include subheadings""" start="00:11:03.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with like 2 stars in front of it or 3 stars""" start="00:11:05.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I can press &quot;a&quot; to switch to &quot;show all mode&quot;""" start="00:11:07.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""which shows all of the content under each heading.""" start="00:11:12.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""If I know I am looking for a keyword""" start="00:11:14.560" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""in a top-level heading,""" start="00:11:17.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I can press &quot;t&quot; to switch to the &quot;top-level&quot; view mode""" start="00:11:18.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""which shows only the top-level headings.""" start="00:11:22.640" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""As is always the case""" start="00:11:25.440" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with the Emacs default key bindings,""" start="00:11:27.120" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""&quot;n&quot; and &quot;p&quot; move the cursor down and up lines,""" start="00:11:28.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""so I can navigate the cursor downward""" start="00:11:32.360" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""to an entry that looks interesting.""" start="00:11:34.520" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I can press &quot;s&quot; to show the content""" start="00:11:37.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""of that particular entry.""" start="00:11:40.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I can press &quot;h&quot; to hide the entry again.""" start="00:11:41.520" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""And I can press &quot;e&quot; or M-RET on the entry heading""" start="00:11:44.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""to &quot;edit&quot; that heading (that entry),""" start="00:11:49.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""which will open the Org-Mode file,""" start="00:11:53.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that is, the Zettelkasten database file""" start="00:11:56.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with the cursor at this particular entry.""" start="00:11:59.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""Be warned that editing an entry creates a new timestamp,""" start="00:12:01.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""which I do not need, and there is currently""" start="00:12:07.640" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""no way to avoid this behavior.""" start="00:12:10.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I work around this by simply using the undo command""" start="00:12:12.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""which removes the unwanted timestamp.""" start="00:12:15.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""And so that is how I use the HyRolo search functionality.""" start="00:12:20.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""Now... since the most important aspect of Zettelkasten""" start="00:12:25.560" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""is linking ideas in the database,""" start="00:12:32.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""how do we actually make this work in HyRolo?""" start="00:12:33.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""So this is the secret sauce of Hyperbole,""" start="00:12:37.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and the key take-away""" start="00:12:40.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for this presentation (as I said earlier).""" start="00:12:41.120" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Hyperbole provides markup syntax""" start="00:12:43.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for executing arbitrary Emacs commands""" start="00:12:46.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""so you can link HyRolo entries together""" start="00:12:50.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""using the HyRolo search function.""" start="00:12:53.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""Let me demonstrate this now.""" start="00:12:56.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I am back in my example HyRolo database,""" start="00:12:58.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and if you take a closer look""" start="00:13:03.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""you can see some of the hyperlinks""" start="00:13:06.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that I already created""" start="00:13:11.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with the angle-round bracket syntax.""" start="00:13:13.120" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Now with the cursor inside of these brackets,""" start="00:13:15.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I can press M-RET to &quot;click&quot; on this link.""" start="00:13:19.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""As you can see, the search query""" start="00:13:23.440" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""corresponding to this hyperlink here has executed""" start="00:13:27.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and popped up the &quot;*HyRolo*&quot; search results buffer.""" start="00:13:32.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""There is only one linked entry,""" start="00:13:34.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""but the list of ideas that are produced""" start="00:13:38.720" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""by the search query in this buffer here""" start="00:13:41.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""are the list of all of the other ideas""" start="00:13:43.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that are related to this hyperlink""" start="00:13:45.640" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that we just clicked on here.""" start="00:13:47.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""(Let me get rid of the other window...)""" start="00:13:49.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Now from within this &quot;*HyRolo*&quot; buffer,""" start="00:13:52.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I can navigate to another hyperlink...""" start="00:13:55.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and clicking on that updates the &quot;*HyRolo*&quot; buffer""" start="00:13:57.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with new results again.""" start="00:14:03.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I can just keep navigating through""" start="00:14:04.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""all the Zettelkasten entries in this way.""" start="00:14:10.120" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""And so this is it.""" start="00:14:13.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""This is my simple but effective Zettelkasten,""" start="00:14:18.640" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""constructed entirely with the functionality""" start="00:14:22.720" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""already built-in to Hyperbole.""" start="00:14:25.120" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""In the remaining time,""" start="00:14:26.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I'd like to talk about how Hyperbole hyperlinks work,""" start="00:14:32.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""because it's slightly different""" start="00:14:37.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""from how hyperlinks work in Org Mode""" start="00:14:38.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""or with the Emacs clickable text properties.""" start="00:14:40.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""The easiest way to create a hyperlink button""" start="00:14:49.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that runs an Emacs command""" start="00:14:52.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""is simply to type the Emacs command as an S-expression,""" start="00:14:55.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""but with angle brackets instead of parentheses.""" start="00:14:59.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""If you were looking closely,""" start="00:15:03.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""you probably already saw a hyperlink of this form,""" start="00:15:05.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""an angle-bracketed Emacs command.""" start="00:15:08.640" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""This hyperlink simply calls""" start="00:15:10.560" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""the &quot;hyrolo-fgrep&quot; function with this string argument.""" start="00:15:13.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and so clicking on this button""" start="00:15:18.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""is equivalent to running a HyRolo search""" start="00:15:20.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with the C-h h r s key sequence.""" start="00:15:23.120" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""As you can see, clicking on it""" start="00:15:27.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""produced the search results""" start="00:15:31.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for entries associated with that string query.""" start="00:15:32.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""It's also possible to label an action""" start="00:15:35.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with a so-called &quot;implicit link&quot;,""" start="00:15:41.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and that's this angle-and-square bracketed notation.""" start="00:15:43.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""If I click on this button,""" start="00:15:47.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""it will activate this action""" start="00:15:52.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""to the right of the colon separator,""" start="00:15:54.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and there are the relevant search results""" start="00:16:01.360" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""from that string query.""" start="00:16:03.640" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""Finally, there are &quot;explicit links&quot;,""" start="00:16:04.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""which I find to be especially useful""" start="00:16:09.120" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for the Zettelkasten method.""" start="00:16:11.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I've already shown an example""" start="00:16:12.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""of using an explicit link before.""" start="00:16:15.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""What makes explicit links so useful is, firstly,""" start="00:16:17.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that the button works with just the label alone.""" start="00:16:20.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""There is no need to write an S-expression or anything.""" start="00:16:23.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""You can write the link label""" start="00:16:26.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""inline with the body text of the idea.""" start="00:16:28.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""(For example, like this.)""" start="00:16:31.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Explicit links are identified by their label,""" start="00:16:34.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""so they are especially good for""" start="00:16:39.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""the names of people and places.""" start="00:16:40.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""By the way, this Zettelkasten database is for""" start="00:16:43.120" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""a fictional story I started writing""" start="00:16:46.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for the purpose of demonstrating HyRolo""" start="00:16:47.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""in this presentation, and I had so much fun writing it""" start="00:16:50.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that I may actually continue developing this story.""" start="00:16:52.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Anyway, let's create a new explicit link""" start="00:16:55.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and a new idea entry for a character in the story.""" start="00:16:58.640" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""So suppose I want to create a new idea node entry""" start="00:17:01.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for this fictional character here,""" start="00:17:10.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and I'll also want to link this entry to that node.""" start="00:17:11.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Since hyperlinks are just string search,""" start="00:17:15.360" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""we don't actually need to have""" start="00:17:17.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""an entry in the database for this character.""" start="00:17:19.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""The worst that can happen is that the hyperlink""" start="00:17:22.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""executes a search that returns no results.""" start="00:17:24.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""So it's OK to create the hyperlink""" start="00:17:27.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""before we have an actual entry for this person.""" start="00:17:29.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""(I'll just M-w copy the name.)""" start="00:17:31.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Now I use the universal Hyperbole leader key C-h h,""" start="00:17:36.720" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and then &quot;e&quot; for &quot;explicit links&quot;""" start="00:17:40.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and &quot;c&quot; for &quot;create&quot;. That's C-h h e c.""" start="00:17:44.520" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""We are prompted for an entry label""" start="00:17:49.360" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""but it defaults to the text highlighted by the region,""" start="00:17:52.640" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""so I just press enter.""" start="00:17:56.120" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Now it prompts for a button type,""" start="00:17:57.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""so I select &quot;hyrolo-fgrep&quot;""" start="00:18:00.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""(and there's Orderless helping me go faster),""" start="00:18:03.120" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and since &quot;hyrolo-fgrep&quot; requires""" start="00:18:06.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""a string argument for the search query,""" start="00:18:10.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I am prompted for the query string.""" start="00:18:12.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I'll type in &quot;character:&quot;, (yank &quot;Kerri Katz's&quot; name)""" start="00:18:14.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and there we are, the link has been created, and""" start="00:18:21.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""(let me just get rid of the # character)""" start="00:18:26.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I can try it out.""" start="00:18:31.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""There's no search results. That's fine.""" start="00:18:32.720" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""We haven't created an idea entry yet""" start="00:18:36.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for this character now.""" start="00:18:38.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""So let's go ahead and do that now.""" start="00:18:40.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""If we remember how to create a new idea,""" start="00:18:43.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""it's C-h h r a, and then I type &quot;character:&quot;""" start="00:18:45.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and then yank the name again.""" start="00:18:52.360" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Now a new node has been created,""" start="00:18:56.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and I can start describing this character.""" start="00:18:58.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Notice that I like to precede my characters""" start="00:19:04.360" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with the keyword &quot;character:&quot; colon.""" start="00:19:08.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""This technique helps me to create hyperlinks""" start="00:19:11.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""using more descriptive search queries""" start="00:19:14.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that return fewer but more useful search results.""" start="00:19:17.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""And finally, I can create an explicit link""" start="00:19:19.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""from this character back to""" start="00:19:23.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""the other character (her boyfriend).""" start="00:19:26.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I just type in &quot;<(Bertrand Becket)>&quot;,""" start="00:19:28.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and this explicit link has already been created""" start="00:19:31.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""so I don't need to create it again. It just works.""" start="00:19:37.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Hyperbole identifies buttons by their label,""" start="00:19:39.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""so as long as an explicit link button with that label""" start="00:19:41.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""has been created before,""" start="00:19:44.720" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I just can type in the button with markup by hand,""" start="00:19:46.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and then I can just use it.""" start="00:19:51.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Now I am back to the search results""" start="00:19:53.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for the boyfriend character.""" start="00:19:57.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I hope you can see how minimal but useful""" start="00:19:59.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""is this particular Zettelkasten technique I have""" start="00:20:04.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that uses this &quot;HyRolo&quot;.""" start="00:20:07.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""I should also make clear that Hyperbole explicit links""" start="00:20:10.560" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""are encoded in a separate file in the same directory""" start="00:20:19.360" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""as the Zettelkasten flat-file database.""" start="00:20:22.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""(So, let's go back to that and C-x C-f &quot;.hypb&quot;).""" start="00:20:24.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""You should not edit this file by hand,""" start="00:20:37.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""but it is human readable,""" start="00:20:41.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""so it works well with Git""" start="00:20:43.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and other revision control systems.""" start="00:20:45.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Whenever an explicit link is activated,""" start="00:20:47.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""it consults this file and runs the associated action,""" start="00:20:49.560" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""which, in the Zettelkasten use case,""" start="00:20:52.560" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""will always be to run a HyRolo search query.""" start="00:20:55.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""The advantage of keeping a separate table of links""" start="00:20:58.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""is that you can edit the link action""" start="00:21:02.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""(that is, the search query) in just one place,""" start="00:21:03.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and the updated button action works everywhere""" start="00:21:07.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""without having to change any other files.""" start="00:21:10.560" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""So, that is all for today.""" start="00:21:12.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Thank you so much for listening to my talk.""" start="00:21:18.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I'll be available for questions""" start="00:21:20.520" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for the next 20 minutes or so.""" start="00:21:23.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""If there are any questions that I cannot answer,""" start="00:21:24.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""you will have a chance to ask""" start="00:21:27.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""the author of Hyperbole himself, Bob Weiner,""" start="00:21:29.440" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""later today after his presentation.""" start="00:21:31.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Thanks for your attention!""" start="00:21:34.240" video="mainVideo-rolodex" id="subtitle"]]
+
+
+
+Captioner: ramin
+
+Questions or comments? Please e-mail [ramin.honary@gmail.com](mailto:ramin.honary@gmail.com?subject=Comment%20for%20EmacsConf%202022%20rolodex%3A%20Build%20a%20Zettelkasten%20with%20the%20Hyperbole%20Rolodex)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/rolodex-before.md b/2022/info/rolodex-before.md
new file mode 100644
index 00000000..93b0adc4
--- /dev/null
+++ b/2022/info/rolodex-before.md
@@ -0,0 +1,32 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Ramin Honary shares how he uses HyRolo to create and navigate links between his notes. Afterwards, he will handle questions via IRC.
+
+<div class="vid"><video controls preload="none" id="rolodex-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-rolodex--build-a-zettelkasten-with-the-hyperbole-rolodex--ramin-honary--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-rolodex--build-a-zettelkasten-with-the-hyperbole-rolodex--ramin-honary--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-rolodex--build-a-zettelkasten-with-the-hyperbole-rolodex--ramin-honary--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="rolodex-mainVideo" data="""
+00:00.000 Introduction
+01:41.040 Key takeaway
+02:17.000 Overview of Zettelkasten
+02:46.320 Tools I use in day-to-day writing
+03:25.360 Quick overview of Hyperbole
+04:03.520 Explain HyRolo
+04:55.240 Configuration of Hyperbole using ~use-package~
+05:44.280 The Hyperbole menu-driven user interface
+06:37.600 Getting started with *HyRolo*: Create a /zettel/
+08:23.760 Searching the *HyRolo* database
+09:27.120 Demo *HyRolo* search
+10:06.960 Search operators AND/OR/NOT
+10:42.520 Navigating the search results
+12:01.760 Editing entries creates timestamps
+12:25.560 How is *HyRolo* a zettelkasten?
+12:56.040 Demo interlinked notes via *HyRolo* search
+14:26.800 Explaining how Hyperbole hyperlinks work
+15:35.080 Demo Hyperbole "implicit links"
+16:04.680 Explain Hyperbole "explicit links"
+16:04.680 Demo creating an explicit link
+18:32.720 Demo creating an /zettel/ entry for a person
+19:19.880 Demo explicit linking new entry to others
+20:10.560 How "explicit buttons" encode actions
+21:12.480 Conclusion
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rolodex--build-a-zettelkasten-with-the-hyperbole-rolodex--ramin-honary--main.webm">Download --main.webm (63MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rolodex--build-a-zettelkasten-with-the-hyperbole-rolodex--ramin-honary--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rolodex--build-a-zettelkasten-with-the-hyperbole-rolodex--ramin-honary--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/n6kPHmyb7bwombvnc48BE6">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/rolodex-nav.md b/2022/info/rolodex-nav.md
new file mode 100644
index 00000000..d52810ca
--- /dev/null
+++ b/2022/info/rolodex-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/orgyear">This Year in Org</a>
+Next by track: <a href="/2022/talks/rde">rde Emacs introduction</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/sat-close-after.md b/2022/info/sat-close-after.md
new file mode 100644
index 00000000..a51ef399
--- /dev/null
+++ b/2022/info/sat-close-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20sat-close%3A%20Saturday%20closing%20remarks)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/sat-close-before.md b/2022/info/sat-close-before.md
new file mode 100644
index 00000000..f3b222a8
--- /dev/null
+++ b/2022/info/sat-close-before.md
@@ -0,0 +1,4 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+<div class="vid"><div></div><div class="files resources"><ul></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/sat-close-nav.md b/2022/info/sat-close-nav.md
new file mode 100644
index 00000000..f9156b4f
--- /dev/null
+++ b/2022/info/sat-close-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/haskell">Haskell code exploration with Emacs</a>
+Next by track: <a href="/2022/talks/sun-open">Sunday opening remarks</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/sat-open-after.md b/2022/info/sat-open-after.md
new file mode 100644
index 00000000..c5e3d342
--- /dev/null
+++ b/2022/info/sat-open-after.md
@@ -0,0 +1,89 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="sat-open-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Welcome to EmacsConf 2022, where we get to find out""" start="00:00:00.000" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""just how crazy a text editor can get.""" start="00:00:03.520" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""There were so many interesting talks""" start="00:00:06.240" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""that we couldn't figure out how to fit them in two days,""" start="00:00:08.320" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""so this year we're experimenting with having two tracks.""" start="00:00:11.320" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""There's a General track and a Development track,""" start="00:00:14.120" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""but really, you'll probably find""" start="00:00:16.120" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""interesting things on both tracks""" start="00:00:17.960" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""no matter what your level of experience is,""" start="00:00:19.600" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""so don't feel limited to one or the other.""" start="00:00:22.160" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If we all figure out this track thing together,""" start="00:00:25.080" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""that could mean being able to have even more Emacs talks""" start="00:00:27.000" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""next year, so let's give it a try!""" start="00:00:29.880" video="mainVideo-sat-open" id="subtitle"]]
+[[!template new="1" text="""The best parts of EmacsConf are the conversations.""" start="00:00:32.840" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""The wiki has a page on how to watch and participate,""" start="00:00:35.720" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and I'll give you a quick overview as well.""" start="00:00:38.280" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""You can watch both streams at live.emacsconf.org""" start="00:00:40.840" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""using free and open source software.""" start="00:00:44.000" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""The schedule shows the General track on top""" start="00:00:46.280" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and the Development track on the bottom,""" start="00:00:48.200" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""so you can see what else is going on.""" start="00:00:49.960" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""The track pages have quick shortcuts so that you can""" start="00:00:52.160" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""find out more about talks, open the Etherpads,""" start="00:00:54.560" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and join the Q&A sessions. The watch page has more tips""" start="00:00:57.360" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""on how to make the most of Q&A.""" start="00:01:00.800" video="mainVideo-sat-open" id="subtitle"]]
+[[!template new="1" text="""If you can, please add notes and ask questions""" start="00:01:02.120" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""in the Etherpad for the talk. That makes it easier""" start="00:01:05.760" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""for everyone to share their notes,""" start="00:01:08.520" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and speakers and hosts can read the questions from there.""" start="00:01:10.080" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""We'll copy the notes to the talk pages afterwards.""" start="00:01:13.120" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""We have one pad for each talk this year,""" start="00:01:16.040" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""so you can follow the links to get to the next one""" start="00:01:18.320" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""or go back to the schedule and get the link from there.""" start="00:01:20.920" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If you have general feedback about""" start="00:01:23.960" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""the conference itself, please put it in""" start="00:01:25.600" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""pad.emacsconf.org/2022 .""" start="00:01:27.760" video="mainVideo-sat-open" id="subtitle"]]
+[[!template new="1" text="""Internet Relay Chat or IRC can be another great way""" start="00:01:31.600" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""to be part of lots of conversations.""" start="00:01:34.480" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""You can use chat.emacsconf.org to join the IRC channels""" start="00:01:37.280" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""through your web browser. The tabs on the left can help you""" start="00:01:40.320" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""switch between the different channels.""" start="00:01:43.200" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""There's #emacsconf-gen for the General track""" start="00:01:45.240" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and #emacsconf-dev for the Development track.""" start="00:01:47.720" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If you need to reach us, you can join #emacsconf-org""" start="00:01:50.240" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""or e-mail emacsconf-org-private@gnu.org.""" start="00:01:53.440" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""You can use #emacsconf for hallway conversations.""" start="00:01:57.880" video="mainVideo-sat-open" id="subtitle"]]
+[[!template new="1" text="""Once again, we're going to be streaming with open captions""" start="00:02:01.360" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""for most of the talks this year, thanks to our speakers and""" start="00:02:03.920" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""captioning volunteers. The captioned talks are indicated""" start="00:02:06.640" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""on the schedule, and with any luck, we'll be posting""" start="00:02:09.920" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""transcripts on talk pages shortly after the talks start.""" start="00:02:12.520" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If you need additional accommodations, please let us know""" start="00:02:16.120" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""in #emacsconf-org and we'll see""" start="00:02:18.920" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""if we can make things happen.""" start="00:02:20.320" video="mainVideo-sat-open" id="subtitle"]]
+[[!template new="1" text="""If something goes down, we'll update status.emacsconf.org.""" start="00:02:22.440" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If it doesn't look like we've noticed yet,""" start="00:02:26.320" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""please let us know in the #emacsconf-org IRC channel,""" start="00:02:27.800" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""where we will be quietly panicking.""" start="00:02:31.600" video="mainVideo-sat-open" id="subtitle"]]
+[[!template new="1" text="""In all of these conversations, please keep in mind""" start="00:02:34.520" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""our guidelines for conduct. You can find them on the wiki,""" start="00:02:36.960" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and they basically boil down to: please be nice. Thank you!""" start="00:02:39.760" video="mainVideo-sat-open" id="subtitle"]]
+[[!template new="1" text="""We'll be posting the prerecorded videos as soon as possible.""" start="00:02:42.960" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Assuming things go well, you might be able to check out""" start="00:02:47.520" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""quick replays on the Toobnix channel, which you can""" start="00:02:50.040" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""find on the watch page in the wiki. We'll post the live""" start="00:02:52.720" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""talks and Q&A sessions some time after the conference.""" start="00:02:55.680" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If you'd like to get an update, you can subscribe to""" start="00:02:58.760" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""the emacsconf-discuss mailing list.""" start="00:03:01.800" video="mainVideo-sat-open" id="subtitle"]]
+[[!template new="1" text="""All right, let's get going.""" start="00:03:05.360" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Leo Vivier is going to be hosting the general track,""" start="00:03:06.600" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and Amin Bandali will host the development track.""" start="00:03:09.640" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""The other volunteers and I will run around mostly backstage,""" start="00:03:12.400" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and you'll probably meet us in the closing remarks.""" start="00:03:15.320" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Let's have fun at EmacsConf 2022!""" start="00:03:18.160" video="mainVideo-sat-open" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20sat-open%3A%20Saturday%20opening%20remarks)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/sat-open-before.md b/2022/info/sat-open-before.md
new file mode 100644
index 00000000..89db2e0d
--- /dev/null
+++ b/2022/info/sat-open-before.md
@@ -0,0 +1,15 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+<div class="vid"><video controls preload="none" id="sat-open-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-sat-open--opening-remarks--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-sat-open--opening-remarks--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-sat-open--opening-remarks--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="sat-open-mainVideo" data="""
+00:00.000 General and Development tracks
+00:32.840 Conversations
+01:02.120 Etherpad
+01:31.600 Internet Relay Chat
+02:01.360 Accessibility and open captions
+02:22.440 status.emacsconf.org, #emacsconf-org
+02:34.520 Guidelines for conduct
+02:42.960 Recordings
+03:05.360 Let's have fun
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-sat-open--opening-remarks--main.webm">Download --main.webm (11MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-sat-open--opening-remarks--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-sat-open--opening-remarks--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/xp2YZmteZe5qgSvwQxfCUS">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/sat-open-nav.md b/2022/info/sat-open-nav.md
new file mode 100644
index 00000000..28900365
--- /dev/null
+++ b/2022/info/sat-open-nav.md
@@ -0,0 +1,6 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Next by track: <a href="/2022/talks/journalism">Emacs journalism (or everything's a nail if you hit it with Emacs)</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/school-after.md b/2022/info/school-after.md
new file mode 100644
index 00000000..6433a51c
--- /dev/null
+++ b/2022/info/school-after.md
@@ -0,0 +1,137 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="school-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Taking notes on a computer can be challenging,""" start="00:00:00.000" video="mainVideo-school" id="subtitle"]]
+[[!template text="""especially if you compare computer notes""" start="00:00:04.880" video="mainVideo-school" id="subtitle"]]
+[[!template text="""with handwritten notes. When you're handwriting,""" start="00:00:08.280" video="mainVideo-school" id="subtitle"]]
+[[!template text="""you don't focus as much on taking those notes.""" start="00:00:11.960" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Well, you don't focus as much on *how* you take the notes,""" start="00:00:16.160" video="mainVideo-school" id="subtitle"]]
+[[!template text="""you more so focus on what you're taking.""" start="00:00:19.560" video="mainVideo-school" id="subtitle"]]
+[[!template text="""You don't get that same experience""" start="00:00:24.120" video="mainVideo-school" id="subtitle"]]
+[[!template text="""if you're writing your notes on a computer.""" start="00:00:27.720" video="mainVideo-school" id="subtitle"]]
+[[!template text="""When writing notes on a computer,""" start="00:00:30.520" video="mainVideo-school" id="subtitle"]]
+[[!template text="""you mostly focus on typing or alignment.""" start="00:00:32.120" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Those are things that are kind of solved already""" start="00:00:38.440" video="mainVideo-school" id="subtitle"]]
+[[!template text="""by certain software such as Org Mode,""" start="00:00:42.160" video="mainVideo-school" id="subtitle"]]
+[[!template text="""which is fantastic when it comes to note-taking,""" start="00:00:45.360" video="mainVideo-school" id="subtitle"]]
+[[!template text="""but I still believe it could be much better.""" start="00:00:48.600" video="mainVideo-school" id="subtitle"]]
+[[!template new="1" text="""That's why I've developed the package called Lectorg.""" start="00:00:51.920" video="mainVideo-school" id="subtitle"]]
+[[!template text="""It's a collection of scripts and snippets which allow you""" start="00:00:56.640" video="mainVideo-school" id="subtitle"]]
+[[!template text="""to improve your note-taking experience on the computer,""" start="00:01:01.800" video="mainVideo-school" id="subtitle"]]
+[[!template text="""of course, making you more focused on the subject""" start="00:01:04.960" video="mainVideo-school" id="subtitle"]]
+[[!template text="""rather than the process of taking notes.""" start="00:01:09.920" video="mainVideo-school" id="subtitle"]]
+[[!template text="""So why use Emacs? Well, again,""" start="00:01:14.440" video="mainVideo-school" id="subtitle"]]
+[[!template text="""if compared with other software,""" start="00:01:16.560" video="mainVideo-school" id="subtitle"]]
+[[!template text="""it has a lot more customizability""" start="00:01:18.720" video="mainVideo-school" id="subtitle"]]
+[[!template text="""and it can also unify pretty much anything you need""" start="00:01:21.800" video="mainVideo-school" id="subtitle"]]
+[[!template text="""in student life or work life into one place.""" start="00:01:24.680" video="mainVideo-school" id="subtitle"]]
+[[!template text="""The problems that Lectorg solves are kind of,""" start="00:01:31.080" video="mainVideo-school" id="subtitle"]]
+[[!template text="""as I mentioned, already solved partially""" start="00:01:35.640" video="mainVideo-school" id="subtitle"]]
+[[!template text="""by Org Mode itself.""" start="00:01:37.880" video="mainVideo-school" id="subtitle"]]
+[[!template text="""What I've done is simply make a bunch of additions""" start="00:01:40.480" video="mainVideo-school" id="subtitle"]]
+[[!template text="""to Org Mode through an external package,""" start="00:01:44.600" video="mainVideo-school" id="subtitle"]]
+[[!template text="""but I've also developed other sub-modules,""" start="00:01:47.360" video="mainVideo-school" id="subtitle"]]
+[[!template text="""one of them being HBH, which allows me""" start="00:01:51.280" video="mainVideo-school" id="subtitle"]]
+[[!template text="""to easily plan out my days HBH, hour by hour,""" start="00:01:54.440" video="mainVideo-school" id="subtitle"]]
+[[!template text="""therefore I can plan out my days on an hourly basis""" start="00:02:01.400" video="mainVideo-school" id="subtitle"]]
+[[!template text="""practically. But I've also built something called Reorg""" start="00:02:04.680" video="mainVideo-school" id="subtitle"]]
+[[!template text="""which, for those of you that are familiar""" start="00:02:09.440" video="mainVideo-school" id="subtitle"]]
+[[!template text="""with the Remarkable tablet, allows you""" start="00:02:12.000" video="mainVideo-school" id="subtitle"]]
+[[!template text="""to integrate notes from your Remarkable into Emacs--""" start="00:02:14.600" video="mainVideo-school" id="subtitle"]]
+[[!template text="""into your Org Mode notes basically.""" start="00:02:20.000" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Now I believe there's already another talk on integrating""" start="00:02:22.440" video="mainVideo-school" id="subtitle"]]
+[[!template text="""handwritten notes into Emacs,""" start="00:02:25.200" video="mainVideo-school" id="subtitle"]]
+[[!template text="""so I won't get too much into that.""" start="00:02:26.920" video="mainVideo-school" id="subtitle"]]
+[[!template new="1" text="""So again, at the heart of Lectorg is Org Mode,""" start="00:02:30.680" video="mainVideo-school" id="subtitle"]]
+[[!template text="""which for those of you that might not be familiar,""" start="00:02:36.080" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Org Mode is one of the best pieces of software""" start="00:02:38.480" video="mainVideo-school" id="subtitle"]]
+[[!template text="""when it comes to basically capturing any sort of text,""" start="00:02:43.760" video="mainVideo-school" id="subtitle"]]
+[[!template text="""managing that text, exporting it""" start="00:02:49.040" video="mainVideo-school" id="subtitle"]]
+[[!template text="""into various different formats,""" start="00:02:51.560" video="mainVideo-school" id="subtitle"]]
+[[!template text="""which is perfect for taking notes""" start="00:02:53.960" video="mainVideo-school" id="subtitle"]]
+[[!template text="""because you can either export them,""" start="00:02:57.280" video="mainVideo-school" id="subtitle"]]
+[[!template text="""take them on the go if you don't have access""" start="00:02:59.400" video="mainVideo-school" id="subtitle"]]
+[[!template text="""to your computer all the time,""" start="00:03:02.120" video="mainVideo-school" id="subtitle"]]
+[[!template text="""or you can share them with friends, which...""" start="00:03:03.880" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Well, that is somewhat self-explanatory""" start="00:03:05.840" video="mainVideo-school" id="subtitle"]]
+[[!template text="""in how that can help you or others.""" start="00:03:11.360" video="mainVideo-school" id="subtitle"]]
+[[!template new="1" text="""Now the ecosystem of Lectorg,""" start="00:03:14.920" video="mainVideo-school" id="subtitle"]]
+[[!template text="""it's a bit chaotic as of right now. It's a package itself,""" start="00:03:16.560" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Lectorg.el, which also partially relies on""" start="00:03:21.720" video="mainVideo-school" id="subtitle"]]
+[[!template text="""a collection of Python scripts""" start="00:03:25.760" video="mainVideo-school" id="subtitle"]]
+[[!template text="""as I didn't have that much time""" start="00:03:27.760" video="mainVideo-school" id="subtitle"]]
+[[!template text="""to develop the software strictly in Elisp,""" start="00:03:30.040" video="mainVideo-school" id="subtitle"]]
+[[!template text="""but it still gets the job done,""" start="00:03:34.120" video="mainVideo-school" id="subtitle"]]
+[[!template text="""and I believe that there is no speed hindrance.""" start="00:03:37.600" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Now to further improve Lectorg,""" start="00:03:43.720" video="mainVideo-school" id="subtitle"]]
+[[!template text="""I'd love to ask for your help""" start="00:03:46.520" video="mainVideo-school" id="subtitle"]]
+[[!template text="""if you have encountered any sort of issue""" start="00:03:49.280" video="mainVideo-school" id="subtitle"]]
+[[!template text="""when it comes to note-taking or academics in general,""" start="00:03:53.080" video="mainVideo-school" id="subtitle"]]
+[[!template text="""I would love to integrate your solution""" start="00:03:56.840" video="mainVideo-school" id="subtitle"]]
+[[!template text="""(or if you don't have one, we can come up with one)""" start="00:03:59.760" video="mainVideo-school" id="subtitle"]]
+[[!template text="""into Lectorg. Also, if anyone would be willing""" start="00:04:04.400" video="mainVideo-school" id="subtitle"]]
+[[!template text="""to transcribe those Python scripts""" start="00:04:07.520" video="mainVideo-school" id="subtitle"]]
+[[!template text="""into a more Lisp approach, then that'd be fabulous.""" start="00:04:13.440" video="mainVideo-school" id="subtitle"]]
+[[!template new="1" text="""So let's look at how Lectorg works in practice.""" start="00:04:18.680" video="mainVideo-school" id="subtitle"]]
+[[!template text="""We'll look at two examples,""" start="00:04:24.320" video="mainVideo-school" id="subtitle"]]
+[[!template text="""one of taking notes for math""" start="00:04:26.040" video="mainVideo-school" id="subtitle"]]
+[[!template text="""and the other for business, I believe.""" start="00:04:28.320" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Now I have to mention that all of the things""" start="00:04:33.320" video="mainVideo-school" id="subtitle"]]
+[[!template text="""that I do in that example""" start="00:04:36.040" video="mainVideo-school" id="subtitle"]]
+[[!template text="""do not cover all the functions and features of Lectorg.""" start="00:04:38.280" video="mainVideo-school" id="subtitle"]]
+[[!template text="""There is decent documentation on the Lectorg GitLab page,""" start="00:04:43.920" video="mainVideo-school" id="subtitle"]]
+[[!template new="1" text="""so do check that out for further reference.""" start="00:04:49.160" video="mainVideo-school" id="subtitle"]]
+[[!template text="""For our first example, we're going to start off""" start="00:04:57.520" video="mainVideo-school" id="subtitle"]]
+[[!template text="""with taking notes for statistics. Now what I'm doing here""" start="00:04:59.320" video="mainVideo-school" id="subtitle"]]
+[[!template text="""is opening Lectorg Hub, which allows me""" start="00:05:04.240" video="mainVideo-school" id="subtitle"]]
+[[!template text="""to associate certain resources with this particular course.""" start="00:05:06.480" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Here, I've opened the book which I have associated""" start="00:05:10.880" video="mainVideo-school" id="subtitle"]]
+[[!template text="""with this course, and I'm going to go ahead""" start="00:05:15.680" video="mainVideo-school" id="subtitle"]]
+[[!template text="""and start taking some notes""" start="00:05:19.320" video="mainVideo-school" id="subtitle"]]
+[[!template text="""on the cumulative distribution function here.""" start="00:05:22.520" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Now what OrgMode allows you to do""" start="00:05:26.640" video="mainVideo-school" id="subtitle"]]
+[[!template text="""is integrate LaTeX into regular text quite easily,""" start="00:05:30.000" video="mainVideo-school" id="subtitle"]]
+[[!template text="""preview it, and then later export it.""" start="00:05:34.600" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Now here we can see the first usage of a snippet !m,""" start="00:05:38.240" video="mainVideo-school" id="subtitle"]]
+[[!template text="""which inserts a block for entering a LaTeX equation.""" start="00:05:48.600" video="mainVideo-school" id="subtitle"]]
+[[!template text="""What I'm trying to do here""" start="00:05:59.640" video="mainVideo-school" id="subtitle"]]
+[[!template text="""is take a screenshot of the figures in the book,""" start="00:06:00.840" video="mainVideo-school" id="subtitle"]]
+[[!template text="""which is done with org-download (not a part of Lectorg,""" start="00:06:05.000" video="mainVideo-school" id="subtitle"]]
+[[!template text="""but a very useful tool). Now that is it for math.""" start="00:06:10.680" video="mainVideo-school" id="subtitle"]]
+[[!template new="1" text="""Let's look at something a bit different.""" start="00:06:15.800" video="mainVideo-school" id="subtitle"]]
+[[!template text="""We're going to take a look at business,""" start="00:06:18.040" video="mainVideo-school" id="subtitle"]]
+[[!template text="""more specifically, taking notes on the product lifecycle.""" start="00:06:20.200" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Here on the left, I have certain notes from class""" start="00:06:24.520" video="mainVideo-school" id="subtitle"]]
+[[!template text="""which are not complete.""" start="00:06:27.560" video="mainVideo-school" id="subtitle"]]
+[[!template text="""As you can see at the top, there's a comment""" start="00:06:31.080" video="mainVideo-school" id="subtitle"]]
+[[!template text="""also done using Lectorg which puts this file into a TODO""" start="00:06:34.680" video="mainVideo-school" id="subtitle"]]
+[[!template text="""so that I can get back to it whenever I want""" start="00:06:42.720" video="mainVideo-school" id="subtitle"]]
+[[!template text="""or schedule this TODO.""" start="00:06:46.720" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Now I'm taking notes on a video lecture,""" start="00:06:48.880" video="mainVideo-school" id="subtitle"]]
+[[!template text="""which I've opened, again, through Lectorg hub.""" start="00:06:54.440" video="mainVideo-school" id="subtitle"]]
+[[!template text="""As you can see right now, I'm inserting""" start="00:07:07.640" video="mainVideo-school" id="subtitle"]]
+[[!template text="""another snippet for Plantuml,""" start="00:07:09.760" video="mainVideo-school" id="subtitle"]]
+[[!template text="""which immediately exports it to a file,""" start="00:07:12.480" video="mainVideo-school" id="subtitle"]]
+[[!template text="""and again I'm going to be using org-download here""" start="00:07:15.320" video="mainVideo-school" id="subtitle"]]
+[[!template text="""to insert another figure at the top.""" start="00:07:19.800" video="mainVideo-school" id="subtitle"]]
+[[!template new="1" text="""I hope this demonstration was useful.""" start="00:07:25.760" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Once again, it did not demonstrate everything.""" start="00:07:33.360" video="mainVideo-school" id="subtitle"]]
+[[!template text="""You can find more on GitLab.""" start="00:07:35.600" video="mainVideo-school" id="subtitle"]]
+[[!template text="""I hope some of you might consider using Lectorg""" start="00:07:37.840" video="mainVideo-school" id="subtitle"]]
+[[!template text="""in your academic life or perhaps even""" start="00:07:44.400" video="mainVideo-school" id="subtitle"]]
+[[!template text="""in some areas of business. I believe that is""" start="00:07:46.840" video="mainVideo-school" id="subtitle"]]
+[[!template text="""everything I have to demonstrate for today.""" start="00:07:51.320" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Thank you for listening to this talk,""" start="00:07:53.760" video="mainVideo-school" id="subtitle"]]
+[[!template text="""have a nice rest of the day.""" start="00:07:57.440" video="mainVideo-school" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [daniel@alves.world](mailto:daniel@alves.world?subject=Comment%20for%20EmacsConf%202022%20school%3A%20Back%20to%20school%20with%20Emacs)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/school-before.md b/2022/info/school-before.md
new file mode 100644
index 00000000..536648a3
--- /dev/null
+++ b/2022/info/school-before.md
@@ -0,0 +1,16 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+Daniel Rosel demonstrates Lectorg, a package that he wrote to make note taking faster and simpler. Afterwards, he will handle questions over IRC.
+
+<div class="vid"><video controls preload="none" id="school-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="school-mainVideo" data="""
+00:00.000 Introduction
+00:51.920 Packages: Lectorg, Reorg, HBH
+02:30.680 Org Mode
+03:14.920 The ecosystem of Lectorg: Elisp and Python
+04:18.680 How Lectorg works
+04:49.160 Math
+06:15.800 Business
+07:25.760 Conclusion
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main.webm">Download --main.webm (22MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main.opus">Download --main.opus (6.3MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/tM8H4Dj2hZ69CwWMFStZqX">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/school-nav.md b/2022/info/school-nav.md
new file mode 100644
index 00000000..daf22b0e
--- /dev/null
+++ b/2022/info/school-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/journalism">Emacs journalism (or everything's a nail if you hit it with Emacs)</a>
+Next by track: <a href="/2022/talks/treesitter">Tree-sitter beyond syntax highlighting</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/science-after.md b/2022/info/science-after.md
new file mode 100644
index 00000000..148bde2b
--- /dev/null
+++ b/2022/info/science-after.md
@@ -0,0 +1,399 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="science-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hello everyone, I'm Vidianos.""" start="00:00:00.000" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Today I'm going to show you""" start="00:00:02.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""how I write and organize""" start="00:00:03.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""my literature notes using Emacs.""" start="00:00:04.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I take my notes using Zettelkasten,""" start="00:00:06.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which you may or may not have heard.""" start="00:00:08.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""It is about taking small atomic notes""" start="00:00:11.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and linking them one another""" start="00:00:13.840" video="mainVideo-science" id="subtitle"]]
+[[!template text="""to create your so-called second brain.""" start="00:00:15.000" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Here is mine.""" start="00:00:17.600" video="mainVideo-science" id="subtitle"]]
+[[!template text="""This is a graph of all the notes""" start="00:00:19.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I have accumulated the last few years.""" start="00:00:20.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""It has various types of notes,""" start="00:00:22.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but we're mainly going to focus on""" start="00:00:25.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""literature notes today.""" start="00:00:25.960" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""Here are the contents of my talk.""" start="00:00:28.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""We're going to start""" start="00:00:29.640" video="mainVideo-science" id="subtitle"]]
+[[!template text="""with bibliography management,""" start="00:00:30.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which is how I take bibliography""" start="00:00:31.920" video="mainVideo-science" id="subtitle"]]
+[[!template text="""from the web and import it to Emacs.""" start="00:00:33.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Then we're going to talk about""" start="00:00:35.960" video="mainVideo-science" id="subtitle"]]
+[[!template text="""how I create literature notes""" start="00:00:37.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""using a custom org-roam-bibtex template I have.""" start="00:00:38.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""And after talking about that,""" start="00:00:42.760" video="mainVideo-science" id="subtitle"]]
+[[!template text="""we can talk about how I write literature notes,""" start="00:00:43.920" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which is through annotating an article""" start="00:00:46.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""using org-noter. Org-noter is a package""" start="00:00:48.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""that allows you to annotate PDFs""" start="00:00:51.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""using the Org format""" start="00:00:53.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and creates a supplementary Org file to your PDF.""" start="00:00:55.000" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Then we're going to talk about""" start="00:00:59.560" video="mainVideo-science" id="subtitle"]]
+[[!template text="""adding the literature to your Zettelkasten,""" start="00:01:00.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which is a simple but important topic,""" start="00:01:03.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and how you can write permanent notes""" start="00:01:06.280" video="mainVideo-science" id="subtitle"]]
+[[!template text="""based on the info you obtain from this literature.""" start="00:01:08.600" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Lastly, we're going to focus on""" start="00:01:11.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""the organization problem""" start="00:01:13.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""one might find when having a lot of literature""" start="00:01:15.000" video="mainVideo-science" id="subtitle"]]
+[[!template text="""for an assignment or an article or something,""" start="00:01:17.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and how I have tried to solve this""" start="00:01:21.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""with my package Zetteldesk.""" start="00:01:22.960" video="mainVideo-science" id="subtitle"]]
+[[!template text="""This isn't the perfect solution,""" start="00:01:24.840" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but it is what I have, and I really like it.""" start="00:01:26.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Finally, we're going to talk about""" start="00:01:29.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""how to compose the final article""" start="00:01:30.840" video="mainVideo-science" id="subtitle"]]
+[[!template text="""that you want to produce""" start="00:01:33.560" video="mainVideo-science" id="subtitle"]]
+[[!template text="""using this literature""" start="00:01:35.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""with the technique described""" start="00:01:36.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""in the rest of this talk.""" start="00:01:38.640" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""So let's begin the talk""" start="00:01:40.560" video="mainVideo-science" id="subtitle"]]
+[[!template text="""with bibliography management.""" start="00:01:42.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Zotero is the bibliography manager I use.""" start="00:01:44.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""It is very simple to store articles with it,""" start="00:01:47.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and it exports to .bib,""" start="00:01:49.400" video="mainVideo-science" id="subtitle"]]
+[[!template text="""integrating with packages""" start="00:01:50.680" video="mainVideo-science" id="subtitle"]]
+[[!template text="""such as org-roam-bibtex and ivy-bibtex.""" start="00:01:52.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""When researching, I typically find""" start="00:01:54.960" video="mainVideo-science" id="subtitle"]]
+[[!template text="""a long list of articles from a search engine.""" start="00:01:56.680" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I open the titles which have interesting titles""" start="00:02:00.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""through their abstracts""" start="00:02:03.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and save to Zotero those whose abstracts""" start="00:02:05.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""are the most relevant to what I want.""" start="00:02:07.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""From these articles,""" start="00:02:10.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I typically won't read all of them""" start="00:02:11.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""because they're a lot,""" start="00:02:13.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but I will select a few,""" start="00:02:14.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""once I have collected as many as I want.""" start="00:02:17.760" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Zotero acts as a way to store everything""" start="00:02:21.640" video="mainVideo-science" id="subtitle"]]
+[[!template text="""that might be interesting,""" start="00:02:24.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""while Emacs and my Zettelkasten""" start="00:02:25.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""stores everything that is definitely interesting,""" start="00:02:28.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and I have read it already.""" start="00:02:30.960" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""And then we can move to""" start="00:02:35.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""how I create literature notes.""" start="00:02:36.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I set the default action of ivy-bibtex""" start="00:02:38.560" video="mainVideo-science" id="subtitle"]]
+[[!template text="""to ivy-bibtex-edit-notes,""" start="00:02:41.120" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which will prompt-- which""" start="00:02:43.600" video="mainVideo-science" id="subtitle"]]
+[[!template text="""with org-roam-bibtex-mode active,""" start="00:02:44.920" video="mainVideo-science" id="subtitle"]]
+[[!template text="""prompts you for an org-capture template""" start="00:02:46.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""when selecting something""" start="00:02:48.840" video="mainVideo-science" id="subtitle"]]
+[[!template text="""if the node doesn't exist,""" start="00:02:50.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""or takes you to the existing node.""" start="00:02:52.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""And obviously you need to have this here,""" start="00:02:54.960" video="mainVideo-science" id="subtitle"]]
+[[!template text="""to set the default action""" start="00:02:58.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""that was already there""" start="00:03:00.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""to a letter.""" start="00:03:02.600" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""Then we can move to my org-roam reference template,""" start="00:03:04.960" video="mainVideo-science" id="subtitle"]]
+[[!template text="""using org-roam-bibtex.""" start="00:03:08.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""This isn't so complicated,""" start="00:03:11.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but it has some important stuff""" start="00:03:12.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I want to highlight.""" start="00:03:14.120" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Save it to the ref directory,""" start="00:03:14.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""so I can remember where it is,""" start="00:03:17.400" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and it's classified as a literature note.""" start="00:03:19.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""The file name is the cite key,""" start="00:03:23.560" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which is easy and small,""" start="00:03:25.120" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but the title is the actual article's title.""" start="00:03:27.760" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Give it a tag of the entry-type;""" start="00:03:30.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""this is typically &quot;article,&quot;""" start="00:03:32.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but it's easy to sort things this way""" start="00:03:35.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""because not all literature notes are articles.""" start="00:03:37.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""And then give the keywords""" start="00:03:41.400" video="mainVideo-science" id="subtitle"]]
+[[!template text="""that are given by Zotero, because why not?""" start="00:03:43.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Tags here are tags from Zettelkasten.""" start="00:03:47.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""These are the links to""" start="00:03:51.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""other files which are relevant,""" start="00:03:53.640" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but its initialization is empty, obviously.""" start="00:03:55.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""And then this heading is where""" start="00:03:58.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""all the magic happens.""" start="00:03:59.840" video="mainVideo-science" id="subtitle"]]
+[[!template text="""The name is just not really so relevant;""" start="00:04:00.840" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I just needed something that made sense.""" start="00:04:04.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""The properties are what matters,""" start="00:04:07.560" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and mainly this one here.""" start="00:04:10.400" video="mainVideo-science" id="subtitle"]]
+[[!template text="""The ${file} attribute finds""" start="00:04:12.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""the file of this specific literature""" start="00:04:18.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and makes sure that org-noter works""" start="00:04:24.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""by default here.""" start="00:04:27.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""As I'm going to show you in a moment,""" start="00:04:29.640" video="mainVideo-science" id="subtitle"]]
+[[!template text="""this way [of] initializing the literature note,""" start="00:04:32.560" video="mainVideo-science" id="subtitle"]]
+[[!template text="""org-noter works by default.""" start="00:04:34.600" video="mainVideo-science" id="subtitle"]]
+[[!template text="""That's all, basically, for the template.""" start="00:04:37.000" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""This is the point of the talk""" start="00:04:40.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""where we reach the first demo.""" start="00:04:42.760" video="mainVideo-science" id="subtitle"]]
+[[!template text="""This is about opening ivy-bibtex,""" start="00:04:44.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""selecting an article I want to annotate,""" start="00:04:47.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""initializing the literature note.""" start="00:04:50.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""We can see that everything""" start="00:04:53.000" video="mainVideo-science" id="subtitle"]]
+[[!template text="""is inserted in for me,""" start="00:04:55.000" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and if I open org-noter on this heading,""" start="00:04:56.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""it opens the article, as expected.""" start="00:05:01.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I can read the article,""" start="00:05:03.760" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I can say I want to""" start="00:05:06.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""annotate something here.""" start="00:05:08.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Obviously, annotation is not that simple as here,""" start="00:05:20.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but I don't really have the time""" start="00:05:24.120" video="mainVideo-science" id="subtitle"]]
+[[!template text="""to actually annotate an article live.""" start="00:05:26.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""But you can keep going, and it's a good setup.""" start="00:05:28.600" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Then close org-noter,""" start="00:05:34.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and let's go presentation again.""" start="00:05:39.880" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""Moving on, this section is some stuff""" start="00:05:40.840" video="mainVideo-science" id="subtitle"]]
+[[!template text="""about my annotation process.""" start="00:05:44.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""As I said, there is not enough time for me""" start="00:05:45.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""to actually annotate an article live,""" start="00:05:49.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but here are some things about it.""" start="00:05:51.120" video="mainVideo-science" id="subtitle"]]
+[[!template text="""First, is that I annotate with org-noter,""" start="00:05:53.000" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which I absolutely love.""" start="00:05:55.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""It is great for annotations""" start="00:05:56.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""because you do them in org,""" start="00:05:59.600" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which is an amazing format""" start="00:06:02.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and gives you a lot of flexibility,""" start="00:06:03.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""such as adding to the Zettelkasten,""" start="00:06:05.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""being initialized by a capture template,""" start="00:06:07.840" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and other things.""" start="00:06:11.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""But also, you don't need to look for""" start="00:06:13.120" video="mainVideo-science" id="subtitle"]]
+[[!template text="""the notes inside the PDF,""" start="00:06:15.960" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which is a problem you can have""" start="00:06:17.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""if you annotate on the PDF,""" start="00:06:19.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and it is very annoying in my opinion.""" start="00:06:20.960" video="mainVideo-science" id="subtitle"]]
+[[!template text="""So I prefer having these notes,""" start="00:06:23.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and I can only focus on them,""" start="00:06:26.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but I can also see where they refer.""" start="00:06:27.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""The other scenarios are not so good.""" start="00:06:29.760" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Annotating on the PDF,""" start="00:06:33.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""you search for it,""" start="00:06:35.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and if you don't know which section it refers to,""" start="00:06:36.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""then you need to look about it,""" start="00:06:41.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and that is very tiring.""" start="00:06:42.760" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""Also, I am always annotating in English.""" start="00:06:44.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""This is not my mother tongue,""" start="00:06:48.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but it helps me avoid""" start="00:06:50.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""the necessary mental overhead""" start="00:06:52.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""of translating while reading.""" start="00:06:53.680" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I want to pay attention to what I read""" start="00:06:55.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and not to translate stuff.""" start="00:06:57.560" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I will translate later.""" start="00:06:59.680" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""And when finishing an article,""" start="00:07:02.120" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I write a mini-abstract myself,""" start="00:07:05.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which contains what I think about the article.""" start="00:07:07.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""It doesn't need to be much,""" start="00:07:10.120" video="mainVideo-science" id="subtitle"]]
+[[!template text="""it's usually like 3 or 4 paragraphs,""" start="00:07:11.640" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and it shows things that are useful in the article,""" start="00:07:14.000" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and what is mentioned that matters to me.""" start="00:07:18.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""So I can look back at it,""" start="00:07:21.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and it is very easy for me to find""" start="00:07:22.600" video="mainVideo-science" id="subtitle"]]
+[[!template text="""what I got from this article,""" start="00:07:24.920" video="mainVideo-science" id="subtitle"]]
+[[!template text="""so where I will cite it on my actual project.""" start="00:07:26.600" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""Then last thing you need to do""" start="00:07:30.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""is add a note to your Zettelkasten.""" start="00:07:33.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""This is very easy due to it being in an org format.""" start="00:07:35.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""You can just have it in the org-roam directory,""" start="00:07:38.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which it automatically goes to,""" start="00:07:41.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and link it to other relevant notes,""" start="00:07:43.640" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which is its index""" start="00:07:46.560" video="mainVideo-science" id="subtitle"]]
+[[!template text="""because everything in my Zettelkasten""" start="00:07:48.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""(at least) has an index,""" start="00:07:50.560" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but also every other permanent note""" start="00:07:51.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""whose contents are in one way or another""" start="00:07:54.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""mentioned inside the article.""" start="00:07:56.760" video="mainVideo-science" id="subtitle"]]
+[[!template text="""This way the article is in a network with notes""" start="00:07:58.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""that are similar to it.""" start="00:08:00.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Then we move on to the second demo,""" start="00:08:02.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which is about a full-fledged literature note.""" start="00:08:05.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""We can go on org-roam-node-find,""" start="00:08:08.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""search for references,""" start="00:08:11.120" video="mainVideo-science" id="subtitle"]]
+[[!template text="""go to this, and you can see""" start="00:08:13.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""it is linked to other notes.""" start="00:08:15.560" video="mainVideo-science" id="subtitle"]]
+[[!template text="""And here is the mini-abstract,""" start="00:08:17.760" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and here are my notes on it.""" start="00:08:20.040" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""The last thing you need to do""" start="00:08:21.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""when creating a literature note,""" start="00:08:27.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""is obviously create permanent notes""" start="00:08:29.120" video="mainVideo-science" id="subtitle"]]
+[[!template text="""based on what you read.""" start="00:08:31.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""If you never create these literature notes,""" start="00:08:32.280" video="mainVideo-science" id="subtitle"]]
+[[!template text="""you will never get new information.""" start="00:08:35.680" video="mainVideo-science" id="subtitle"]]
+[[!template text="""So for your Zettelkasten to grow,""" start="00:08:37.680" video="mainVideo-science" id="subtitle"]]
+[[!template text="""you need to create such notes.""" start="00:08:40.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""This means that the subject you are researching""" start="00:08:42.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""is not just literature notes""" start="00:08:45.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but has well-structured permanent notes,""" start="00:08:47.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which is what you will actually read.""" start="00:08:50.280" video="mainVideo-science" id="subtitle"]]
+[[!template text="""You typically only read literature notes""" start="00:08:52.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""to see what gets cited where.""" start="00:08:55.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""What you will mostly read""" start="00:08:57.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""is these permanent notes""" start="00:08:58.760" video="mainVideo-science" id="subtitle"]]
+[[!template text="""that you create from this knowledge.""" start="00:08:59.840" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""So finally we are at the last part of the talk,""" start="00:09:01.680" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which is about organizing literature notes.""" start="00:09:05.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""And this is in my opinion""" start="00:09:07.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""the most interesting part""" start="00:09:09.560" video="mainVideo-science" id="subtitle"]]
+[[!template text="""because it is very unique.""" start="00:09:10.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""It uses a package I wrote myself,""" start="00:09:12.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and it doesn't have as much usage""" start="00:09:14.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""as the rest of the things I described so far.""" start="00:09:18.320" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""So what is the problem you might find?""" start="00:09:21.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Indeed, if you read a lot of things,""" start="00:09:24.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""you have a large collection of notes,""" start="00:09:27.960" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and it's not the only thing you will think about.""" start="00:09:30.960" video="mainVideo-science" id="subtitle"]]
+[[!template text="""However, you do need to""" start="00:09:33.920" video="mainVideo-science" id="subtitle"]]
+[[!template text="""justify everything with citations,""" start="00:09:36.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""so you need to remember everything""" start="00:09:37.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""you read in these notes.""" start="00:09:39.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""You have done a lot of work,""" start="00:09:41.120" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but there is still a lot for you""" start="00:09:43.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""to reach your final manuscript.""" start="00:09:45.920" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Except if there was a handy little way""" start="00:09:47.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""to combine everything""" start="00:09:50.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and sort it in a very easy way.""" start="00:09:52.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Well, there is,""" start="00:09:55.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and I think it came out pretty well.""" start="00:09:56.960" video="mainVideo-science" id="subtitle"]]
+[[!template text="""It's zetteldesk.el.""" start="00:10:00.120" video="mainVideo-science" id="subtitle"]]
+[[!template text="""It was inspired by this quote here""" start="00:10:01.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""from How to Take Smart Notes.""" start="00:10:05.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Sönke Ahrens here talked about a desktop,""" start="00:10:06.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which you have all the literature""" start="00:10:09.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""you want in that desktop,""" start="00:10:13.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and you try to bring it in order.""" start="00:10:16.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""And by doing that,""" start="00:10:20.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""you can improve your ideas""" start="00:10:22.600" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and have a structure""" start="00:10:24.840" video="mainVideo-science" id="subtitle"]]
+[[!template text="""so that your manuscript will then be""" start="00:10:27.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""very, very easy to write.""" start="00:10:30.920" video="mainVideo-science" id="subtitle"]]
+[[!template text="""And as I say here, in trying to do this,""" start="00:10:33.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I made something much more general""" start="00:10:36.280" video="mainVideo-science" id="subtitle"]]
+[[!template text="""than it needed to be, so yeah,""" start="00:10:38.920" video="mainVideo-science" id="subtitle"]]
+[[!template text="""you can use it for many other things.""" start="00:10:41.560" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""But before I show you some things about it,""" start="00:10:43.600" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I want to introduce you to what a desktop is.""" start="00:10:46.960" video="mainVideo-science" id="subtitle"]]
+[[!template text="""It's essentially a collection of the knowledge""" start="00:10:49.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""you want to be able to see.""" start="00:10:53.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""You add things to your Zetteldesk,""" start="00:10:54.840" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and using filter functions,""" start="00:10:58.000" video="mainVideo-science" id="subtitle"]]
+[[!template text="""you only see these notes and nothing else,""" start="00:11:01.680" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which in my opinion is very handy.""" start="00:11:04.920" video="mainVideo-science" id="subtitle"]]
+[[!template text="""So having said that,""" start="00:11:07.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""we can see these things in action""" start="00:11:10.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""for the final demo of the talk.""" start="00:11:12.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""This is the third one.""" start="00:11:14.400" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I will go to an index file of mine.""" start="00:11:15.840" video="mainVideo-science" id="subtitle"]]
+[[!template text="""This is 3D printing,""" start="00:11:20.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""an assignment I had last semester.""" start="00:11:21.960" video="mainVideo-science" id="subtitle"]]
+[[!template text="""And this has 28 backlinks,""" start="00:11:23.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""so a lot of things that I looked at""" start="00:11:27.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""for this assignment.""" start="00:11:30.400" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I can say I want to add""" start="00:11:31.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""the current note's backlinks to the Zetteldesk,""" start="00:11:33.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and now I have a filtered version""" start="00:11:35.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""of org-roam-node-find defined,""" start="00:11:38.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which only lists these 29 notes.""" start="00:11:40.120" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Very nice, right?""" start="00:11:42.000" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""I can also filter just the literature notes,""" start="00:11:45.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which can also use other UIs beside org-roam,""" start="00:11:49.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""such as, for example,""" start="00:11:56.000" video="mainVideo-science" id="subtitle"]]
+[[!template text="""one I use a lot is the ivy-bibtex command.""" start="00:11:57.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""This takes a lot of time,""" start="00:12:00.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""much longer than the org-roam one,""" start="00:12:03.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but has them in this UI,""" start="00:12:04.600" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which in a lot of cases is more useful for me.""" start="00:12:06.480" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""The other very important thing is inserting these.""" start="00:12:09.840" video="mainVideo-science" id="subtitle"]]
+[[!template text="""For example, say I want to insert a permanent note,""" start="00:12:15.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""such as this.""" start="00:12:20.000" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Its title will become a top-level heading,""" start="00:12:21.760" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and everything else will be inserted as expected.""" start="00:12:25.400" video="mainVideo-science" id="subtitle"]]
+[[!template text="""But the most important thing for us""" start="00:12:29.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""is inserting literature, right?""" start="00:12:35.400" video="mainVideo-science" id="subtitle"]]
+[[!template text="""This is done with this command,""" start="00:12:37.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and let's say I want to insert this.""" start="00:12:39.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""The title again becomes a heading,""" start="00:12:42.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and this is the article title also.""" start="00:12:48.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I store the cite key here,""" start="00:12:50.840" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and everything else about it is also here.""" start="00:12:53.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""And I can add others,""" start="00:12:56.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""for example, this and this.""" start="00:12:58.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""And we have all of them here.""" start="00:13:01.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I see it says this is the basic,""" start="00:13:09.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""so let's put it at the top.""" start="00:13:11.280" video="mainVideo-science" id="subtitle"]]
+[[!template text="""And then maybe I want to put this last.""" start="00:13:12.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""And this way, you can sort things,""" start="00:13:18.840" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and typically, on the other side,""" start="00:13:24.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I have a manuscript,""" start="00:13:26.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and I look at what order""" start="00:13:27.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I want to have things in""" start="00:13:30.000" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and sort the articles and the permanent notes""" start="00:13:31.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""in a way so that each section can have""" start="00:13:34.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""its own citations and its own notes,""" start="00:13:38.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which makes writing, again, very easy, in my opinion.""" start="00:13:41.800" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""Finally, let's go to composing the final article.""" start="00:13:46.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""This is our goal: we wrote and organized""" start="00:13:53.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""all these literature notes""" start="00:13:57.280" video="mainVideo-science" id="subtitle"]]
+[[!template text="""to put them in your final project.""" start="00:13:58.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""This might be an assignment""" start="00:14:00.400" video="mainVideo-science" id="subtitle"]]
+[[!template text="""or an actual scientific article.""" start="00:14:01.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""It is apparent that you have done""" start="00:14:04.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""a lot of work for this so far,""" start="00:14:07.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but you don't need to do a lot more.""" start="00:14:09.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""In my opinion, this is the easiest part""" start="00:14:12.280" video="mainVideo-science" id="subtitle"]]
+[[!template text="""of the whole workflow.""" start="00:14:14.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""People consider final article composition hard,""" start="00:14:15.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but if you've done all these steps,""" start="00:14:19.280" video="mainVideo-science" id="subtitle"]]
+[[!template text="""you already have everything you want""" start="00:14:21.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""to add in the article from your notes.""" start="00:14:23.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""It's already there,""" start="00:14:25.640" video="mainVideo-science" id="subtitle"]]
+[[!template text="""a lot of things are copy-pasted,""" start="00:14:27.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""it's all in a coherent order,""" start="00:14:30.760" video="mainVideo-science" id="subtitle"]]
+[[!template text="""connections are to an extent already there,""" start="00:14:34.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and you know what citation goes where,""" start="00:14:38.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""so you can justify everything you write.""" start="00:14:41.600" video="mainVideo-science" id="subtitle"]]
+[[!template text="""The actual draft isn't there,""" start="00:14:44.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but it is very easy""" start="00:14:46.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""because now you just write things as you see them""" start="00:14:48.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""in your desktop and connect them.""" start="00:14:52.600" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Connections are basic--""" start="00:14:54.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""connections and making the article good, obviously,""" start="00:14:56.960" video="mainVideo-science" id="subtitle"]]
+[[!template text="""are basically the only thing you need to worry,""" start="00:14:59.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but those are very important""" start="00:15:02.400" video="mainVideo-science" id="subtitle"]]
+[[!template text="""because others will only see the final manuscript,""" start="00:15:05.920" video="mainVideo-science" id="subtitle"]]
+[[!template text="""so if that's not good,""" start="00:15:09.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""then the whole assignment is not good, obviously.""" start="00:15:11.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""So it's not like your work is done,""" start="00:15:14.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""it's just very easy.""" start="00:15:17.520" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""And with that, I hope you liked my talk""" start="00:15:19.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""because it is coming to an end now.""" start="00:15:23.280" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I want to thank you for your time;""" start="00:15:25.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I hope you enjoyed it.""" start="00:15:27.920" video="mainVideo-science" id="subtitle"]]
+[[!template text="""You can feel free to email me at this address;""" start="00:15:29.680" video="mainVideo-science" id="subtitle"]]
+[[!template text="""it has also been on every slide since the beginning.""" start="00:15:32.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I also have the GitHub for zetteldesk.el here,""" start="00:15:35.640" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and I will be available for questions.""" start="00:15:40.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I will be viewing both the pad and the IRC""" start="00:15:42.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and will do a live Q&A after this. See you.""" start="00:15:45.000" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Actually, before I go,""" start="00:15:49.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""let's show you the GitHub for zetteldesk.el.""" start="00:15:51.280" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Here's the README; if you're interested on it,""" start="00:15:54.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""you can see more about it,""" start="00:15:57.120" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and also I have a very in-depth wiki about it""" start="00:15:58.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""with 11 pages, and talking about everything""" start="00:16:02.560" video="mainVideo-science" id="subtitle"]]
+[[!template text="""that happens here.""" start="00:16:06.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""A lot of what we discussed is in this section""" start="00:16:08.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""about literature notes.""" start="00:16:11.760" video="mainVideo-science" id="subtitle"]]
+[[!template text="""These documents go a lot more in-depth""" start="00:16:12.920" video="mainVideo-science" id="subtitle"]]
+[[!template text="""in how Zetteldesk works, and also how to use it,""" start="00:16:17.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""so if you're interested, feel free to read them,""" start="00:16:22.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and if you have any problems,""" start="00:16:27.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""you can open an issue about it;""" start="00:16:30.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I will be very active. Thank you.""" start="00:16:31.840" video="mainVideo-science" id="subtitle"]]
+
+
+
+Captioner: hannah
+
+Questions or comments? Please e-mail [vidianosgiannitsis@gmail.com](mailto:vidianosgiannitsis@gmail.com?subject=Comment%20for%20EmacsConf%202022%20science%3A%20Writing%20and%20organizing%20literature%20notes%20for%20scientific%20writing)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/science-before.md b/2022/info/science-before.md
new file mode 100644
index 00000000..5dd6ce02
--- /dev/null
+++ b/2022/info/science-before.md
@@ -0,0 +1,58 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Vidianos Giannitsis shares how he uses Org Roam, org-noter, and zetteldesk.el to manage his literature notes and write articles. Afterwards, he will handle questions over BigBlueButton.
+
+
+The following image shows where the talk is in the schedule for Sat 2022-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="science">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect stroke-width="3" x="164" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 17-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-science>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: TO_INDEX_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-03T15:45:00Z" end="2022-12-03T16:05:00Z"><div class="conf-time">Saturday, Dec 3 2022, ~10:45 AM - 11:05 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 3 2022, ~9:45 AM - 10:05 AM CST (US/Central)<br />Saturday, Dec 3 2022, ~8:45 AM - 9:05 AM MST (US/Mountain)<br />Saturday, Dec 3 2022, ~7:45 AM - 8:05 AM PST (US/Pacific)<br />Saturday, Dec 3 2022, ~3:45 PM - 4:05 PM UTC <br />Saturday, Dec 3 2022, ~4:45 PM - 5:05 PM CET (Europe/Paris)<br />Saturday, Dec 3 2022, ~5:45 PM - 6:05 PM EET (Europe/Athens)<br />Saturday, Dec 3 2022, ~9:15 PM - 9:35 PM IST (Asia/Kolkata)<br />Saturday, Dec 3 2022, ~11:45 PM - 12:05 AM +08 (Asia/Singapore)<br />Sunday, Dec 4 2022, ~12:45 AM - 1:05 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/gen/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="science-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="science-mainVideo" data="""
+00:00.000 My second brain
+00:28.320 Contents of the talk
+01:40.560 Bibliography management
+02:35.200 Creating literature notes: ivy-bibtex-edit-notes
+03:04.960 org-roam reference template
+04:40.160 Demo
+05:40.840 Annotating with org-noter
+06:44.240 Annotating in English
+07:02.120 Afterthoughts on an article
+07:30.200 Adding a note
+08:21.480 Creating permanent notes from reference material
+09:01.680 The organization problem
+09:21.520 zetteldesk.el
+10:43.600 The zetteldesk-desktop
+11:45.040 Filtering with ivy-bibtex
+12:09.840 Inserting literature
+13:46.200 Composing the final article
+15:19.160 Thanks
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main.webm">Download --main.webm (121MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main.org">Download --main.org</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/v8ypuDbDai4WJYu5CbVRYc">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="science-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="science-qanda" data="""
+00:00.000 Introduction
+00:24.000 Q1 - Do you use flipping notes and do you keep them in org-roam?
+03:21.000 Q2 - Does it work only for PDFs or does it work for more formats?
+06:00.000 Q3 - Why use OrgNoter in place of Zotero PDF Reader?
+07:04.000 Q4 - Thoughts on the future of Zettelkasten
+08:16.000 Q4.5 - Collaborative Zettelkasten notes
+12:03.000 Q5 - How do you find a way to get a nice overview of multiple notes to rearrange them?
+15:26.000 Q6 - Can we use Zettelkasten for coding too?
+18:29.000 Q7 - Is Zetteldesk available in Melpa? - Yes
+19:33.000 Conclusion - thoughts about Zettelkasten
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="science-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers.webm">Download --answers.webm (13MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers.opus">Download --answers.opus (7.2MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/science-nav.md b/2022/info/science-nav.md
new file mode 100644
index 00000000..3bde0317
--- /dev/null
+++ b/2022/info/science-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/lspbridge">lsp-bridge: a smooth-as-butter asynchronous LSP client</a>
+Next by track: <a href="/2022/talks/asmblox">asm-blox: a game based on WebAssembly that no one asked for</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/sqlite-after.md b/2022/info/sqlite-after.md
new file mode 100644
index 00000000..974f0328
--- /dev/null
+++ b/2022/info/sqlite-after.md
@@ -0,0 +1,451 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="sqlite-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hello. I'm Andrew Hyatt. I've been working on Emacs,""" start="00:00:00.000" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""with Emacs, and to some extent""" start="00:00:08.556" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""on Emacs for a while. I've written the WebSockets library""" start="00:00:10.540" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and Emacs calc tutorials. I've enjoyed use of""" start="00:00:15.273" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""many of everyone's incredible packages.""" start="00:00:20.046" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""So my thesis for this talk, why I'm giving this talk,""" start="00:00:24.640" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""is that I'm interested in SQLite.""" start="00:00:27.133" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I think we should be exploring SQLite for applications""" start="00:00:29.061" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""in ways I think the community has shied away from.""" start="00:00:34.954" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I'd like to introduce the triples package as a way,""" start="00:00:37.483" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""both easy and with interesting functionality,""" start="00:00:41.951" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""that will allow us to build extensible databases""" start="00:00:47.665" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""in a way that is, I think,""" start="00:00:49.154" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""a little bit unusual and perhaps compelling, I hope.""" start="00:00:52.583" video="mainVideo-sqlite" id="subtitle"]]
+[[!template new="1" text="""So first of all, why SQLite?""" start="00:00:56.220" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Why is this good? Well, SQLite is now built into Emacs.""" start="00:00:59.227" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""So you get a few things out of this when you use it for data.""" start="00:01:06.080" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""First of all, it's a database.""" start="00:01:12.217" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's extremely good for data, of course.""" start="00:01:14.580" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""There's a simplicity to data manipulation""" start="00:01:16.370" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""using a database, compared to data manipulation,""" start="00:01:19.919" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""that is, manipulating data in a text file.""" start="00:01:22.028" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Text files are really not built for data.""" start="00:01:25.197" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""So when typically when you need to do this,""" start="00:01:31.034" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""like I know Org Mode is--""" start="00:01:33.140" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""which I'm a huge, huge Org Mode fan--""" start="00:01:35.027" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""it's all about sort of data in text.""" start="00:01:38.117" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It does work, but you certainly would be""" start="00:01:41.045" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""hard pressed to make sweeping changes""" start="00:01:45.376" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""to your database that is represented in text.""" start="00:01:47.360" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's just not well suited for this sort of thing.""" start="00:01:51.954" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It would take a long time,""" start="00:01:53.061" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""where the speed of SQL is incredibly impressive.""" start="00:01:54.964" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I think certainly Emacs is not known""" start="00:02:00.220" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""for being extremely speedy.""" start="00:02:04.430" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I think the overuse of text""" start="00:02:06.753" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""is part of this. Of course, text and using text,""" start="00:02:11.906" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""using files has awesome advantages as well.""" start="00:02:14.614" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I'm really here to talk about""" start="00:02:18.468" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""the other side of the coin, right?""" start="00:02:20.511" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Everyone can judge""" start="00:02:22.718" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""those advantages and disadvantages""" start="00:02:23.962" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and make their own trade-offs,""" start="00:02:24.646" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but I want to kind of""" start="00:02:25.417" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""make the pitch for SQLite.""" start="00:02:26.021" video="mainVideo-sqlite" id="subtitle"]]
+[[!template new="1" text="""So let's talk about the triples package.""" start="00:02:29.870" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""The triples package is a package""" start="00:02:32.860" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""that is designed to give you a very generic schema.""" start="00:02:35.489" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""You don't have to do,""" start="00:02:40.420" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""for most of the common operations,""" start="00:02:42.006" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""you don't have to write SQL yourself.""" start="00:02:43.292" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""A lot of stuff is built in""" start="00:02:45.517" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and is based on a very generic schema.""" start="00:02:47.925" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""That is, it's a single table.""" start="00:02:51.036" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""That table has, of course, fixed schema.""" start="00:02:53.840" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It basically has three columns.""" start="00:02:55.230" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It actually has four columns.""" start="00:02:57.479" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""In this talk, I'm not going to get into""" start="00:03:00.868" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""the fourth column and why, but it's useful.""" start="00:03:01.194" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""So the three columns are subject, predicate,""" start="00:03:04.124" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and object. This is what it's related to""" start="00:03:07.711" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""what we call an RDF format.""" start="00:03:10.362" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""These things basically describe a link.""" start="00:03:13.909" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""The link is from the subject to the object.""" start="00:03:17.140" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""The link type is a predicate.""" start="00:03:20.008" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""That sounds overly theoretical,""" start="00:03:23.956" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but the point is that you can describe""" start="00:03:26.086" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""a lot of things with this format.""" start="00:03:28.033" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""You probably describe everything with it.""" start="00:03:32.006" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's very simple because the schema is fixed.""" start="00:03:33.330" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's only this kind of data. That means""" start="00:03:39.227" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""for your application, you define a schema""" start="00:03:42.774" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""in subject, predicate, object format.""" start="00:03:44.140" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""That defines what data you can use,""" start="00:03:47.327" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""what types there are, what properties they have,""" start="00:03:50.073" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""how you can use the system,""" start="00:03:56.070" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and what is legal to do. And this is stored as data.""" start="00:03:57.215" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I think as Lisp people,""" start="00:04:01.007" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I think we're all very onboard""" start="00:04:03.891" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""with the fact that you have a simple way""" start="00:04:07.540" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""to express everything, and you don't have these""" start="00:04:13.913" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""two systems. In this way,""" start="00:04:17.660" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""you don't have to have code as a system.""" start="00:04:18.925" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Do you have to load code to use the triples package""" start="00:04:20.872" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""to make sure your schema is obeyed?""" start="00:04:24.826" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""No, it's all just built in to this database.""" start="00:04:27.917" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I'll describe this. As I said,""" start="00:04:35.214" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""it's a little bit abstract right now,""" start="00:04:37.037" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but it will become a lot clearer""" start="00:04:39.860" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""when we go through an example,""" start="00:04:42.049" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""which we're going to do now.""" start="00:04:46.779" video="mainVideo-sqlite" id="subtitle"]]
+[[!template new="1" text="""As an exercise, let's create Emacs bookmarks,""" start="00:04:50.209" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""which basically are three things:""" start="00:04:56.660" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""a name, a file, and an annotation.""" start="00:04:57.346" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I may be missing out on functionality.""" start="00:05:01.039" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Of course, everything in Emacs,""" start="00:05:02.365" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""everything has lots and lots of functionality,""" start="00:05:04.773" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but let's just start with this simple thing.""" start="00:05:05.140" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""First of all, we're going to open up a database.""" start="00:05:08.050" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Pretty simple.""" start="00:05:11.100" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I think there's nothing to explain there.""" start="00:05:12.104" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""But here on this line that I'm on right now,""" start="00:05:15.015" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""we are saying, okay, there's going to be""" start="00:05:19.107" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""a type called bookmark.""" start="00:05:21.433" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's going to have the following properties.""" start="00:05:24.840" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""First, a file, which is unique and a string.""" start="00:05:26.827" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""The second is an annotation,""" start="00:05:29.179" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""which is again unique and a string.""" start="00:05:31.765" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Then we're going to have another type called named.""" start="00:05:34.318" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""First of all, why is it named as part of bookmark?""" start="00:05:37.865" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""As I'll get into, it's interesting""" start="00:05:39.809" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""when you start sharing this database""" start="00:05:45.563" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""with other things, not just bookmarks, but other types.""" start="00:05:48.512" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Bookmarks are very similar to many other things""" start="00:05:51.366" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""that you might want to expand into.""" start="00:05:54.617" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Those other things have names,""" start="00:05:56.724" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but they're not bookmarks.""" start="00:05:57.087" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's nice to separate these concerns out""" start="00:05:58.270" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and just have another type called named,""" start="00:06:04.124" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""which just basically has a name.""" start="00:06:08.373" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We can execute this.""" start="00:06:12.780" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's not interesting to look at these.""" start="00:06:15.747" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""that is not all that useful for anything,""" start="00:06:21.440" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It outputs something""" start="00:06:21.799" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but that's okay. What's done is, actually,""" start="00:06:25.908" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""it's created a database""" start="00:06:28.015" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and it's populated it with the schema.""" start="00:06:32.263" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We can look at this.""" start="00:06:34.046" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We won't go through all of this""" start="00:06:41.479" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""because it's a little bit too much""" start="00:06:43.603" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""for a short presentation like this,""" start="00:06:44.189" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but you could see that there's something here""" start="00:06:46.037" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""that's like, oh, we have a subject bookmark.""" start="00:06:48.186" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We have a property base/type.""" start="00:06:52.500" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""That just means that there's a property""" start="00:06:56.032" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""that's defined by the base.""" start="00:06:58.879" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""This means this is from the triples package itself.""" start="00:07:00.563" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's not some other package.""" start="00:07:02.249" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Third is, what is the type of this object?""" start="00:07:08.940" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's a schema. This thing could be many types.""" start="00:07:11.526" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""As I said, if you have a--""" start="00:07:17.060" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""we haven't seen an example yet,""" start="00:07:19.151" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but if you have a bookmark,""" start="00:07:20.236" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""it's going to have a name type""" start="00:07:21.100" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and a bookmark type.""" start="00:07:23.687" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Everything is multi-typed""" start="00:07:25.695" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and that's kind of a feature""" start="00:07:26.720" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""of this kind of storage system.""" start="00:07:28.147" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I'm not going to go through everything,""" start="00:07:32.138" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but you can see it's all there in triples,""" start="00:07:33.140" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""the whole schema, everything we just did.""" start="00:07:35.866" video="mainVideo-sqlite" id="subtitle"]]
+[[!template new="1" text="""Let's create a bookmark. Again,""" start="00:07:40.740" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""we're going to connect to our database""" start="00:07:42.646" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and we're going to basically set""" start="00:07:46.998" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""an entire subject.""" start="00:07:49.247" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""The subject is, it's basically like an entity.""" start="00:07:52.553" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We're going to define a whole entity""" start="00:07:54.240" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""or you could refer to it as an object.""" start="00:07:56.106" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""That's a perfectly fine way to look at it, I think.""" start="00:08:00.677" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's going to have some identifier.""" start="00:08:03.910" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""That identifier could be anything.""" start="00:08:04.357" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It doesn't have to be a string.""" start="00:08:06.724" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It could really be anything, but we're going""" start="00:08:07.432" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""to give it a string called emacs-init.""" start="00:08:09.260" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It does not matter what this identifier is,""" start="00:08:11.370" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""at least for our purposes.""" start="00:08:13.299" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It does matter when you're linking to it,""" start="00:08:17.809" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but I think nothing that I'm about to show you.""" start="00:08:19.915" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""This could truly be anything""" start="00:08:22.264" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""because it has a separate name.""" start="00:08:25.831" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I'm giving it a name here, which is init.""" start="00:08:28.180" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I'm just specifying the named type here""" start="00:08:32.133" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and I'm specifying the bookmark type here""" start="00:08:34.918" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and its values. We're going to do that.""" start="00:08:38.048" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Now, if we look, we see everything we saw before,""" start="00:08:43.220" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but now we have subject emacs-init.""" start="00:08:47.770" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It has a type and it's named.""" start="00:08:52.247" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We also see the same thing two lines down.""" start="00:08:55.974" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""This type is also a bookmark,""" start="00:08:57.220" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but the name is init in the named/name,""" start="00:08:58.265" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""which is like the type is name, named,""" start="00:09:02.820" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and the property is name. It's init.""" start="00:09:05.967" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""As you can see, this is just""" start="00:09:08.753" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""how everything looks.""" start="00:09:12.662" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's pretty straightforward""" start="00:09:16.332" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and you can retrieve it.""" start="00:09:18.357" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Now, we're looking at the database,""" start="00:09:19.319" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but you don't really have to""" start="00:09:21.604" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""look at the database for... In fact,""" start="00:09:22.690" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I think we're done looking""" start="00:09:23.219" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""at the triples format,""" start="00:09:24.223" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""because I think it's very simple.""" start="00:09:25.106" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""You've already got the hang of it, I think.""" start="00:09:29.719" video="mainVideo-sqlite" id="subtitle"]]
+[[!template new="1" text="""Let's retrieve that just to make sure, yes,""" start="00:09:31.366" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""we can retrieve it.""" start="00:09:33.070" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We're going to retrieve it and say, okay,""" start="00:09:37.981" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""what do we get when we load the emacs-init subject?""" start="00:09:38.248" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Well, we get a plist of all of its properties,""" start="00:09:43.287" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""which then you can use in your application.""" start="00:09:48.698" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""There's many more ways to retrieve""" start="00:09:55.631" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and there's many more ways to save.""" start="00:09:57.456" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""In fact, I think the way I did it here""" start="00:09:59.380" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""with set subject is probably not""" start="00:10:01.905" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""the right way to do it most of the time.""" start="00:10:04.016" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's usually because it'll erase everything.""" start="00:10:06.782" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's only really to be used when""" start="00:10:08.128" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""you're sure you control all the data,""" start="00:10:13.740" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but you're never sure because there could be""" start="00:10:15.711" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""other packages that are also using this database,""" start="00:10:16.400" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""they could have their own data.""" start="00:10:19.611" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""You don't want to erase""" start="00:10:20.696" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""all the other Emacs init subject data.""" start="00:10:21.343" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""In this case, we did because""" start="00:10:25.015" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""we are confident it was a new entity,""" start="00:10:27.700" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but in most cases, the right thing to do is""" start="00:10:30.811" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""just set it by type. Just say,""" start="00:10:31.336" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""we're just going to set the bookmark type,""" start="00:10:34.290" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""which is... The properties are this,""" start="00:10:36.677" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and then the name type""" start="00:10:37.223" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and the properties are that.""" start="00:10:38.105" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""That's a way that you could do things.""" start="00:10:42.815" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""There's also many retrieval types.""" start="00:10:44.900" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""The retrieval types:""" start="00:10:48.527" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""you can retrieve by a number of different ways,""" start="00:10:53.756" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""which I'm not going to get into,""" start="00:10:56.404" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but you can read about in either the source""" start="00:10:58.870" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""or the readme in the package.""" start="00:11:01.242" video="mainVideo-sqlite" id="subtitle"]]
+[[!template new="1" text="""We have backlinks as well.""" start="00:11:10.034" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Let me explain what backlinks are.""" start="00:11:14.540" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""There's another feature of the triples.""" start="00:11:15.863" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""As I mentioned, these things""" start="00:11:17.173" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""can be thought about as links,""" start="00:11:19.861" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but what could be a link in one direction""" start="00:11:21.850" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""could also be a link in the other direction,""" start="00:11:23.798" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and we basically get this for free.""" start="00:11:25.805" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Here's an example where we are again""" start="00:11:28.396" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""connecting toward bookmark. Here we're going to""" start="00:11:33.808" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""add a new type called tagged.""" start="00:11:35.753" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We're going to give everything in tags.""" start="00:11:38.224" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Here we're saying, okay, there's a type called tagged""" start="00:11:41.614" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and it has a property called tags.""" start="00:11:45.525" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""This is not unique, so it's a list basically.""" start="00:11:49.235" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's a list of string.""" start="00:11:52.060" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""There also is a type called tag.""" start="00:11:54.327" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""This is for things that are tags themselves.""" start="00:11:58.676" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Then it has a type called numbers""" start="00:12:01.403" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and it has what we call a virtual reversed property.""" start="00:12:06.128" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's virtual because it's not actually stored.""" start="00:12:18.004" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We just compute it by reversing""" start="00:12:21.076" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""the subject and the object.""" start="00:12:23.742" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""This is on tagged tags. When we query this,""" start="00:12:24.307" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""we can just say, okay,""" start="00:12:29.260" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""what are all the subjects""" start="00:12:32.007" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""that have tagged tags of me, the tag?""" start="00:12:33.269" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""In fact, let me demonstrate that for you.""" start="00:12:38.860" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We're going to set the type on emacs-init.""" start="00:12:39.366" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We're going to add the &quot;tagged&quot; type.""" start="00:12:42.140" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""This is the alternate way of setting data""" start="00:12:45.071" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""that I mentioned.""" start="00:12:47.018" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""This won't erase anything else.""" start="00:12:48.740" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We're just adding something here.""" start="00:12:49.925" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We're adding this type &quot;tagged&quot;""" start="00:12:51.753" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""to our previous bookmark emacs-init.""" start="00:12:54.743" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We're going to add emacs and config""" start="00:12:59.954" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""as the tags. We're going to then""" start="00:13:01.059" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""set emacs as a tag and config as a tag.""" start="00:13:06.867" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""That just lets us have this virtual property.""" start="00:13:11.096" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""You have to do something.""" start="00:13:15.386" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""You can't get it out of thin air.""" start="00:13:16.390" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""The design decision we've made is:""" start="00:13:18.734" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""you at least need to tag it""" start="00:13:23.427" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""before you get the free property.""" start="00:13:25.509" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""What you should see... Let's try it out.""" start="00:13:32.660" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We got the subject config,""" start="00:13:35.632" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""which we've set no data on.""" start="00:13:36.038" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""You can tell we're not sending any data.""" start="00:13:37.262" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""If I get that subject, the result is that""" start="00:13:40.669" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""it says its members are emacs-init.""" start="00:13:44.821" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""That's what a virtual reverse property.""" start="00:13:46.069" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""As we tag more things, this just""" start="00:13:49.879" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""continues to work because it's just doing""" start="00:13:53.607" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""a SQL query here.""" start="00:13:55.152" video="mainVideo-sqlite" id="subtitle"]]
+[[!template new="1" text="""Besides showing off the backlinks function,""" start="00:13:59.380" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""this also shows off the general way""" start="00:14:01.986" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""you can have extensible entities.""" start="00:14:04.176" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""That is, it's possible that someone writes""" start="00:14:07.864" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""a bookmarks package that stores everything""" start="00:14:09.392" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""in a database, in the triples database,""" start="00:14:13.063" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but then someone else can come and say,""" start="00:14:18.055" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""okay, I'm going to define my own types""" start="00:14:21.522" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""that's meant to work with this database,""" start="00:14:23.591" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""just like someone could do what I did here,""" start="00:14:25.740" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""just to add simple tagging.""" start="00:14:28.508" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's very easy to do.""" start="00:14:30.875" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""This stuff is not that easy to do otherwise.""" start="00:14:32.901" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""To do this in Lisp, I would say it's a little awkward.""" start="00:14:35.932" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""With databases, again, it's not only possible,""" start="00:14:38.962" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""it's relatively trivial,""" start="00:14:42.674" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""especially with this kind of database.""" start="00:14:43.499" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""The benefit is it's super easy to work with.""" start="00:14:49.829" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""With this kind of generic database,""" start="00:14:53.057" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""the drawback is it's not all that efficient""" start="00:14:56.042" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""as a special purpose table""" start="00:15:00.312" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""that is really built for efficiencies.""" start="00:15:04.382" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""A lot of times you have to do multiple lookups""" start="00:15:06.192" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and things like that.""" start="00:15:08.820" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Again, it's a trade-off for various things.""" start="00:15:09.443" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""As you can see, this is like""" start="00:15:11.986" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""one database for everything.""" start="00:15:19.901" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""That means that we don't have to all""" start="00:15:22.067" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""contribute to one giant database.""" start="00:15:29.179" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""All the packages that use triples,""" start="00:15:31.945" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""it doesn't have to be one database,""" start="00:15:33.053" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but it's cool if it does.""" start="00:15:35.180" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I don't know what I want to happen""" start="00:15:37.087" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""or what I expect to happen,""" start="00:15:39.394" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but I think an interesting property is that""" start="00:15:41.220" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""this is a way for lots of data to live together""" start="00:15:43.069" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and build off each other in ways that I think""" start="00:15:45.400" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""are hard to do with other forms of table layouts""" start="00:15:49.607" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and things like that.""" start="00:15:55.780" video="mainVideo-sqlite" id="subtitle"]]
+[[!template new="1" text="""Let's talk about a use of it,""" start="00:15:57.008" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""which is the EKG package.""" start="00:15:59.654" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""The EKG package is something I've written""" start="00:16:02.644" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""to demonstrate the triples library""" start="00:16:04.590" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and use it for something I think is interesting,""" start="00:16:07.780" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""which is personal knowledge management systems""" start="00:16:09.410" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""of the same type, of the same genre""" start="00:16:12.420" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""that Org Roam is,""" start="00:16:14.385" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but with different design decisions.""" start="00:16:15.287" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I'll show it in action for a little bit.""" start="00:16:18.434" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Let's just look at... it's all tag-based,""" start="00:16:26.532" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""same kind of tags we saw before""" start="00:16:28.360" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""when we were playing around""" start="00:16:30.186" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""with the bookmarks example application,""" start="00:16:32.233" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""What I want to show is: I can look at a tag.""" start="00:16:35.224" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but everything here is...""" start="00:16:35.560" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I could see notes with that tag.""" start="00:16:37.476" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Everything you see here is in the database,""" start="00:16:40.288" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""no files involved.""" start="00:16:42.633" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""All of this is just a thing""" start="00:16:43.199" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""that's an entire object, the entire string.""" start="00:16:46.405" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It works. It has tags.""" start="00:16:49.391" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""You can see not only this tag,""" start="00:16:56.082" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but all the other tags associated with it""" start="00:16:59.230" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and their notes.""" start="00:17:01.355" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's kind of an interesting way to do things.""" start="00:17:04.860" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""When you capture it, I think it's interesting.""" start="00:17:10.256" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""There's a lot of interesting design elements here.""" start="00:17:12.260" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""This tags thing is not part of the buffer.""" start="00:17:22.276" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's not like Org Roam.""" start="00:17:25.819" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""You see here in this other tags,""" start="00:17:28.752" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""these are things I've imported from Org Roam.""" start="00:17:29.117" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""This is why they look like they do.""" start="00:17:31.925" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""They have their own titles because""" start="00:17:32.231" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I just wrote them all in Org Roam.""" start="00:17:34.020" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""What it looks like, really, for these notes""" start="00:17:37.890" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""is that it's just text.""" start="00:17:39.458" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""You really don't have to bother with this metadata.""" start="00:17:41.024" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""If I want another tag like pancakes,""" start="00:17:44.616" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I can just add it here. Again, these tags""" start="00:17:46.283" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""will turn into data, triple data.""" start="00:17:53.655" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""The text is just a triple date[??] as well,""" start="00:17:56.740" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but different to triple data.""" start="00:17:59.826" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""All these things are like that.""" start="00:18:01.970" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""You can open up any of these things, et cetera.""" start="00:18:08.363" video="mainVideo-sqlite" id="subtitle"]]
+[[!template new="1" text="""I think the interesting thing here""" start="00:18:12.772" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""is to see the code. It's not super interesting""" start="00:18:16.683" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""to look at code for too long,""" start="00:18:22.597" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but we don't have that long.""" start="00:18:23.980" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Whenever we connect--""" start="00:18:26.992" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I just want to point out a few things.""" start="00:18:27.655" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Whenever we connect, we have a schema.""" start="00:18:28.820" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We just do this. Every time we connect,""" start="00:18:29.206" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""we just make sure it has the right schema.""" start="00:18:31.176" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""This way, the user is up to date.""" start="00:18:33.164" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""This schema just looks exactly like""" start="00:18:36.315" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""stuff I showed you in the triples""" start="00:18:38.301" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""when we were looking at bookmarks.""" start="00:18:41.688" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's not complicated.""" start="00:18:43.533" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I even have stuff here with people""" start="00:18:45.100" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""to use this as a person database.""" start="00:18:48.211" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I haven't figured out how I'm going to use this yet,""" start="00:18:51.539" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but you can see just to do this,""" start="00:18:52.105" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""it's really trivial and it's pretty easy.""" start="00:18:54.274" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Let's show a few other things,""" start="00:19:01.914" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""like getting all the tags.""" start="00:19:02.499" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Here, we could just say,""" start="00:19:05.845" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""let's get the subjects of type tag.""" start="00:19:07.991" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We have all the triples,""" start="00:19:10.380" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""all the ones that are of type tag,""" start="00:19:12.903" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""all the things that have a subject.""" start="00:19:15.850" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""All the subjects that have links,""" start="00:19:18.778" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""that have this type, this tag in it,""" start="00:19:22.146" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""we can return them all.""" start="00:19:28.338" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""of all these objects.""" start="00:19:30.426" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Basically, it just gives you a list""" start="00:19:30.660" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Again, you can think of these things as objects.""" start="00:19:32.675" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""All the objects of type tag,""" start="00:19:33.244" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""we'll just get them all. Super, super simple.""" start="00:19:35.434" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Triples gives you this functionality""" start="00:19:37.321" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""out of the box. It's not that complicated.""" start="00:19:39.586" video="mainVideo-sqlite" id="subtitle"]]
+[[!template new="1" text="""What I would like to show,""" start="00:19:43.780" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and that shows my thesis for this whole talk,""" start="00:19:45.168" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""is this rename tag. Now, think about""" start="00:19:49.519" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""how you would rename a tag in Org Roam""" start="00:19:52.786" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""or anything where the tag is part of the files.""" start="00:19:54.151" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's like how you would re-tag everything""" start="00:20:03.014" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""in Org Mode. It's complicated and error-prone""" start="00:20:05.280" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and slow. This is anything,""" start="00:20:09.870" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""this is instantaneous and super easy.""" start="00:20:12.557" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Look, that's it. There's not that many places""" start="00:20:14.764" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""for an error to live here.""" start="00:20:17.256" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""One thing I would like to point out""" start="00:20:19.540" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""is that we are doing direct,""" start="00:20:21.508" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""not everything has to go through""" start="00:20:23.338" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""the triples package. Maybe it should,""" start="00:20:24.321" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but the triples package is a fixed format,""" start="00:20:28.293" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""which is why it's okay--""" start="00:20:31.660" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""whether it's a good idea, I'm not sure,""" start="00:20:33.907" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but it's okay for client packages""" start="00:20:34.070" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""to just directly manipulate the tables.""" start="00:20:39.864" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Here, we're just doing it just to""" start="00:20:42.834" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""update all the tags""" start="00:20:43.938" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and then remove and set types""" start="00:20:45.266" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""so that the correct thing happens.""" start="00:20:47.892" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""As you can see, it's super, super simple.""" start="00:20:49.120" video="mainVideo-sqlite" id="subtitle"]]
+[[!template new="1" text="""I think this proves my thesis about""" start="00:20:52.147" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""the advantages of applications with SQLite.""" start="00:20:55.375" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Thank you for listening.""" start="00:21:01.527" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I hope this puts ideas in your minds""" start="00:21:02.431" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""about taking advantage of this functionality.""" start="00:21:05.877" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I hope to see more things""" start="00:21:09.828" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""using the triples library""" start="00:21:11.936" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""or otherwise that take advantage of this.""" start="00:21:12.180" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Thank you for your time.""" start="00:21:16.018" video="mainVideo-sqlite" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20sqlite%3A%20Using%20SQLite%20as%20a%20data%20source%3A%20a%20framework%20and%20an%20example)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/sqlite-before.md b/2022/info/sqlite-before.md
new file mode 100644
index 00000000..e0ada947
--- /dev/null
+++ b/2022/info/sqlite-before.md
@@ -0,0 +1,57 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Andrew Hyatt shows how to use SQLite to store and retrieve information using the triples package. Afterwards, he wil handle questions over BigBlueButton.
+
+
+The following image shows where the talk is in the schedule for Sat 2022-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="sqlite">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect stroke-width="3" x="376" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 22-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-sqlite>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: TO_CAPTION_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-03T18:00:00Z" end="2022-12-03T18:25:00Z"><div class="conf-time">Saturday, Dec 3 2022, ~1:00 PM - 1:25 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 3 2022, ~12:00 PM - 12:25 PM CST (US/Central)<br />Saturday, Dec 3 2022, ~11:00 AM - 11:25 AM MST (US/Mountain)<br />Saturday, Dec 3 2022, ~10:00 AM - 10:25 AM PST (US/Pacific)<br />Saturday, Dec 3 2022, ~6:00 PM - 6:25 PM UTC <br />Saturday, Dec 3 2022, ~7:00 PM - 7:25 PM CET (Europe/Paris)<br />Saturday, Dec 3 2022, ~8:00 PM - 8:25 PM EET (Europe/Athens)<br />Saturday, Dec 3 2022, ~11:30 PM - 11:55 PM IST (Asia/Kolkata)<br />Sunday, Dec 4 2022, ~2:00 AM - 2:25 AM +08 (Asia/Singapore)<br />Sunday, Dec 4 2022, ~3:00 AM - 3:25 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/dev/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="sqlite-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="sqlite-mainVideo" data="""
+00:00.000 Introduction
+00:56.220 Why SQLite
+02:29.870 The triples package
+04:50.209 Exercise: Emacs bookmarks
+07:40.740 Creating bookmarks
+09:31.366 Retrieving bookmarks
+11:10.034 Backlinks
+13:59.380 Extensible entities
+15:57.008 EKG package
+18:12.772 The code
+19:43.780 Renaming tags
+20:52.147 Conclusion
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--main.webm">Download --main.webm (69MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/a26FMpRuCKmn4YZU4ysdrd">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="sqlite-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="sqlite-qanda" data="""
+00:29.040 Is this built into Emacs? Multiple schemas, multiple databases?
+01:22.756 What about collaborative editing with this?
+02:22.913 What about using this on multiple computers? How do you synchronize your data?
+03:16.640 Are you planning to further develop EKG?
+04:45.303 Is it then possible to combine the triples DB with some custom tables in the same SQLite file?
+06:01.734 What are your thoughts on adding a timestamp attribute to triples so that the database becomes append-only and by default you return the latest fact for a subject-object pair?
+08:37.040 With EKG what about views like org roam node mind map view? Or org mode virtual view for integration with other org packages?
+09:46.220 Can ordinary lisp data types (lists, symbols, etc) be stored in the database?
+13:41.041 Beyond note-taking, what kind of packages do you think would benefit from triples library?
+15:03.200 Are you trying to create a PIM with EKG? What information do you primarily want to manage?
+17:10.021 What about using other databases programs: PostgreSQL, MongoDB, etc.?
+17:55.899 What is your preferred reference to understand triples/graph dbs? (e.g. think better about schema design)
+18:49.200 Will it slow down with the growth of a database?
+20:39.728 What are your thoughts on allowing for a true graph DB backend?
+22:58.960 Challenges with recording
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="sqlite-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--answers.webm">Download --answers.webm (44MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--answers.opus">Download --answers.opus (8.3MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/sqlite-nav.md b/2022/info/sqlite-nav.md
new file mode 100644
index 00000000..df7ecc8f
--- /dev/null
+++ b/2022/info/sqlite-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/meetups">Attending and organizing Emacs meetups</a>
+Next by track: <a href="/2022/talks/buttons">Linking personal info with Hyperbole implicit buttons</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/sun-close-after.md b/2022/info/sun-close-after.md
new file mode 100644
index 00000000..f15ea0e2
--- /dev/null
+++ b/2022/info/sun-close-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20sun-close%3A%20Sunday%20closing%20remarks)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/sun-close-before.md b/2022/info/sun-close-before.md
new file mode 100644
index 00000000..f3b222a8
--- /dev/null
+++ b/2022/info/sun-close-before.md
@@ -0,0 +1,4 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+<div class="vid"><div></div><div class="files resources"><ul></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/sun-close-nav.md b/2022/info/sun-close-nav.md
new file mode 100644
index 00000000..c7f08cc2
--- /dev/null
+++ b/2022/info/sun-close-nav.md
@@ -0,0 +1,6 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/python">Short hyperlinks to Python docs</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/sun-open-after.md b/2022/info/sun-open-after.md
new file mode 100644
index 00000000..e11c9bbb
--- /dev/null
+++ b/2022/info/sun-open-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20sun-open%3A%20Sunday%20opening%20remarks)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/sun-open-before.md b/2022/info/sun-open-before.md
new file mode 100644
index 00000000..f3b222a8
--- /dev/null
+++ b/2022/info/sun-open-before.md
@@ -0,0 +1,4 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+<div class="vid"><div></div><div class="files resources"><ul></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/sun-open-nav.md b/2022/info/sun-open-nav.md
new file mode 100644
index 00000000..a5b07625
--- /dev/null
+++ b/2022/info/sun-open-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/sat-close">Saturday closing remarks</a>
+Next by track: <a href="/2022/talks/survey">Results of the 2022 Emacs Survey</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/survey-after.md b/2022/info/survey-after.md
new file mode 100644
index 00000000..d3d710f3
--- /dev/null
+++ b/2022/info/survey-after.md
@@ -0,0 +1,538 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="survey-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hello everyone and thanks for tuning in. I'm Timothy,""" start="00:00:00.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and in this talk, we'll be going over""" start="00:00:06.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""the 2022 Emacs User Survey.""" start="00:00:08.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Since this is the first time we're discussing this,""" start="00:00:11.970" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we'll be going over the survey itself a bit,""" start="00:00:15.079" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""how it's being put together and run,""" start="00:00:18.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and then we'll have a little taste of the results""" start="00:00:21.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""with more analysis to be published in the future.""" start="00:00:24.200" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""To start with though, a bit of background.""" start="00:00:26.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So in 2020, we had an Emacs User Survey""" start="00:00:32.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""run by Adrien Brochard.""" start="00:00:36.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Now this is, to the best of my knowledge,""" start="00:00:38.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""the first time that a large-scale Emacs User Survey""" start="00:00:41.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""has actually been run.""" start="00:00:45.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""About 7,000 people responded to the survey,""" start="00:00:48.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""so in many respects, it was quite successful.""" start="00:00:50.440" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""And what's significant about this is that""" start="00:00:53.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""with this being the first time""" start="00:00:56.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that a large-scale survey has been run,""" start="00:00:57.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""it actually provided some insight""" start="00:01:00.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""into questions about how the community is using Emacs""" start="00:01:01.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that allow for much better guesses""" start="00:01:06.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""than just speculation based on the small number of people""" start="00:01:09.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""who respond on the mailing list usually.""" start="00:01:15.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So, why are we doing another survey? Well, to start with,""" start="00:01:16.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""in order to get the most value out of an Emacs User Survey,""" start="00:01:24.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""it's quite helpful if the information in it is recent.""" start="00:01:28.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Furthermore, we can actually get some more value""" start="00:01:32.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""if we can examine trends,""" start="00:01:35.440" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""shifts in the way that people are using Emacs,""" start="00:01:38.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""where the pain points lie,""" start="00:01:41.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""what people are enjoying the most, etc.""" start="00:01:42.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So in both of these respects,""" start="00:01:45.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""it's to our benefit if the survey""" start="00:01:46.521" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""is actually a regular event,""" start="00:01:49.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""instead of just something that's run once.""" start="00:01:51.520" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Now, with this in mind,""" start="00:01:54.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we ran the 2022 Emacs User Survey with the plan""" start="00:01:57.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that this will actually become an annual event.""" start="00:02:00.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""In the design of the survey, there are a few goals here.""" start="00:02:05.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""The main one is of the user community.""" start="00:02:09.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Now, user community is a rather nebulous phrase.""" start="00:02:11.521" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""In this case, what's meant in particular""" start="00:02:14.521" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""is value in questions, for example,""" start="00:02:17.521" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""things like pain points with Emacs,""" start="00:02:21.021" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which versions people are using,""" start="00:02:23.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which capabilities people are making the most use of,""" start="00:02:27.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which could potentially be helpful to both emacs-devel""" start="00:02:30.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""but also our collection of Emacs package maintainers""" start="00:02:34.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and the whole community.""" start="00:02:36.521" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Actually, I think going beyond just the packages,""" start="00:02:38.021" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we've also got the people who develop tutorials, guides,""" start="00:02:40.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and all of that sort of surrounding activity,""" start="00:02:46.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which can benefit from a clear understanding""" start="00:02:49.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""of how Emacs users use Emacs.""" start="00:02:51.021" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Separately to that,""" start="00:02:56.021" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I think as an Emacs user myself,""" start="00:02:58.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that it's rather interesting to see""" start="00:03:01.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""how other people are using Emacs""" start="00:03:02.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and what their experience is. So yes, basically,""" start="00:03:04.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""you've got utility and interest""" start="00:03:07.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""as the two separate driving factors""" start="00:03:08.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""as we try to pick questions, which actually can give us""" start="00:03:10.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""all of this without taking up too much""" start="00:03:14.021" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""of the respondents time.""" start="00:03:16.521" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Now, last time in 2020, the Emacs survey that Adrien ran""" start="00:03:18.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""used, I think Google Forms, if I recall correctly,""" start="00:03:24.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""with an option to send in responses manually.""" start="00:03:27.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""This worked, but it's not great,""" start="00:03:28.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""particularly given that this is for a survey""" start="00:03:33.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""being run in an ardently FOSS community.""" start="00:03:35.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Ideally, we actually want""" start="00:03:37.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to find a survey framework""" start="00:03:38.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that respects the priorities of users, is open source,""" start="00:03:40.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""ideally free and open source,""" start="00:03:44.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and is a relatively pleasant experience.""" start="00:03:46.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Unfortunately, looking at available options,""" start="00:03:50.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""it seems that one always has to compromise on at least one,""" start="00:03:53.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""if not all of those criteria,""" start="00:03:56.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which is quite far from ideal.""" start="00:03:58.021" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""So what's the obvious solution?""" start="00:04:01.021" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Okay, we should just write a new survey framework.""" start="00:04:04.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Obviously, this is easier said than done.""" start="00:04:06.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""But around a year ago,""" start="00:04:10.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I actually started doing exactly this.""" start="00:04:12.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I've used the programming language Julia quite a bit""" start="00:04:13.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""on a day to day basis. And there just so happens to be""" start="00:04:17.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""a web framework for that called Genie.""" start="00:04:21.021" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So I thought I'd give it a shot.""" start="00:04:23.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""And well, here we are today.""" start="00:04:24.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I ended up putting something together,""" start="00:04:26.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which could take a set of questions written in Julia""" start="00:04:28.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and using a survey library,""" start="00:04:34.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""actually pass that into this helpful structure""" start="00:04:35.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and then construct HTML forms based on that,""" start="00:04:38.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and ingest results from the HTML forms,""" start="00:04:44.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and just sort of handle that altogether.""" start="00:04:47.021" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Now, all of this ends up being fed into an SQLite DB.""" start="00:04:48.521" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So everything's there, even part responses.""" start="00:04:52.440" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""One of the goals with the actual design of this has been""" start="00:04:55.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to just minimize what's actually done on the client side.""" start="00:04:57.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So that means JavaScript, cookies, the whole lot.""" start="00:05:01.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Basically, as far as this could reasonably be taken,""" start="00:05:05.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we've just got static HTML being shoved to the user,""" start="00:05:08.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""or respondent rather. And then we just""" start="00:05:14.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""take an HTTP post request back""" start="00:05:16.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and update the results that way.""" start="00:05:18.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Now by doing things like actually paging the survey,""" start="00:05:20.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we can allow for incremental saving of results""" start="00:05:24.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and a few other niceties while essentially preserving""" start="00:05:26.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""an experience that doesn't really require any data""" start="00:05:30.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""of any particular capabilities, which is sort of""" start="00:05:36.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""a nice, clean, minimal experience as far as I'm concerned.""" start="00:05:37.320" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""So how does this actually look like in practice?""" start="00:05:40.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Well, one of the nice things about this is""" start="00:05:45.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""because the question itself is written in Julia,""" start="00:05:48.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we can get some nice features like custom validators""" start="00:05:51.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and other fancy behavior and directly specify""" start="00:05:54.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""how we actually want questions to be registered""" start="00:05:57.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""in the database. So here we have, for example,""" start="00:06:01.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""two questions we had from this email survey.""" start="00:06:04.440" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""One is a multi-select. Another one is just putting in""" start="00:06:06.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""the number of years people have used Emacs for.""" start="00:06:09.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I think this gives a brief overview of the capabilities.""" start="00:06:14.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""One of the things I'd like to draw particular attention""" start="00:06:16.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to here is in the multi-select,""" start="00:06:19.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""you'll see an array of options,""" start="00:06:20.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""the first one of which actually maps for different value""" start="00:06:22.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to be stored for convenience.""" start="00:06:24.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""And then the final one is a special one, :other,""" start="00:06:25.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and you can see that's a bit different to the rest""" start="00:06:29.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""where it's got that colon function,""" start="00:06:30.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""it's a symbol, not a string.""" start="00:06:32.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""And this is quite a nice one because the way""" start="00:06:33.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that this framework's been designed,""" start="00:06:37.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""when we have an :other value like that,""" start="00:06:39.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""instead of it just being a sort of tick box &quot;Other&quot;,""" start="00:06:41.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""it actually provides the option to write""" start="00:06:44.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""your own different response to all of the above.""" start="00:06:47.200" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Okay, so at the very end, we've now got""" start="00:06:50.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""a completely FOSS survey framework, rather nice.""" start="00:06:55.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So the set of what were these...""" start="00:06:58.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Decent array of input types.""" start="00:07:00.021" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""It would be nice to expand, but at the moment""" start="00:07:01.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I think we could just about describe it as a rich set.""" start="00:07:02.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Zero JavaScript required, but a little bit useful""" start="00:07:04.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""for progressive enhancement.""" start="00:07:07.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""As demonstrated, we can get some fancy validation going on.""" start="00:07:08.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""And then because we've got the results""" start="00:07:12.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""tied into this quite nicely,""" start="00:07:16.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we can actually have them available live""" start="00:07:18.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and in quite a number of formats.""" start="00:07:21.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I'm not sure how much you saw in the architecture diagram,""" start="00:07:23.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""but we've got all sorts of things here.""" start="00:07:25.440" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""CSV, TSV, plain text, JSON,""" start="00:07:27.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""just grab a copy of the SQLite database,""" start="00:07:29.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""but only the relevant bits.""" start="00:07:32.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Or something called JLD2,""" start="00:07:33.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which preserves a lot of type information""" start="00:07:35.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and a few other nice things.""" start="00:07:38.000" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Now, what are we going to do going forward from here?""" start="00:07:39.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Well, there are a few minor issues here.""" start="00:07:43.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""For example, there's a memory leak issue which is going on,""" start="00:07:46.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""resulting in the service being restarted,""" start="00:07:48.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I think every day or two, while the survey was running.""" start="00:07:51.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I actually have the suspicion""" start="00:07:54.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that that's largely responsible for""" start="00:07:56.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""about 1% of respondents, which is about 75 people,""" start="00:07:57.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""who described the survey experience as not great.""" start="00:08:01.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Overall though, the feedback has been quite positive.""" start="00:08:04.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""There's been some detailed written feedback,""" start="00:08:08.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""but just from the quick great/okay/not great options,""" start="00:08:09.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we had about two-thirds of people saying""" start="00:08:12.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that the user experience was great,""" start="00:08:14.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which is really nice to hear the first time being run.""" start="00:08:16.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""A few other things would be nice to add, for example,""" start="00:08:19.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""in future control flow. By this, I mean""" start="00:08:22.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""the option to present different questions""" start="00:08:25.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""based on previous answers""" start="00:08:27.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""would be quite nice to streamline the experience.""" start="00:08:29.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""For example, having a set of questions""" start="00:08:31.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""for first-time respondents or people who are involved""" start="00:08:33.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""in the packaging side of things""" start="00:08:37.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""without actually cluttering the experience""" start="00:08:42.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""for everybody else. That'd be quite nice.""" start="00:08:45.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Further to this, all of this,""" start="00:08:46.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I think on top of the standard web interface,""" start="00:08:48.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""it'd be quite nice to actually write a server API.""" start="00:08:51.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""And the particular reason why I mentioned this""" start="00:08:53.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""is because this could potentially allow for""" start="00:08:55.521" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""basically an Emacs survey package.""" start="00:08:58.021" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I mean, we already use Emacs for so many things,""" start="00:09:00.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""might as well fill the survey out from within it as well.""" start="00:09:03.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Okay, so this is how the survey has been conducted.""" start="00:09:05.520" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Now, what are the responses look like?""" start="00:09:11.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Now, at this stage, I was actually hoping""" start="00:09:13.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to get into some somewhat sophisticated analysis""" start="00:09:16.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""because there's quite a bit that you can dig out""" start="00:09:18.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""of the data responses that we've received.""" start="00:09:22.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""However, unfortunately, I've been much more limited on time""" start="00:09:24.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""than I'd hoped for, so that's going to have to come later.""" start="00:09:27.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""For now, we're just going to take a bit of a peek""" start="00:09:30.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""at some of the really basic answers.""" start="00:09:33.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Well, it's not even really analysis.""" start="00:09:35.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Expect to see lots of pie charts, basically.""" start="00:09:38.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""But there's still a bit of interest there,""" start="00:09:40.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""so we'll go through a bit of that""" start="00:09:43.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and just give a bit of a tease""" start="00:09:44.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""as to what might come in the future.""" start="00:09:47.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So to sum up for starters,""" start="00:09:50.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we've had about 6,500 responses.""" start="00:09:51.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""It is worth noting that a thousand of those are partials,""" start="00:09:55.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""so people who gave up on the survey partway through.""" start="00:09:58.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Given that the 2020 survey had about 7000 responses,""" start="00:10:02.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I'll tell you we're basically on par here.""" start="00:10:05.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""This ran over a month and interestingly,""" start="00:10:07.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""about half of these respondents""" start="00:10:10.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""did not participate in the 2020 survey.""" start="00:10:12.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I think at this point,""" start="00:10:13.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""it's not really clear what to make of that.""" start="00:10:16.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""There's been a two-year gap between the surveys.""" start="00:10:17.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""It's been done, well, it's been done quite differently,""" start="00:10:21.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and yes, there's not enough, really, to say.""" start="00:10:25.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""What could be interesting though is actually,""" start="00:10:29.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""once this starts running regularly,""" start="00:10:32.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we can see whether there's regular churn""" start="00:10:33.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""in the survey respondents,""" start="00:10:36.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""or if we have a consistent core""" start="00:10:38.521" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""with people who respond each year,""" start="00:10:40.021" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and then just people who come by every now and then and go,""" start="00:10:42.021" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""&quot;Oh, why not respond to this year's survey?&quot;""" start="00:10:46.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""But we're going to have to wait a bit to actually see""" start="00:10:47.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""how people treat the survey.""" start="00:10:51.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Now these responses came from quite a wide range of places""" start="00:10:52.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we've got 115 nations represented here. Collectively,""" start="00:10:57.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""these ones have spent about a thousand hours""" start="00:11:02.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""giving us information. So I think, if nothing else,""" start="00:11:04.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""just from the effort that people have put into""" start="00:11:06.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""actually giving us useful data to work with,""" start="00:11:10.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""it's worth giving at least a good effort""" start="00:11:12.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to actually trying to extract some value""" start="00:11:13.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""out of these responses.""" start="00:11:16.000" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Now, overall we found a lot of responses came from America,""" start="00:11:17.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""no surprises there, but as mentioned,""" start="00:11:20.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we've got a good mix around the globe.""" start="00:11:23.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""The usual suspects for the rest of the responses,""" start="00:11:24.021" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""a whole bunch in Europe, a whole bunch around Asia,""" start="00:11:29.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""a bit in Australasia as well and yes,""" start="00:11:33.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""there's nothing particularly surprising here,""" start="00:11:36.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""there's a lot of inline expectations.""" start="00:11:38.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""What I find a bit more interesting, though,""" start="00:11:41.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""is if we actually normalise""" start="00:11:42.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""the number of responses from each nation""" start="00:11:45.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""by the population of said nations,""" start="00:11:48.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""essentially giving a popularity of Emacs""" start="00:11:50.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""or at least of Emacs early respondents for each nation,""" start="00:11:54.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we end up finding that Europe, particularly Scandinavia,""" start="00:11:57.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""becomes a bit of a hotspot.""" start="00:12:00.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So I'm not sure what's going on""" start="00:12:02.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""in Sweden, Finland and Norway,""" start="00:12:04.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""but it seems to be particularly popular around there.""" start="00:12:07.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""It's also worth noting that we now find""" start="00:12:10.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that the proportion of respondents""" start="00:12:14.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""in countries like America, Canada, Australia""" start="00:12:18.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and most of Europe actually becomes""" start="00:12:21.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""quite comparable with each other,""" start="00:12:24.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which yes, once again, sort of lines up""" start="00:12:26.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""with these responses, expectations from the last slide.""" start="00:12:30.240" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Okay, getting into some of the other""" start="00:12:32.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""demographic information.""" start="00:12:36.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""The demographic information was new to this survey.""" start="00:12:38.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""In the 2020 survey, people were asked what they think""" start="00:12:40.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""of being asked about some demographic information""" start="00:12:44.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""in a future survey, and the overwhelming response is, &quot;Sure,""" start="00:12:47.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I don't really mind.&quot; And so that's what we've done here.""" start="00:12:50.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""One of the ones of somewhat interest""" start="00:12:52.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""is the age gender breakdown. So we expect Emacs""" start="00:12:56.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to be used predominantly among people in software""" start="00:12:59.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and programming and within the industry,""" start="00:13:03.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I think it's quite widely documented""" start="00:13:05.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to have about a sort of 75-25%, roughly, split""" start="00:13:08.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""between male and female.""" start="00:13:14.521" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Interestingly, in Emacs,""" start="00:13:14.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""it's a much more aggressively-biased result.""" start="00:13:19.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So we had about 96% of respondents are male""" start="00:13:22.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""with just 4% for the rest. Interestingly, though,""" start="00:13:28.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""if we look at the young respondents,""" start="00:13:34.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""say for example, under 25, we go from 96% male to 88%.""" start="00:13:35.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So it's fair to say that the young respondents are""" start="00:13:41.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""in this respect, a somewhat more diverse group.""" start="00:13:46.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Hopefully, as future surveys go on,""" start="00:13:49.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we'll see this continue not die off""" start="00:13:52.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to the sort of well, at this point,""" start="00:13:54.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""it's more like 99% if you look at the older ages.""" start="00:13:58.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""But we'll see.""" start="00:14:02.920" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Occupations was an interesting slide as well.""" start="00:14:04.440" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Interesting question as well.""" start="00:14:07.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""We've got the usual suspects here. I mean,""" start="00:14:09.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""it's a text editor, well, Lisp machine""" start="00:14:11.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""masquerading as a text editor, mainly used for programming,""" start="00:14:15.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and so we expect lots of software development""" start="00:14:17.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and that sort of thing. But that's only about""" start="00:14:20.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""just over half of the responses.""" start="00:14:23.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""We've got a huge chunk from academia,""" start="00:14:25.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and then really just an odd bag""" start="00:14:28.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""of all sorts of other things,""" start="00:14:30.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""including things which you wouldn't really associate""" start="00:14:30.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""with programming and software at all.""" start="00:14:33.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Things like creative writing, publishing, legal, yes.""" start="00:14:35.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""And then you've got this chunk of Other,""" start="00:14:39.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which is I think here is""" start="00:14:41.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""the fourth most popular option here.""" start="00:14:43.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""And what we have here is about 500 different responses""" start="00:14:46.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""from a huge range of activities.""" start="00:14:49.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""It's really quite interesting to read things like""" start="00:14:51.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I think, things like &quot;naval officer&quot;,""" start="00:14:54.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and just... All sorts of surprising occupations for Emacs.""" start="00:14:56.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""And I think this is a particular area""" start="00:15:01.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""because I imagine compared to other code editors,""" start="00:15:04.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""sort of your VS Code, remember like""" start="00:15:10.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that Emacs may have a particularly diverse set""" start="00:15:13.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""of industry occupations represented in its users.""" start="00:15:18.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Now, if you look at where the response actually came from,""" start="00:15:23.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we've got the usual suspects up top,""" start="00:15:28.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Hacker News and r/emacs.""" start="00:15:31.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""But then we actually get a much more graduated breakdown""" start="00:15:33.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""than in the 2020 survey.""" start="00:15:40.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""We do think familiar results here like IRC, Telegram,""" start="00:15:43.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Emacs China, and Twitter.""" start="00:15:46.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""But now you've got a few new entries,""" start="00:15:48.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""things like the Fediverse, Discourse, Matrix,""" start="00:15:50.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which didn't pop up previously.""" start="00:15:53.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So I think this is yes, quite a nice sign in terms of""" start="00:15:56.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""actually hitting a wide range""" start="00:15:59.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""of pockets of Emacs users across different platforms,""" start="00:16:02.521" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which bodes well for the potential representiveness""" start="00:16:06.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""of this survey.""" start="00:16:10.320" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Unsurprisingly, if we're talking about Emacs""" start="00:16:11.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and particularly people who are quite engaged in it,""" start="00:16:15.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which are the respondents to this survey,""" start="00:16:17.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we find that we also get quite a high degree of care""" start="00:16:19.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""for free and open source software.""" start="00:16:25.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So if you have a look here,""" start="00:16:27.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""only about a quarter of users""" start="00:16:30.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""didn't express a strong preference towards FOSS software.""" start="00:16:35.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""In fact, we had over a quarter saying that""" start="00:16:39.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""they would accept significant or even any compromise""" start="00:16:43.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to use a FOSS user software""" start="00:16:49.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""over a proprietary alternative,""" start="00:16:52.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which given the nature of Emacs,""" start="00:16:55.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""not terribly surprising,""" start="00:16:59.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""but a strong showing nonetheless.""" start="00:17:00.640" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Now, let's start getting to things""" start="00:17:02.440" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which are actually useful for""" start="00:17:05.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""potential Emacs development and packaging.""" start="00:17:07.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""If you're thinking about supporting Emacs versions,""" start="00:17:11.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""it looks like you can do fantastically well""" start="00:17:13.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""in terms of hitting most users if you support Emacs 27+.""" start="00:17:16.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""That hits about 96% of respondents.""" start="00:17:20.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Interestingly though, you can actually make an argument""" start="00:17:23.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""for being even more aggressive.""" start="00:17:26.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I mean, if you have a look at Emacs 28+,""" start="00:17:27.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that's still over three quarters of respondents.""" start="00:17:30.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""We've got, at this point, a quarter""" start="00:17:32.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""using the unreleased HEAD version,""" start="00:17:35.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""even though it's getting close to release.""" start="00:17:37.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Obviously here, as stated, we're hitting""" start="00:17:40.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""a sort of more engaged with the community""" start="00:17:43.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""subset of Emacs users, but still,""" start="00:17:44.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I think it's interesting to see that""" start="00:17:47.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""with Emacs's increasingly frequent update schedule,""" start="00:17:49.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that users are actually picking up those updates""" start="00:17:52.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""quite promptly as they roll out.""" start="00:17:55.000" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Continuing on with how people actually use Emacs: languages.""" start="00:17:56.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""We've got the usual suspects here: lots of Python,""" start="00:18:02.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""quite a bit of JavaScript and C, lots of shell.""" start="00:18:05.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""What I find quite interesting though is""" start="00:18:08.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""if we actually bring in""" start="00:18:11.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""the 2020 Stack Overflow language usage survey data,""" start="00:18:12.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and that maps quite well""" start="00:18:16.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to the array of language options we provided here.""" start="00:18:19.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""They had a general Lisp option,""" start="00:18:20.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which I've folded into Common Lisp""" start="00:18:21.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""since they listed Clojure separately.""" start="00:18:23.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I think that seems like a fairly safe bet.""" start="00:18:26.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""But other than that, the only languages that we missed""" start="00:18:29.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""are Scheme and Elisp.""" start="00:18:31.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""What we can do is we can look at""" start="00:18:35.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""the relative popularity of different languages""" start="00:18:37.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""from our Emacs user survey compared to Stack Overflows.""" start="00:18:41.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""What do we find? Well, Clojure and Common Lisp""" start="00:18:44.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""far above the rest, I imagine in no small part due to""" start="00:18:48.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""the fantastic SLIME and Cider packages.""" start="00:18:51.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Following that, we see Haskell being particularly prominent,""" start="00:18:54.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and then a collection of other languages,""" start="00:18:59.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""your Erlang, Elixir, Julia, Perl and the rest.""" start="00:19:00.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""And then lastly, if we have a look at the ones""" start="00:19:06.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which have significantly diminished popularity""" start="00:19:10.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""compared to Stack Overflow, we end up with, I think,""" start="00:19:13.440" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""what I could probably cast as more enterprising languages.""" start="00:19:17.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Things like C#, Java, Typescript and the like.""" start="00:19:20.160" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""So, that's interesting. Now, earlier""" start="00:19:25.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""when we were looking at the split of Emacs users,""" start="00:19:31.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we found that we actually had a fair few""" start="00:19:33.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""in more creative areas, like writing and publishing.""" start="00:19:37.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So if looking at prose, we'd expect a decent chunk""" start="00:19:42.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to be using Emacs for prose, but it's actually more""" start="00:19:44.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""than just a little bit, it's a little slice.""" start="00:19:47.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""We've got a whopping about a third of users""" start="00:19:48.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""saying they frequently use Emacs for writing prose.""" start="00:19:50.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I'd imagine that the availability""" start="00:19:54.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""of things like Org mode and AUCTeX""" start="00:19:56.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""probably help like this.""" start="00:19:57.800" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Moving on to other packages, or more packages,""" start="00:20:03.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we've actually got a very similar split here""" start="00:20:05.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to the 2020 survey. Org has seen a bit of a growth""" start="00:20:08.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""in popularity. We've got some new arrivals here as well.""" start="00:20:13.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""For example, Vertico has popped onto the scene""" start="00:20:16.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and overtaken Ivy here, along with""" start="00:20:18.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""a few other new packages like Consult.""" start="00:20:21.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Other than that, quite comparable.""" start="00:20:24.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""What's rather interesting, though, I find here is that""" start="00:20:27.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""when you have people who listed a small number of packages,""" start="00:20:30.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""they actually predominantly listed packages""" start="00:20:33.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""other than the most common set.""" start="00:20:39.440" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So if we have a lot of people who only listed one package,""" start="00:20:41.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""basically two-thirds of that,""" start="00:20:43.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""or actually three-quarters of those responses""" start="00:20:48.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""were saying other packages,""" start="00:20:51.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""despite the fact that overall packages""" start="00:20:53.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""other than the highlighted selection here""" start="00:20:56.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""only constitute a quarter of responses.""" start="00:20:58.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So there might be something a bit more to look at there.""" start="00:21:01.400" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Now when people are using packages,""" start="00:21:04.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we also asked what types of documentation""" start="00:21:07.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""people would like to see more of on package READMEs.""" start="00:21:11.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Basically we've got a big mix here.""" start="00:21:14.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""It seems like generally people are interested in""" start="00:21:17.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""seeing more in various forms, whether it be tutorials,""" start="00:21:20.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""overviews, screenshots, comparisons, or clips and videos.""" start="00:21:23.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So full READMEs with a lot of context""" start="00:21:29.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""seem to be quite desirable from this.""" start="00:21:32.920" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Now moving forward, what are we going to do?""" start="00:21:38.440" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So 800 people gave some detailed feedback on the survey.""" start="00:21:42.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""That's quite nice. I'm going to be taking a good read""" start="00:21:45.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""of all of those responses and use that""" start="00:21:47.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to improve the process and also the set of questions.""" start="00:21:50.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Now all of you can also give some feedback on the questions,""" start="00:21:55.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""both that you found most useful in this survey,""" start="00:22:00.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""ones that you think might not add much value,""" start="00:22:02.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and/or new questions""" start="00:22:04.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that you think might be a good addition.""" start="00:22:07.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Once I've done a bit more analysis,""" start="00:22:08.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""particularly the more sophisticated analysis""" start="00:22:11.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which I'm planning, which will probably come out actually""" start="00:22:13.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""maybe in the first quarter of next year,""" start="00:22:17.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we can see which questions there seem to have provided""" start="00:22:18.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""the most interesting or surprising results""" start="00:22:22.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and those are probably worth keeping.""" start="00:22:25.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Lastly, once we actually have an API""" start="00:22:26.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and potentially even an Emacs package,""" start="00:22:31.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we could automate a large number of the questions,""" start="00:22:33.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""things like Emacs version, set of packages used,""" start="00:22:36.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and that could just streamline the experience""" start="00:22:39.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""of actually filling out the survey,""" start="00:22:41.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""make it a bit more frictionless.""" start="00:22:42.280" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Now talking of the question of questions,""" start="00:22:44.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""a quick survey is a good survey.""" start="00:22:47.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""If we're asking people to dedicate their time""" start="00:22:49.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to fill out this, it's good to try to get as much value""" start="00:22:52.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""without asking them to donate much of their time.""" start="00:22:56.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""How has the survey done in this respect?""" start="00:22:59.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I'm actually very happy with how it's done.""" start="00:23:02.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""We get a few comments from the feedback saying""" start="00:23:04.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that it was a bit of a long side,""" start="00:23:06.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""but the median time was about 12 minutes,""" start="00:23:07.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which doesn't seem too bad, and most commonly""" start="00:23:10.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we saw people completing it in about 8 minutes.""" start="00:23:13.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""For a once-per-year survey,""" start="00:23:16.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I think this seems fairly reasonable.""" start="00:23:18.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Getting closer to a 5-10 minute range would be nice,""" start="00:23:20.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""but this isn't far off.""" start="00:23:24.280" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Lastly, we're also going to be considering""" start="00:23:26.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""how long the survey is open for.""" start="00:23:30.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So from the initial opening date,""" start="00:23:32.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""what we have here is a plot of""" start="00:23:36.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""the page which people ended up on""" start="00:23:38.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and when they started the survey.""" start="00:23:41.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So what we can see is a huge spike in the first few days.""" start="00:23:43.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I've just realised that this plot""" start="00:23:46.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""is actually labelled incorrectly.""" start="00:23:50.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Please disregard the minutes to complete the survey.""" start="00:23:53.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""This should be days after survey opening""" start="00:23:55.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that a response is actually submitted.""" start="00:23:58.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""And what we have here is a big spike""" start="00:24:01.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""in popularity in the first week basically,""" start="00:24:05.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and then it trickles down""" start="00:24:08.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to a fairly consistent level after that.""" start="00:24:10.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I'm about to publish a last call for survey responses,""" start="00:24:11.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""so I'll see if any final bump happens,""" start="00:24:15.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""but this indicates that we can probably just""" start="00:24:18.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""have the survey open for a week or two""" start="00:24:20.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and that should be sufficient.""" start="00:24:23.080" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Alright, so what's the general plan going forwards?""" start="00:24:25.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Well, as stated earlier, the idea is to run this annually""" start="00:24:30.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and then consistently improve the questions,""" start="00:24:35.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""the experience, and the analysis that's done.""" start="00:24:38.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""This year has been the hardest by far""" start="00:24:41.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""because a lot had to be set up from scratch.""" start="00:24:43.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""The hope is that moving on from here,""" start="00:24:45.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""a lot of it can be reused.""" start="00:24:50.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""For example, with my comments about""" start="00:24:51.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""more sophisticated analysis being down the line,""" start="00:24:54.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""once that's all worked out,""" start="00:24:56.440" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""as long as nothing changes too drastically,""" start="00:24:58.440" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we should be able to reuse a lot of that work""" start="00:25:00.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""quite easily in future years.""" start="00:25:03.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Alright, that's it for now.""" start="00:25:05.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Hopefully, you've found this an interesting peek""" start="00:25:08.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""into how the survey is operated""" start="00:25:11.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and some of the initial results,""" start="00:25:13.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and hopefully, I'll see you around next year""" start="00:25:15.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""for the 2023 survey. Thanks for listening.""" start="00:25:18.920" video="mainVideo-survey" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20survey%3A%20Results%20of%20the%202022%20Emacs%20Survey)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/survey-before.md b/2022/info/survey-before.md
new file mode 100644
index 00000000..088e0197
--- /dev/null
+++ b/2022/info/survey-before.md
@@ -0,0 +1,28 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+<div class="vid"><video controls preload="none" id="survey-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="survey-mainVideo" data="""
+00:00.000 Introduction
+00:26.040 The 2020 Emacs User Survey
+01:54.360 The design of the survey
+03:18.560 Survey frameworks
+04:01.021 Writing a new survey framework in Julia
+05:40.200 In practice
+06:50.560 Results
+07:39.600 Going forward
+09:11.160 Responses
+11:17.000 Geography
+12:32.280 Gender
+14:04.440 Occupations
+16:11.320 Free and open source software
+17:02.440 Emacs versions
+17:56.360 Languages
+19:25.800 Prose
+20:03.400 Packages
+21:04.920 Documentation
+21:38.440 Moving forward
+22:44.200 Time
+23:26.200 How long the survey is open for
+24:25.200 Plan going forward
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main.webm">Download --main.webm (16MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main.opus">Download --main.opus (17MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/gYfDLkR2DTkd1ZW54hXATW">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/survey-nav.md b/2022/info/survey-nav.md
new file mode 100644
index 00000000..20ca2a79
--- /dev/null
+++ b/2022/info/survey-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/sun-open">Sunday opening remarks</a>
+Next by track: <a href="/2022/talks/orgyear">This Year in Org</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/tramp-after.md b/2022/info/tramp-after.md
new file mode 100644
index 00000000..6d849143
--- /dev/null
+++ b/2022/info/tramp-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [shoshin@cicadas.surf](mailto:shoshin@cicadas.surf?subject=Comment%20for%20EmacsConf%202022%20tramp%3A%20Elisp%20and%20the%20TRAMP%3A%20How%20to%20NOT%20write%20code%20you%20don%27t%20have%20to)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/tramp-before.md b/2022/info/tramp-before.md
new file mode 100644
index 00000000..1f37b892
--- /dev/null
+++ b/2022/info/tramp-before.md
@@ -0,0 +1,16 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+<div class="schedule-in-context schedule-svg-container" data-slug="tramp">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:05- 9:25 Results of the 2022 Emacs Survey</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 10:00-10:20 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="94" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(123,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:10 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(483,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:30- 2:50 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="517" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(546,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:20- 3:40 Putting Org Mode on the Indieweb</title> <rect x="596" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(625,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:00- 4:05 Emacs development updates</title> <rect x="658" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(663,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:15- 4:25 Fanfare for the Common Emacs User</title> <rect x="682" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(695,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:45-10:55 justl: Driving recipes within Emacs</title> <rect x="164" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(177,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to" data-slug="tramp"> <title> 11:05-11:35 Elisp and the TRAMP: How to NOT write code you don't have to</title> <rect x="196" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue" stroke-width="3"></rect> <g transform="translate(241,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)" font-weight="bold"> tramp</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:00- 1:10 Getting detached from Emacs</title> <rect x="376" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(389,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:35- 1:45 Top 10 reasons why you should be using Eshell</title> <rect x="431" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(444,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:10- 2:30 Emacs was async before async was cool</title> <rect x="486" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(515,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:05- 3:25 The Wheels on D-Bus</title> <rect x="572" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(601,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:20 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(687,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(94,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(188,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(282,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(376,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(470,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(564,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(658,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(752,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 5</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 30-min talk followed by live Q&A (<https://emacsconf.org/current/tramp/room>)
+Status: Waiting for video from speaker
+<div>Times in different timezones:</div><div class="times" start="2022-12-04T16:05:00Z" end="2022-12-04T16:35:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~11:05 AM - 11:35 AM EST (US/Eastern)</div><div class="others">Sunday, Dec 4 2022, ~11:05 AM - 11:35 AM EST (US/Eastern)</div></div><div><a href="/2022/watch/dev/">Find out how to watch and participate</a></div>
+
+
+# Description
+
+
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/tramp-nav.md b/2022/info/tramp-nav.md
new file mode 100644
index 00000000..11d3205f
--- /dev/null
+++ b/2022/info/tramp-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2022/talks/justl">justl: Driving recipes within Emacs</a>
+Next by time: <a href="/2022/talks/buttons">Linking personal info with Hyperbole implicit buttons</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/treesitter-after.md b/2022/info/treesitter-after.md
new file mode 100644
index 00000000..f34bdb39
--- /dev/null
+++ b/2022/info/treesitter-after.md
@@ -0,0 +1,257 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="treesitter-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hey everyone, my name is Abin Simon""" start="00:00:00.000" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and this talk is about &quot;Tree-sitter:""" start="00:00:03.240" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Beyond Syntax Highlighting.&quot;""" start="00:00:05.080" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""For those who are not aware of what Tree-sitter is,""" start="00:00:08.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""let me give you a quick intro.""" start="00:00:10.720" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Tree-sitter, at its core, is a parser generator tool""" start="00:00:11.720" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and an incremental parsing library.""" start="00:00:17.120" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""What it essentially means is that it gives you""" start="00:00:19.440" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""an always up-to-date""" start="00:00:22.000" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""AST [abstract syntax tree] of your code.""" start="00:00:23.155" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""In the current Emacs frame, what you see to the right""" start="00:00:24.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template new="1" text="""is the AST tree produced by Tree-sitter""" start="00:00:27.960" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""of the code that is on the left.""" start="00:00:30.840" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""For example, if you go to this &quot;if&quot; statement,""" start="00:00:33.560" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""you can see it goes here.""" start="00:00:37.000" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""It is also really good at handling errors.""" start="00:00:38.840" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""For example, if I were to delete this [if statement],""" start="00:00:41.440" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""it still parses out a tree as much as it can,""" start="00:00:44.400" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""but with an error node.""" start="00:00:47.960" video="mainVideo-treesitter" id="subtitle"]]
+[[!template new="1" text="""Now let's see how we can query the tree""" start="00:00:50.280" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""to get the information that we need.""" start="00:00:51.760" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Let's first try to get all the identifiers in the buffer.""" start="00:00:54.440" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""It highlights all the identifiers in the buffer,""" start="00:01:01.480" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""but let's say we want to get something""" start="00:01:04.000" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""a little more precise.""" start="00:01:05.440" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Let's say we wanted to get this &quot;i&quot; here.""" start="00:01:07.280" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""This, in our case, would be this identifier""" start="00:01:10.400" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""inside this assignment expression""" start="00:01:13.280" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""inside this &quot;for&quot; statement.""" start="00:01:15.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""We can write it out like this.""" start="00:01:27.320" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I hope this gives you a basic idea""" start="00:01:29.920" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""of how Tree-sitter works and how you can query""" start="00:01:31.880" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""to get the information that you need.""" start="00:01:34.480" video="mainVideo-treesitter" id="subtitle"]]
+[[!template new="1" text="""First of all, let's see how Tree-sitter can help us""" start="00:01:37.040" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""with syntax highlighting.""" start="00:01:39.520" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""This is the default syntax highlighting by Emacs for SQL.""" start="00:01:41.880" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Now let's see how Tree-sitter helps.""" start="00:01:46.480" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""This is the syntax highlighting in Emacs""" start="00:01:52.000" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""which Tree-sitter enabled.""" start="00:01:54.240" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""You'll see that we're able to target""" start="00:01:56.760" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""a lot more things and highlight them.""" start="00:01:58.240" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""That said, you don't always have to""" start="00:02:01.240" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""highlight everything.""" start="00:02:03.139" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I personally prefer a much simpler theme.""" start="00:02:04.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template new="1" text="""Now let's see how Tree-sitter helps you simplify""" start="00:02:15.640" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""adding custom syntax highlighting to your code.""" start="00:02:17.880" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""This is a Python file which has""" start="00:02:20.920" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""a class and a few member functions.""" start="00:02:22.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Anyone who has used Python will know that""" start="00:02:25.640" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""the &quot;self&quot; keyword, while it is passed in as an argument,""" start="00:02:27.680" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""it has more meaning than that.""" start="00:02:32.040" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Let's see if you can use Tree-sitter""" start="00:02:34.240" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""to highlight just the &quot;self&quot; keyword.""" start="00:02:35.480" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""If you look at the Tree-sitter tree,""" start="00:02:38.720" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""you can see that this is the first identifier""" start="00:02:40.400" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""in the list of parameters for a function definition.""" start="00:02:43.120" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""This is how you would query for the first identifier""" start="00:02:45.520" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""inside parameters inside a function definition.""" start="00:02:55.480" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Now, if you see here, it also matches &quot;cls&quot;,""" start="00:02:59.320" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""but let's restrict it to match just &quot;self&quot;.""" start="00:03:02.520" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Now we have a Tree-sitter query that identifies""" start="00:03:11.360" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""the first argument to the function definition""" start="00:03:14.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and is also called &quot;self&quot;.""" start="00:03:16.960" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""We can use this to apply custom highlighting onto this.""" start="00:03:19.640" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""This is pretty much all the code""" start="00:03:22.520" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""that you'll need to do this.""" start="00:03:25.000" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""The first block here is essentially to say to""" start="00:03:26.520" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Tree-sitter to highlight anything with python.self""" start="00:03:29.240" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""with the face of custom-set.""" start="00:03:32.160" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Now the second block here essentially is""" start="00:03:35.720" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""how we match for that.""" start="00:03:37.520" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Now if you go back into a Python buffer""" start="00:03:39.800" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and re-enable python-mode, we'll see that &quot;self&quot;""" start="00:03:41.800" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""is highlighted differently.""" start="00:03:44.680" video="mainVideo-treesitter" id="subtitle"]]
+[[!template new="1" text="""How about creating text objects?""" start="00:03:47.120" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Tree-sitter can help there too.""" start="00:03:48.880" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""For those who don't know, text objects""" start="00:03:50.440" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""is an idea that comes from Vim,""" start="00:03:53.080" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and you can do things like select word,""" start="00:03:54.440" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""delete word, things like that.""" start="00:03:57.760" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""There are other text objects like line and paragraph.""" start="00:04:00.520" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""For each text object, you can have operations""" start="00:04:06.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""that are defined on them.""" start="00:04:09.000" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""For example, delete, copy, select, comment,""" start="00:04:09.760" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""all of these are operations that you can do.""" start="00:04:13.600" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Let's try and use Tree-sitter to add more text objects.""" start="00:04:16.400" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""This is a plugin that I wrote""" start="00:04:19.400" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""which lets you add more text objects into Emacs.""" start="00:04:20.560" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""It helps you code aware text objects""" start="00:04:25.000" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""like functions, conditionals, loops, and such.""" start="00:04:27.880" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Let's see an example scenario of how""" start="00:04:31.880" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""something like this could come in handy.""" start="00:04:34.360" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""For example, I can select inside this condition""" start="00:04:35.920" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""or inside this function and do things like that.""" start="00:04:39.280" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Let's say I want to take this conditional,""" start="00:04:42.960" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""move to the next function, and create it here.""" start="00:04:44.520" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""What I would do is something like""" start="00:04:47.160" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""delete the conditional, move to the next function,""" start="00:04:49.640" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""create a conditional there, and paste.""" start="00:04:52.320" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Let's try another example.""" start="00:04:56.240" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Let's say I want to take this and move it to the end.""" start="00:04:57.160" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""If I had to do it without text objects,""" start="00:05:01.360" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I'd probably have to go back to the previous comma,""" start="00:05:02.960" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""delete till next comma, find the closing bracket,""" start="00:05:06.800" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and paste before.""" start="00:05:10.440" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""That works, but let's see""" start="00:05:11.880" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""how Tree-sitter can simplify it.""" start="00:05:14.040" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""With Tree-sitter, I can say delete the argument,""" start="00:05:16.520" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""go to the end of the next argument, and then paste.""" start="00:05:19.240" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Tree-sitter essentially helps Emacs""" start="00:05:22.880" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""understand the code better semantically.""" start="00:05:25.280" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Here is yet another use case.""" start="00:05:27.240" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I work at a remote company,""" start="00:05:29.600" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and I often find myself being in a call""" start="00:05:31.480" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""with my teammates, explaining the code to them.""" start="00:05:33.440" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""And one thing that really comes in handy""" start="00:05:35.400" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""is the narrowing capability of Emacs.""" start="00:05:38.000" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Specifically, the fancy-narrow package.""" start="00:05:39.760" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I use it to narrow just the function,""" start="00:05:43.040" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""or I could narrow to the conditional.""" start="00:05:44.840" video="mainVideo-treesitter" id="subtitle"]]
+[[!template new="1" text="""Next to the end, the list would be code folding.""" start="00:05:48.760" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""This is a package which uses Tree-sitter""" start="00:05:51.520" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""to improve the code folding functionalities of Emacs.""" start="00:05:54.480" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Code folding has always been this thing""" start="00:05:57.560" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""that I've had a love-hate relationship with.""" start="00:06:00.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""It usually works most of the time,""" start="00:06:02.280" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""but then fails if the indentation is wrong""" start="00:06:04.280" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""or we do something weird with the arguments.""" start="00:06:06.960" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""But now with Tree-sitter in the mix,""" start="00:06:09.160" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""it's a lot more precise.""" start="00:06:11.680" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I can fold comments, I can fold functions,""" start="00:06:12.720" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I can fold conditionals. You get the idea.""" start="00:06:17.040" video="mainVideo-treesitter" id="subtitle"]]
+[[!template new="1" text="""I work with Kubernetes, which means I end up""" start="00:06:20.480" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""having to write and read a lot of YAML files.""" start="00:06:23.840" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""And navigating big YAML files is a mess.""" start="00:06:28.080" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""The two main problems are figuring out where I am,""" start="00:06:31.840" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and two, navigating to where I want to be.""" start="00:06:35.760" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Let's see how Tree-sitter can help us with both of this.""" start="00:06:38.760" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""This is an example YAML file.""" start="00:06:41.760" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""To be precise, this is the values file""" start="00:06:43.840" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""of the Redis helm chart.""" start="00:06:47.080" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I'm somewhere in the file on tag under image,""" start="00:06:48.640" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""but I don't know what this tag is for.""" start="00:06:52.240" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""But with the help of Tree-sitter,""" start="00:06:54.880" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I've been able to add this information""" start="00:06:57.240" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""into my header line.""" start="00:06:59.160" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""If you see in the header line,""" start="00:07:00.440" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""you'll see that I'm under sentinel.image.""" start="00:07:02.960" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Now let's see how this helps with navigation.""" start="00:07:05.880" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Let's say I want to enable persistence on master node.""" start="00:07:08.800" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""So with the help of Tree-sitter,""" start="00:07:12.680" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I was able to enumerate every field""" start="00:07:18.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""that is available in this YAML file,""" start="00:07:20.400" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and I can pass that information onto imenu,""" start="00:07:22.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""which I can then use to go to exactly where I want to.""" start="00:07:24.520" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Also, since we're not dealing with""" start="00:07:28.040" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""any language specific constructs,""" start="00:07:30.000" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""this is very easy to extend to""" start="00:07:32.600" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""other similar languages""" start="00:07:34.040" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""or config files in this case.""" start="00:07:35.760" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""So for example, this is a JSON file,""" start="00:07:37.440" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and I can navigate to location or project.""" start="00:07:39.520" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""And just like in YAML, it shows me where I'm at.""" start="00:07:44.800" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I'm in projects.name,""" start="00:07:48.320" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""or I'm inside projects.highlights.""" start="00:07:49.920" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Or how about Nix?""" start="00:07:52.880" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""This is my home.nix file.""" start="00:07:55.600" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Again, I can search for services,""" start="00:07:57.480" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and this lists me all the services that I've enabled.""" start="00:08:01.040" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""How about just services.description?""" start="00:08:04.640" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""So this is all the services""" start="00:08:06.720" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""that I've enabled and have descriptions.""" start="00:08:08.160" video="mainVideo-treesitter" id="subtitle"]]
+[[!template new="1" text="""Now that we have seen this for config files,""" start="00:08:10.480" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""let's see how similar things apply for code.""" start="00:08:12.720" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Just like in config files,""" start="00:08:15.040" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I can see which function I'm under,""" start="00:08:16.760" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and if I go to the next function, it changes.""" start="00:08:18.680" video="mainVideo-treesitter" id="subtitle"]]
+[[!template new="1" text="""Okay, here is something really awesome.""" start="00:08:21.560" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""This is probably one of my favorites,""" start="00:08:23.960" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and one of the things that actually made me understand""" start="00:08:26.600" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""how powerful Tree-sitter is, and got me into it.""" start="00:08:30.400" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I work with a lot of Go code,""" start="00:08:34.080" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and anyone who has worked with Go will tell you""" start="00:08:35.680" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""how repetitive it is handling errors.""" start="00:08:38.840" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""For those who don't write Go,""" start="00:08:41.040" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""let me give you a rough idea of what I'm talking about.""" start="00:08:42.800" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""If you want to bubble up the error,""" start="00:08:45.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""the way you would do it is just to return the error""" start="00:08:47.000" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""to the function that called it.""" start="00:08:49.920" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Over here, you can either return nil or an empty value,""" start="00:08:51.400" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and at the end, you return error.""" start="00:08:55.720" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Let's try and use Tree-sitter to do this.""" start="00:08:57.640" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Using the help of Tree-sitter, let's make Emacs""" start="00:09:00.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""go back, figure out what the return arguments are,""" start="00:09:03.120" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""figure out what their default values are,""" start="00:09:06.422" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and automatically fill in the return statement.""" start="00:09:08.240" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""It would look something like this.""" start="00:09:11.480" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""In my case, it filled in the complete form,""" start="00:09:13.040" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""it figured out what the return arguments are,""" start="00:09:16.120" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""what their types are,""" start="00:09:18.320" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and what their default values are,""" start="00:09:19.320" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and filled out the entire return.""" start="00:09:20.960" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""And since this is a template,""" start="00:09:22.800" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I can go to the next function, do the same thing,""" start="00:09:24.760" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""next function, do the same thing,""" start="00:09:27.720" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""next function, do the same thing.""" start="00:09:29.560" video="mainVideo-treesitter" id="subtitle"]]
+[[!template new="1" text="""Here is a really fascinating use case of Tree-sitter,""" start="00:09:31.520" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""structural editing.""" start="00:09:34.360" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""You might be aware of plugins like paredit,""" start="00:09:36.320" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""which seems to &quot;know&quot; your code.""" start="00:09:38.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""This sort of takes it onto another level.""" start="00:09:40.280" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""It is in its early stages, but what this lets you do""" start="00:09:42.520" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""is completely treat your code as an AST,""" start="00:09:46.040" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and edit as if it's a tree instead of characters.""" start="00:09:48.920" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I am not going to go much in depth into it,""" start="00:09:52.000" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""but if you're interested, there is a talk""" start="00:09:54.640" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""from last year's EmacsConf around it.""" start="00:09:57.000" video="mainVideo-treesitter" id="subtitle"]]
+[[!template new="1" text="""I'm just going to end this with one last tiny thing""" start="00:09:59.080" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""that I found in the tree-sitter-extras package.""" start="00:10:02.320" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""It's this tiny macro called tree-sitter-save-excursion.""" start="00:10:04.920" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""It works pretty much like save-excursion, but better.""" start="00:10:07.600" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""It uses the Tree-sitter syntax tree""" start="00:10:11.240" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""instead of just the code""" start="00:10:13.400" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""to figure out where to restore the position.""" start="00:10:14.800" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""My main use case for this was with code formatters.""" start="00:10:16.720" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Since the code moves around a lot""" start="00:10:20.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""when it gets formatted,""" start="00:10:22.080" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""save-excursion was completely useless,""" start="00:10:23.160" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""but this came in handy.""" start="00:10:25.000" video="mainVideo-treesitter" id="subtitle"]]
+[[!template new="1" text="""I'll just leave you off with""" start="00:10:26.240" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""what the future of Tree-sitter looks like for Emacs.""" start="00:10:28.120" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""So far, every Tree-sitter related feature""" start="00:10:31.120" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""that I've talked about is powered by this library.""" start="00:10:33.760" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""But there is talk about Tree-sitter coming into the core.""" start="00:10:36.040" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""It will most probably be landing in Emacs 29,""" start="00:10:42.320" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and if you want to check out the work on Tree-sitter""" start="00:10:45.840" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""in core Emacs, you can check out""" start="00:10:48.720" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""the features/tree-sitter branch.""" start="00:10:51.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""You'll probably see more and more features and packages""" start="00:10:52.920" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""relying upon Tree-sitter, and even major modes""" start="00:10:56.640" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""being powered by Tree-sitter.""" start="00:10:59.640" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""And that's a wrap from me. Thank you.""" start="00:11:01.560" video="mainVideo-treesitter" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [mail@meain.io](mailto:mail@meain.io?subject=Comment%20for%20EmacsConf%202022%20treesitter%3A%20Tree-sitter%20beyond%20syntax%20highlighting)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/treesitter-before.md b/2022/info/treesitter-before.md
new file mode 100644
index 00000000..45e483d5
--- /dev/null
+++ b/2022/info/treesitter-before.md
@@ -0,0 +1,21 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Abin Simon shares many ways in which Tree-sitter can help improve your text editing workflow. Afterwards, he will answer questions via IRC.
+
+<div class="vid"><video controls preload="none" id="treesitter-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="treesitter-mainVideo" data="""
+00:00.000 Opening
+00:24.201 Introduction to Tree-sitter
+00:50.280 Querying Tree-sitter tree
+01:37.040 Syntax highlighting
+02:15.640 Custom syntax highlighting
+03:47.120 Text objects
+05:48.760 Code folding
+06:20.480 Navigating config files
+08:10.480 Navigating code
+08:21.560 Intelligent templates
+09:31.520 Structural editing
+09:59.080 tree-sitter-save-excursion
+10:26.240 The future
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main.webm">Download --main.webm (37MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main.opus">Download --main.opus (8.1MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/4AKhgQA71ewnyhDUsBnfKt">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/treesitter-nav.md b/2022/info/treesitter-nav.md
new file mode 100644
index 00000000..9f8cda8a
--- /dev/null
+++ b/2022/info/treesitter-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/school">Back to school with Emacs</a>
+Next by track: <a href="/2022/talks/handwritten">How to incorporate handwritten notes into Emacs Orgmode</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/watch.md b/2022/info/watch.md
new file mode 100644
index 00000000..a72cd9bc
--- /dev/null
+++ b/2022/info/watch.md
@@ -0,0 +1,9 @@
+<!-- Automatically generated by emacsconf-publish-watch-pages -->
+[[!sidebar content=""]]
+# Tracks
+
+<table width="100%"><tr><th>Watch page</th><th>IRC channel (libera.chat)</th><th>Alternative for streaming player</th><th>Low res</th></tr>
+<tr><td><a href="/2022/watch/gen">General</a></td><td><a href="https://chat.emacsconf.org/?join=emacsconf-gen">#emacsconf-gen</a></td><td><a href="https://live0.emacsconf.org/gen.webm">https://live0.emacsconf.org/gen.webm</a></td><td><a href="${480p}">gen-480p.webm</a></tr>
+<tr><td><a href="/2022/watch/dev">Development</a></td><td><a href="https://chat.emacsconf.org/?join=emacsconf-dev">#emacsconf-dev</a></td><td><a href="https://live0.emacsconf.org/dev.webm">https://live0.emacsconf.org/dev.webm</a></td><td><a href="${480p}">dev-480p.webm</a></tr></table>
+
+<svg width="800" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" background="white"> <g transform="translate(0,0)"> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)"> <title> Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="8" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(39,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs"> <title> Back to school with Emacs</title> <rect x="75" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(106,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode"> <title> How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="125" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(139,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing"> <title> Writing and organizing literature notes for scientific writing</title> <rect x="191" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(222,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups"> <title> Attending and organizing Emacs meetups</title> <rect x="400" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(414,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative"> <title> The Emacs Buddy initiative</title> <rect x="450" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(464,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities"> <title> The ship that builds itself: How we used Emacs to develop a workshop for communities</title> <rect x="483" y="15" opacity="0.8" width="50" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas"> <title> Real estate and Org table formulas</title> <rect x="583" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(614,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and GNUplot"> <title> Health data journaling and visualization with Org Mode and GNUplot</title> <rect x="633" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs"> <title> Edit live Jupyter notebook cells with Emacs</title> <rect x="700" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(714,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org"> <title> orgvm: a simple HTTP server for org</title> <rect x="750" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(764,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting"> <title> Tree-sitter beyond syntax highlighting</title> <rect x="100" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(114,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: complete asynchronous LSP client"> <title> lsp-bridge: complete asynchronous LSP client</title> <rect x="133" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(164,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for"> <title> asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="183" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(197,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor"> <title> Emacs should become a Wayland compositor</title> <rect x="241" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(255,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example"> <title> Using SQLite as a data source: a framework and an example</title> <rect x="400" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(431,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents"> <title> Revisiting the anatomy of Emacs mail user agents</title> <rect x="475" y="75" opacity="0.8" width="50" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(523,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source"> <title> Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="583" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(614,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev"> <title> Bidirectional links with eev</title> <rect x="658" y="75" opacity="0.8" width="8" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(664,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs"> <title> Short hyperlinks to Python docs</title> <rect x="683" y="75" opacity="0.8" width="8" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(689,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs"> <title> Haskell code exploration with Emacs</title> <rect x="708" y="75" opacity="0.8" width="50" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(756,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(100,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(200,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(300,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(400,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(500,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(600,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(700,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 4</text></g></g> <g transform="translate(0,150)"> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey"> <title> Results of the 2022 Emacs Survey</title> <rect x="8" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(39,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org"> <title> This Year in Org</title> <rect x="58" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(72,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex"> <title> Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="100" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(131,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)"> <title> Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="166" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(180,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons"> <title> Linking personal info with Hyperbole implicit buttons</title> <rect x="216" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(230,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode"> <title> Powerful productivity with Hyperbole and Org Mode</title> <rect x="400" y="15" opacity="0.8" width="50" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(448,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers"> <title> Org workflows for developers</title> <rect x="483" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(514,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers"> <title> GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="550" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(581,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb"> <title> Putting Org Mode on the Indieweb</title> <rect x="633" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User"> <title> Fanfare for the Common Emacs User</title> <rect x="700" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(714,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction"> <title> rde Emacs introduction</title> <rect x="100" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs"> <title> justl: Driving recipes within Emacs</title> <rect x="175" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(189,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to"> <title> Elisp and the TRAMP: How to NOT write code you don't have to</title> <rect x="208" y="75" opacity="0.8" width="50" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(256,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs"> <title> Getting detached from Emacs</title> <rect x="400" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(414,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell"> <title> Top 10 reasons why you should be using Eshell</title> <rect x="458" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(472,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool"> <title> Emacs was async before async was cool</title> <rect x="516" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(547,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus"> <title> The Wheels on D-Bus</title> <rect x="608" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(639,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs"> <title> Pre-localizing Emacs</title> <rect x="700" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(731,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(100,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(200,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(300,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(400,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(500,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(600,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(700,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 4</text></g></g></svg> \ No newline at end of file
diff --git a/2022/info/wayland-after.md b/2022/info/wayland-after.md
new file mode 100644
index 00000000..c4ee53cd
--- /dev/null
+++ b/2022/info/wayland-after.md
@@ -0,0 +1,163 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="wayland-mainVideo-transcript"></a>
+# Transcript
+
+[[!template text="""Hello EmacsConf and hello fellow Emacs fans.""" start="00:00:00.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""My name is Michael Bauer, and I'm from Germany.""" start="00:00:08.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""I'm gonna talk to you about &quot;Why and how Emacs""" start="00:00:10.920" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""should become a Wayland compositor.&quot;""" start="00:00:13.440" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""And it already kinda is a Wayland compositor.""" start="00:00:17.200" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""This talk is composed by Wayland and Emacs.""" start="00:00:21.740" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""If I'm talking about a Wayland compositor""" start="00:00:25.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""or Emacs as Wayland compositor,""" start="00:00:26.840" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""I mean it in the sense that""" start="00:00:29.360" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""EXWM is an X window manager. I hope you know EXWM.""" start="00:00:30.440" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""So, why?""" start="00:00:36.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Emacs can do Wayland now, that was a stopper""" start="00:00:41.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""before, and now it's solved with `pgtk` branch.""" start="00:00:44.120" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""It makes the Emacs toolbox bigger,""" start="00:00:49.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""which is always a good thing.""" start="00:00:53.240" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""And the cool thing about Wayland, which is not""" start="00:00:55.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""possible under X is, it can run standalone""" start="00:00:58.440" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""on the Linux kernel interface, or nested under X,""" start="00:01:02.280" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""or even nested under Wayland.""" start="00:01:06.840" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""The compositor features of Emacs doesn't mean""" start="00:01:09.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""it has to take over the whole output.""" start="00:01:13.840" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""It can use them, even if it's just like""" start="00:01:16.960" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""a normal window or normal program.""" start="00:01:20.560" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""And last reason is,""" start="00:01:23.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""I want to keep living inside Emacs""" start="00:01:25.120" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""and Wayland is the future, apparently.""" start="00:01:27.240" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""EXWM use case is the first use case.""" start="00:01:31.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""You take a Wayland surface and put it inside""" start="00:01:35.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""an Emacs window. You see it right below.""" start="00:01:38.400" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""The video of me is a Wayland surface,""" start="00:01:41.520" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""and it's inside an Emacs window managed by Emacs.""" start="00:01:45.880" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Emacs does the input, and the clipboard handling,""" start="00:01:50.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""and can insert itself here, and do great things.""" start="00:01:53.480" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""And it's a possibility to Lispify the Linux desktop,""" start="00:01:59.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""as Emacs Lispifies the command line.""" start="00:02:03.200" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""The other use case is the XWidget use case.""" start="00:02:08.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""I don't know if you know XWidgets.""" start="00:02:12.960" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""It's embedded X windows inside Emacs.""" start="00:02:17.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""There's a web browser available in Emacs.""" start="00:02:19.720" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""With Wayland, you could embed anything that can""" start="00:02:24.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""create a Wayland surface like video, web, or 3D.""" start="00:02:27.520" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Think OpenGL, something like""" start="00:02:32.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""EmacsGL would be possible.""" start="00:02:34.880" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""And we wouldn't have just images like we have so far.""" start="00:02:38.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""So, how to implement this Wayland compositor?""" start="00:02:46.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""I'm going to tell you how I did it,""" start="00:02:50.560" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""or I did this demo I'm showing you right now.""" start="00:02:52.560" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""First of all, how does Wayland work?""" start="00:02:57.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Wayland is a protocol in XML.""" start="00:03:00.680" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""It's a server and client, and they share a set of""" start="00:03:04.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""objects, and the objects have methods.""" start="00:03:11.120" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""They are specified in the protocol,""" start="00:03:13.960" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""and Wayland also says how the server""" start="00:03:16.120" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""and client talk to each other.""" start="00:03:24.080" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""First blocker for Emacs becoming a Wayland""" start="00:03:25.720" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""compositor is that Emacs and Wayland both have""" start="00:03:33.440" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""their own event loop, and you can't merge them too.""" start="00:03:37.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""But you don't have to merge them""" start="00:03:41.880" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""because you can just make Emacs speak Wayland.""" start="00:03:45.800" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""So, Emacs becomes a Wayland client,""" start="00:03:48.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""and there's an extra server Emacs is talking to.""" start="00:03:50.040" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""So, we need a minimal Wayland server that does all""" start="00:03:53.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""the stuff Emacs can't do and do the rest in Emacs.""" start="00:03:59.160" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""---The minimal Wayland server, I did it in wlroots.""" start="00:04:03.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""That's the library behind Sway. I think it's""" start="00:04:07.800" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""the Wayland library to do stuff like this.""" start="00:04:13.040" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""I implemented four different things to make it work.""" start="00:04:20.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""It's these three letter acronyms on the left.""" start="00:04:26.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""It's Emacs, Wayland, and then it's a server,""" start="00:04:30.680" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""a client, a protocol, and buffers.""" start="00:04:34.520" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""The server is written in C and it's mostly tinywl.""" start="00:04:38.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""It's the example of wlroots,""" start="00:04:44.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""and it's around 1000 lines of code.""" start="00:04:46.280" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""ewc, the Wayland client in Emacs,""" start="00:04:52.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""is the thing I'm most proud of.""" start="00:04:54.960" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""It's 300 lines of code, and it is a""" start="00:04:58.560" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""fully featured Wayland client in Emacs.""" start="00:05:02.120" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""With this, Emacs can speak Wayland,""" start="00:05:08.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""and then I implemented Emacs Wayland protocol.""" start="00:05:11.640" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""It more or less allows Emacs to become a Wayland""" start="00:05:18.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""window manager, so it's not actually the compositor.""" start="00:05:21.280" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""The compositor stays in C, but Emacs is""" start="00:05:24.640" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""now a Wayland window manager!""" start="00:05:27.680" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""And the last thing is Emacs Wayland buffers.""" start="00:05:31.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""It's the window manager part.""" start="00:05:34.520" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""It's around 500 lines of code,""" start="00:05:35.880" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""and it does the buffer management inside""" start="00:05:38.440" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Emacs windows, or floating right like you see me""" start="00:05:41.680" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""now floating on the right.""" start="00:05:45.680" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""It works, but it is still buggy,""" start="00:05:48.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""and it is also missing input handling,""" start="00:05:51.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""so there's more code to come for this to work.""" start="00:05:54.320" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Some caveats about this approach.""" start="00:06:01.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""wlroots is around 60 kilo LoCs (Line of Code)""" start="00:06:05.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""and in active development.""" start="00:06:09.640" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""They have like a slogan 60 kilo locs of code""" start="00:06:12.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""you had to write anyway to make a Wayland""" start="00:06:16.640" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""compositor. And no, you don't have to write it.""" start="00:06:19.760" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""But I still remember when it was like 50 kilo locs,""" start="00:06:22.520" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""and now it's 60. And it's like a moving target.""" start="00:06:25.840" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""I think it could be quite a lot of work""" start="00:06:29.680" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""to keep up with it.""" start="00:06:32.480" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Yeah, it could be quite a bit of work.""" start="00:06:34.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Some windows don't like to keep the aspect ratios.""" start="00:06:41.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""You tell them and you have to crop them.""" start="00:06:46.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""And the interface I use in wlroots for doing this,""" start="00:06:49.560" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""`wlr_scene`, can't do cropping yet,""" start="00:06:53.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""so this doesn't work.""" start="00:06:57.280" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Another problem is with GTK.""" start="00:07:01.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Once Wayland is enabled and it stays on.""" start="00:07:03.240" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""This doesn't make sense.""" start="00:07:11.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Okay, if you kill the Wayland server,""" start="00:07:12.560" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""GTK kills Emacs, that's not a good thing.""" start="00:07:15.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""And it's still a bit of work and fussing needed""" start="00:07:18.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""to get this to work reliably.""" start="00:07:21.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""It's quite buggy right now.""" start="00:07:23.640" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""And that brings me to my call to action.""" start="00:07:26.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""I think making Emacs Wayland capable is""" start="00:07:30.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""a further step to make an Emacs OS.""" start="00:07:34.440" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""It gains output and input handling.""" start="00:07:39.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Output handling is already there,""" start="00:07:41.360" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""input handling is still missing,""" start="00:07:44.120" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""but Emacs can manage monitors, outputs,""" start="00:07:45.760" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""different frames if it's like nested,""" start="00:07:49.720" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""And inputs, keyboards, simulation keys,""" start="00:07:53.040" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""stuff like that.""" start="00:07:57.080" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""We could use it in more ways for Emacs display, maybe.""" start="00:07:58.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Wayland just manages simple pixel buffers,""" start="00:08:02.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""so it's a protocol for managing pixel buffers.""" start="00:08:05.720" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""And in a sense, we could go back to""" start="00:08:09.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""the old X ways and maybe even ditch GTK.""" start="00:08:12.560" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""I don't know, but why need it?""" start="00:08:15.560" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""We can composite without it.""" start="00:08:18.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Let's make buffer menus, buffer world, buffer.""" start="00:08:20.600" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Emacs Wayland protocol, like I did it,""" start="00:08:27.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""allows a very concise design, and it allows""" start="00:08:29.040" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""to improve on the EXWM code base.""" start="00:08:34.040" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""And I wrote KISS style because EXWM has""" start="00:08:38.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""workspace management integrated.""" start="00:08:41.840" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""I don't think that's needed, like Emacs does it.""" start="00:08:45.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Why do you have to do something extra?""" start="00:08:50.600" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""So why do it?""" start="00:08:53.640" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""To finish the call to action,""" start="00:08:56.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""if this is the thing you want to see in Emacs,""" start="00:09:00.040" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""maybe you want to get involved, have some ideas,""" start="00:09:03.280" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""so we could discuss it.""" start="00:09:06.600" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""I'm looking forward to discuss with you""" start="00:09:10.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""and hear your questions and ideas.""" start="00:09:14.960" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""I want to say a big thank you to the""" start="00:09:21.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""organizers of EmacsConf and the other speakers""" start="00:09:24.200" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""for making this event possible.""" start="00:09:26.600" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Thank you, and see you.""" start="00:09:29.000" video="mainVideo-wayland" id="subtitle"]]
+
+Questions or comments? Please e-mail [perma-curious@posteo.de](mailto:perma-curious@posteo.de?subject=Comment%20for%20EmacsConf%202022%20wayland%3A%20Emacs%20should%20become%20a%20Wayland%20compositor)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/wayland-before.md b/2022/info/wayland-before.md
new file mode 100644
index 00000000..e257f59b
--- /dev/null
+++ b/2022/info/wayland-before.md
@@ -0,0 +1,10 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+# Talk
+
+<div class="vid"><video controls preload="none" id="wayland-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--main.webm">Download --main.webm (15MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--main.opus">Download --main.opus (6.1MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--main.org">Download --main.org</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/enc6bnYbm2gHpwrBa6bVjR">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="wayland-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--answers.webm" />${captions}<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="wayland-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--answers.webm">Download --answers.webm (78MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--answers.opus">Download --answers.opus (13MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/wayland-nav.md b/2022/info/wayland-nav.md
new file mode 100644
index 00000000..f4977e88
--- /dev/null
+++ b/2022/info/wayland-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/buddy">The Emacs Buddy initiative</a>
+Next by track: <a href="/2022/talks/meetups">Attending and organizing Emacs meetups</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/workflows-after.md b/2022/info/workflows-after.md
new file mode 100644
index 00000000..b9b92295
--- /dev/null
+++ b/2022/info/workflows-after.md
@@ -0,0 +1,451 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="workflows-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hello. Welcome to my first ever EmacsConf talk.""" start="00:00:00.000" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""This is really exciting for me.""" start="00:00:04.600" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I've done lots of conferences,""" start="00:00:06.360" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""but rarely ones this technical and this nerdy.""" start="00:00:08.600" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I also feel like""" start="00:00:12.800" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I have something interesting to share.""" start="00:00:13.508" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I come to Emacs relatively late in my career,""" start="00:00:15.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""only about six years ago,""" start="00:00:18.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""but I've been absolutely amazed""" start="00:00:20.920" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""at the innovation and commitment of the community""" start="00:00:22.880" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""to do things their own way.""" start="00:00:25.800" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Oftentimes, these become things""" start="00:00:28.200" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that are not readily available anywhere else.""" start="00:00:30.120" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, as I've been using Emacs""" start="00:00:33.880" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""(and Org mode specifically)""" start="00:00:35.307" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""a great deal in my day-to-day workflows,""" start="00:00:37.160" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I've been leaning more and more into""" start="00:00:39.600" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""some of these tips and tricks.""" start="00:00:41.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I find that there is almost every day""" start="00:00:43.607" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that I discover some useful tweak""" start="00:00:46.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that can make my development better.""" start="00:00:48.120" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I want to share them with you now.""" start="00:00:50.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""[Future George]: Hey, hold on!""" start="00:00:53.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Who are you?""" start="00:00:54.874" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[Future George]: I'm you from the future!""" start="00:00:56.200" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Oh, nice. How good.""" start="00:01:00.400" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""No, I'm you from, like, a month from now.""" start="00:01:02.480" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Look, you know how these talks are pre-recorded,""" start="00:01:05.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and you know how you've spent the last two years""" start="00:01:08.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""criticizing conference speakers""" start="00:01:10.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""for trying to do the same old thing""" start="00:01:12.400" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and not creatively adapting""" start="00:01:14.000" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""to the online conference medium?""" start="00:01:15.120" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Well, you are recording this back in November.""" start="00:01:17.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'm in December when everyone is watching this""" start="00:01:20.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""for the first time.""" start="00:01:23.160" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""That is something we can do now.""" start="00:01:24.720" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[George]: Okay, so this is a gimmick.""" start="00:01:27.120" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Cool! And I see you still haven't figured out""" start="00:01:29.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""how to remove backgrounds with OBS.""" start="00:01:32.880" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[Future George]: Oh my god! It's such a pain,""" start="00:01:35.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I have to get a plugin or something.""" start="00:01:37.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, yes, it's kind of a gimmick,""" start="00:01:40.360" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""but I also have a cool point.""" start="00:01:42.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""You know, how you just said""" start="00:01:44.920" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that you discover something new every day?""" start="00:01:46.200" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Well, your talk isn't that long,""" start="00:01:48.840" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and I found a bunch of cool new workflow synths.""" start="00:01:49.920" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[George]: Oh, okay, that makes sense.""" start="00:01:52.720" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'm starting a new job in the intervening time.""" start="00:01:55.920" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[Future George]: Exactly!""" start="00:01:58.360" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, I have more stuff I want to add.""" start="00:01:59.720" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[George]: Oh, and I bet that""" start="00:02:02.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""once we set the ground rules,""" start="00:02:03.740" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""the audience might have""" start="00:02:05.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""some of their own suggestions.""" start="00:02:07.136" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""That is a good idea.""" start="00:02:08.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Okay, go away now.""" start="00:02:11.160" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[Future George]: Fine, but""" start="00:02:11.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""aren't you gonna explain the dino?""" start="00:02:13.574" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[George]: This is EmacsConf, dude.""" start="00:02:15.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""You think a dinosaur built out of""" start="00:02:18.800" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""boxes and old dishwasher parts""" start="00:02:20.320" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""is the weirdest background thing we'll see?""" start="00:02:22.160" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[Both making dinosaur roaring sound: ROAAAAR!]""" start="00:02:24.207" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Okay, bye now.""" start="00:02:27.880" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""Hey everyone, you heard the idea.""" start="00:02:30.200" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""This is going to be a thinly-veiled attempt""" start="00:02:33.160" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""to show you stuff about""" start="00:02:35.000" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Emacs and Org mode, specifically,""" start="00:02:36.940" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that I think is super cool and immediately useful""" start="00:02:38.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""while you're doing development.""" start="00:02:41.560" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Let's define the scope of Org development workflow""" start="00:02:43.600" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""as something specific you do with Org mode""" start="00:02:46.720" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that helps in certain common""" start="00:02:49.000" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""development related activities.""" start="00:02:50.800" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Now, tie-dye me from the future said""" start="00:02:52.880" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""he's got some more ideas""" start="00:02:54.560" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""beyond what I'm presenting here.""" start="00:02:56.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'm sure many of you have ideas as well.""" start="00:02:58.840" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, we're going to share a collaborative document,""" start="00:03:01.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and let's all as we're listening to this""" start="00:03:07.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""be talking, and chatting, and entering""" start="00:03:10.120" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""our own ideas and workflows,""" start="00:03:11.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""so that we can learn and improve together.""" start="00:03:13.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""And now with that, let's begin.""" start="00:03:15.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I've got a ton of ground to cover,""" start="00:03:17.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and I want to start by talking about note-taking.""" start="00:03:20.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Shrink down! [transition]""" start="00:03:23.480" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Note-taking is incredibly important.""" start="00:03:25.720" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""We can't keep all this stuff in our heads.""" start="00:03:30.074" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, for example, I find myself with""" start="00:03:33.600" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""the need to learn about the solid project.""" start="00:03:36.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""This right here is the solid project,""" start="00:03:41.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and I want to play around with it.""" start="00:03:44.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I am going to start by creating a note for it.""" start="00:03:47.320" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Now, one of the things that I want to do""" start="00:03:50.920" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""is explore one of their tutorials.""" start="00:03:53.360" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""That's the site I just saw.""" start="00:03:57.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I can go ahead and create a note for myself.""" start="00:03:58.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Right, &quot;Solid React Example&quot;,""" start="00:04:03.720" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and maybe a set of stuff ending on there.""" start="00:04:10.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'm going to clone this project,""" start="00:04:12.120" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""which I've already done,""" start="00:04:14.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and I can pull it up right here.""" start="00:04:15.720" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, I can pull it up right here,""" start="00:04:18.360" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and I can now start to explore it.""" start="00:04:22.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, for example, this code base sounds…,""" start="00:04:24.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""it seems interesting.""" start="00:04:26.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'm going to want to""" start="00:04:27.080" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""store a link to this in my code.""" start="00:04:28.996" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'm going to run `org-store-link`,""" start="00:04:31.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and I can come in here and say,""" start="00:04:34.840" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""let's explore structure. Local link,""" start="00:04:37.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and here I'm going to put that right there.""" start="00:04:48.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Now, at any given time I can come into this note""" start="00:04:50.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and be thrown right into the structure.""" start="00:04:52.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""I want to go and now start investigating the code,""" start="00:04:54.600" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""but before doing that""" start="00:04:58.880" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'm going to take an extra step""" start="00:05:02.474" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and customize the Org capture system.""" start="00:05:08.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'm going to create a playground node here,""" start="00:05:13.560" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""where I can do whatever.""" start="00:05:16.297" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Now, what does this template do?""" start="00:05:17.320" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Well, it's just going to create a new template.""" start="00:05:20.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And whenever I hit the s key,""" start="00:05:22.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""it is going to go ahead and add a new heading""" start="00:05:24.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""to which I will enter,""" start="00:05:31.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and it's going to grab a link""" start="00:05:36.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""to wherever I'm pointing at,""" start="00:05:38.326" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and any highlighted code""" start="00:05:39.720" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""will also be inserted into a source block,""" start="00:05:41.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and eventually, drop my cursor""" start="00:05:44.560" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""where I can work on it.""" start="00:05:49.407" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, we can grab our template,""" start="00:05:52.107" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and the one thing I'm going to need to add it here""" start="00:05:55.000" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""is to say what file this goes to.""" start="00:05:57.400" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'm going to copy the name of this file,""" start="00:05:59.360" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and put it right in there.""" start="00:06:03.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'm going to go ahead now run this template.""" start="00:06:08.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""Now, we can explore our code.""" start="00:06:10.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""For example, I can look in the server,""" start="00:06:14.400" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and say, &quot;Oh yeah, this slide looks interesting.""" start="00:06:16.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Go ahead and capture that.&quot;""" start="00:06:18.400" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""There you see our template.""" start="00:06:21.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""You see, yeah, this is Next.js app,""" start="00:06:23.800" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and you can see it got added right in here""" start="00:06:26.000" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""right next to my other code.""" start="00:06:29.320" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, that's interesting.""" start="00:06:33.080" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I can always go ahead and click that link,""" start="00:06:34.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and get thrown directly to where in the code I was.""" start="00:06:36.920" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'm kind of building up my own dashboard""" start="00:06:40.560" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""as I explore this project""" start="00:06:43.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""of interesting points within the project.""" start="00:06:45.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""One of the things I noticed here""" start="00:06:49.160" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""by looking at the file structure is that""" start="00:06:52.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""there is an area for certificates.""" start="00:06:57.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""That's a little unusual, so we'll make a note""" start="00:07:02.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""of that by again running `org-store-link`.""" start="00:07:05.625" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""This comes with certificates,""" start="00:07:08.007" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""so we'll put that there.""" start="00:07:12.707" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""One of the good standbys is,""" start="00:07:18.007" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""just to use our regular shell commands.""" start="00:07:21.607" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, we will go ahead and say,""" start="00:07:23.540" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""the default directory for this is our project.""" start="00:07:26.774" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And we can go ahead and say,""" start="00:07:29.807" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""`cat certificates/localhost.key`,""" start="00:07:31.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and then we'll output the first five lines of it,""" start="00:07:38.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""just to make sure it's a regular certificate.""" start="00:07:43.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""Now, notice this got broken up a little bit.""" start="00:07:45.848" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""This is due to Emacs auto formatting.""" start="00:07:49.360" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""We can come in here, and tell it to""" start="00:07:51.720" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""format it as code,""" start="00:07:55.866" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""which will be the same as this block right here.""" start="00:07:57.400" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Now, there are other options available.""" start="00:07:59.880" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""If, for example, we don't want [it]""" start="00:08:02.320" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""to be a shell block,""" start="00:08:05.453" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""we wanted a Python block for some reason,""" start="00:08:06.480" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""we do `:wrap src python`, and execute that,""" start="00:08:09.560" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and it's now wrapped as a Python block,""" start="00:08:15.320" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""but I like it as a shell.""" start="00:08:18.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""Let's, for example, go down into pages here""" start="00:08:21.480" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and look at this document file.""" start="00:08:24.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""We're saying, &quot;Okay. Well, this looks interesting""" start="00:08:25.800" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""maybe highlight that,&quot; and we'll go ahead""" start="00:08:29.160" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and capture that template""" start="00:08:32.474" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and say, grab all this code and paste it in here.""" start="00:08:36.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Now, there is a bug at the moment,""" start="00:08:39.400" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""where if you highlight more than one lines of code,""" start="00:08:42.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""the link will not work, and that honestly""" start="00:08:46.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""might be something I look into fixing.""" start="00:08:50.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""One of the things that might be useful here""" start="00:08:54.540" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""would be to check out""" start="00:08:57.507" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""how this file has evolved over time.""" start="00:08:59.274" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""To do that, I'm going to use Magit.""" start="00:09:02.107" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'll pull up a log.""" start="00:09:05.340" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Look, there's only a single change.""" start="00:09:09.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'm going to run a command""" start="00:09:11.400" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""called `orgit-store-link`,""" start="00:09:13.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and now I can come in here and say,""" start="00:09:16.840" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""&quot;It's only changed once.&quot;""" start="00:09:22.174" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Go ahead and insert that link.""" start="00:09:26.207" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Now, this file…""" start="00:09:30.507" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""the arguments here are kind of weird,""" start="00:09:33.340" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and in fact, if I click this,""" start="00:09:35.800" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""it will actually go to the full log of that branch.""" start="00:09:38.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""However, we can fix that pretty easily.""" start="00:09:42.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Grab the path of our file,""" start="00:09:45.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and this right here is really just the arguments""" start="00:09:49.120" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that are passed into the log command.""" start="00:09:53.874" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, here we go, we put that in there,""" start="00:09:56.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and there we go. We get the full file history.""" start="00:09:58.880" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""Now, I want to actually build the program.""" start="00:10:04.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, &quot;Build the app.&quot;""" start="00:10:09.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Now, I could of course run it as a shell, right.""" start="00:10:16.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""`npm ci`. The problem with that is that""" start="00:10:18.800" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Emacs is single-threaded. So, if I were to do that,""" start="00:10:22.560" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""the entire time while it was running,""" start="00:10:26.400" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""it would be locking out my Emacs.""" start="00:10:30.400" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Additionally, I might not actually want""" start="00:10:33.120" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""all that scroll--`npm ci` produces a lot of it--""" start="00:10:35.740" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""actually in my document.""" start="00:10:38.707" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So instead, what we could do is""" start="00:10:40.080" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""use an Emacs Lisp function,""" start="00:10:43.840" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and it's called `async-shell-command`.""" start="00:10:46.800" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And when you run something in async-shell-command,""" start="00:10:49.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""it's going to a comint buffer with a process""" start="00:10:52.880" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""attached to it, and run it in there.""" start="00:10:58.007" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I will need to set the directory here first,""" start="00:11:00.107" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and since, again, this is going to be""" start="00:11:04.907" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""opening up in a new buffer.""" start="00:11:07.560" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I don't need to see that.""" start="00:11:08.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'm going to run it.""" start="00:11:09.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And what's going to happen is""" start="00:11:11.407" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""this is actually not going to work.""" start="00:11:13.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And it doesn't work,""" start="00:11:17.120" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Not for any particular reason I can control.""" start="00:11:18.160" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""It's unfortunately that the repo is broken,""" start="00:11:20.320" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""but that is a totally valid""" start="00:11:24.880" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""result of our investigation.""" start="00:11:26.307" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""One of the things that I really love""" start="00:11:29.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""to do with Org mode is to actually use it for""" start="00:11:33.107" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""literate programming,""" start="00:11:37.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""because Org mode has a pretty capable""" start="00:11:38.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""code generation facility built into it.""" start="00:11:43.080" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""It's called tangling.""" start="00:11:46.000" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, if I go ahead and take my document...""" start="00:11:47.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""This is for a little Arduino project,""" start="00:11:51.720" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""where I was figuring out to spin things around""" start="00:11:54.107" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""using an old Roomba motor.""" start="00:11:56.907" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I can go ahead and write a script like this,""" start="00:12:00.074" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and then notice, I use the tangle variable""" start="00:12:05.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that is just going to determine""" start="00:12:09.400" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""where that file gets written""" start="00:12:11.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""when we call the command `org-babel-tangle`.""" start="00:12:13.560" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, if I go ahead and run this,""" start="00:12:17.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""you can see down in the minibuffer,""" start="00:12:20.080" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""it's going to write to""" start="00:12:21.800" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""`/tmp/go-batsy-playground/go-batsy-playground.ino`.""" start="00:12:23.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""That's where this right here would write,""" start="00:12:26.707" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and then I could run commands on it.""" start="00:12:29.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Then I want to start being able to use this""" start="00:12:33.480" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""to build out a program.""" start="00:12:36.574" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'm going ahead and writing in prose""" start="00:12:38.600" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and interspersing it with code.""" start="00:12:42.000" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, it's the inverse of code,""" start="00:12:43.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""in which you intersperse comments, [here]""" start="00:12:47.160" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""you write prose, and then you intersperse code""" start="00:12:49.374" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""where as needed.""" start="00:12:51.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Tangle is implicitly defined up at the higher level""" start="00:12:54.920" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""in this property block right here,""" start="00:12:58.120" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""which I will talk about in a little bit.""" start="00:12:59.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""But if you want to see what properties""" start="00:13:02.600" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""are available at any given time,""" start="00:13:04.720" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""you can hit `org-babel-view-src-block-info`""" start="00:13:07.400" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""right there, and you can see that tangle is enabled.""" start="00:13:10.140" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""All of these blocks have the exact same tangle.""" start="00:13:14.274" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""If I run and see what it is, it's just going to""" start="00:13:16.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""write to this directory to `go-batsy.ino`.""" start="00:13:20.800" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""`org-babel-tangle` is going to go ahead""" start="00:13:23.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and tangle all these source code blocks,""" start="00:13:28.920" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and I can go ahead and look at my file""" start="00:13:30.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and here it is.""" start="00:13:33.174" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""This is the full Arduino file""" start="00:13:34.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that was generated from there.""" start="00:13:36.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I start writing code here,""" start="00:13:37.360" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and I'm basically doing it in a prose way.""" start="00:13:40.807" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""As I'm thinking about it,""" start="00:13:43.320" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I write down what I'm going to do.""" start="00:13:44.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Now these braces, we haven't seen these before.""" start="00:13:46.080" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""This is an aspect of Org called `noweb`,""" start="00:13:49.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""which again is not too much of a""" start="00:13:52.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""templating system too.""" start="00:13:55.374" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""But it does one thing, which is insert code,""" start="00:13:56.400" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""which turns out to be enough.""" start="00:13:58.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, this right here basically says,""" start="00:14:00.200" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""take that block with that exact name""" start="00:14:03.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and just insert here.""" start="00:14:08.507" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""If you want to see exactly what a block expands to,""" start="00:14:09.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""you're going to come in here.""" start="00:14:13.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""You're going to run `org-babel-expand-src-block`,""" start="00:14:15.160" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and there we go. That's what this block expands to.""" start="00:14:18.320" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""That's what all those places""" start="00:14:21.000" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""of this little bits and pieces expand to.""" start="00:14:22.080" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, that becomes really useful, and notice""" start="00:14:24.807" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""basically we just take these little blocks""" start="00:14:28.120" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that are not going to be tangled directly""" start="00:14:29.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""but it will be in this other block.""" start="00:14:32.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And we turn off their tangling.""" start="00:14:33.920" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""Now that you have some sort of tangling,""" start="00:14:38.074" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""you want to be able to interact with those files""" start="00:14:40.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that are written to that directory.""" start="00:14:42.880" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, right here I have an area""" start="00:14:46.707" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""where I can do things like run a compiler.""" start="00:14:48.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Now what does that compiler do?""" start="00:14:52.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Well, this right here references""" start="00:14:55.160" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""a source code block that appears in another Org file.""" start="00:14:57.841" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And I find that when doing these sort of things""" start="00:15:01.874" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""it can be useful to have a little""" start="00:15:04.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""utility Org directory.""" start="00:15:06.007" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, here it is, `org/ci.org`.""" start="00:15:08.000" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""This is just part of my repo.""" start="00:15:10.374" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""We open up, and here we go.""" start="00:15:11.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I have a compile function.""" start="00:15:14.140" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Basically, it's doing some stuff""" start="00:15:15.200" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""to clean up things correctly.""" start="00:15:18.360" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""But then using that same `async-shell-command`""" start="00:15:20.480" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""to open things up and a new buffer.""" start="00:15:23.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""In this case, named after""" start="00:15:26.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""whatever heading it was under.""" start="00:15:28.674" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And then we're going to go ahead and inside of it""" start="00:15:31.200" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""run Arduino CLI command to compile,""" start="00:15:35.160" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and pass that into `watchexec`.""" start="00:15:39.874" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""which is a little Rust program""" start="00:15:43.560" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that watches inode[??] files for any changes,""" start="00:15:46.120" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and when they detect them, we will run this.""" start="00:15:49.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""If I were to, for example, add a line here,""" start="00:15:51.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and now run `org-babel-tangle`,""" start="00:15:56.160" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""you can see watchexec immediately""" start="00:15:59.360" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""picks it up and restarts it.""" start="00:16:02.400" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""Now it's kind of a pain to remember""" start="00:16:04.480" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""to run `org-babel-tangle` all the time.""" start="00:16:07.475" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, I can come here and click this button.""" start="00:16:09.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""It asks me to execute it there.""" start="00:16:13.807" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And what does that do?""" start="00:16:17.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Here you go. It's just a very simple hyperlink,""" start="00:16:18.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""but to the Elisp protocol.""" start="00:16:23.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""The Elisp protocol just adds a hook that says,""" start="00:16:25.600" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""whenever a document is saved, run `org-babel-tangle`.""" start="00:16:30.600" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And now that I've run that, I can go ahead,""" start="00:16:35.107" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""come in here, and delete that.""" start="00:16:37.600" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And look at that. It tangles automatically for me.""" start="00:16:39.307" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Because I don't want to actually have this""" start="00:16:42.340" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""playground script tangle to my real file,""" start="00:16:45.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I need this concept of""" start="00:16:49.480" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""some sort of workspace directory.""" start="00:16:51.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And a workspace directory""" start="00:16:52.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""what I really want is a variable that is tied to""" start="00:16:54.880" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""where in my document hierarchy this appears.""" start="00:16:58.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I want a dynamically scoped variable""" start="00:17:02.674" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that's scoped to my document.""" start="00:17:06.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And you can do that. For example, in this case,""" start="00:17:08.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I have in my properties""" start="00:17:12.560" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""a key value declared `workspace-directory`,""" start="00:17:15.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[it] goes into a temp directory.""" start="00:17:20.080" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And here, by running `org-get-entry`""" start="00:17:22.080" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""starting at the current point,""" start="00:17:24.480" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""find `workspace-directory`""" start="00:17:25.800" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""with a second parameter 1.""" start="00:17:27.507" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""You can see down in the minibuffer,""" start="00:17:28.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""goes to `/tmp/go-batsy-playground/`.""" start="00:17:31.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""This right here is going to override""" start="00:17:37.174" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""the `workspace-directory` at the top level,""" start="00:17:42.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""which is dot. Dot means here.""" start="00:17:44.307" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""That's what makes sure""" start="00:17:47.607" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that the rest of these tangle to""" start="00:17:48.880" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that go-batsy file right relevant to here.""" start="00:17:50.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And that does mean that we need""" start="00:17:54.560" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""a little bit more complex thing here.""" start="00:17:55.740" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, we're saying go ahead and `org-entry-get`""" start="00:17:58.207" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""the `workspace-directory`.""" start="00:18:01.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""If anyone hasn't seen this syntax,""" start="00:18:04.800" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""this dash arrow is from the dash.el library,""" start="00:18:06.807" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""which is basically a big library of all""" start="00:18:16.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""the utility functions that you wish""" start="00:18:19.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Emacs Lisp had. They're well-named.""" start="00:18:20.940" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I highly, highly recommend it.""" start="00:18:22.880" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""This is the threading operator.""" start="00:18:24.480" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, we're just basically taking it,""" start="00:18:26.080" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""getting the `workspace-directory`,""" start="00:18:28.200" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""if it happens to be dot, then we're just going to""" start="00:18:29.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""return the current directory,""" start="00:18:32.307" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""otherwise whatever directory said.""" start="00:18:33.320" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""And then I want to just take a moment""" start="00:18:36.000" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and look at the rest of this structure.""" start="00:18:39.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, `workspace-directory` we talked about.""" start="00:18:41.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""`header-args` if you noticed, none of my""" start="00:18:43.080" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""code blocks for the most part""" start="00:18:46.774" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""have any header arguments.""" start="00:18:48.707" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""You can drop the `header-args` property,""" start="00:18:50.840" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""which is going to be header arguments""" start="00:18:53.174" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that are added automatically""" start="00:18:55.607" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""to all source code blocks under this heading.""" start="00:18:57.840" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""`header-args+`. Well,""" start="00:19:03.407" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""sometimes you don't want to type…""" start="00:19:05.407" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""you have a bunch of args,""" start="00:19:06.540" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""you don't want to type them out""" start="00:19:07.507" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""in this one big line.""" start="00:19:08.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, you basically are adding a new header-arg""" start="00:19:09.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""to the existing list of header.""" start="00:19:13.320" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And then you can have header-args that are specific""" start="00:19:15.407" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""to certain languages, like, for example,""" start="00:19:18.160" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""this `default-directory` var is going to be set""" start="00:19:20.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""for all Emacs Lisps.""" start="00:19:23.720" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And for all Arduinos, evaluation will be disabled,""" start="00:19:25.200" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and tangling will be automatically enabled.""" start="00:19:29.574" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""These are just some of the workflows that become""" start="00:19:32.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""useful when you're actually doing the coding.""" start="00:19:35.307" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[Future George]: Oh, hello again!""" start="00:19:38.320" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Me from the six months from now.""" start="00:19:41.374" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[George]: Cool.""" start="00:19:45.307" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[Future George]: The talk got over, people liked it,""" start="00:19:49.107" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""thought the pacing was all over the place.""" start="00:19:51.000" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[George]: Yeah, I had to cut two thirds of it,""" start="00:19:53.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""going to be filling in those gaps in the Etherpad.""" start="00:19:56.360" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[Future George]: And the editing was uneven, at best.""" start="00:19:59.800" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[George]: I got way better at it""" start="00:20:03.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""as I worked on it, didn't I?""" start="00:20:05.507" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Kdenlive is pretty cool.""" start="00:20:06.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""But yeah, I wanted to take a shot at""" start="00:20:09.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""something different, and I figured if anyone can""" start="00:20:13.540" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""appreciate trying something different,""" start="00:20:16.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""it's EmacsConf, right?""" start="00:20:17.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I hope people found it useful.""" start="00:20:20.120" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[Future George]: Yeah, some did.""" start="00:20:21.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Oh, I should tell you about the coming Orca war.""" start="00:20:22.600" video="mainVideo-workflows" id="subtitle"]]
+
+
+
+Captioner: bhavin192
+
+Questions or comments? Please e-mail [gmauer+emacsconf@gmail.com](mailto:gmauer+emacsconf@gmail.com?subject=Comment%20for%20EmacsConf%202022%20workflows%3A%20Org%20workflows%20for%20developers)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/workflows-before.md b/2022/info/workflows-before.md
new file mode 100644
index 00000000..5102cc01
--- /dev/null
+++ b/2022/info/workflows-before.md
@@ -0,0 +1,56 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, George Mauer demonstrates several ways that Org Mode can help people explore and develop code. Afterwards, he will handle questions via BigBlueButton.
+
+
+The following image shows where the talk is in the schedule for Sun 2022-12-04. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="workflows">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(126,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect stroke-width="3" x="454" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect x="378" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(399,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 21-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-workflows>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: TO_INDEX_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-04T18:50:00Z" end="2022-12-04T19:15:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~1:50 PM - 2:15 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 4 2022, ~12:50 PM - 1:15 PM CST (US/Central)<br />Sunday, Dec 4 2022, ~11:50 AM - 12:15 PM MST (US/Mountain)<br />Sunday, Dec 4 2022, ~10:50 AM - 11:15 AM PST (US/Pacific)<br />Sunday, Dec 4 2022, ~6:50 PM - 7:15 PM UTC <br />Sunday, Dec 4 2022, ~7:50 PM - 8:15 PM CET (Europe/Paris)<br />Sunday, Dec 4 2022, ~8:50 PM - 9:15 PM EET (Europe/Athens)<br />Monday, Dec 5 2022, ~12:20 AM - 12:45 AM IST (Asia/Kolkata)<br />Monday, Dec 5 2022, ~2:50 AM - 3:15 AM +08 (Asia/Singapore)<br />Monday, Dec 5 2022, ~3:50 AM - 4:15 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/gen/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="workflows-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="workflows-mainVideo" data="""
+00:00.000 Introduction
+00:53.960 The future
+02:30.200 Org development workflows
+03:15.680 Taking notes
+04:54.600 org-capture templates
+06:10.680 Building up a dashboard
+06:49.160 org-store-links
+07:45.680 Formatting
+08:21.480 Pasting code
+08:52.200 Git
+10:04.960 async-shell-command
+11:29.040 Literate programming and tangling
+13:47.840 Noweb
+14:36.400 Running commands
+16:04.480 Buttons
+16:43.600 Workspaces
+18:04.800 dash
+18:36.000 Header arguments
+19:29.920 Conclusion
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main.webm">Download --main.webm (111MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main.opus">Download --main.opus (13MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/bRD59ZVoJk1zpNnchaygk4">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="workflows-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="workflows-qanda" data="""
+00:00.000 Introduction
+01:23.774 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?
+02:38.982 Q2 - I want to take a look at the files used in your demo, are they somewhere online?
+03:16.080 Digression - some explanations about the background dinosaur :D
+04:54.960 Information about org-entry-get
+05:49.640 Are workflows as they are in your life closely tied to particular projects or are they general workflows? - Long discussion about the workflow!
+13:32.960 Wrapping up
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="workflows-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers.webm">Download --answers.webm (27MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers.opus">Download --answers.opus (5.9MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/workflows-nav.md b/2022/info/workflows-nav.md
new file mode 100644
index 00000000..a3a5989b
--- /dev/null
+++ b/2022/info/workflows-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/eshell">Top 10 reasons why you should be using Eshell</a>
+Next by track: <a href="/2022/talks/async">Emacs was async before async was cool</a>
+Track: <span class="sched-track General">General</span>
+</div>