summaryrefslogtreecommitdiffstats
path: root/2023
diff options
context:
space:
mode:
authorSacha Chua <sacha@sachachua.com>2023-12-25 12:35:27 -0500
committerSacha Chua <sacha@sachachua.com>2023-12-25 12:35:27 -0500
commit5d4e91ed9fe87ddb2c6e83bfbef0b2901981275d (patch)
treeef41478d25af1fbaa46655af8f7abb9b056797ee /2023
parent9ed536cc1e42e3899000f9a1ada549c9271bc915 (diff)
downloademacsconf-wiki-5d4e91ed9fe87ddb2c6e83bfbef0b2901981275d.tar.xz
emacsconf-wiki-5d4e91ed9fe87ddb2c6e83bfbef0b2901981275d.zip
add opus files, repl captions from eduardo
Diffstat (limited to '2023')
-rw-r--r--2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt4031
-rw-r--r--2023/info/emacsconf-before.md2
-rw-r--r--2023/info/flat-before.md2
-rw-r--r--2023/info/one-before.md2
-rw-r--r--2023/info/repl-after.md794
-rw-r--r--2023/info/repl-before.md2
-rw-r--r--2023/info/sat-close-before.md4
-rw-r--r--2023/info/sun-close-before.md2
-rw-r--r--2023/info/test-before.md2
-rw-r--r--2023/schedule-details.md20
10 files changed, 2559 insertions, 2302 deletions
diff --git a/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt b/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt
index 600d07b5..723fc45a 100644
--- a/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt
+++ b/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt
@@ -1,2273 +1,3324 @@
-WEBVTT captioned by sachac
+WEBVTT captioned by eduardo
+Kind: captions
+Language: en-GB
NOTE Intro
-00:00.000 --> 00:00:00.014
-Hi, my name is Eduardo Ochs
+00:00:00.000 --> 00:00:03.079
+Hi! My name is Eduardo Ochs
-00:00:00.015 --> 00:00:05.020
-and the title of this talk is
+00:00:03.080 --> 00:00:05.519
+and the title of this talk is: REPLs
-00:05.020 --> 00:07.840
-REPLs in Strange Places: Lua, LaTeX,
+00:00:05.520 --> 00:00:09.399
+in strange places - Lua, LateX, LPeg, LPegRex,
-00:07.840 --> 00:10.440
-LPeg, LPegRex, and TikZ.
+00:00:09.400 --> 00:00:12.119
+and TikZ. I'm the author of an Emacs
-00:10.440 --> 00:13.400
-I'm the author of an Emacs package called eev,
+00:00:12.120 --> 00:00:14.879
+package called eev, and this is a talk
-00:13.400 --> 00:17.280
-and this is a talk at the EmacsConf 2023,
+00:00:14.880 --> 00:00:18.479
+at the EmacsConf 2023, that is happening in
-00:17.280 --> 00:21.560
-that is happening in December 2023 at the Internet.
+00:00:18.480 --> 00:00:22.519
+December 2023, at the internets.
NOTE Diagrams
-00:21.560 --> 00:00:24.243
-This is one of the examples of diagrams
+00:00:22.520 --> 00:00:23.079
+This is one of the
-00:00:24.244 --> 00:00:25.920
-that we are going to see.
+00:00:23.080 --> 00:00:24.919
+examples of diagrams that we are
-00:25.920 --> 00:28.400
-Let me show how I generated it.
+00:00:24.920 --> 00:00:27.639
+going to see - let me show how I generate
-00:28.400 --> 00:33.600
-One second, I have to use a smaller font here.
+00:00:27.640 --> 00:00:30.599
+it... one second,
-00:34.560 --> 00:39.080
-This is a file called parse32.lua.
+00:00:30.600 --> 00:00:35.799
+I have to use a smaller font here...
-00:39.080 --> 00:42.600
-Let me go back to this block of tests again.
+00:00:35.800 --> 00:00:39.159
+this is a file called ParseTree2.lua...
-00:42.600 --> 00:45.520
-Now, if I run this,
+00:00:39.160 --> 00:00:42.919
+let me go back to this block of tests again...
-00:46.720 --> 00:51.520
-we get these outputs here at the right.
+00:00:42.920 --> 00:00:43.879
+and now if I run
-00:51.520 --> 00:53.800
-Then in this line here,
+00:00:43.880 --> 00:00:47.759
+this...
-00:53.800 --> 00:55.420
-it generates a PDF,
+00:00:47.760 --> 00:00:50.159
+we get these outputs here at the
-00:55.420 --> 00:57.780
-and if I type `F8` here,
+00:00:50.160 --> 00:00:53.959
+right, and then in this line here it
-00:57.780 --> 01:02.560
-it shows the PDF in the lower right window.
+00:00:53.960 --> 00:00:58.119
+generates a PDF, and if I type f8 here it
+
+00:00:58.120 --> 00:01:03.919
+shows the PDF in the lower right window.
NOTE eev
-01:03.320 --> 01:08.920
-Let me start by explaining briefly what is eev.
+00:01:03.920 --> 00:01:06.079
+Let me start by explaining
+
+00:01:06.080 --> 00:01:09.839
+briefly what is eev.
+
+00:01:09.840 --> 00:01:12.239
+First: it is something that
-01:08.920 --> 00:01:10.889
-First, it's something
+00:01:12.240 --> 00:01:14.759
+appeared by accident in the mid-90s - I
-00:01:10.890 --> 00:01:14.560
-that appeared by accident in the mid 90s.
+00:01:14.760 --> 00:01:16.799
+explained this story in my
-01:14.560 --> 01:20.640
-I explained this story in my presentation at EmacsConf 2019.
+00:01:16.800 --> 00:01:20.159
+presentation at the EmacsConf 2019...
-01:20.640 --> 01:25.420
-It's an Emacs package that is part of ELPA.
+00:01:20.160 --> 00:01:23.159
+it's a package... it's an Emacs
-01:25.420 --> 01:28.720
-It has at least 10 users.
+00:01:23.160 --> 00:01:26.519
+package that is part of ELPA... it has at
-01:28.720 --> 01:32.480
-Those are the ones that I know by name.
+00:01:26.520 --> 00:01:29.679
+least 10 users - those are the ones
-01:32.480 --> 01:36.960
-eev means "Emacs, execute verbosely".
+00:01:29.680 --> 00:01:32.559
+that I know by name...
-01:36.960 --> 00:01:38.847
+00:01:32.560 --> 00:01:38.439
+eev means `emacs-execute-verbosely'...
+
+00:01:38.440 --> 00:01:40.959
eev is something that treats eval-last-sexp
-00:01:38.848 --> 00:01:43.400
-as the central feature of Emacs.
+00:01:40.960 --> 00:01:43.999
+as the central feature of Emacs...
+
+00:01:44.000 --> 00:01:45.599
+eev blurs the distinction between
+
+00:01:45.600 --> 00:01:48.919
+programmers and users, and it replaces
-01:43.400 --> 01:47.280
-eev blurs the distinction between programmers and users,
+00:01:48.920 --> 00:01:51.679
+the slogan "users should not be forced to
-01:47.280 --> 01:49.960
-and it replaces the slogan,
+00:01:51.680 --> 00:01:53.679
+see Lisp", that is something that Richard
-01:49.960 --> 01:52.360
-"users should not be forced to see Lisp"
+00:01:53.680 --> 00:01:57.559
+Stallman told me once, by "users should see
-01:52.360 --> 01:55.280
-(that is something that Richard Stallman told me once),
+00:01:57.560 --> 00:02:00.479
+Lisp instead of buttons" and "new users
-01:55.280 --> 01:59.240
-by "users should see Lisp instead of buttons,"
+00:02:00.480 --> 00:02:03.999
+should see Lisp in the first 5 minutes"...
-01:59.240 --> 02:03.400
-and "new users should see Lisp in the first five minutes."
+00:02:04.000 --> 00:02:05.279
+I'm going to show
-02:03.400 --> 02:08.160
-I'm going to show some examples of that soon.
+00:02:05.280 --> 00:02:08.959
+some examples of that soon.
-02:08.160 --> 00:02:11.565
-eev uses code in the comments a lot
+00:02:08.960 --> 00:02:11.959
+Eev uses code in comments a lot,
-00:02:11.566 --> 00:02:14.120
-and also tests in comments.
+00:02:11.960 --> 00:02:15.119
+and also tests in comments...
-02:14.120 --> 00:02:16.781
-I changed my way of presenting it,
+00:02:15.120 --> 00:02:17.679
+I changed my way of presenting it
-00:02:16.782 --> 00:02:19.190
+00:02:17.680 --> 00:02:19.679
and it became very REPL-centric
-00:02:19.191 --> 00:02:22.200
-in the last few years, in the sense that
+00:02:19.680 --> 00:02:22.319
+in the last few years, in the
-02:22.200 --> 00:02:26.460
-I start by explaining its main features
+00:02:22.320 --> 00:02:24.399
+sense that I start by explaining its
-00:02:26.461 --> 00:02:29.520
-by its support for REPLs.
+00:02:24.400 --> 00:02:28.679
+main features by its support for REPLs...
-02:29.520 --> 00:02:32.078
-eev supposes that we want to keep
+00:02:28.680 --> 00:02:31.079
+eev supposes
-00:02:32.079 --> 00:02:34.560
-executable notes of everything.
+00:02:31.080 --> 00:02:32.639
+that we want to keep
-02:34.560 --> 02:37.800
-I'm also going to show examples of this in a second.
+00:02:32.640 --> 00:02:35.199
+executable notes of everything - I'm also
-02:37.800 --> 02:42.120
-eev has lots of videos for people who hate videos,
+00:02:35.200 --> 00:02:37.159
+going to show examples of this in a
-02:42.120 --> 00:02:44.270
-and it tries to do everything
+00:02:37.160 --> 00:02:40.479
+second... eev has lots of "videos for
-00:02:44.271 --> 00:02:47.640
-with very little magic and without black boxes.
+00:02:40.480 --> 00:02:43.559
+people who hate videos", and it tries to
-02:47.640 --> 02:51.360
-I'm going to explain many of these things very soon.
+00:02:43.560 --> 00:02:46.159
+do everything with very little magic and
+
+00:02:46.160 --> 00:02:48.839
+without black boxes - I'm going to explain
+
+00:02:48.840 --> 00:02:50.319
+many of these things very soon.
NOTE Another figure
-02:51.360 --> 02:58.200
-This is a figure that I'm going to show in detail soon
+00:02:50.320 --> 00:02:52.799
+This is a figure that that I'm going
+
+00:02:52.800 --> 00:02:57.119
+to show in details soon, that is
+
+00:02:57.120 --> 00:02:59.959
+about something important about Lua...
+
+00:02:59.960 --> 00:03:03.959
+the font is very bad now, so let me
+
+00:03:03.960 --> 00:03:07.559
+change the font... the figure is this one...
+
+00:03:07.560 --> 00:03:08.239
+and...
+
+00:03:08.240 --> 00:03:12.519
+what most people do when they
+
+00:03:12.520 --> 00:03:14.479
+visit a file with something
+
+00:03:14.480 --> 00:03:16.479
+interesting on it is that they just go
+
+00:03:16.480 --> 00:03:18.679
+there and they set a bookmark there, or
+
+00:03:18.680 --> 00:03:21.959
+they put the position in a register...
+
+00:03:21.960 --> 00:03:26.959
+but I prefer to keep
+
+00:03:26.960 --> 00:03:29.199
+links to everything that is interesting
+
+00:03:29.200 --> 00:03:32.119
+as elisp hyperlinks. So, for example, this is
+
+00:03:32.120 --> 00:03:35.079
+an elisp hyperlink to a file, that goes
-02:58.200 --> 03:01.640
-that is about something important about Lua.
+00:03:35.080 --> 00:03:37.599
+to this anchor here, and to this string
-03:01.640 --> 03:03.400
-Oops, the font is very bad now,
+00:03:37.600 --> 00:03:41.439
+after this anchor... this is a variant
-03:03.400 --> 03:05.200
-so let me change the font.
+00:03:41.440 --> 00:03:44.239
+that opens that file in the window
-03:05.200 --> 03:07.760
-The figure is this one.
+00:03:44.240 --> 00:03:45.479
+at the right -
-03:09.880 --> 00:03:12.935
-What most people do when they visit a file
+00:03:45.480 --> 00:03:48.879
+here... and this is
-00:03:12.936 --> 00:03:15.280
-with something interesting in it,
+00:03:48.880 --> 00:03:53.279
+a sexp that changes the font. I
-03:15.280 --> 03:18.360
-is that they just go there and they set a bookmark there,
+00:03:53.280 --> 00:03:56.679
+have a command with a very short name
-03:18.360 --> 03:22.640
-or they put the position in the register.
+00:03:56.680 --> 00:03:59.439
+that does that, but I
-03:22.640 --> 00:03:29.781
-But I prefer to keep links
+00:03:59.440 --> 00:04:02.959
+prefer to keep that as a one-liner.
-00:03:29.782 --> 00:03:30.221
-to everything that is interesting
+00:04:02.960 --> 00:04:06.919
+About the videos... we can see
-00:03:30.222 --> 00:03:30.480
-as an Elisp hyperlink.
+00:04:06.920 --> 00:04:10.079
+the list of first-class videos of eev
-03:30.480 --> 00:03:34.236
-For example, this is an Elisp hyperlink to the file
+00:04:10.080 --> 00:04:14.759
+by executing this, M-x find-1stclassvideos,
-00:03:34.237 --> 00:03:36.520
-that goes to this anchor here,
+00:04:14.760 --> 00:04:18.639
+or by running this alias here, M-x 1c...
-03:36.520 --> 03:39.280
-and to this string after this anchor.
+00:04:18.640 --> 00:04:20.679
+and then what we see is this...
-03:39.280 --> 00:03:43.388
-This is a variant that opens that file
+00:04:20.680 --> 00:04:24.239
+the first sexp here
-00:03:43.389 --> 00:03:46.760
-in the window at the right here,
+00:04:24.240 --> 00:04:26.959
+regenerates this buffer - so we can make a
-03:46.760 --> 03:53.640
-and this is a sexp that changes the font.
+00:04:26.960 --> 00:04:29.399
+mess here and then run this and the
-03:53.640 --> 03:57.880
-I have a command with a very short name that does that,
+00:04:29.400 --> 00:04:33.519
+original buffer is regenerated again in
-03:57.880 --> 04:03.680
-but I prefer to keep that as a one-liner.
+00:04:33.520 --> 00:04:34.959
+a clean way...
-04:03.680 --> 00:04:04.281
-About the videos, we can see
+00:04:34.960 --> 00:04:36.919
+each of these things here
-00:04:04.282 --> 00:04:11.440
-the list of first-class videos of eev by executing this,
+00:04:36.920 --> 00:04:40.879
+opens a buffer with information about
-04:11.440 --> 00:04:14.190
-`M-x find-1stclassvideos`,
+00:04:40.880 --> 00:04:43.999
+a video... let me take a specific
-00:04:14.191 --> 00:04:18.480
-or by running this alias here, `M-x 1c`,
+00:04:44.000 --> 00:04:49.159
+example here... this video here is about
-04:18.480 --> 04:21.160
-and then what we see is this.
+00:04:49.160 --> 00:04:51.039
+one of the ancestors of this talk, that
-04:21.160 --> 04:25.560
-The first sexp here regenerates this buffer,
+00:04:51.040 --> 00:04:53.479
+is a library that I wrote
-04:25.560 --> 04:29.120
-so we can make a mess here and then run this,
+00:04:53.480 --> 00:04:58.479
+for creating diagrams in LaTeX using
-04:29.120 --> 04:34.120
-and the original buffer is regenerated again in a clean way.
+00:04:58.480 --> 00:05:03.519
+a package called Pict2e using REPLs...
-04:34.120 --> 00:04:36.951
-Each of these things here
+00:05:03.520 --> 00:05:03.959
+anyway...
-00:04:36.952 --> 00:04:41.960
-opens a buffer with information about a video.
+00:05:03.960 --> 00:05:06.599
+the thing is that if we
-04:41.960 --> 04:45.320
-Let me take a specific example here.
+00:05:06.600 --> 00:05:11.599
+run a sexp like this one and we don't
-04:45.320 --> 00:04:50.278
-This video here is about one of the ancestors of this talk
+00:05:11.600 --> 00:05:14.679
+have a local copy of the video eev
-00:04:50.279 --> 00:04:52.800
-that is a library that I wrote
+00:05:14.680 --> 00:05:17.599
+will try to download to the local copy -
-04:52.800 --> 00:04:56.906
-for creating diagrams in LaTeX
+00:05:17.600 --> 00:05:20.119
+and instead of doing that by asking
-00:04:56.907 --> 00:05:03.000
-using a package called [pict2e-lua] using REPLs.
+00:05:20.120 --> 00:05:21.719
+something like "do you want me
-05:03.000 --> 00:05:10.028
-Anyway, the thing is that if we run a sexp like this one
+00:05:21.720 --> 00:05:23.999
+to download the local copy? Blah
-00:05:10.029 --> 00:05:16.314
-and we don't have a local copy of the video,
+00:05:24.000 --> 00:05:27.999
+blah blah blah blah..." it simply opens a
-00:05:16.315 --> 00:05:19.581
-eev will try to load the local copy
+00:05:28.000 --> 00:05:30.719
+buffer like this, I mean, if we don't
-00:05:19.582 --> 00:05:20.560
-and instead of doing that by asking something
+00:05:30.720 --> 00:05:33.359
+have a local copy yet it will open a
-05:20.560 --> 00:05:25.381
-like "do you want me to download the local copy"
+00:05:33.360 --> 00:05:36.359
+buffer like this one, in which these
-00:05:25.382 --> 00:05:29.240
-blah, blah, blah, it simply opens a buffer like this.
+00:05:36.360 --> 00:05:39.199
+things here in comments are links to the
-05:29.240 --> 00:05:35.514
-And if we don't have a local copy yet,
+00:05:39.200 --> 00:05:43.839
+documentation... I mean, this thing here
-00:05:35.515 --> 00:05:37.220
-it will open a buffer like this one,
+00:05:43.840 --> 00:05:46.159
+explains the idea of local copies
-00:05:37.221 --> 00:05:40.030
-in which these things here in comments
+00:05:46.160 --> 00:05:48.759
+of files from the internet...
-00:05:40.031 --> 00:05:42.678
-are links to the documentation.
+00:05:48.760 --> 00:05:54.759
+there are more details here, and here...
-00:05:42.679 --> 00:05:45.780
-This thing here explains the idea
+00:05:54.760 --> 00:05:57.159
+and this is a script that we
-00:05:45.781 --> 00:05:50.278
-of local copies of files from the internet.
+00:05:57.160 --> 00:06:00.519
+can execute line by line, so instead of
-00:05:50.279 --> 00:05:54.120
-There are more details here and here,
+00:06:00.520 --> 00:06:02.359
+this script being hidden behind the
-00:05:54.121 --> 00:05:59.580
-and this is a script that we can execute line by line.
+00:06:02.360 --> 00:06:06.119
+button that we just press after a
-05:59.580 --> 00:06:04.276
-So instead of this script being hidden behind the button
+00:06:06.120 --> 00:06:08.399
+question like "Do you want me to do
-00:06:04.277 --> 00:06:07.160
-that we just press after a question
+00:06:08.400 --> 00:06:10.239
+something blah blah blah? Yes or no?"
-06:07.160 --> 00:06:10.708
-like "do you want me to do something," blah, blah, blah,
+00:06:10.240 --> 00:06:13.639
+the script is visible here and we can
-00:06:10.709 --> 00:06:13.228
-"yes or no?", the script is visible here
+00:06:13.640 --> 00:06:17.599
+execute it step by step... it creates a
-00:06:13.229 --> 00:06:15.380
-and we can execute it step by step.
+00:06:17.600 --> 00:06:20.799
+terminal with a shell here in the
-06:15.380 --> 00:06:22.457
-It creates a terminal with a shell here in the right window
+00:06:20.800 --> 00:06:24.799
+right window, and when we type f8 in
-00:06:22.458 --> 00:06:26.988
-and when we type `F8` in these lines here,
+00:06:24.800 --> 00:06:26.839
+one of these lines here the lines are
-00:06:26.989 --> 00:06:30.360
-the lines are sent to this line.
+00:06:26.840 --> 00:06:29.119
+sent... (...) so this is going
-06:30.360 --> 00:06:33.842
-So this is going to download a copy of the video,
+00:06:29.120 --> 00:06:31.759
+to download a copy of the video... the
-00:06:33.843 --> 00:06:38.134
-the wget says that I already have a copy of the video
+00:06:31.760 --> 00:06:36.639
+wget says that I already have a copy of
-00:06:38.135 --> 00:06:40.360
-and its subtitles and so on.
+00:06:36.640 --> 00:06:39.479
+the video and its subtitles... and so on.
-06:40.360 --> 00:06:45.739
+00:06:39.480 --> 00:06:43.879
And after getting a copy of the video
-00:06:45.740 --> 00:06:52.960
-we can run this exp here and it displays the video.
+00:06:43.880 --> 00:06:48.159
+we can run this sexp here and it displays
+
+00:06:48.160 --> 00:06:49.919
+the video.
+
+00:06:49.920 --> 00:06:55.399
+I said that eev has lots of
+
+00:06:55.400 --> 00:06:58.399
+"videos for people who hate videos", and
+
+00:06:58.400 --> 00:06:59.679
+the idea is that very few
+
+00:06:59.680 --> 00:07:02.039
+people are going to watch the videos in
+
+00:07:02.040 --> 00:07:06.559
+real time... and most of the people that
+
+00:07:06.560 --> 00:07:08.279
+I know - or: most of the people that
+
+00:07:08.280 --> 00:07:10.639
+are interested in eev in some
+
+00:07:10.640 --> 00:07:13.479
+way... they are going to watch just
+
+00:07:13.480 --> 00:07:16.319
+small sections of the video, and most of
+
+00:07:16.320 --> 00:07:17.559
+the time they're just going to read the
+
+00:07:17.560 --> 00:07:20.799
+subtitles of the video. So, for each
+
+00:07:20.800 --> 00:07:23.479
+one of the videos we have a page
+
+00:07:23.480 --> 00:07:27.039
+about the video... let me see if I
+
+00:07:27.040 --> 00:07:29.999
+have internet here... yes. This is a
+
+00:07:30.000 --> 00:07:32.879
+page...
+
+00:07:32.880 --> 00:07:38.999
+and usually these pages have a link
+
+00:07:39.000 --> 00:07:40.759
+to another page that
+
+00:07:40.760 --> 00:07:43.239
+has all the subtitles of the
+
+00:07:43.240 --> 00:07:46.639
+video... uh, wherever... in this one
+
+00:07:46.640 --> 00:07:48.319
+it's not so visible...
+
+00:07:48.320 --> 00:07:50.599
+but anyway, there are several
-06:52.960 --> 00:06:55.486
-I said that eev has lots of videos
+00:07:50.600 --> 00:07:52.479
+ways of accessing the subtitles of the
-00:06:55.487 --> 00:06:57.435
-for people who hate videos.
+00:07:52.480 --> 00:07:56.239
+video, and one of the ways is by running
-00:06:57.436 --> 00:07:00.046
-The idea is that very few people
+00:07:56.240 --> 00:07:57.519
+this sexp here,
-00:07:00.047 --> 00:07:03.081
-are going to watch the videos in real time.
+00:07:57.520 --> 00:08:01.559
+that opens a file in Lua that is
-00:07:03.082 --> 00:07:07.642
-Most of the people that I know, or most of the people
+00:08:01.560 --> 00:08:03.319
+what I use to generate the
-00:07:07.643 --> 00:07:10.790
-that are interested in eev in some way,
+00:08:03.320 --> 00:08:04.479
+subtitles.
-00:07:10.791 --> 00:07:14.320
-they are going to watch just small sections of the video.
+00:08:04.480 --> 00:08:08.519
+Anyway... by the way, these things... each
-00:07:14.321 --> 00:07:17.574
-Most of the time, they are just going to
+00:08:08.520 --> 00:08:12.039
+one of these things here is a hyperlink
-00:07:17.575 --> 00:07:19.940
-read the subtitles of the video.
+00:08:12.040 --> 00:08:15.239
+to a position of the video, so if I type
-07:19.940 --> 00:07:22.531
-For each one of the videos
+00:08:15.240 --> 00:08:18.879
+this the right way it goes to that
-00:07:22.532 --> 00:07:25.295
-we have a page about the video...
+00:08:18.880 --> 00:08:24.119
+position. Anyway, let me go back...
-00:07:25.296 --> 00:07:29.673
-Let me see if I have internet here...
+00:08:24.120 --> 00:08:27.279
+also, the tutorials of eev... the
-00:07:29.674 --> 00:07:34.901
-This is a page. Usually these pages
+00:08:27.280 --> 00:08:31.359
+"intros" of eev, that start with "find-" and
-00:07:34.902 --> 00:07:38.427
-have a link to another page,
+00:08:31.360 --> 00:08:34.279
+end with "-intro", they have lots of blocks
-00:07:38.428 --> 00:07:43.890
-the page that has all the subtitles of the video,
+00:08:34.280 --> 00:08:39.039
+that say "[Video links:]", like this one, and
-00:07:43.891 --> 00:07:48.587
-wherever. In this one, it's not so visible.
+00:08:39.040 --> 00:08:41.359
+these blocks have links to positions
-00:07:48.588 --> 00:07:52.001
-Anyway, there are several ways of accessing
+00:08:41.360 --> 00:08:43.879
+in videos, and if we don't have a local
-00:07:52.002 --> 00:07:53.963
-the subtitles of the video.
+00:08:43.880 --> 00:08:47.919
+copy of the video yet the thing shows
-00:07:53.964 --> 00:07:58.632
-One of the ways is by running this sexp here
+00:08:47.920 --> 00:08:49.799
+us a script that lets us download the
-00:07:58.633 --> 00:08:01.064
-that opens a file in Lua.
+00:08:49.800 --> 00:08:50.599
+local copy.
-00:08:01.065 --> 00:08:05.440
-That is what I use to generate the subtitles.
+00:08:50.600 --> 00:08:54.399
+Anyway, I said that I was going
-08:05.440 --> 00:08:10.368
-By the way, each one of these things here
+00:08:54.400 --> 00:08:58.759
+to explain what I mean by "magic" and
-00:08:10.369 --> 00:08:14.680
-is hyperlinked to a position of the video.
+00:08:58.760 --> 00:08:59.639
+"black boxes".
-08:14.680 --> 00:08:21.280
-If I type this, it goes to that position.
+00:08:59.640 --> 00:09:03.119
+this is something that I've been
-00:08:21.281 --> 00:08:24.580
-Anyway, let me go back.
+00:09:03.120 --> 00:09:05.119
+trying to explain for a long time, and I
-08:24.580 --> 00:08:28.557
-So the tutorials of eev, the intros of eev
+00:09:05.120 --> 00:09:07.319
+think that I got a very good explanation
-00:08:28.558 --> 00:08:32.350
-that start with `find-` and end with `-intro`,
+00:09:07.320 --> 00:09:09.839
+about that in a video that I made
-00:08:32.351 --> 00:08:35.332
-they have lots of blocks that say
+00:09:09.840 --> 00:09:13.199
+about something called eev-wconfig, that
-00:08:35.333 --> 00:08:37.612
-video links like this one.
+00:09:13.200 --> 00:09:14.999
+is a tool for configuring eev on
-00:08:37.613 --> 00:08:41.972
-These blocks have links to positions in videos.
+00:09:15.000 --> 00:09:19.199
+Windows without "magic" - without buttons
-00:08:41.973 --> 00:08:46.332
-If we don't have a local copy of the video yet,
+00:09:19.200 --> 00:09:22.479
+that do things without explaining what
-00:08:46.333 --> 00:08:49.015
-the thing shows us a script
+00:09:22.480 --> 00:09:22.879
+they're doing.
-00:08:49.016 --> 00:08:52.560
-that lets us download the local copy.
+00:09:22.880 --> 00:09:25.799
+This is a part of the subtitles
-NOTE eev-wconfig, magic, and black boxes
+00:09:25.800 --> 00:09:28.039
+of the video, let me read that...
-08:52.560 --> 00:08:57.440
-I said that I was going to explain
+00:09:28.040 --> 00:09:32.319
+eev-wconfig is an attempt to solve the
-00:08:57.441 --> 00:09:01.855
-what I mean by magic and black boxes,
+00:09:32.320 --> 00:09:35.039
+problem of how to install these things
-00:09:01.856 --> 00:09:03.799
-this is something that I've been trying
+00:09:35.040 --> 00:09:37.279
+on Windows both without magic and with
-00:09:03.800 --> 00:09:05.111
-to explain for a long time
+00:09:37.280 --> 00:09:37.879
+very little
-00:09:05.112 --> 00:09:08.761
-and I think that I got a very good explanation about that
+00:09:37.880 --> 00:09:41.679
+magic. Remember this slogan: "any
-00:09:08.762 --> 00:09:12.348
-in a video that I made about something called eev-wconfig
+00:09:41.680 --> 00:09:44.359
+sufficiently advanced technology is
-00:09:12.349 --> 00:09:17.943
-that is a tool for configuring eev on Windows without magic,
+00:09:44.360 --> 00:09:45.399
+indistinguishable from
-00:09:17.944 --> 00:09:20.878
-without buttons that do things,
+00:09:45.400 --> 00:09:49.679
+magic". Here in this video I'm going to
-00:09:20.879 --> 00:09:24.380
-without explaining what they are doing.
+00:09:49.680 --> 00:09:52.199
+use the term magic as a shorthand
-09:24.380 --> 00:09:28.078
-This is a part of the subtitles of the video.
+00:09:52.200 --> 00:09:55.239
+for sufficiently advanced technology,
-00:09:28.079 --> 00:09:29.445
-Let me read that.
+00:09:55.240 --> 00:09:57.799
+that is something that is complex and
-00:09:29.446 --> 00:09:32.531
-eev-wconfig is an attempt to solve the problem
+00:09:57.800 --> 00:10:00.199
+non-obvious and that is
-00:09:32.532 --> 00:09:35.349
-of how to install these things on Windows
+00:10:00.200 --> 00:10:02.119
+indistinguishable from magic in the
-00:09:35.350 --> 00:09:40.040
-both without magic and with very little magic.
+00:10:02.120 --> 00:10:04.119
+sense of being almost impossible to
-09:40.040 --> 00:09:44.941
-Remember this slogan: "Any sufficiently advanced technology
+00:10:04.120 --> 00:10:07.439
+understand. And I'm also going to use a
-00:09:44.942 --> 00:09:47.600
-is indistinguishable from magic."
+00:10:07.440 --> 00:10:10.279
+the term "black box" as a near-synonym for
-09:47.600 --> 00:09:51.433
-Here in this video I'm going to use the term magic
+00:10:10.280 --> 00:10:13.079
+magic, and sometimes the term
-00:09:51.434 --> 00:09:55.262
-as a shorthand for sufficiently advanced technology
+00:10:13.080 --> 00:10:16.039
+"black box" is more convenient even though
-00:09:55.263 --> 00:09:58.944
-that is something that is complex and non obvious
+00:10:16.040 --> 00:10:17.919
+it's a bit longer - it has more
-00:09:58.945 --> 00:10:01.920
-and that is indistinguishable from magic
+00:10:17.920 --> 00:10:20.159
+letters - because when I use the term
-00:10:01.921 --> 00:10:05.840
-in the sense of being almost impossible to understand.
+00:10:20.160 --> 00:10:22.599
+black box it invites us to use
-10:05.840 --> 00:10:09.272
-And I'm also going to use the term black box
+00:10:22.600 --> 00:10:25.479
+expressions like "opening the black box",
-00:10:09.273 --> 00:10:11.408
-as a near synonym for magic
+00:10:25.480 --> 00:10:26.639
+and I'm going to use that
-00:10:11.409 --> 00:10:15.217
-and sometimes the term black box is more convenient
+00:10:26.640 --> 00:10:28.039
+expression a lot.
-00:10:15.218 --> 00:10:17.488
-even though it's a bit longer,
+00:10:28.040 --> 00:10:37.399
+Now let me try to explain what is...
-00:10:17.489 --> 00:10:21.333
-it has more letters because when I use the term black box
+00:10:37.400 --> 00:10:41.039
+sorry, let me change the font...
-00:10:21.334 --> 00:10:23.521
-it invites us to use expressions
+00:10:41.040 --> 00:10:45.479
+what is Lua. Lua is a minimalistic
-00:10:23.522 --> 00:10:27.872
-like opening the black box
+00:10:45.480 --> 00:10:49.999
+language, in the sense of
-00:10:27.873 --> 00:10:34.800
-and I'm going to use that expression a lot.
+00:10:50.000 --> 00:10:53.679
+"batteries not included"... it uses
-10:34.800 --> 00:10:40.899
-Now let me try to explain what is. Sorry,
+00:10:53.680 --> 00:10:55.999
+associative tables for most of its data
-00:10:40.900 --> 00:10:44.240
-let me change the font.
+00:10:56.000 --> 00:10:56.799
+structures...
-NOTE Lua
+00:10:56.800 --> 00:11:00.239
+and it is so minimalistic
-10:44.240 --> 10:45.240
-What is Lua?
+00:11:00.240 --> 00:11:03.999
+that its default print function, when
-10:45.240 --> 00:10:48.645
-Lua is a minimalistic language
+00:11:04.000 --> 00:11:06.679
+we tell... when we create an associative
-00:10:48.646 --> 00:10:53.040
-in the sense of battery is not included.
+00:11:06.680 --> 00:11:09.559
+table and we ask it to print...
-10:53.040 --> 00:10:57.987
-It uses associative tables for most of its data structures.
+00:11:09.560 --> 00:11:13.319
+when we ask "print" to print an
-00:10:57.988 --> 00:11:00.874
-It's so minimalistic
+00:11:13.320 --> 00:11:15.719
+associative table it just prints the
-00:11:00.875 --> 00:11:05.147
-that the default print function
+00:11:15.720 --> 00:11:17.879
+address of the table. Here are some
-00:11:05.148 --> 00:11:11.960
-when we create an associative table and we ask it to print--
+00:11:17.880 --> 00:11:21.599
+examples... here is a table, and when we
-11:11.960 --> 00:11:14.914
-we ask print to print an associative table--
+00:11:21.600 --> 00:11:24.679
+ask "print" to print it it just says
-00:11:14.915 --> 00:11:17.600
-it just prints the address of the table.
+00:11:24.680 --> 00:11:26.839
+that it's the table at this address here.
-11:17.600 --> 00:11:20.902
-Here are some examples. Here is a table
+00:11:26.840 --> 00:11:30.119
+So, one of things that that most
-00:11:20.903 --> 00:11:23.296
-and when we ask to print it,
+00:11:30.120 --> 00:11:32.919
+people do when they start using Lua is
-00:11:23.297 --> 00:11:28.200
-it just says that it's the table at this address here.
+00:11:32.920 --> 00:11:35.239
+that either they download a package with
-11:28.200 --> 00:11:30.893
-One of the things that most people do
+00:11:35.240 --> 00:11:37.079
+a pretty-printing function or they write
-00:11:30.894 --> 00:11:33.586
-when they start using Lua is that either
+00:11:37.080 --> 00:11:39.359
+their own pretty-printing functions. My
-00:11:33.587 --> 00:11:36.313
-they download a package with a print to printing function
+00:11:39.360 --> 00:11:41.519
+own pretty-printing function is called
-00:11:36.314 --> 00:11:39.520
-or they write their own print to printing functions.
+00:11:41.520 --> 00:11:46.159
+PP, with upper case letters, and it works
-11:39.520 --> 00:11:41.975
-My own print to printing function
+00:11:46.160 --> 00:11:47.679
+like this...
-00:11:41.976 --> 00:11:44.450
-is called PP with upper case letters,
+00:11:47.680 --> 00:11:50.279
+and it prints associative tables
-00:11:44.451 --> 00:11:46.757
-and it works like this.
+00:11:50.280 --> 00:11:53.839
+in a way like this. It says that for
-00:11:46.758 --> 00:11:52.072
-It prints associative tables in a way like this.
+00:11:53.840 --> 00:11:57.479
+the key 1 the the value associated to
-00:11:52.073 --> 00:11:54.125
-It says that for the key 1,
+00:11:57.480 --> 00:12:00.039
+it is 2, for the key 2 the value is
-00:11:54.126 --> 00:11:56.602
-the value associated to it is 2;
+00:12:00.040 --> 00:12:04.959
+3, and for the key 3 the value is 5.
-00:11:56.603 --> 00:11:59.078
-for the key 2, the value is 3;
+00:12:04.960 --> 00:12:11.079
+When I started using Lua one of my
-00:11:59.079 --> 00:12:09.240
-and for the key 3, the value is 5.
+00:12:11.080 --> 00:12:13.839
+favorite languages was also a language
-12:09.240 --> 00:12:12.379
-When I started using Lua, one of my favorite languages
+00:12:13.840 --> 00:12:15.639
+that used associative tables a lot -
-00:12:12.380 --> 00:12:16.623
-was also a language that used associative tables a lot.
+00:12:15.640 --> 00:12:16.839
+it was called Icon...
-00:12:16.624 --> 00:12:20.339
-It was called Icon. I had to write my own
+00:12:16.840 --> 00:12:21.039
+and I had to write my own
-00:12:20.340 --> 00:12:23.394
-print to printing functions for Icon,
+00:12:21.040 --> 00:12:23.839
+pretty-printing functions for Icon, so
-00:12:23.395 --> 00:12:29.425
-so I just had to port my print to printing functions to Lua.
+00:12:23.840 --> 00:12:27.319
+I just had to port my pretty-printing
-00:12:29.426 --> 00:12:34.350
-My first version looked something like this.
+00:12:27.320 --> 00:12:29.719
+functions to Lua... and my first
-00:12:34.351 --> 00:12:40.080
-it just had some global functions. Lots of them actually.
+00:12:29.720 --> 00:12:32.239
+version looked at something like this... it
-12:40.080 --> 00:12:41.933
-After a while, I rewrote it.
+00:12:32.240 --> 00:12:35.999
+just had some some global functions... lots
-00:12:41.934 --> 00:12:44.503
-I rewrote it again and again and again.
+00:12:36.000 --> 00:12:39.639
+of them, actually...
-00:12:44.504 --> 00:12:48.397
-This is one of the versions
+00:12:39.640 --> 00:12:42.279
+and after a while I rewrote it, and I
-00:12:48.398 --> 00:12:53.751
-that is not even the default at this point.
+00:12:42.280 --> 00:12:44.599
+rewrote it again, and again, and again, and
-00:12:53.752 --> 00:12:57.702
-`tos` is for to string. This is a demo.
+00:12:44.600 --> 00:12:47.279
+this is one of the versions of that,
-00:12:57.703 --> 00:13:02.905
-It's very modular, so it's easy to replace parts of it
+00:12:47.280 --> 00:12:49.879
+is not even the default at this
-00:13:02.906 --> 00:13:06.567
-or to toggle flags. This is an example.
+00:12:49.880 --> 00:12:51.559
+point...
-00:13:06.568 --> 00:13:11.797
-If I try to print the table of methods for a certain class--
+00:12:51.560 --> 00:12:54.119
+"Tos" is for "to string"...
-00:13:11.798 --> 00:13:16.245
-I only need a smaller font--it prints the table like this
+00:12:54.120 --> 00:12:58.279
+and this is a demo...
-00:13:16.246 --> 00:13:18.510
-with the names of the methods
+00:12:58.280 --> 00:13:01.919
+it's very modular, so it's easy to replace
-00:13:18.511 --> 00:13:22.360
-and then links to the source code of the functions.
+00:13:01.920 --> 00:13:05.639
+parts of it, or to toggle flags... and this
-13:22.360 --> 00:13:26.671
-These links only make sense in Emacs and in eev.
+00:13:05.640 --> 00:13:08.119
+is an example. If I try to print the
-00:13:26.672 --> 00:13:30.296
-When we run a link like this one,
+00:13:08.120 --> 00:13:09.999
+table of methods for a certain
-00:13:30.297 --> 00:13:34.013
-it shows the source code and the window at the right.
+00:13:10.000 --> 00:13:14.359
+class... I will need a smaller font...
-00:13:34.014 --> 00:13:38.647
-For some functions, the source code is three lines.
+00:13:14.360 --> 00:13:16.799
+it prints the table like this, with the
-00:13:38.648 --> 00:13:42.320
-For other ones, it's one line and whatever.
+00:13:16.800 --> 00:13:20.039
+names of the methods and then links to
-13:42.320 --> 00:13:44.149
-Anyway, let me go back.
+00:13:20.040 --> 00:13:21.719
+the source code of the functions...
-00:13:44.150 --> 00:13:47.490
-Lua can be used in many different styles.
+00:13:21.720 --> 00:13:25.399
+these links only make sense in Emacs and
-00:13:47.491 --> 00:13:52.240
-Most people hate other people's styles.
+00:13:25.400 --> 00:13:25.959
+in eev...
-13:52.240 --> 00:13:55.252
-When I started using it in the year 2000,
+00:13:25.960 --> 00:13:30.359
+and when we run a link like this one...
-00:13:55.253 --> 00:13:59.566
-I learned most of the basic language in a single day.
+00:13:30.360 --> 00:13:32.039
+it shows the source code in the
-00:13:59.567 --> 00:14:04.042
-It was very similar to things that I was already using.
+00:13:32.040 --> 00:13:35.079
+window at the right. So, for some
-00:14:04.043 --> 00:14:08.388
-Then I rewrote the mini language
+00:13:35.080 --> 00:13:37.879
+functions the source code is three lines,
-00:14:08.389 --> 00:14:15.200
-that I was using to generate the HTML for my pages in Lua.
+00:13:37.880 --> 00:13:39.999
+for other ones it's one line... and
-14:15.200 --> 00:14:17.591
-Actually, I had to rewrite it many times
+00:13:40.000 --> 00:13:44.879
+whatever. Anyway, let me go
-00:14:17.592 --> 00:14:21.367
-but the first version I certainly did
+00:13:44.880 --> 00:13:47.039
+back... Lua can be used in many different
-00:14:21.368 --> 00:14:25.740
-in my first weeks or first months using Lua.
+00:13:47.040 --> 00:13:50.359
+styles... most people hate other people's
-14:25.740 --> 00:14:29.653
-In the beginning, I was just using it for writing programs
+00:13:50.360 --> 00:13:53.839
+styles... when I started using it in the
-00:14:29.654 --> 00:14:32.876
-that either didn't take any input at all
+00:13:53.840 --> 00:13:57.679
+year 2000 I learned most of the basic
-00:14:32.877 --> 00:14:36.727
-because the input was already in the source file,
+00:13:57.680 --> 00:13:59.839
+language in a single day - it was very
-00:14:36.728 --> 00:14:39.400
-or that worked as a Unix function:
+00:13:59.840 --> 00:14:02.119
+similar to things that I was already
-14:39.400 --> 00:14:42.451
-the Unix programs that would read files,
+00:14:02.120 --> 00:14:05.639
+using... and then I rewrote the the mini-
-00:14:42.452 --> 00:14:49.560
-process these files in some way, and output something.
+00:14:05.640 --> 00:14:10.279
+language that I was using to
-14:49.560 --> 00:14:52.200
-I mentioned the basic language here,
+00:14:10.280 --> 00:14:13.559
+generate the HTML for my pages
-00:14:52.201 --> 00:14:55.625
-I only learned how to use closures, meta tables,
+00:14:13.560 --> 00:14:16.199
+in Lua... actually I had to rewrite it
-00:14:55.626 --> 00:15:00.600
-and coroutines many years later.
+00:14:16.200 --> 00:14:18.079
+many times, but the first version I
-15:00.600 --> 00:15:02.588
-In the beginning when I started using Lua
+00:14:18.080 --> 00:14:21.519
+certainly did in my first weeks or first
-00:15:02.589 --> 00:15:04.199
-it didn't have a package manager.
+00:14:21.520 --> 00:14:22.519
+months using Lua...
-00:15:04.200 --> 00:15:08.299
-It appeared later. It is called luarocks.
+00:14:22.520 --> 00:14:27.279
+In the beginning I was just using
-00:15:08.300 --> 00:15:13.180
-It has had this package manager for several years.
+00:14:27.280 --> 00:14:30.159
+it for writing programs that either
-15:13.180 --> 00:15:17.242
-Most of the rocks for luarocks are poorly documented
+00:14:30.160 --> 00:14:32.759
+didn't take any input at all - because
-00:15:17.243 --> 00:15:18.897
-and hacker-unfriendly.
+00:14:32.760 --> 00:14:35.079
+the input was already in the source file -
-00:15:18.898 --> 00:15:22.079
-You can't rely just on the documentation.
+00:14:35.080 --> 00:14:40.599
+or that worked as Unix programs,
-00:15:22.080 --> 00:15:25.188
-You can't rely just on the source code,
+00:14:40.600 --> 00:14:43.199
+that would read files
-00:15:25.189 --> 00:15:28.706
-because--I mean, if you're a genius, of course you can,
+00:14:43.200 --> 00:14:45.279
+and process these files in some way
-00:15:28.707 --> 00:15:31.544
-but for people who are either
+00:14:45.280 --> 00:14:48.999
+and output something.
-00:15:31.545 --> 00:15:35.895
-lazy or dumb or whatever like me, or unfocused,
+00:14:49.000 --> 00:14:52.319
+I mentioned the "basic language" here...
-00:15:35.896 --> 00:15:39.490
-the source code is hard to understand
+00:14:52.320 --> 00:14:54.719
+I only learned how to use closures,
-00:15:39.491 --> 00:15:41.760
-and hard to tinker with.
+00:14:54.720 --> 00:14:58.479
+metatables, and coroutines many years later...
-15:41.760 --> 00:15:43.760
-Some rocks are excellent.
+00:14:58.480 --> 00:15:02.399
+in the beginning, when I started using Lua,
-00:15:43.761 --> 00:15:46.452
-The best rocks are well documented,
+00:15:02.400 --> 00:15:04.199
+it didn't have a package manager...
-00:15:46.453 --> 00:15:48.760
+00:15:04.200 --> 00:15:06.799
+it appeared later, it is called
+
+00:15:06.800 --> 00:15:10.119
+Luarocks... it has had this package
+
+00:15:10.120 --> 00:15:13.279
+manager for several years, most
+
+00:15:13.280 --> 00:15:15.719
+of the rocks for Luarocks are poorly
+
+00:15:15.720 --> 00:15:18.959
+documented and hacker-unfriendly,
+
+00:15:18.960 --> 00:15:21.199
+so you can't rely just on the
+
+00:15:21.200 --> 00:15:23.679
+documentation and you can't rely just on the
+
+00:15:23.680 --> 00:15:26.719
+source code, because, I mean... if you are
+
+00:15:26.720 --> 00:15:29.159
+a genius of course you can, but for
+
+00:15:29.160 --> 00:15:31.479
+people who are either lazy, or dumb, or
+
+00:15:31.480 --> 00:15:34.279
+whatever, like me, or unfocused...
+
+00:15:34.280 --> 00:15:36.759
+the source code is hard to
+
+00:15:36.760 --> 00:15:38.959
+understand and hard to tinker with.
+
+00:15:38.960 --> 00:15:43.319
+Some rocks are excellent. The
+
+00:15:43.320 --> 00:15:46.599
+best rocks are well documented
+
+00:15:46.600 --> 00:15:48.719
but they are hacker-unfriendly
-15:48.760 --> 15:53.640
-in the sense that I hope that I'll be able to explain soon.
+00:15:48.720 --> 00:15:50.999
+in a sense that I hope that
+
+00:15:51.000 --> 00:15:52.879
+I'll be able to explain soon.
+
+00:15:52.880 --> 00:15:54.999
+The best rocks use local
-15:53.640 --> 00:15:59.466
-The best rocks use local variables and meta tables a lot,
+00:15:55.000 --> 00:15:58.799
+variables and metatables a lot -
-00:15:59.467 --> 00:16:02.905
-so if you are a beginner learning Lua
+00:15:58.800 --> 00:16:02.519
+so if you are beginner
-00:16:02.906 --> 00:16:08.245
-you're not going to understand what their source codes do.
+00:16:02.520 --> 00:16:03.799
+learning Lua you're not going to
-00:16:08.246 --> 00:16:10.960
-They use lots of dirty tricks.
+00:16:03.800 --> 00:16:06.159
+understand what their source code do...
+
+00:16:06.160 --> 00:16:08.519
+they use lots of dirty tricks.
NOTE Object orientation in Lua
-16:10.960 --> 16:14.360
-Let me talk a bit about object orientation in Lua.
+00:16:08.520 --> 00:16:12.479
+Let me talk a bit about object
+
+00:16:12.480 --> 00:16:14.959
+orientation in Lua. It can be done in
+
+00:16:14.960 --> 00:16:15.879
+many ways...
+
+00:16:15.880 --> 00:16:18.999
+the main book about Lua, called
+
+00:16:19.000 --> 00:16:21.439
+"Programming in Lua", by one of the authors
-16:14.360 --> 00:16:18.275
-It can be done in many ways. The main book about Lua
+00:16:21.440 --> 00:16:23.959
+of the language, Roberto Ierusalimschy,
-00:16:18.276 --> 00:16:20.140
-called Programming in Lua
+00:16:23.960 --> 00:16:26.679
+presents several ways of doing
-00:16:20.141 --> 00:16:22.865
-by one of the authors of the language
+00:16:26.680 --> 00:16:29.279
+object orientation in Lua... I hated all
-00:16:22.866 --> 00:16:24.729
-called Roberto Ierusalimschy
+00:16:29.280 --> 00:16:33.199
+of these ways - and also the ways that I
-00:16:24.730 --> 00:16:28.680
-presents several ways of doing object orientation in Lua.
+00:16:33.200 --> 00:16:34.519
+tried from the rocks.
-16:28.680 --> 00:16:31.386
-I hated all of these ways,
+00:16:34.520 --> 00:16:38.559
+And then I wrote my own way
-00:16:31.387 --> 00:16:36.056
-and also the ways that I tried from the rocks.
+00:16:38.560 --> 00:16:40.639
+of doing object orientation in Lua... it's
-00:16:36.057 --> 00:16:37.933
-Then I wrote my own way
+00:16:40.640 --> 00:16:43.559
+very minimalistic, it's in this file here,
-00:16:37.934 --> 00:16:40.347
-of doing object orientation in Lua.
+00:16:43.560 --> 00:16:48.679
+eoo.lua... the main code is just this five
-00:16:40.348 --> 00:16:45.653
-It's very minimalistic. It's in this file here eoo.lua.
+00:16:48.680 --> 00:16:49.639
+lines here...
-00:16:45.654 --> 00:16:49.898
-The main code is just these five lines here.
+00:16:49.640 --> 00:16:53.439
+and here's an example of how it works.
-00:16:49.899 --> 00:16:56.400
-Here's an example of how it works.
+00:16:53.440 --> 00:16:58.439
+Here we define the class Vector,
-16:56.400 --> 00:17:03.001
-We define a class vector with some meta methods.
+00:16:58.440 --> 00:17:02.719
+with some metamethods...
-00:17:03.002 --> 00:17:06.294
-This meta method here will tell Lua
+00:17:02.720 --> 00:17:05.959
+this metamethod here will tell Lua
-00:17:06.295 --> 00:17:10.867
-what to do when the user asks to add two vectors.
+00:17:05.960 --> 00:17:08.319
+what to do when the
-00:17:10.868 --> 00:17:13.986
-This one here tells Lua what to do
+00:17:08.320 --> 00:17:12.639
+user asks to add two vectors, this one
-00:17:13.987 --> 00:17:18.888
-when the user asks Lua to convert a vector to a string
+00:17:12.640 --> 00:17:15.919
+here tells Lua what to do when the user
-00:17:18.889 --> 00:17:22.007
-and whatever. This one is something
+00:17:15.920 --> 00:17:18.479
+asks Lua to convert a vector to a string,
-00:17:22.008 --> 00:17:25.580
-that I'm going to explain in a second.
+00:17:18.480 --> 00:17:21.439
+and... whatever, this one is
-17:25.580 --> 00:17:25.580
-Here we create a vector
+00:17:21.440 --> 00:17:24.039
+something that I'm going to explain in a
-00:17:25.580 --> 00:17:25.580
-with these coordinates 3 and 4.
+00:17:24.040 --> 00:17:27.479
+second. So, here we create a vector with
-00:17:25.581 --> 00:17:25.580
-Here we create another vector.
+00:17:27.480 --> 00:17:30.279
+these coordinates, 3 and 4... here we create
-17:31.600 --> 00:17:33.030
-If we print here,
+00:17:30.280 --> 00:17:33.319
+another Vector... if we "print" here then Lua
-00:17:33.031 --> 00:17:37.153
-then Lua uses the function here in the `__tostring`.
+00:17:33.320 --> 00:17:36.439
+uses this function here, in the __tostring...
-00:17:37.154 --> 00:17:38.907
-If we add two vectors
+00:17:36.440 --> 00:17:39.759
+if we add the two vectors it uses this
-00:17:38.908 --> 00:17:42.653
-it uses the function here in the `__add` meta method.
+00:17:39.760 --> 00:17:43.479
+function here, in the __add metamethod, and
-00:17:42.654 --> 00:17:45.044
-If we run the method `norm`,
+00:17:43.480 --> 00:17:45.359
+if we run the method :norm...
-00:17:45.045 --> 00:17:51.680
-it is defined here in the table index.
+00:17:45.360 --> 00:17:49.959
+it is defined here, in the table __index.
-17:51.680 --> 00:17:57.675
-Anyway, even with this thing being so small,
+00:17:49.960 --> 00:17:57.999
+Anyway...
-00:17:57.676 --> 00:18:04.617
-I used to forget how it works all the time.
+00:17:58.000 --> 00:18:02.439
+Even this thing being so small I used
-00:18:04.618 --> 00:18:08.200
-Actually, I always forget how things work,
+00:18:02.440 --> 00:18:04.719
+to forget how its innards worked all
-00:18:08.201 --> 00:18:11.347
-and I have to remember them somehow.
+00:18:04.720 --> 00:18:08.119
+the time. Actually I always forget how
-00:18:11.348 --> 00:18:14.920
-I have to have tricks for remembering,
+00:18:08.120 --> 00:18:09.759
+things work and I have to remember them
-00:18:14.921 --> 00:18:19.769
-and tricks for summarizing things and diagrams, and so on.
+00:18:09.760 --> 00:18:12.479
+somehow... and I have to have
-00:18:19.770 --> 00:18:23.309
-Every time that I forgot how this thing worked,
+00:18:12.480 --> 00:18:15.959
+tricks for remembering, and tricks for
-00:18:23.310 --> 00:18:25.460
-I went back to the source code
+00:18:15.960 --> 00:18:18.719
+summarizing things, and diagrams, and so
-00:18:25.461 --> 00:18:28.148
-and then I looked at the diagrams,
+00:18:18.720 --> 00:18:22.199
+on. And every time that I forgot how this
-00:18:28.149 --> 00:18:30.994
-or, of course, the first time,
+00:18:22.200 --> 00:18:24.799
+thing worked I went back to the
-00:18:30.995 --> 00:18:33.800
-I had to draw the diagrams. I run the examples.
+00:18:24.800 --> 00:18:26.879
+source code, and then I looked at the
-00:18:33.801 --> 00:18:35.539
-Of course, in the beginning
+00:18:26.880 --> 00:18:29.039
+diagrams... or, of course, in the
-00:18:35.540 --> 00:18:37.503
-I thought that the code was clear.
+00:18:29.040 --> 00:18:31.719
+first times I had to draw the diagrams...
-00:18:37.504 --> 00:18:39.737
-My examples were very brief.
+00:18:31.720 --> 00:18:35.239
+and I run the examples, and of course in
-00:18:39.738 --> 00:18:43.565
-So I had to rewrite the examples many times
+00:18:35.240 --> 00:18:36.479
+in the beginning I thought that the code
-00:18:43.566 --> 00:18:50.880
-until they became let's say perfect.
+00:18:36.480 --> 00:18:39.119
+was clear and my examples were very
-18:50.880 --> 00:18:54.090
-I was saying that Lua can be used in many ways
+00:18:39.120 --> 00:18:41.559
+brief, and so I had to rewrite the
-00:18:54.091 --> 00:18:58.403
-and in my way of using Lua, in my favorite way,
+00:18:41.560 --> 00:18:44.719
+examples many times until they became,
-00:18:58.404 --> 00:19:03.075
-everything can be inspected and modified from REPLs
+00:18:44.720 --> 00:18:45.639
+let's say...
-00:19:03.076 --> 00:19:06.817
-like we can do in Emacs and in SmallTalk, sort of.
+00:18:45.640 --> 00:18:47.759
+perfect.
-00:19:06.818 --> 00:19:09.436
-In my favorite way of using Lua
+00:18:47.760 --> 00:18:52.599
+I was saying that Lua can be used in
-00:19:09.437 --> 00:19:11.531
-there's no security at all.
+00:18:52.600 --> 00:18:56.359
+many ways, and in my way of using Lua - in
-00:19:11.532 --> 00:19:17.460
-Everything can be changed at all times.
+00:18:56.360 --> 00:18:59.439
+my favorite way - everything can be
-19:17.460 --> 00:19:19.822
-Of course, most people hate that.
+00:18:59.440 --> 00:19:02.159
+inspected and modified from REPLs,
+
+00:19:02.160 --> 00:19:06.319
+like we can do in Emacs and in SmallTalk,
+
+00:19:06.320 --> 00:19:08.519
+or sort of. So, in my
+
+00:19:08.520 --> 00:19:10.239
+favorite way of using Lua there's no
+
+00:19:10.240 --> 00:19:12.679
+security at all, everything can be
+
+00:19:12.680 --> 00:19:14.919
+changed at all times.
+
+00:19:14.920 --> 00:19:19.119
+Of course most people hate that...
NOTE My init file
-00:19:19.823 --> 00:19:22.185
-My init file has lots of classes,
+00:19:19.120 --> 00:19:22.599
+My init file has lots of classes... by the
-00:19:22.186 --> 00:19:24.701
-and by the way, instead of
+00:19:22.600 --> 00:19:26.079
+way, instead of keeping many small files
-00:19:24.702 --> 00:19:28.636
-keeping many small files with many things,
+00:19:26.080 --> 00:19:29.639
+with many things I put lots of stuff
-00:19:28.637 --> 00:19:33.000
-I put lots of stuff in just one big init file.
+00:19:29.640 --> 00:19:31.279
+in just one big init file.
-19:33.000 --> 00:19:35.520
+00:19:31.280 --> 00:19:34.599
My init file has lots of classes,
-00:19:35.521 --> 00:19:39.187
-and lots of global functions and lots of cruft,
+00:19:34.600 --> 00:19:37.959
+and lots of global functions, and
+
+00:19:37.960 --> 00:19:41.799
+lots of cruft - and people hate that,
+
+00:19:41.800 --> 00:19:44.559
+of course. This is an example...
+
+00:19:44.560 --> 00:19:46.439
+this is the index at the top
+
+00:19:46.440 --> 00:19:48.359
+of my init file,
-00:19:39.188 --> 00:19:43.700
-so people hate that, of course.
+00:19:48.360 --> 00:19:53.119
+the classes start here, and then
-19:43.700 --> 00:19:46.340
-This is an example.
+00:19:53.120 --> 00:19:59.119
+we have some functions, and
-00:19:46.341 --> 00:19:52.415
-This is the index at the top of my init file.
+00:19:59.120 --> 00:20:01.199
+then we have functions that load
-00:19:52.416 --> 00:19:57.541
-The classes start here. Then we have some functions
+00:20:01.200 --> 00:20:03.839
+certain packages, and then we have... cruft.
-00:19:57.542 --> 00:20:02.480
-and then we have functions that load certain packages,
+00:20:03.840 --> 00:20:04.919
+Whatever.
-20:02.480 --> 20:06.580
-and then we have cruft, whatever.
+00:20:04.920 --> 00:20:08.119
+Most people think that my style
-20:06.580 --> 00:20:08.923
-Most people think that my style of using Lua
+00:20:08.120 --> 00:20:10.279
+of using Lua is dirty, and dangerous...
-00:20:08.924 --> 00:20:10.122
-is dirty and dangerous,
+00:20:10.280 --> 00:20:12.959
+and they wouldn't touch my Lua code
-00:20:10.123 --> 00:20:14.287
-and they wouldn't touch my Lua code with a 10 feet pole,
+00:20:12.960 --> 00:20:15.479
+with a 10 feet pole... but most of the
-00:20:14.288 --> 00:20:15.968
-but most of the things
+00:20:15.480 --> 00:20:18.599
+things that I'm going to present here in
-00:20:15.969 --> 00:20:19.256
-that I'm going to present here in this presentation
+00:20:18.600 --> 00:20:23.199
+this presentation are ideas that should
-00:20:19.257 --> 00:20:23.050
-are ideas that should be easy to port to other environments
+00:20:23.200 --> 00:20:28.159
+be easy to port to other environments
-00:20:23.051 --> 00:20:27.738
-and other languages, especially the diagrams,
+00:20:28.160 --> 00:20:32.279
+and other languages, especially the
-00:20:27.739 --> 00:20:31.000
-so the code is not so important.
+00:20:32.280 --> 00:20:35.279
+diagrams... so the code is not so important.
NOTE LaTeX and LuaLaTeX
-20:31.000 --> 00:20:34.640
-Now let me talk a bit about LaTeX, LuaLaTeX,
+00:20:35.280 --> 00:20:39.039
+Now let me talk a bit about LuaLaTeX,
+
+00:20:39.040 --> 00:20:41.359
+that is LaTeX with a Lua interpreter
+
+00:20:41.360 --> 00:20:44.559
+embedded inside, and two ways
+
+00:20:44.560 --> 00:20:48.839
+of generating pictures in LaTeX: TikZ,
+
+00:20:48.840 --> 00:20:54.439
+that is very famous, and Pict2e, that is not
+
+00:20:54.440 --> 00:20:57.359
+very famous and that is very low level...
+
+00:20:57.360 --> 00:21:02.359
+and I think that not many people use it.
+
+00:21:02.360 --> 00:21:04.119
+I said before that when I
+
+00:21:04.120 --> 00:21:06.919
+learned Lua I realized that it was
+
+00:21:06.920 --> 00:21:09.199
+very good for writing little
+
+00:21:09.200 --> 00:21:14.919
+languages. I was doing my PhD at the
+
+00:21:14.920 --> 00:21:19.839
+time and typesetting the diagrams for
-00:20:34.641 --> 00:20:39.249
-that is LaTeX with the Lua interpreter embedded inside
+00:21:19.840 --> 00:21:24.039
+my PhD thesis was very boring, so
-00:20:39.250 --> 00:20:43.182
-and two ways of generating pictures in LaTeX:
+00:21:24.040 --> 00:21:29.879
+one of the things that I did was that I
-00:20:43.183 --> 00:20:45.115
-TikZ that is very famous,
+00:21:29.880 --> 00:21:34.439
+created a little language for typesetting
-00:20:45.116 --> 00:20:48.311
-and Pict2e that is not very famous
+00:21:34.440 --> 00:21:36.359
+the diagrams for me. it was
-00:20:48.312 --> 00:20:50.644
-and that is very low level,
+00:21:36.360 --> 00:21:38.879
+called Dednat because initially
-00:20:50.645 --> 00:20:53.840
-and I think that not many people use.
+00:21:38.880 --> 00:21:41.039
+it only generated diagrams for
-20:53.840 --> 00:20:57.048
-I said before that when I learned Lua,
+00:21:41.040 --> 00:21:43.759
+Natural Deduction, and then it had
-00:20:57.049 --> 00:21:00.354
-I realized that it was very good
+00:21:43.760 --> 00:21:45.119
+several versions...
-00:21:00.355 --> 00:21:03.360
-for writing literal languages.
+00:21:45.120 --> 00:21:46.679
+these are the slides for my
-21:03.360 --> 00:21:05.986
-I was doing my PhD at the time
+00:21:46.680 --> 00:21:52.159
+presentation about Dednat6... "Dednat6 is
-00:21:05.987 --> 00:21:09.969
-and typesetting the diagrams for my PhD thesis
+00:21:52.160 --> 00:21:56.159
+an extensible semi-preprocessor for
-00:21:09.970 --> 00:21:11.240
-was very boring.
+00:21:56.160 --> 00:22:01.159
+LuaLaTeX that understands diagrams in
-21:11.240 --> 00:21:13.864
-One of the things that I did was that
+00:22:01.160 --> 00:22:05.359
+ASCII art"... in the sense that when I have
-00:21:13.865 --> 00:21:15.720
-I created a literal language
+00:22:05.360 --> 00:22:11.399
+a .tex file that has this, and when
-00:21:15.721 --> 00:21:19.340
-for typesetting the diagrams for me.
+00:22:11.400 --> 00:22:13.279
+Dednat6 is loaded,
-21:19.340 --> 00:21:22.821
-It was called Dednat because initially
+00:22:13.280 --> 00:22:15.039
+when I give the right commands
-00:21:22.822 --> 00:21:26.800
-it only generated diagrams for natural deduction
+00:22:15.040 --> 00:22:19.559
+Dednat6 interprets this block here as
-21:26.800 --> 21:30.440
-and then it had several versions.
+00:22:19.560 --> 00:22:22.559
+something that defines this
-21:30.440 --> 00:21:34.379
-These are the slides from my presentation about Dednat6
+00:22:22.560 --> 00:22:28.239
+diagram... oops, sorry, it interprets this
-00:21:34.380 --> 00:21:38.990
-and Dednat6 is an extensible semi preprocessor
+00:22:28.240 --> 00:22:30.599
+diagram here, this diagram in
-00:21:38.991 --> 00:21:43.691
-for LuaLaTeX that understands diagrams in ASCII art
+00:22:30.600 --> 00:22:34.879
+comments here, as something that defines
-00:21:43.692 --> 00:21:49.034
-in the sense that when I have a TeX file that has this,
+00:22:34.880 --> 00:22:39.759
+a diagram called foo... a deduction called
-00:21:49.035 --> 00:21:52.143
-and when Dednat6 is loaded,
+00:22:39.760 --> 00:22:41.439
+foo, and it generates this code here...
-00:21:52.144 --> 00:21:55.708
-when I get the right comments,
+00:22:41.440 --> 00:22:44.239
+so that we can just invoke
-00:21:55.709 --> 00:22:00.342
-Dednat6 interprets this block here
+00:22:44.240 --> 00:22:45.519
+the definition of the
-00:22:00.343 --> 00:22:05.095
-as something that defines this diagram.
+00:22:45.520 --> 00:22:47.719
+deduction by typing \ded{foo}.
-00:22:05.096 --> 00:22:07.828
-It interprets this diagram here,
+00:22:47.720 --> 00:22:50.759
+And Dednat6 also
-00:22:07.829 --> 00:22:10.643
-this diagram in the comments here,
+00:22:50.760 --> 00:22:57.159
+supports another language for typesetting
-00:22:10.644 --> 00:22:16.432
-as something that defines a diagram called `foo`,
+00:22:57.160 --> 00:22:59.639
+bidimensional diagrams with
-00:22:16.433 --> 00:22:23.064
-a deduction called `foo`, and it generates this code here
+00:22:59.640 --> 00:23:05.399
+arrows and stuff for category Theory and
-00:22:23.065 --> 00:22:28.867
-so that we can just invoke the definition of the deduction
+00:23:05.400 --> 00:23:08.519
+blah blah blah... the specifications of
-00:22:28.868 --> 00:22:31.720
-by typing `\ded{foo}`.
+00:23:08.520 --> 00:23:12.039
+these diagrams look like this...
-22:31.720 --> 00:22:36.148
-Dednat6 also supports another language
+00:23:12.040 --> 00:23:14.559
+here is a... sorry, here is a very good
-00:22:36.149 --> 00:22:40.579
-for typesetting bidimensional diagrams with arrows and stuff
+00:23:14.560 --> 00:23:16.719
+example, this is a huge diagram...
-00:22:40.580 --> 00:22:43.122
-for category theory and blah blah.
+00:23:16.720 --> 00:23:18.599
+sorry, one second...
-00:22:43.123 --> 00:22:46.100
-The specifications of these diagrams
+00:23:18.600 --> 00:23:20.399
+so, the source code that generates
-22:46.100 --> 00:22:53.865
-look like this. Here is a very good example.
+00:23:20.400 --> 00:23:25.119
+this diagram here is just this thing at
-00:22:53.866 --> 00:23:00.940
-This is a huge diagram. Sorry, one second.
+00:23:25.120 --> 00:23:32.039
+the left, so it's very visual... we can
-23:00.940 --> 00:23:04.757
-So the source code that generates this diagram here
+00:23:32.040 --> 00:23:35.679
+typeset the diagram in ASCII art here and
-00:23:04.758 --> 00:23:08.628
-is just this thing at the left. It's very visual.
+00:23:35.680 --> 00:23:38.759
+then in this part here we tell how
-00:23:08.629 --> 00:23:11.842
-We can typeset the diagram in ASCII art here.
+00:23:38.760 --> 00:23:41.279
+the nodes are to be joined, which
-00:23:11.843 --> 00:23:14.434
-Then in this part here,
+00:23:41.280 --> 00:23:43.799
+arrows have to to have annotations, and
-00:23:14.435 --> 00:23:18.273
-we tell how the nodes are to be joined,
+00:23:43.800 --> 00:23:45.039
+so on...
-00:23:18.274 --> 00:23:22.880
-which arrows have to have annotations, and so on.
+00:23:45.040 --> 00:23:46.799
+and this language is extensible in
-23:22.880 --> 00:23:30.950
-This language is extensible in the sense that
+00:23:46.800 --> 00:23:48.679
+the sense that... uh, where's that...
-00:23:30.951 --> 00:23:37.280
-here, comments that start
+00:23:48.680 --> 00:23:52.559
+here: comments that start with "%:"
-23:37.280 --> 00:23:42.690
-with `%:` are interpreted as definitions
+00:23:52.560 --> 00:23:54.119
+are interpreted as
-00:23:42.691 --> 00:23:44.819
-for tree diagrams,
+00:23:54.120 --> 00:23:56.079
+definitions for tree diagrams,
-00:23:44.820 --> 00:23:49.394
-lines that start with `%D`
+00:23:56.080 --> 00:23:58.559
+lines that start with "%D"
-00:23:49.395 --> 00:23:53.761
-define 2D diagrams with arrows and stuff,
+00:23:58.560 --> 00:24:00.639
+define 2D diagrams with arrows and
-00:23:53.762 --> 00:23:57.683
-and lines that start with command `%L`
+00:24:00.640 --> 00:24:04.279
+stuff, and lines that start with "%L"
-00:23:57.684 --> 00:24:01.197
-contain blocks of Lua code that we can use
+00:24:04.280 --> 00:24:06.759
+contain blocks of Lua code
-00:24:01.198 --> 00:24:05.527
-to extend the interpreter on the flag.
+00:24:06.760 --> 00:24:09.479
+that we can use to extend the interpreter
-00:24:05.528 --> 00:24:09.746
-Anyway, here are some recent examples
+00:24:09.480 --> 00:24:10.439
+on-the-fly...
-00:24:09.747 --> 00:24:16.146
-of diagrams that I used Dednat6 to typeset.
+00:24:10.440 --> 00:24:12.679
+anyway, here are some recent
-00:24:16.147 --> 00:24:24.494
-This diagram here was generated by this specification here,
+00:24:12.680 --> 00:24:15.319
+examples of diagrams that I used
-00:24:24.495 --> 00:24:30.619
-and this diagram here with the curved arrows
+00:24:15.320 --> 00:24:19.839
+Dednat6 to typeset... this diagram
-00:24:30.620 --> 00:24:36.200
-was generated by this specification here.
+00:24:19.840 --> 00:24:21.919
+here was generated by this
-24:36.200 --> 00:24:39.174
-Dednat6 was very easy to extend.
+00:24:21.920 --> 00:24:22.879
+specification here...
-00:24:39.175 --> 00:24:43.043
-At some point I started to use it to generate diagrams
+00:24:22.880 --> 00:24:27.239
+and this diagram here with the
-00:24:43.044 --> 00:24:46.067
-using Pict2e, mainly for the classes
+00:24:27.240 --> 00:24:30.719
+curved arrows was generated by this
-00:24:46.068 --> 00:24:49.673
-that I give at the university,
+00:24:30.720 --> 00:24:32.719
+specification here.
-00:24:49.674 --> 00:24:53.861
-I teach mathematics in a place.
+00:24:32.720 --> 00:24:39.079
+So, Dednat6 was very easy to extend,
-00:24:53.862 --> 00:24:58.979
-Let me show an animation. Here is a diagram
+00:24:39.080 --> 00:24:41.879
+and at some point I started to use it
-00:24:58.980 --> 00:25:02.325
-that I generated with Dednat6.
+00:24:41.880 --> 00:24:44.679
+to generate diagrams using Pict2e -
-00:25:02.326 --> 00:25:05.385
-It is a flipbook animation,
+00:24:44.680 --> 00:24:47.359
+mainly for the classes that I give
-00:25:05.386 --> 00:25:08.253
-we type page up and page down,
+00:24:47.360 --> 00:24:50.079
+at the University... I teach mathematics and
-00:25:08.254 --> 00:25:10.783
-and we go to the next page of the book
+00:24:50.080 --> 00:24:57.239
+whatever... in a bad place. Whatever...
-00:25:10.784 --> 00:25:13.248
-and to the previous page of the book.
+00:24:57.240 --> 00:25:00.039
+Let me show an animation... here is a
-00:25:13.249 --> 00:25:16.924
-Here is the source code that generates that.
+00:25:00.040 --> 00:25:02.479
+diagram that I generated with Dednat6,
-00:25:16.925 --> 00:25:19.700
-This source code is not very visual,
+00:25:02.480 --> 00:25:06.319
+and it is a flip book animation, like... we
-00:25:19.701 --> 00:25:21.800
-so it's quite clumsy to edit
+00:25:06.320 --> 00:25:09.279
+type PgUp and PgDn and we go
-25:21.800 --> 25:28.280
-a diagram directly in the TeX file like that.
+00:25:09.280 --> 00:25:11.119
+to the next page of the book and to the
+
+00:25:11.120 --> 00:25:12.439
+previous page of the book...
+
+00:25:12.440 --> 00:25:16.279
+and here is the source code that generates
+
+00:25:16.280 --> 00:25:19.159
+that. This source code is not very visual,
+
+00:25:19.160 --> 00:25:22.559
+so it's quite clumsy to edit that
+
+00:25:22.560 --> 00:25:27.519
+diagram directly in the .tex file like
+
+00:25:27.520 --> 00:25:28.079
+that...
NOTE Manim
-25:28.280 --> 00:25:33.437
-These diagrams were inspired by something called Manim.
+00:25:28.080 --> 00:25:30.199
+These diagrams were inspired
-00:25:33.438 --> 00:25:36.713
-I've forgotten the name of the guy, but it's a guy
+00:25:30.200 --> 00:25:33.039
+by something called my Manim, that...
-00:25:36.714 --> 00:25:39.346
-that makes many videos about mathematics,
+00:25:33.040 --> 00:25:37.559
+I forgot the name of the guy, but
-00:25:39.347 --> 00:25:43.373
-and he created this library called Manim
+00:25:37.560 --> 00:25:41.479
+it's a guy that makes many videos about
-00:25:43.374 --> 00:25:46.417
-for generating his animations.
+00:25:41.480 --> 00:25:44.839
+Mathematics, and he created this library
-00:25:46.418 --> 00:25:52.083
-Other people adapted his library to make it more accessible.
+00:25:44.840 --> 00:25:48.599
+called Manim for generating his
-00:25:52.084 --> 00:25:55.799
-I tried to learn it, but each animation,
+00:25:48.600 --> 00:25:51.839
+animations, and other people adapted
-00:25:55.800 --> 00:25:59.191
-even an animation with very few frames,
+00:25:51.840 --> 00:25:55.919
+his library to make it more accessible...
-00:25:59.192 --> 00:26:03.770
-each animation took ages to render, so it wasn't fun.
+00:25:55.920 --> 00:25:59.359
+I tried to learn it, but
-00:26:03.771 --> 00:26:08.345
-Animations and PDFs can be rendered in seconds,
+00:25:59.360 --> 00:26:01.199
+each animation, even an animation
-00:26:08.346 --> 00:26:11.160
-so these things were fun for me
+00:26:01.200 --> 00:26:03.679
+that has very few frames... each
-00:26:11.161 --> 00:26:17.440
-because my laptop is very slow and Manim was not fun.
+00:26:03.680 --> 00:26:07.319
+animation took ages to render, so it
-26:17.440 --> 00:26:24.263
-Anyway, writing code like this inside a TeX file
+00:26:07.320 --> 00:26:11.159
+wasn't fun... and animations in PDFs can
-00:26:24.264 --> 00:26:30.879
-was not very fun because it was hard to debug.
+00:26:11.160 --> 00:26:13.639
+be rendered in seconds. So these
+
+00:26:13.640 --> 00:26:18.679
+things were fun for me, because my laptop
+
+00:26:18.680 --> 00:26:24.359
+is very very slow, and my Manim was not fun.
NOTE Generating diagrams from REPLs
-00:26:30.880 --> 00:26:36.510
-In 2022, I started to play with ways
+00:26:24.360 --> 00:26:27.359
+Anyway, writing code like this
+
+00:26:27.360 --> 00:26:32.719
+inside a .tex file was not very
+
+00:26:32.720 --> 00:26:35.519
+fun because it was hard to
+
+00:26:35.520 --> 00:26:38.719
+debug... so in 2022 I started to play
-00:26:36.511 --> 00:26:42.000
-of generating these diagrams from REPLs
+00:26:38.720 --> 00:26:41.319
+with ways of generating these
-26:42.000 --> 00:26:46.309
-and I found a way for Pict2e and a way for Tikz.
+00:26:41.320 --> 00:26:43.839
+diagrams from REPLs, and I found a
-00:26:46.310 --> 00:26:49.520
-Each one of these ways became a video.
+00:26:43.840 --> 00:26:47.319
+way for Pict2e and a way for TikZ...
-26:49.520 --> 00:26:53.220
-If you go to the list of first class videos of eev,
+00:26:47.320 --> 00:26:50.159
+each one of these ways became a video...
-00:26:53.221 --> 00:26:55.088
-you're going to see
+00:26:50.160 --> 00:26:53.679
+if you go to the list of first-class
-00:26:55.089 --> 00:26:59.010
+00:26:53.680 --> 00:26:57.719
+videos of eev you're going to see
+
+00:26:57.720 --> 00:26:59.919
that there's a video about Pict2e here
-00:26:59.011 --> 00:27:01.158
-and a video about Tikz.
+00:26:59.920 --> 00:27:03.399
+here and a video about TikZ...
+
+00:27:03.400 --> 00:27:05.759
+here you have some some information
+
+00:27:05.760 --> 00:27:09.839
+like length, an explanation, etc...
+
+00:27:09.840 --> 00:27:11.719
+and here are the pages for these videos.
+
+00:27:11.720 --> 00:27:15.999
+My page about the video about Pict2e
+
+00:27:16.000 --> 00:27:20.079
+looks like this, it has some diagrams...
+
+00:27:20.080 --> 00:27:23.919
+whatever... and this one is much
+
+00:27:23.920 --> 00:27:26.679
+nicer, and a lot of people
+
+00:27:26.680 --> 00:27:30.599
+watched that video... I mean, I think
+
+00:27:30.600 --> 00:27:33.719
+that 250 people watched it - for me that's
+
+00:27:33.720 --> 00:27:35.599
+a million of people...
-00:27:01.159 --> 00:27:04.187
-Here you have some information
+00:27:35.600 --> 00:27:39.159
+and this video is about how to
-00:27:04.188 --> 00:27:07.508
-like length and explanation, etc.
+00:27:39.160 --> 00:27:44.079
+extract diagrams from the manual... from
-00:27:07.509 --> 00:27:11.513
-Here are the pages for these videos.
+00:27:44.080 --> 00:27:46.599
+the TikZ manual and how to run those
-00:27:11.514 --> 00:27:15.991
-My page about the video about Pict2e is like this.
+00:27:46.600 --> 00:27:49.759
+examples in a REPL and modify
-00:27:15.992 --> 00:27:20.800
-It has some diagrams. This one is much nicer.
+00:27:49.760 --> 00:27:53.159
+them bit by bit... this is a a
-27:20.800 --> 00:27:26.605
-A lot of people watched that video. I mean,
+00:27:53.160 --> 00:27:57.439
+screenshot... but let me go back.
-00:27:26.606 --> 00:27:31.080
-I thought that 250 people watched it.
+00:27:57.440 --> 00:28:00.959
+At that point these things were just
-27:31.080 --> 00:27:35.344
-For me, that's a million of people.
+00:28:00.960 --> 00:28:03.239
+prototypes, the code was not very nice...
-00:27:35.345 --> 00:27:40.402
-This video is about how to extract diagrams
+00:28:03.240 --> 00:28:07.519
+and in this year I wrote... I was able
-00:27:40.403 --> 00:27:46.512
-from the Tikz manual, and how to run those examples in REPL
+00:28:07.520 --> 00:28:12.399
+to unify those two ways of generating PDFs,
-00:27:46.513 --> 00:27:52.936
-and modify them bit by bit. This is a screenshot.
+00:28:12.400 --> 00:28:16.039
+the one for TikZ and the one for Pict2e,
-00:27:52.937 --> 00:27:57.432
-Let me go back. At that point,
+00:28:16.040 --> 00:28:18.719
+and I unified them with many other
-00:27:57.433 --> 00:28:01.800
-these things were just prototypes,
+00:28:18.720 --> 00:28:20.879
+things that generated diagrams.
-28:01.800 --> 00:28:04.803
-the code was not very nice,
+00:28:20.880 --> 00:28:24.279
+The basis of these things is
-00:28:04.804 --> 00:28:07.592
-and in this year I wrote...
+00:28:24.280 --> 00:28:29.319
+something called Show2.lua... I'm not going
-00:28:07.593 --> 00:28:12.123
-I was able to unify those two ways of generating PDFs,
+00:28:29.320 --> 00:28:35.759
+to show its details now, but its
-00:28:12.124 --> 00:28:15.665
-the one for Tikz and the one for Pict2e.
+00:28:35.760 --> 00:28:39.079
+extension that generates TikZ code
-00:28:15.666 --> 00:28:19.196
-I unified them with many other things
+00:28:39.080 --> 00:28:43.039
+is just this, so we can specify a
-00:28:19.197 --> 00:28:21.298
-that generated diagrams.
+00:28:43.040 --> 00:28:45.799
+diagram with just a block like this,
-00:28:21.299 --> 00:28:28.430
-The basis of these things is something called Show2.lua.
+00:28:45.800 --> 00:28:49.079
+and then uh if we
-00:28:28.431 --> 00:28:33.935
-I'm not going to just show its details now,
+00:28:49.080 --> 00:28:54.239
+run :show00() it returns a string
-00:28:33.936 --> 00:28:38.775
-but it's an extension that generates Tikz code.
+00:28:54.240 --> 00:28:56.199
+that is just the body... the inner
-00:28:38.776 --> 00:28:43.305
-It's just this. We can specify a diagram
+00:28:56.200 --> 00:29:00.279
+body of the .tex file, if we run this we
-00:28:43.306 --> 00:28:50.538
-with just a block like this, and then if we run `show00`,
+00:29:00.280 --> 00:29:02.999
+see the whole .tex file, and if we run
-00:28:50.539 --> 00:28:53.694
-it returns a string
+00:29:03.000 --> 00:29:05.119
+this we save the .tex file and we
-00:28:53.695 --> 00:28:59.480
-that is just the inner body of the TeX file.
+00:29:05.120 --> 00:29:08.119
+compile the .tex file to generate a PDF...
-28:59.480 --> 00:29:02.306
-If we run this, we see the whole TeX file.
+00:29:08.120 --> 00:29:10.959
+and if we run this we show the PDF in
-00:29:02.307 --> 00:29:05.200
-If we run this we save the TeX file and
+00:29:10.960 --> 00:29:14.239
+the lower right window.
-29:05.200 --> 00:29:09.196
-we compile the TeX file to generate a PDF.
+00:29:14.240 --> 00:29:17.759
+And that's the same thing for all
-00:29:09.197 --> 00:29:12.557
-If we run this, we show the PDF
+00:29:17.760 --> 00:29:20.199
+my recent programs that generate
-00:29:12.558 --> 00:29:15.078
-in the lower right window.
+00:29:20.200 --> 00:29:22.439
+PDFs - they are all
-00:29:15.079 --> 00:29:20.026
-That's the same thing for all my recent programs
+00:29:22.440 --> 00:29:26.199
+integrated... here is the one that...
-00:29:20.027 --> 00:29:23.810
-that generate PDFs. They are all integrated.
+00:29:26.200 --> 00:29:29.359
+the basis for all my modules that generate
-00:29:23.811 --> 00:29:28.267
-Here is the basis for all my modules
+00:29:29.360 --> 00:29:30.719
+diagrams with Pict2e...
-00:29:28.268 --> 00:29:31.423
-that generate diagrams with Pict2e.
+00:29:30.720 --> 00:29:34.879
+its demos are not very interesting,
-00:29:31.424 --> 00:29:34.337
-Its demos are not very interesting.
+00:29:34.880 --> 00:29:36.799
+so let me show some demos of
-00:29:34.338 --> 00:29:38.556
-Let me show some demos of extensions
+00:29:36.800 --> 00:29:39.759
+extensions that do interesting things...
-00:29:38.557 --> 00:29:43.723
-that do interesting things. This is a diagram
+00:29:39.760 --> 00:29:45.319
+so, this is a diagram that I created
-00:29:43.724 --> 00:29:47.901
-that I created by editing it in a REPL,
+00:29:45.320 --> 00:29:47.479
+by editing it in a REPL...
-00:29:47.902 --> 00:29:51.871
-I create several Pict objects here.
+00:29:47.480 --> 00:29:51.279
+I create several Pict objects here...
-00:29:51.872 --> 00:29:57.818
-If I execute this, it compiles the object and
+00:29:51.280 --> 00:29:54.479
+and if I execute this it
-00:29:57.819 --> 00:30:04.523
-generates a PDF. If I tap this, here is the PDF.
+00:29:54.480 --> 00:29:59.959
+compiles an object, generates a PDF, and
-00:30:04.524 --> 00:30:10.919
-If I just ask Lua to display what is pux here,
+00:29:59.960 --> 00:30:04.759
+if I tap this... here is the PDF.
-00:30:10.920 --> 00:30:17.435
-it shows the source code in Pict2e of the diagram.
+00:30:04.760 --> 00:30:07.599
+And if I just ask Lua to
-00:30:17.436 --> 00:30:20.932
-The nice thing is that it is indented,
+00:30:07.600 --> 00:30:10.079
+display what is "pux", here,
-00:30:20.933 --> 00:30:24.348
-so it's easy to debug the Pict2e code.
+00:30:10.080 --> 00:30:15.719
+it shows the source code in Pict2e
-00:30:24.349 --> 00:30:28.504
-If anyone is interested, the module that does the tricks
+00:30:15.720 --> 00:30:17.999
+of the diagram... and the
-00:30:28.505 --> 00:30:31.947
-for indentation is very easy to understand.
+00:30:18.000 --> 00:30:20.959
+nice thing is that it is indented, so
-00:30:31.948 --> 00:30:34.920
+00:30:20.960 --> 00:30:23.599
+it's easy to debug the Pict2e code.
+
+00:30:23.600 --> 00:30:25.919
+If anyone is interested the
+
+00:30:25.920 --> 00:30:28.639
+module that does the tricks for
+
+00:30:28.640 --> 00:30:31.879
+indentation is very easy to understand...
+
+00:30:31.880 --> 00:30:35.959
it has lots of tests and test blocks,
-00:30:34.921 --> 00:30:47.438
-and I think that its data structures are easy to understand.
+00:30:35.960 --> 00:30:38.599
+and I think that its data
+
+00:30:38.600 --> 00:30:42.079
+structures are easy to understand.
+
+00:30:42.080 --> 00:30:44.359
+Anyway... here is another
-00:30:47.439 --> 00:30:57.904
-Anyway, here is another example, the show is here.
+00:30:44.360 --> 00:30:51.359
+example. The :show() is
-00:30:57.905 --> 00:31:03.240
-It generates a 3D diagram.
+00:30:51.360 --> 00:30:56.439
+here... it generates a 3D diagram.
NOTE Parsers
-31:03.240 --> 00:31:05.897
-Now let me talk about parsers
+00:30:56.440 --> 00:31:06.279
+Now let me talk about parsers and
-00:31:05.898 --> 00:31:08.997
-and REPLs in a very strange place.
+00:31:06.280 --> 00:31:09.559
+REPLs in VERY strange places... I mean,
-00:31:08.998 --> 00:31:15.148
-I mean, using REPLs to build parsers step by step
+00:31:09.560 --> 00:31:13.359
+using REPLs to build parsers step by step
-00:31:15.149 --> 00:31:20.438
-and replacing parts by more complex parts.
+00:31:13.360 --> 00:31:17.959
+and" replacing parts by more complex
-00:31:20.439 --> 00:31:24.492
-I said that Lua is very minimalistic,
+00:31:17.960 --> 00:31:23.039
+parts. So, I said that Lua is very
-00:31:24.493 --> 00:31:26.964
-and everybody knows that
+00:31:23.040 --> 00:31:28.279
+minimalistic, and everybody knows that
-00:31:26.965 --> 00:31:30.720
+00:31:28.280 --> 00:31:30.759
implementations of regular expressions
-31:30.720 --> 00:31:33.973
-are big and complex. So instead of coming
+00:31:30.760 --> 00:31:32.479
+are big and complex..
+
+00:31:32.480 --> 00:31:34.679
+so, instead of coming with
+
+00:31:34.680 --> 00:31:37.439
+full regular expressions Lua comes with
+
+00:31:37.440 --> 00:31:39.879
+something called "patterns" and a
+
+00:31:39.880 --> 00:31:43.839
+library function called "string.match".
+
+00:31:43.840 --> 00:31:44.599
+Here is
+
+00:31:44.600 --> 00:31:50.319
+a copy of the part of the manual that
+
+00:31:50.320 --> 00:31:53.399
+explains the syntax... a part of the
+
+00:31:53.400 --> 00:31:57.159
+syntax of of patterns... here's how
+
+00:31:57.160 --> 00:31:59.279
+string.match is described in the
+
+00:31:59.280 --> 00:32:03.199
+manual - it's just this... "looks for
+
+00:32:03.200 --> 00:32:05.359
+the first match of pattern in the string
+
+00:32:05.360 --> 00:32:08.039
+as blah blah blah"... and then we have to
+
+00:32:08.040 --> 00:32:10.159
+go to the other section of the menual
+
+00:32:10.160 --> 00:32:11.479
+that explains patterns.
+
+00:32:11.480 --> 00:32:20.079
+Lua patterns are so simple,
+
+00:32:20.080 --> 00:32:23.159
+so limited, that they don't even
-00:31:33.974 --> 00:31:36.375
-with full regular expressions,
+00:32:23.160 --> 00:32:26.519
+have the the alternation operator...
-00:31:36.376 --> 00:31:41.320
-Lua comes with something called patterns
+00:32:26.520 --> 00:32:29.759
+here is how it is described in the
-00:31:41.321 --> 00:31:46.627
-and a library function called string.match.
+00:32:29.760 --> 00:32:31.599
+elisp manual -
-00:31:46.628 --> 00:31:50.820
-Here is a copy of the part of the manual
+00:32:31.600 --> 00:32:36.039
+backslash-pipe specifies
-00:31:50.821 --> 00:31:55.728
-that explains a part of the syntax of patterns.
+00:32:36.040 --> 00:32:40.359
+an alternative, blah blah blah.
-00:31:55.729 --> 00:32:00.090
-Here's how string.match is described in the manual.
+00:32:40.360 --> 00:32:42.879
+When we want to to build more
-00:32:00.091 --> 00:32:04.536
-It's just this: looks for the first match of pattern
+00:32:42.880 --> 00:32:45.319
+complex... regular expressions,
-00:32:04.537 --> 00:32:06.545
-in the string s, blah blah blah.
+00:32:45.320 --> 00:32:49.199
+patterns, grammars, etc... we have to use
-00:32:06.546 --> 00:32:10.076
-Then we have to go to the other section of the manual
+00:32:49.200 --> 00:32:52.679
+an external library for that... no,
-00:32:10.077 --> 00:32:18.197
-that explains patterns. Lua patterns are so simple,
+00:32:52.680 --> 00:32:56.279
+sorry, a library that is external
-00:32:18.198 --> 00:32:23.221
-so limited, that they don't even have
+00:32:56.280 --> 00:32:58.239
+but that was written by one of the
-00:32:23.222 --> 00:32:26.658
-the alternation operator.
+00:32:58.240 --> 00:33:00.879
+authors of Lua itself. This library
-00:32:26.659 --> 00:32:33.135
-Here is how it is described in the elisp manual,
+00:33:00.880 --> 00:33:05.879
+is called Lpeg, and its manual says...
-00:32:33.136 --> 00:32:39.677
-`\|` specifies an alternative, blah blah blah.
+00:33:05.880 --> 00:33:09.599
+"Lpeg is a new pattern matching library for
-00:32:39.678 --> 00:32:45.880
-When we want to build more complex regular expressions,
+00:33:09.600 --> 00:33:12.039
+Lua based on Parsing Expression Grammars
-32:45.880 --> 00:32:48.365
-patterns, grammars, etc.,
+00:33:12.040 --> 00:33:18.759
+(PEGs)". The manual is very terse, I
-00:32:48.366 --> 00:32:52.668
-we have to use an external library for that.
+00:33:18.760 --> 00:33:21.559
+found it incredibly hard to read... it
-00:32:52.669 --> 00:32:56.207
-No, sorry, a library that is external,
+00:33:21.560 --> 00:33:25.439
+doesn't have any diagrams - it has some
-00:32:56.208 --> 00:33:01.471
-but that was written by one of the authors of Lua itself.
+00:33:25.440 --> 00:33:29.759
+examples, though... and the Lua Wiki
-00:33:01.472 --> 00:33:03.943
-This library is called Lpeg.
+00:33:29.760 --> 00:33:33.879
+has a big page called Lpeg Tutorial
-00:33:03.944 --> 00:33:06.330
-Its manual says Lpeg is
+00:33:33.880 --> 00:33:35.359
+with lots of examples...
-00:33:06.331 --> 00:33:09.653
-a new pattern matching library for Lua
+00:33:35.360 --> 00:33:38.879
+but it it also doesn't have
-00:33:09.654 --> 00:33:14.772
-based on parsing expression grammars (PEGs).
+00:33:38.880 --> 00:33:41.199
+diagrams and I found some things
-00:33:14.773 --> 00:33:17.780
-The manual is very terse.
+00:33:41.200 --> 00:33:42.719
+incredibly hard to understand.
-00:33:17.781 --> 00:33:21.945
-I found it incredibly hard to read.
+00:33:42.720 --> 00:33:45.879
+For example, this is something that is in
-00:33:21.946 --> 00:33:25.415
-it doesn't have any diagrams.
+00:33:45.880 --> 00:33:48.879
+the the manual of Lpeg that I saw and I
-00:33:25.416 --> 00:33:28.769
-It has some examples, though.
+00:33:48.880 --> 00:33:51.639
+thought: "Wow, great! This makes all sense
-00:33:28.770 --> 00:33:34.016
-The Lua wiki has a big page called Lpeg Tutorial
+00:33:51.640 --> 00:33:53.159
+and is going to be very useful!"...
-00:33:34.017 --> 00:33:39.560
-with lots of examples, but it also doesn't have diagrams.
+00:33:53.160 --> 00:33:54.199
+it's a way to to build
-33:39.560 --> 00:33:43.131
-I found some things incredibly hard to understand.
+00:33:54.200 --> 00:33:57.199
+grammars that can be recursive,
-00:33:43.132 --> 00:33:45.080
-For example, this is something
+00:33:57.200 --> 00:34:01.359
+and they sort of can encode BNF
-33:45.080 --> 00:33:48.061
-that is in the manual of Lpeg that I saw,
+00:34:01.360 --> 00:34:03.439
+grammars... we just have to translate the
-00:33:48.062 --> 00:33:51.480
-and I thought, wow, great, this makes all sense
+00:34:03.440 --> 00:34:06.479
+BNF a bit to get rid of some
-33:51.480 --> 00:33:53.946
-and this is going to be very useful.
+00:34:06.480 --> 00:34:08.079
+recursions and to translate them to
-00:33:53.947 --> 00:33:57.280
-It's a way to build grammars that can be recursive
+00:34:08.080 --> 00:34:08.999
+something else.
-33:57.280 --> 00:34:01.300
-and they sort of can encode BNF grammars,
+00:34:09.000 --> 00:34:11.919
+And the manual also has some things
-00:34:01.301 --> 00:34:05.128
-we just have to translate the BNF a bit
+00:34:11.920 --> 00:34:15.159
+that I thought: "Oh, no! I don't have any
-00:34:05.129 --> 00:34:07.592
-to get rid of some recursions
+00:34:15.160 --> 00:34:18.359
+idea of what this thing does"... and in fact
-00:34:07.593 --> 00:34:10.959
-and to translate them to something else.
+00:34:18.360 --> 00:34:20.399
+I saw these things for the first
-00:34:10.960 --> 00:34:14.337
-The manual also has some things that I thought,
+00:34:20.400 --> 00:34:22.359
+time more than 10 years ago and they
-00:34:14.338 --> 00:34:17.845
-oh no, I don't have any idea of what this thing does.
+00:34:22.360 --> 00:34:26.079
+only started to make sense one year ago.
-00:34:17.846 --> 00:34:20.768
-In fact, I saw these things for the first time
+00:34:26.080 --> 00:34:30.519
+One example is group captures.
-00:34:20.769 --> 00:34:27.294
-more than 10 years ago, and they only started to make sense
+00:34:30.520 --> 00:34:36.359
+Lpeg also comes with a
-00:34:27.295 --> 00:34:32.272
-one year ago. One example is group captures.
+00:34:36.360 --> 00:34:38.719
+module called the Re module... let me
-00:34:32.273 --> 00:34:37.834
-Lpeg also comes with a module called the re module.
+00:34:38.720 --> 00:34:41.719
+pronounce as it in Portuguese - the Re
-00:34:37.835 --> 00:34:43.182
-Let me pronounce it in Portuguese, the re module.
+00:34:41.720 --> 00:34:45.759
+module... its manual says: "The Re
-00:34:43.183 --> 00:34:45.741
-Its manual says the re module
+00:34:45.760 --> 00:34:48.199
+module (provided by the file re.lua in the
-00:34:45.742 --> 00:34:49.503
-provided by the file re.lua in the distribution
+00:34:48.200 --> 00:34:51.159
+distribution) supports a somewhat conventional
-00:34:49.504 --> 00:34:56.757
-supports some odd conventional regular expression syntax
+00:34:51.160 --> 00:34:56.239
+regular expression syntax for pattern usage
-00:34:56.758 --> 00:35:04.520
-for pattern usage within lpeg. This is a quick reference.
+00:34:56.240 --> 00:34:58.679
+within lpeg"... and
-35:04.520 --> 00:35:08.464
-This thing is very brief. It has some nice examples,
+00:34:58.680 --> 00:35:03.519
+this is a quick reference... this
-00:35:08.465 --> 00:35:11.120
-but it's hard to understand anyway.
+00:35:03.520 --> 00:35:06.319
+thing is very brief, it has some nice
-35:11.120 --> 00:35:14.180
-Here are some comments about
+00:35:06.320 --> 00:35:08.919
+examples but it's hard to understand anyway...
-00:35:14.181 --> 00:35:18.631
-my attempts to learn re.lua. This is a class.
+00:35:08.920 --> 00:35:13.199
+and here are some comments about
-00:35:18.632 --> 00:35:22.361
-In this case, it's a very small class.
+00:35:13.200 --> 00:35:17.279
+my attempts to learn Re.lua. This is
-00:35:22.362 --> 00:35:26.091
-This file implements a `pm` method.
+00:35:17.280 --> 00:35:20.639
+a class... in this case it's a very small
-00:35:26.092 --> 00:35:31.400
-I'm going to show examples of other `pm` methods very soon.
+00:35:20.640 --> 00:35:24.839
+class... this file implements a :pm()
-00:35:31.401 --> 00:35:34.696
-So this is a `pm` method for re.lua
+00:35:24.840 --> 00:35:28.679
+method - I'm going to show examples of
-00:35:34.697 --> 00:35:40.301
-that lets us compare the syntax of lua patterns, lpeg,
+00:35:28.680 --> 00:35:32.239
+other :pm() methods very soon - so, this is
-00:35:40.302 --> 00:35:46.631
-and re. See this example here. If we run this,
+00:35:32.240 --> 00:35:35.799
+a :pm() method for Re.lua that lets us
-00:35:46.632 --> 00:35:51.379
-it loads my version of lpeg, no sorry,
+00:35:35.800 --> 00:35:38.719
+compare the syntax of Lua patterns, Lpeg,
-00:35:51.380 --> 00:35:56.013
-my version of lpegrex. It shows that
+00:35:38.720 --> 00:35:43.999
+and Re... let's see this example here... so,
-00:35:56.014 --> 00:36:01.552
-when we apply the `pm` method to this Lua pattern,
+00:35:44.000 --> 00:35:47.319
+if we run this it loads my version of
-00:36:01.553 --> 00:36:05.960
-this lpeg pattern, and this re pattern,
+00:35:47.320 --> 00:35:52.799
+lpeg... no, sorry, my version of lpegrex...
-36:05.960 --> 00:36:08.238
-they all give the same results.
+00:35:52.800 --> 00:35:57.119
+and it shows that when we apply
-00:36:08.239 --> 00:36:11.512
-So we can use this kind of thing here to show
+00:35:57.120 --> 00:36:01.199
+the :pm() method to this Lua pattern, this
-00:36:11.513 --> 00:36:15.588
-how to translate from Lua patterns that are familiar
+00:36:01.200 --> 00:36:04.879
+lpeg pattern, and this Re pattern
-00:36:15.589 --> 00:36:19.280
-because they are similar to regular expressions,
+00:36:04.880 --> 00:36:07.999
+they all give the same results. So we can
-36:19.280 --> 00:36:25.251
-only weaker, to lpeg that is super weird,
+00:36:08.000 --> 00:36:10.799
+use this thing... this kind of thing here
-00:36:25.252 --> 00:36:30.084
-and to re that is not so weird.
+00:36:10.800 --> 00:36:14.119
+to show how to translate from Lua
-00:36:30.085 --> 00:36:35.425
-Anyway, the comment says that in 2012, I had a project
+00:36:14.120 --> 00:36:16.519
+patterns, that are familiar because
-00:36:35.426 --> 00:36:38.590
-that needed a precedence parser
+00:36:16.520 --> 00:36:18.519
+they're similar to regular expressions,
-00:36:38.591 --> 00:36:42.277
-that could parse arithmetical expressions
+00:36:18.520 --> 00:36:20.199
+only weaker...
-00:36:42.278 --> 00:36:46.314
-with the right precedences. At that point
+00:36:20.200 --> 00:36:24.799
+to lpeg, that is super weird
-00:36:46.315 --> 00:36:49.031
-I was still struggling with pure lpeg
+00:36:24.800 --> 00:36:27.759
+and to Re, that is not so weird.
-00:36:49.032 --> 00:36:51.318
-and I couldn't do much with it,
+00:36:27.760 --> 00:36:35.159
+Anyway, the comment says that in 2012
-00:36:51.319 --> 00:36:54.576
-so I tried to learn re.lua instead,
+00:36:35.160 --> 00:36:37.519
+I had a project that needed a
-00:36:54.577 --> 00:36:59.291
-and I wrote this old class here that allowed me to use
+00:36:37.520 --> 00:36:40.479
+precedence passer that could parse
-00:36:59.292 --> 00:37:01.755
-a preprocessor on patterns for Lua.
+00:36:40.480 --> 00:36:43.239
+arithmetical expressions with the right
-00:37:01.756 --> 00:37:04.834
-The thing is that with this preprocessor
+00:36:43.240 --> 00:36:46.639
+precedences... and at that point I was
-00:37:04.835 --> 00:37:10.920
-I could specify precedence grammars using this thing here
+00:36:46.640 --> 00:36:49.919
+still struggling with pure lpeg, and I
-00:37:10.921 --> 00:37:14.488
-that worked but was super clumsy,
+00:36:49.920 --> 00:36:52.359
+couldn't do much with it, so I tried to
-00:37:14.489 --> 00:37:18.160
-and I gave up after a few attempts.
+00:36:52.360 --> 00:36:55.519
+learn Re.lua instead, and I wrote this old
-37:18.160 --> 00:37:25.632
-And in 2022 I heard about something called lpegrex
+00:36:55.520 --> 00:36:56.319
+class here...
-00:37:25.633 --> 00:37:30.760
-that was a kind of extension of re,
+00:36:56.320 --> 00:37:01.039
+that allowed me to use a preprocessor
-37:30.760 --> 00:37:33.045
+00:37:01.040 --> 00:37:03.279
+on patterns for Lua. And the thing is that
+
+00:37:03.280 --> 00:37:04.879
+with this preprocessor I could
+
+00:37:04.880 --> 00:37:07.839
+specify precedence grammars using this
+
+00:37:07.840 --> 00:37:11.879
+thing here, that worked, but was super
+
+00:37:11.880 --> 00:37:15.999
+clumsy... and I gave up after a few attempts.
+
+00:37:16.000 --> 00:37:21.879
+and in 2022 I heard about something
+
+00:37:21.880 --> 00:37:23.239
+called lpegrex,
+
+00:37:23.240 --> 00:37:29.799
+that was a... a kind of extension or Re,
+
+00:37:29.800 --> 00:37:32.879
and it was much more powerful than re.lua,
-00:37:33.046 --> 00:37:35.784
-but after a while I realized that
+00:37:32.880 --> 00:37:34.919
+but after a while I realized that it
+
+00:37:34.920 --> 00:37:37.639
+had the same defects as re.lua...
+
+00:37:37.640 --> 00:37:40.839
+and let me explain that, because
+
+00:37:40.840 --> 00:37:44.439
+it has all to do with the things about
+
+00:37:44.440 --> 00:37:48.039
+black boxes and magic that I told in the
+
+00:37:48.040 --> 00:37:52.919
+beginning. Both... I mean, sorry, neither
+
+00:37:52.920 --> 00:37:57.199
+re.lua or lpegrex had some features that
+
+00:37:57.200 --> 00:38:00.799
+I needed... they didn't let us explore...
+
+00:38:00.800 --> 00:38:03.679
+sorry, they received a pattern that was
+
+00:38:03.680 --> 00:38:06.839
+specified as a string, and it converted
+
+00:38:06.840 --> 00:38:09.679
+that into an lpeg pattern, but it didn't
+
+00:38:09.680 --> 00:38:12.559
+let us explore the the lpeg patterns
+
+00:38:12.560 --> 00:38:15.159
+that it generated...
+
+00:38:15.160 --> 00:38:18.759
+their code was written in a way
+
+00:38:18.760 --> 00:38:21.319
+that was REPL-unfriendly - I
-00:37:35.785 --> 00:37:38.765
-it had the same defects as re.lua.
+00:38:21.320 --> 00:38:24.279
+couldn't modify parts of the code
-00:37:38.766 --> 00:37:40.698
-Let me explain that,
+00:38:24.280 --> 00:38:28.399
+bit by bit in a REPL and try to change
-00:37:40.699 --> 00:37:43.920
-because it has all to do with the things
+00:38:28.400 --> 00:38:31.719
+the code without changing the
-37:43.920 --> 00:37:52.026
-about black boxes and magic that I told in the beginning.
+00:38:31.720 --> 00:38:34.199
+original file... the code was very
-00:37:52.027 --> 00:37:59.046
-Neither re.lua or lpegrex had some features that I needed.
+00:38:34.200 --> 00:38:36.839
+hard to explore, to hack, and to extend -
-00:37:59.047 --> 00:38:05.374
-They received a pattern that was specified as a string
+00:38:36.840 --> 00:38:39.159
+in my opinion... the documentation was not
-00:38:05.375 --> 00:38:08.868
-and it converted that into an lpeg pattern,
+00:38:39.160 --> 00:38:43.319
+very clear... and I sent one or two messages
-00:38:08.869 --> 00:38:12.520
-but it didn't let us explore the lpeg patterns
+00:38:43.320 --> 00:38:47.159
+to the the developer of lpegrex and...
-38:12.520 --> 00:38:14.529
-that it generated.
+00:38:47.160 --> 00:38:50.759
+he was too busy to help me. He
-00:38:14.530 --> 00:38:20.662
-Their code was written in a way that was REPL-unfriendly.
+00:38:50.760 --> 00:38:53.959
+answered it very briefly, and, uh, to be
-00:38:20.663 --> 00:38:26.281
-I couldn't modify parts of the code bit by bit in a REPL
+00:38:53.960 --> 00:38:56.599
+honest I felt... rejected. I felt that I
-00:38:26.282 --> 00:38:28.943
-and try to change the code
+00:38:56.600 --> 00:38:58.679
+wasn't doing anything interesting...
-00:38:28.944 --> 00:38:32.035
-without changing the original file, say.
+00:38:58.680 --> 00:39:03.399
+whatever, whatever...
-00:38:32.036 --> 00:38:35.353
-The code was very hard to explore, to hack,
+00:39:03.400 --> 00:39:09.239
+So, in 2022 I was trying to learn lpegrex
-00:38:35.354 --> 00:38:38.238
-and to extend in my opinion.
+00:39:09.240 --> 00:39:11.559
+because I was thinking that it would
-00:38:38.239 --> 00:38:42.018
-The documentation was not very clear,
+00:39:11.560 --> 00:39:13.719
+solve my problems - but it didn't...
-00:38:42.019 --> 00:38:45.600
-and I sent wonderful messages to the
+00:39:13.720 --> 00:39:16.479
+it didn't have the features that I needed,
-38:45.600 --> 00:38:51.013
-developer of lpegrex, and he was too busy to help me.
+00:39:16.480 --> 00:39:20.919
+it was hard to extend, hard to explore,
-00:38:51.014 --> 00:38:57.210
-He answered very briefly. To be honest, I felt rejected.
+00:39:20.920 --> 00:39:23.279
+and hard to debug, and I
-00:38:57.211 --> 00:39:03.200
-I felt that I wasn't doing anything interesting, whatever.
+00:39:23.280 --> 00:39:25.039
+decided to rewrite it in a more
+
+00:39:25.040 --> 00:39:30.639
+hacker-friendly way - in the sense that...
+
+00:39:30.640 --> 00:39:33.759
+was modular, and I could replace any
+
+00:39:33.760 --> 00:39:35.399
+part of the module from a REPL...
NOTE ELpeg1.lua
-39:03.200 --> 00:39:07.470
-So in 2022, I was trying to learn lpegrex
+00:39:35.400 --> 00:39:43.679
+My version of it was called ELpeg1.lua...
+
+00:39:43.680 --> 00:39:47.679
+and I decided that in my version I
+
+00:39:47.680 --> 00:39:49.639
+wouldn't have the part that
+
+00:39:49.640 --> 00:39:54.879
+receives a grammar specified as a string
+
+00:39:54.880 --> 00:39:57.519
+and converts that to lpeg... I would
+
+00:39:57.520 --> 00:40:00.959
+just have the backend part, that are the
+
+00:40:00.960 --> 00:40:03.999
+functions in lpeg that let us specify
+
+00:40:04.000 --> 00:40:05.479
+powerful grammars.
+
+00:40:05.480 --> 00:40:11.759
+Let me go back. Let me explain a
+
+00:40:11.760 --> 00:40:15.519
+bit about lpeg... Lua has
+
+00:40:15.520 --> 00:40:21.599
+coercions: the + expects to receive
+
+00:40:21.600 --> 00:40:23.999
+true numbers, and if one of its arguments,
+
+00:40:24.000 --> 00:40:26.999
+or both of them, are strings, it converts
+
+00:40:27.000 --> 00:40:29.839
+the string... the strings to numbers so in
+
+00:40:29.840 --> 00:40:33.519
+this case here, 2+"3",
+
+00:40:33.520 --> 00:40:36.159
+it returns the number 5,
+
+00:40:36.160 --> 00:40:39.359
+and this is the concatenation
+
+00:40:39.360 --> 00:40:42.119
+operator... it expects to receive
+
+00:40:42.120 --> 00:40:44.999
+strings, so in this case it will
-00:39:07.471 --> 00:39:13.200
-because I was thinking that it would solve my problems,
+00:40:45.000 --> 00:40:47.359
+convert the number 2 to the string "2",
-39:13.200 --> 00:39:16.666
-but it didn't. It didn't have the features that I needed,
+00:40:47.360 --> 00:40:50.279
+and the concatenation of thes two
-00:39:16.667 --> 00:39:18.400
-and it was hard to extend and
+00:40:50.280 --> 00:40:54.479
+things will be 23... oops, sorry, "23"
-39:18.400 --> 00:39:22.302
-how to explore and hard to debug.
+00:40:54.480 --> 00:40:56.279
+as a string.
-00:39:22.303 --> 00:39:28.960
-I decided to rewrite it in a more hacker-friendly way,
+00:40:56.280 --> 00:40:58.519
+Lpeg also has some coercions.
-39:28.960 --> 00:39:32.035
-in the sense that it was modular
+00:40:58.520 --> 00:41:01.759
+I usually set these
-00:39:32.036 --> 00:39:37.160
-and I could replace any part of the module from a REPL.
+00:41:01.760 --> 00:41:05.799
+globals to let me write my grammars
-39:37.160 --> 00:39:42.640
-My version of it was called ELpeg1.lua.
+00:41:05.800 --> 00:41:09.719
+in a very compact way, so instead
-00:39:42.641 --> 00:39:48.120
-I decided that in my version I wouldn't
+00:41:09.720 --> 00:41:14.759
+of lpeg.B, lpeg.C, etc I use these globals,
-39:48.120 --> 00:39:51.240
-have the part that receives a grammar
+00:41:14.760 --> 00:41:18.359
+like uppercase B, uppercase C, and so on...
-00:39:51.241 --> 00:39:55.265
-specified as a string and converts that to lpeg.
+00:41:18.360 --> 00:41:21.679
+and with these globals I can write
-00:39:55.266 --> 00:39:58.984
-I would just have the backend part
+00:41:21.680 --> 00:41:26.759
+things like this: C(1)*"_"...
-00:39:58.985 --> 00:40:02.171
-that are the functions in lpeg
+00:41:26.760 --> 00:41:33.199
+and lpeg knows that lpeg.C...
-00:40:02.172 --> 00:40:06.320
-that let us specify powerful grammars.
+00:41:33.200 --> 00:41:38.879
+it sort of expands this to lpeg.C,
-40:06.320 --> 00:40:15.161
-Let me go back. Let me explain a bit about lpeg.
+00:41:38.880 --> 00:41:42.039
+but lpeg.C expects to receive
-00:40:15.162 --> 00:40:20.780
-Lua has coercions. The `+` expects to receive two numbers.
+00:41:42.040 --> 00:41:44.839
+an lpeg pattern, and 1 is not yet an
-00:40:20.781 --> 00:40:25.930
-If one of its arguments or both of them are strings,
+00:41:44.840 --> 00:41:47.879
+lpeg pattern, so it is coerced into an
-00:40:25.931 --> 00:40:30.116
-it converts the strings to numbers.
+00:41:47.880 --> 00:41:51.799
+lpeg pattern by calling lpeg.P,
-00:40:30.117 --> 00:40:37.091
-So in this case here, `2 + "3"` returns the number 5.
+00:41:51.800 --> 00:41:55.679
+so this short thing here becomes
-00:40:37.092 --> 00:40:40.440
-This is the concatenation operator.
+00:41:55.680 --> 00:42:03.399
+equivalent to lpeg.C(lpeg.P(1)), and the
-00:40:40.441 --> 00:40:44.960
-It expects to receive strings. In this case, it will
+00:42:03.400 --> 00:42:07.399
+multiplication, when at least one of its
-40:44.960 --> 00:40:47.541
-convert the number 2 to the string "2"
+00:42:07.400 --> 00:42:10.759
+arguments is an lpeg pattern... it expects
-00:40:47.542 --> 00:40:50.960
-and the concatenation of these two things will be
+00:42:10.760 --> 00:42:13.199
+to receive two lpeg patterns, and in
-40:50.960 --> 00:40:55.917
-"23". Oops, sorry, "23" as a string.
+00:42:13.200 --> 00:42:15.239
+this case the one at the right is
-00:40:55.918 --> 00:41:04.480
-lpeg also has some coercions. I usually set these globals
+00:42:15.240 --> 00:42:18.319
+just a string, so it is coerced to an lpeg
-41:04.480 --> 00:41:10.013
-to let me write my grammars in a very compact way.
+00:42:18.320 --> 00:42:20.079
+pattern by using lpeg.P.
-00:41:10.014 --> 00:41:13.811
-So instead of lpeg.B, lpeg.C, etc.
+00:42:20.080 --> 00:42:25.599
+With this idea we can sort of
-00:41:13.812 --> 00:41:17.878
-I use globals like B, C, and so on.
+00:42:25.600 --> 00:42:28.439
+understand the comparison here. I mean,
-00:41:17.879 --> 00:41:21.720
-And with these globals I can write
+00:42:28.440 --> 00:42:31.719
+let me run it again... this first part is
-41:21.720 --> 00:41:36.047
-things like this, `C(1) * "_"`. And lpeg knows that lpeg.C,
+00:42:31.720 --> 00:42:34.679
+very similar to a regular expression
-00:41:36.048 --> 00:41:41.147
-sorry, it sort of expands these to lpeg.C,
+00:42:34.680 --> 00:42:35.359
+here at the left...
-00:41:41.148 --> 00:41:43.590
-but lpeg.C expects to receive an lpeg pattern
+00:42:35.360 --> 00:42:39.759
+and when we apply this... Lua pattern
-00:41:43.591 --> 00:41:48.547
-and 1 is not yet an lpeg pattern.
+00:42:39.760 --> 00:42:43.639
+to this subject here the result
-00:41:48.548 --> 00:41:53.347
-So it is coerced into an lpeg pattern by calling lpeg.P.
+00:42:43.640 --> 00:42:47.799
+is this thing here, this thing, this
-00:41:53.348 --> 00:42:02.481
-So this short thing here becomes equivalent to
+00:42:47.800 --> 00:42:54.319
+thing and this thing... I'm going to
-00:42:02.482 --> 00:42:07.200
-`lpeg.C(lpeg.P(1))`. And the multiplication when at least one of
+00:42:54.320 --> 00:42:56.119
+call each one of these results
-42:07.200 --> 42:13.320
-its arguments is an lpeg pattern, it expects to receive two lpeg patterns. And in this
+00:42:56.120 --> 00:42:59.519
+"captures", so each of these things
-42:13.320 --> 42:19.200
-case the one at the right is just a string, so it is coerced to an lpeg pattern by using
+00:42:59.520 --> 00:43:03.319
+between parentheses "captures" a substring
-42:19.200 --> 42:29.360
-lpeg.P. With this idea we can sort of understand this comparison here. I mean, let me run it
+00:43:03.320 --> 00:43:06.039
+of the original string and these
-42:29.360 --> 42:37.440
-again. This first part is very similar to a regular expression here at the left. And
+00:43:06.040 --> 00:43:08.559
+captured substrings are returned in a
-42:37.440 --> 42:51.440
-when we apply this lpeg, sorry, this lua pattern to this subject here, the result is this thing
+00:43:08.560 --> 00:43:11.839
+certain order. Here is how to express the
-42:51.440 --> 42:56.040
-here, this thing, this thing and this thing. I'm going to call each one of these results
+00:43:11.840 --> 00:43:12.759
+same thing in lpeg...
-42:56.040 --> 43:04.080
-captures. So each of these things between parentheses captures a substring of the original
+00:43:12.760 --> 00:43:15.919
+it's very cryptic but it's a
-43:04.080 --> 43:11.520
-string and these captured substrings are returned in a certain order. Here is how to express
+00:43:15.920 --> 00:43:20.719
+good way to understand the some basic
-43:11.520 --> 43:20.720
-the same thing in lpeg. It's very cryptic, but it's a good way to understand some basic
+00:43:20.720 --> 00:43:23.879
+operators of lpeg, I mean we can look at
-43:20.720 --> 43:29.880
-operators of lpeg. I mean, we can look at the menu and understand what C, S and R do
+00:43:23.880 --> 00:43:26.479
+the manual and understand and
-43:29.880 --> 43:41.360
-and also exponentiation. And this strange thing here receives this string here, runs
+00:43:26.480 --> 00:43:30.519
+what C, S and R do, and also
-43:41.360 --> 43:46.760
-a function that I have defined that converts it to an object of a certain class and that
+00:43:30.520 --> 00:43:37.959
+exponentiation... and this strange thing
-43:46.760 --> 43:55.240
-class represents re patterns. So this thing is treated as a pattern for re.lua and it
+00:43:37.960 --> 00:43:41.319
+here receives this string here, runs
-43:55.240 --> 44:04.040
-is matched again the string and it returns the same thing as the other one. Also this
+00:43:41.320 --> 00:43:43.279
+a function that I have defined, that
-44:04.040 --> 44:10.680
-thing here also has a comparison with lpeg.rex, but these patterns are very, very trivial.
+00:43:43.280 --> 00:43:46.039
+converts it to an object of a certain
-44:10.680 --> 44:17.340
-They don't do anything very strange. So let's go back and see what kinds of very strange
+00:43:46.040 --> 00:43:47.759
+class, and that class
-44:17.340 --> 44:31.480
-things there are. Here is the page of lpeg.rex at GitHub. Here is the documentation. It's
+00:43:47.760 --> 00:43:52.399
+represents Re patterns, so this thing
-44:31.480 --> 44:39.120
-relatively brief. It explains lpeg.rex as being an extension of re.lua. So
+00:43:52.400 --> 00:43:54.479
+is treated as a pattern for re.lua,
-44:39.120 --> 44:44.880
-it explains mainly the additional features. Here is a quick reference that explains only
+00:43:54.480 --> 00:43:56.479
+and it is matched against the string,
-44:44.880 --> 44:56.840
-the additional features. Some of these things I was able to understand by struggling a lot,
+00:43:56.480 --> 00:43:59.439
+and it returns the same thing as the
-44:56.840 --> 45:08.720
-and some I wasn't able to even by spending several evenings trying to build examples.
+00:43:59.440 --> 00:44:02.559
+other one.
-45:08.720 --> 45:16.600
-This is something very nice. lpeg.rex comes with some example parsers. Here is
+00:44:02.560 --> 00:44:05.519
+Also, this thing here also has a
-45:16.600 --> 45:25.720
-a parser that parses the lua grammar. I mean, this is the grammar for lua 5.4 at the end
+00:44:05.520 --> 00:44:08.479
+comparison with lpegrex, but these
-45:25.720 --> 45:35.080
-of the reference manual. It's just this. And this is a kind of BNF, and this is the BNF
+00:44:08.480 --> 00:44:11.559
+patterns are very trivial, they
-45:35.080 --> 45:43.840
-translated to the language of lpeg.rex. This thing uses many constructions that are
+00:44:11.560 --> 00:44:13.359
+don't do anything very strange...
-45:43.840 --> 45:51.840
-in re.lua and some extra constructions that are described here. With these examples,
+00:44:13.360 --> 00:44:15.759
+so let's go back and see what
-45:51.840 --> 46:00.280
-I was able to understand some of these things here that are described here in the quick
+00:44:15.760 --> 00:44:18.239
+kinds of very strange things there are.
-46:00.280 --> 46:13.840
-reference, but not all. So I wasn't able to use lpeg.rex by itself because some things
+00:44:18.240 --> 00:44:26.559
+Here is the page of lpegrex at github,
-46:13.840 --> 46:21.560
-didn't make much sense. I decided to re implement it in my own style because that
+00:44:26.560 --> 00:44:29.719
+here's the documentation...
-46:21.560 --> 46:29.120
-would be a way to map... at the very least, map what I understood and what I didn't and
+00:44:29.720 --> 00:44:32.439
+it's relatively brief,
-46:29.120 --> 46:38.160
-learn one feature at a time, do comparisons and so on. Here I pointed to two features
+00:44:32.440 --> 00:44:35.239
+it explains lpegrex as being an
-46:38.160 --> 46:44.880
-of lpeg. One I said, oh great, this thing can be used to define grammars, even recursive
+00:44:35.240 --> 00:44:39.719
+extension of Re.lua, so it explains
-46:44.880 --> 46:52.260
-grammars and so on. And this is an "oh no" feature. One thing that didn't make any sense at all:
+00:44:39.720 --> 00:44:42.879
+mainly the additional features... here is a
-46:52.260 --> 47:01.760
-group captures. One thing that I did to understand group captures was to represent them as diagrams.
+00:44:42.880 --> 00:44:45.119
+quick reference that explains only the
-47:01.760 --> 47:08.200
-Of course in the beginning I was drawing these diagrams by hand, but then I realized that
+00:44:45.120 --> 00:44:46.359
+additional features...
-47:08.200 --> 47:16.680
-I could use the bits of lpeg that I already knew to build a grammar that would parse a
+00:44:46.360 --> 00:44:49.639
+some of the these things
-47:16.680 --> 47:24.400
-little language and generate these diagrams in LaTeX. I was able to make this. In
+00:44:49.640 --> 00:44:50.919
+I was able to understand
-47:24.400 --> 47:35.520
-this diagram here, this thing above the arrow is a piece of Lua code that specifies an lpeg
+00:44:50.920 --> 00:44:57.559
+by struggling a lot, and some I wasn't
-47:35.520 --> 47:43.160
-pattern. This thing here at the top is the string that is being matched and the things
+00:44:57.560 --> 00:45:02.439
+able to even by spending several evenings
-47:43.160 --> 47:57.880
-below the under braces are the captures that each thing captures. For example, this under
+00:45:02.440 --> 00:45:04.319
+try to to build examples...
-47:57.880 --> 48:03.520
-brace here corresponds to this pattern here that parses a single character but doesn't
+00:45:04.320 --> 00:45:12.879
+and this is something very nice. Lpegrex
-48:03.520 --> 48:10.680
-return any captures. This thing here parses a single B and doesn't return any captures.
+00:45:12.880 --> 00:45:15.879
+comes with some example parsers... and
-48:10.680 --> 48:17.800
-This thing here parses a single character and captures it. And this thing here parses
+00:45:15.880 --> 00:45:18.679
+here is a parser that parses the Lua
-48:17.800 --> 48:24.920
-the character D and captures it. And this other thing here that transforms this pattern
+00:45:18.680 --> 00:45:22.479
+grammar - I mean, this is the the grammar
-48:24.920 --> 48:35.040
-into another pattern returns first a capture with all the string that was parsed by this
+00:45:22.480 --> 00:45:25.959
+for Lua 5.4 at the end of the
-48:35.040 --> 48:44.000
-pattern here and then all the captures returned by this thing here before the column. So this
+00:45:25.960 --> 00:45:31.199
+reference manual... it's just this... this
-48:44.000 --> 48:51.840
-was a way to build concrete examples for things that the lpeg manual was explaining in a very
+00:45:31.200 --> 00:45:34.799
+is in a kind of BNF, and this is the BNF
-48:51.840 --> 48:58.600
-terse way and it worked for me. Some things that were very mysterious started to make
+00:45:34.800 --> 00:45:35.599
+translated
-48:58.600 --> 49:10.200
-sense and I started to have intelligent questions to ask in the mailing list. With that
+00:45:35.600 --> 00:45:39.919
+to the language of lpegrex, so this
-49:10.200 --> 49:22.040
-I was able to understand what are group captures that receive a name. Well, let me explain
+00:45:39.920 --> 00:45:43.039
+thing uses many constructions that are
-49:22.040 --> 49:30.400
-what this does. This thing here parses the empty string and returns this as a constant.
+00:45:43.040 --> 00:45:47.999
+in re.lua and some extra constructions that
-49:30.400 --> 49:38.520
-So this is something that doesn't exist in regular expressions. It parses nothing and
+00:45:48.000 --> 00:45:50.959
+are described here... and with these
-49:38.520 --> 49:46.800
-returns this as a capture. Then this thing here returns two constants here and parses
+00:45:50.960 --> 00:45:54.239
+examples I was able to to understand
-49:46.800 --> 49:54.440
-the empty string. And this thing here, D, converts the results of this thing here into
+00:45:54.240 --> 00:45:55.159
+some of the...
-49:54.440 --> 50:04.160
-a group capture and stores it in the label D. And then here's another constant capture.
+00:45:55.160 --> 00:45:58.079
+of these things here that are
+
+00:45:58.080 --> 00:46:00.239
+described here in the quick
+
+00:46:00.240 --> 00:46:04.719
+reference - but not all.
+
+00:46:04.720 --> 00:46:11.279
+So, I wasn't able to use lpegrex
+
+00:46:11.280 --> 00:46:14.279
+by itself, because some things didn't
+
+00:46:14.280 --> 00:46:16.199
+make much sense, and I decided to
+
+00:46:16.200 --> 00:46:18.759
+reimplement it in my own style,
+
+00:46:18.760 --> 00:46:23.679
+because that would be a way to map...
+
+00:46:23.680 --> 00:46:26.839
+to at the very least map what I had
+
+00:46:26.840 --> 00:46:29.559
+understood and what I didn't, learn
+
+00:46:29.560 --> 00:46:32.999
+one feature at a time, do comparisons, and
+
+00:46:33.000 --> 00:46:35.319
+so on.
+
+00:46:35.320 --> 00:46:38.799
+Here I pointed to two features of lpeg...
+
+00:46:38.800 --> 00:46:41.679
+in one I said "Oh, great! This thing can
+
+00:46:41.680 --> 00:46:44.319
+be used to to define grammars, even
+
+00:46:44.320 --> 00:46:45.959
+recursive grammars", and so on...
+
+00:46:45.960 --> 00:46:49.759
+and this is an "Oh, no!" feature - one
+
+00:46:49.760 --> 00:46:51.759
+thing that didn't make any sense at all...
+
+00:46:51.760 --> 00:46:56.439
+group captures. One thing that I did to
+
+00:46:56.440 --> 00:46:59.039
+understand group captures was to
+
+00:46:59.040 --> 00:47:02.319
+represent them as diagrams. Of course in
+
+00:47:02.320 --> 00:47:05.359
+the beginning I was drawing these
+
+00:47:05.360 --> 00:47:08.919
+diagrams by hand, but then I realized
+
+00:47:08.920 --> 00:47:11.559
+that I could use the bits of lpeg
+
+00:47:11.560 --> 00:47:14.759
+that I already knew to build a grammar
+
+00:47:14.760 --> 00:47:17.479
+that would parse a little language and
+
+00:47:17.480 --> 00:47:20.999
+generate these diagrams in LaTeX, and I was
+
+00:47:21.000 --> 00:47:21.919
+able to make this.
+
+00:47:21.920 --> 00:47:25.279
+In this diagram here
+
+00:47:25.280 --> 00:47:30.719
+this thing above the arrow is Lua code...
+
+00:47:30.720 --> 00:47:33.759
+a piece of Lua code that
+
+00:47:33.760 --> 00:47:37.119
+specifies an lpeg pattern... this
+
+00:47:37.120 --> 00:47:39.559
+thing here at the top is the string that
+
+00:47:39.560 --> 00:47:43.039
+is being matched, and the things below
+
+00:47:43.040 --> 00:47:46.599
+the underbraces are the captures that
+
+00:47:46.600 --> 00:47:50.639
+each thing... sorry, that each thing
+
+00:47:50.640 --> 00:47:51.319
+captures.
+
+00:47:51.320 --> 00:47:58.479
+For example, this underbrace here
+
+00:47:58.480 --> 00:48:00.279
+corresponds to this pattern here,
+
+00:48:00.280 --> 00:48:02.879
+that parses a single character but
+
+00:48:02.880 --> 00:48:05.559
+doesn't return any captures, this thing
+
+00:48:05.560 --> 00:48:08.119
+here parses a single "b" and doesn't
+
+00:48:08.120 --> 00:48:11.239
+return any captures, this thing here
+
+00:48:11.240 --> 00:48:14.399
+parses a single character and captures
+
+00:48:14.400 --> 00:48:16.879
+it, and this thing here parses the
+
+00:48:16.880 --> 00:48:21.319
+character "d" and captures it... and this
+
+00:48:21.320 --> 00:48:24.439
+other thing here transforms this
+
+00:48:24.440 --> 00:48:27.279
+pattern into another pattern...
+
+00:48:27.280 --> 00:48:33.119
+returns first a capture with all
+
+00:48:33.120 --> 00:48:35.079
+the string that was parsed by this
+
+00:48:35.080 --> 00:48:37.399
+pattern here, and then all the captures
+
+00:48:37.400 --> 00:48:41.079
+returned by this thing here before
+
+00:48:41.080 --> 00:48:42.959
+the ":".
+
+00:48:42.960 --> 00:48:45.479
+So, this was a way to build
+
+00:48:45.480 --> 00:48:48.599
+concrete examples for things that the
+
+00:48:48.600 --> 00:48:52.159
+lpag manual was explaining in a very terse
+
+00:48:52.160 --> 00:48:55.799
+way, and it worked for me - some things
+
+00:48:55.800 --> 00:48:56.999
+that were very
+
+00:48:57.000 --> 00:48:59.839
+mysterious started to make sense, and I
+
+00:48:59.840 --> 00:49:03.199
+started to have intelligent questions
+
+00:49:03.200 --> 00:49:06.079
+to ask in the mailing list.
+
+00:49:06.080 --> 00:49:10.959
+And with that I was able to
+
+00:49:10.960 --> 00:49:12.959
+understand what are group captures,
+
+00:49:12.960 --> 00:49:17.879
+and group captures that receive a name...
+
+00:49:17.880 --> 00:49:22.719
+Well, let me explain what this does.
+
+00:49:22.720 --> 00:49:27.119
+This thing here captures... sorry, parses
+
+00:49:27.120 --> 00:49:29.359
+the empty string and returns this as a
+
+00:49:29.360 --> 00:49:32.959
+constant... so, this is something that
+
+00:49:32.960 --> 00:49:35.799
+doesn't exist in regular expressions...
+
+00:49:35.800 --> 00:49:38.639
+it parses nothing and
+
+00:49:38.640 --> 00:49:41.839
+returns this as a capture... then this
+
+00:49:41.840 --> 00:49:44.599
+thing here returns these two
+
+00:49:44.600 --> 00:49:47.159
+constants here, and parses the empty
+
+00:49:47.160 --> 00:49:51.279
+string, and this thing here converts
+
+00:49:51.280 --> 00:49:54.159
+the results of this thing here into a
+
+00:49:54.160 --> 00:49:57.639
+group capture, and stores it in the label
+
+00:49:57.640 --> 00:50:03.279
+"d"... and then here's another constant
+
+00:50:03.280 --> 00:50:03.719
+capture.
NOTE Building lists
-50:04.160 --> 50:15.560
-I realized that these things here were similar to how Lua specifies building lists.
+00:50:03.720 --> 00:50:05.679
+And I realized that these things
+
+00:50:05.680 --> 00:50:08.599
+here were similar to how Lua
+
+00:50:08.600 --> 00:50:09.839
+specifies building lists...
+
+00:50:09.840 --> 00:50:16.239
+when we build... sorry, tables. When
+
+00:50:16.240 --> 00:50:18.759
+we build a table, and we say that the
+
+00:50:18.760 --> 00:50:21.879
+first element of the table is here, this
+
+00:50:21.880 --> 00:50:23.559
+element is put at the end of the table...
+
+00:50:23.560 --> 00:50:29.399
+when after the that would say d=42...
+
+00:50:29.400 --> 00:50:31.199
+we are putting the 42
+
+00:50:31.200 --> 00:50:34.559
+in the the slot whose key is "d".
+
+00:50:34.560 --> 00:50:38.999
+This was happening with lpeg captures,
+
+00:50:39.000 --> 00:50:43.359
+but there was something very strange...
+
+00:50:43.360 --> 00:50:46.199
+these group captures could hold
+
+00:50:46.200 --> 00:50:49.199
+more than one capture - more than one
+
+00:50:49.200 --> 00:50:51.759
+value... so there was something between
+
+00:50:51.760 --> 00:50:58.039
+lists and tables. I started to use this
+
+00:50:58.040 --> 00:51:00.479
+notation to...
+
+00:51:00.480 --> 00:51:04.959
+explain in my notation what they
+
+00:51:04.960 --> 00:51:08.159
+were doing... many things started
+
+00:51:08.160 --> 00:51:10.239
+to make sense, many mysterious
+
+00:51:10.240 --> 00:51:12.879
+sentences in the manual started to
+
+00:51:12.880 --> 00:51:14.439
+make sense... but some didn't...
+
+00:51:14.440 --> 00:51:19.679
+but at least I was able to send
+
+00:51:19.680 --> 00:51:22.319
+some intelligent questions to the
+
+00:51:22.320 --> 00:51:25.199
+mailing lis,t and the author of Lua and
+
+00:51:25.200 --> 00:51:27.359
+lpeg answered some of them...
+
+00:51:27.360 --> 00:51:31.519
+he was not very happy about my
+
+00:51:31.520 --> 00:51:34.959
+questions - he... told me that those
+
+00:51:34.960 --> 00:51:37.679
+diagrams were a waste of time, the
+
+00:51:37.680 --> 00:51:40.559
+manual was perfectly clear, and so on...
+
+00:51:40.560 --> 00:51:44.919
+whatever - but I was able to...
+
+00:51:44.920 --> 00:51:48.879
+so, it was weird, but I was able to
+
+00:51:48.880 --> 00:51:51.799
+understand lots of things from his
+
+00:51:51.800 --> 00:51:56.519
+answers. This is a copy of one of
+
+00:51:56.520 --> 00:51:58.239
+my messages, then there's another one,
+
+00:51:58.240 --> 00:52:01.239
+another one, some of them had diagrams...
+
+00:52:01.240 --> 00:52:04.359
+then he complained about these diagrams,
+
+00:52:04.360 --> 00:52:08.439
+he said that these things here, that look
+
+00:52:08.440 --> 00:52:11.119
+like table constructors, "do not exist"...
+
+00:52:11.120 --> 00:52:17.199
+whatever... anyway, once I understood
+
+00:52:17.200 --> 00:52:20.679
+group captures many features
+
+00:52:20.680 --> 00:52:23.359
+were very easy to understand
+
+00:52:23.360 --> 00:52:26.039
+and I started to be able to use lpeg to
+
+00:52:26.040 --> 00:52:28.159
+to build some very interesting things...
+
+00:52:28.160 --> 00:52:33.039
+I was able to reproduce some
+
+00:52:33.040 --> 00:52:36.359
+of the features that I saw in lpegrex -
+
+00:52:36.360 --> 00:52:41.079
+remember that this... where is that?
+
+00:52:41.080 --> 00:52:46.119
+this is the syntax of Lua... here -
+
+00:52:46.120 --> 00:52:48.959
+I was able to understand
+
+00:52:48.960 --> 00:52:52.479
+how these things here were translated to
+
+00:52:52.480 --> 00:52:55.359
+lpeg code... to lpeg patterns
+
+00:52:55.360 --> 00:52:58.239
+by using group captures in a certain
+
+00:52:58.240 --> 00:53:03.039
+way... I was able to implement them
+
+00:53:03.040 --> 00:53:04.759
+in ELpeg1.lua...
+
+00:53:04.760 --> 00:53:08.719
+and after some time I was able to use
+
+00:53:08.720 --> 00:53:12.879
+ELpeg1.lua to build grammars that
+
+00:53:12.880 --> 00:53:14.159
+were able to parse
+
+00:53:14.160 --> 00:53:18.679
+arithmetical expressions with the
+
+00:53:18.680 --> 00:53:20.959
+right precedence... and here's an example
+
+00:53:20.960 --> 00:53:23.319
+in which I built the grammar step by step...
+
+00:53:23.320 --> 00:53:29.239
+and I test the current grammar, and I
+
+00:53:29.240 --> 00:53:35.079
+replace a bit, and then I test the new
+
+00:53:35.080 --> 00:53:36.599
+grammar and so on...
+
+00:53:36.600 --> 00:53:39.079
+and you can see that the result is
+
+00:53:39.080 --> 00:53:43.359
+always a tree that is drawn in a
+
+00:53:43.360 --> 00:53:44.239
+nice two dimensional way...
+
+00:53:44.240 --> 00:53:48.919
+At this point these powers here
+
+00:53:48.920 --> 00:53:50.559
+are returned as a list,
+
+00:53:50.560 --> 00:53:53.119
+as an operation "pow"
+
+00:53:53.120 --> 00:53:57.559
+with several arguments, here... and then
+
+00:53:57.560 --> 00:54:00.519
+I apply a kind of parsing combinator,
+
+00:54:00.520 --> 00:54:03.719
+here... that transforms these trees into
+
+00:54:03.720 --> 00:54:08.199
+other trees and with these combinators
+
+00:54:08.200 --> 00:54:12.199
+here I can specify that the "^" is
+
+00:54:12.200 --> 00:54:14.639
+associative in a certain direction...
+
+00:54:14.640 --> 00:54:17.519
+that the "/" is associative in
+
+00:54:17.520 --> 00:54:20.119
+another direction... the "-" uses
+
+00:54:20.120 --> 00:54:23.079
+the same direction as a the "/",
+
+00:54:23.080 --> 00:54:26.079
+and so on... and they have the
+
+00:54:26.080 --> 00:54:29.679
+right precedences.
+
+00:54:29.680 --> 00:54:34.559
+So, here are the tests...
+
+00:54:34.560 --> 00:54:38.119
+here is my file ELpeg1.lua... it has
+
+00:54:38.120 --> 00:54:41.719
+several classes, each class has tests
+
+00:54:41.720 --> 00:54:42.279
+after it...
+
+00:54:42.280 --> 00:54:46.239
+I was able to implement something
+
+00:54:46.240 --> 00:54:50.519
+that lpegrex has, that is called
+
+00:54:50.520 --> 00:54:53.519
+"keywords", that is very useful for parsing
+
+00:54:53.520 --> 00:54:56.479
+programs in programming languages...
+
+00:54:56.480 --> 00:54:59.439
+I was able to implement something
+
+00:54:59.440 --> 00:55:02.639
+similar to the debugger... to the
+
+00:55:02.640 --> 00:55:07.999
+lpeg debugger lpeg uses... I was
+
+00:55:08.000 --> 00:55:11.399
+frustrated by some limitations of
+
+00:55:11.400 --> 00:55:16.839
+the lpeg debugger, and I implemented
+
+00:55:16.840 --> 00:55:23.439
+my own that is, uh... much better!...
+
+00:55:23.440 --> 00:55:24.759
+Let me show something else... I was
+
+00:55:24.760 --> 00:55:27.119
+able to translate a good part of the
+
+00:55:27.120 --> 00:55:33.039
+Lua parser, here, to ELpeg1.lua... I haven't
+
+00:55:33.040 --> 00:55:38.399
+finished yet, but I have most of the
+
+00:55:38.400 --> 00:55:39.719
+the translation here...
-50:15.560 --> 50:22.320
-When we build a table and we say that the first element of the table is here, this element
+00:55:39.720 --> 00:55:47.279
+and after having all that I was able to
-50:22.320 --> 50:30.600
-is put at the end of the table. After that we say D equals to say 42. We are putting
+00:55:47.280 --> 00:55:50.319
+build other grammars very quickly...
-50:30.600 --> 50:39.880
-the 42 in the slot whose key is D. This was happening with lpeg captures but there was
+00:55:50.320 --> 00:55:55.239
+writing new parsers finally became fun.
-50:39.880 --> 50:49.320
-something very strange. These group captures could hold more than one capture, more than
+00:55:55.240 --> 00:55:58.719
+And here's one example that I showed in the
-50:49.320 --> 50:57.400
-one value. So there was something between lists and tables. I started to use this notation
+00:55:58.720 --> 00:56:00.639
+beginning.
-50:57.400 --> 51:09.840
-to explain in my notation what they were doing. Many things started to make sense, many mysterious
+00:56:00.640 --> 00:56:05.799
+If I remember correctly...
-51:09.840 --> 51:20.480
-sentences in the manual started to make sense but some didn't. But at least I was able to
+00:56:05.800 --> 00:56:10.639
+I took a figure from the Wikipedia...
-51:20.480 --> 51:26.960
-send some intelligent questions to the mailing list and the author of Lua and LPEG answered
+00:56:10.640 --> 00:56:12.439
+I don't have its link now...
-51:26.960 --> 51:35.920
-some of them. He was not very happy about my questions. He told me that those diagrams
+00:56:12.440 --> 00:56:17.079
+but I specified a grammar that parses
-51:35.920 --> 51:47.280
-were a waste of time, the manual was perfectly clear and so on, whatever. So it was weird,
+00:56:17.080 --> 00:56:20.119
+exactly the example that appears
-51:47.280 --> 51:56.440
-but I was able to understand lots of things from his answers. So this is a copy of one
+00:56:20.120 --> 00:56:20.839
+in the Wikipedia...
-51:56.440 --> 52:02.040
-of my messages, then there's another one, another one, some of the diagrams. Then he
+00:56:20.840 --> 00:56:24.679
+so, with my grammar, considering that
-52:02.040 --> 52:10.080
-complained about these diagrams, he said that these things here that look like table constructions
+00:56:24.680 --> 00:56:28.719
+the top level entry is "Stmt", when I
-52:10.080 --> 52:22.720
-do not exist, whatever. Anyway, once I understood group captures, many features were very easy
+00:56:28.720 --> 00:56:30.679
+parse this string here
-52:22.720 --> 52:30.800
-to understand and I started to be able to use lpeg to build some very interesting things.
+00:56:30.680 --> 00:56:36.599
+the result is this tree...
-52:30.800 --> 52:39.600
-I was able to reproduce some of the features that I saw in lpegrex. Remember that this
+00:56:36.600 --> 00:56:41.119
+and I can do some operations on that,
-52:39.600 --> 52:53.400
-is a syntax of Lua. Here I was able to understand how these things here were translated to lpeg
+00:56:41.120 --> 00:56:44.039
+I can define how this thing is to be
-52:53.400 --> 53:02.880
-code, to lpeg patterns by using group captures in a certain way. I was able to implement
+00:56:44.040 --> 00:56:45.639
+converted into LaTeX,
-53:02.880 --> 53:13.080
-them in ELpeg1.lua. after some time I was able to use ELpeg1.lua to build grammars that
+00:56:45.640 --> 00:56:49.399
+I can define other operations
-53:13.080 --> 53:21.080
-were able to parse arithmetical expressions with the right precedence. here's an example
+00:56:49.400 --> 00:56:52.999
+that convert trees into other trees, and
-53:21.080 --> 53:26.920
-in which I built the grammar step by step and I test the current grammar and I replace
+00:56:53.000 --> 00:56:54.879
+here are some tests of these operations...
-53:26.920 --> 53:34.400
-a bit and then I test the new grammar and so on. You can see that the result is
+00:56:54.880 --> 00:57:00.359
+This is what I showed in the beginning...
-53:34.400 --> 53:48.720
-always a tree that is drawn in a nice two dimensional way. At this point, these powers
+00:57:00.360 --> 00:57:02.759
+I'm not going to explain all the details
-53:48.720 --> 53:57.760
-here are returned as a list, as an operation power with several arguments here and then
+00:57:02.760 --> 00:57:03.999
+of this thing now...
-53:57.760 --> 54:05.560
-I apply a kind of parsing combinator here that transforms these trees into other trees
+00:57:04.000 --> 00:57:09.199
+this :show() converts this thing
-54:05.560 --> 54:14.200
-and with these combinators here I can specify that the power is associative in a certain
+00:57:09.200 --> 00:57:11.919
+into LaTeX in the way specified by these
-54:14.200 --> 54:22.320
-direction, the division is associative in another direction, the minus uses the same
+00:57:11.920 --> 00:57:16.159
+instructions here, that says that...
-54:22.320 --> 54:29.520
-direction as a division and so on and they have the right precedences. So here are the
+00:57:16.160 --> 00:57:25.239
+well, whatever...
-54:29.520 --> 54:42.360
-tests. So here's my file ELpeg.lua, it has several classes. Each class has tests after
+00:57:25.240 --> 00:57:32.959
+and here's the result - the LaTeXed result...
-54:42.360 --> 54:52.040
-it. I was able to implement something that lpeg.rex has that's called keywords, that's
+00:57:32.960 --> 00:57:41.759
+and these diagrams here are generated by
-54:52.040 --> 54:59.160
-very useful for parsing problems in programming languages. I was able to implement something
+00:57:41.760 --> 00:57:46.719
+this file here, that defines a simple
-54:59.160 --> 55:10.640
-similar to the debugger, to the pack debugger that lpeg uses, but I was frustrated by some
+00:57:46.720 --> 00:57:48.479
+grammar that parses this thing here,
-55:10.640 --> 55:23.280
-limitations of the debugger and I implemented my own that is much better and let me show
+00:57:48.480 --> 00:57:51.999
+and then LaTeXes it in a certain way, and
-55:23.280 --> 55:33.800
-something else. I was able to translate a good part of the Lua parser here to lpeg1.lua.
+00:57:52.000 --> 00:57:56.399
+and also tests to check if this code here...
-55:33.800 --> 55:45.880
-I haven't finished yet but I have most of the translation here and after having all
+00:57:56.400 --> 00:58:01.999
+this Lua code that generates an lpeg grammar...
-55:45.880 --> 55:54.960
-that I was able to build other grammars very quickly. Writing new parsers finally became
+00:58:02.000 --> 00:58:05.799
+parses this subject here and
-55:54.960 --> 56:08.560
-fun and here's one example that I showed in the beginning. If I remember correctly, I
+00:58:05.800 --> 00:58:08.599
+returns the expected result...
-56:08.560 --> 56:15.680
-took a figure from the Wikipedia, I don't have its link now, but I specify a grammar
+00:58:08.600 --> 00:58:12.239
+So: this is the code that I
-56:15.680 --> 56:24.280
-that parses exactly the example that appears in the Wikipedia. So with my grammar, considering
+00:58:12.240 --> 00:58:16.719
+wanted to show. I wanted to show many
-56:24.280 --> 56:36.680
-that the top level entry is statement, when I parse this string here, the result is this
+00:58:16.720 --> 00:58:19.919
+more things but I wasn't able to prepare
-56:36.680 --> 56:44.840
-tree and I can do some operations on that. I can define how this thing is to be converted
+00:58:19.920 --> 00:58:23.919
+them before the conference... and I hope
-56:44.840 --> 56:53.400
-into LaTeX. I can define other operations that convert trees into other trees and here's
+00:58:23.920 --> 00:58:27.519
+that soon - for some value of "soon" -
-56:53.400 --> 57:01.760
-some tests of these operations. This is what I showed in the beginning. I'm not going to
+00:58:27.520 --> 00:58:30.399
+I'll be able to create REPL-based
-57:01.760 --> 57:10.480
-explain all the details of this thing now. This show converts this thing into LaTeX in
+00:58:30.400 --> 00:58:33.919
+tutorials for lpeg, Re, and ELpeg1.lua...
-57:10.480 --> 57:39.320
-the way specified by these instructions here. And here's the result, the LaTeX result.
+00:58:33.920 --> 00:58:36.319
+where lpeg is something very famous,
-57:39.320 --> 57:46.880
-These diagrams here are generated by this file here that defines a simple grammar that
+00:58:36.320 --> 00:58:39.199
+Re is a module of lpeg...
-57:46.880 --> 57:56.720
-parses this thing here and then LaTeX it in a certain way and also tests to check if this
+00:58:39.200 --> 00:58:42.399
+I could also do something like this
-57:56.720 --> 58:06.600
-code here that is Lua code that generates an lpeg grammar, parses this subject here, and
+00:58:42.400 --> 00:58:47.799
+for lpegrex... and ELpeg1.lua is
-58:06.600 --> 58:16.880
-returns the expected result. So this is the code that I wanted to show. I wanted to show
+00:58:47.800 --> 00:58:51.159
+the thing that I wrote, the one that
-58:16.880 --> 58:23.920
-many more things, but I wasn't able to prepare them before the conference. And I hope that
+00:58:51.160 --> 00:58:56.799
+has test in comments, and the tests
-58:23.920 --> 58:33.240
-soon, for some value of soon, I'll be able to create REPL based tutorials for LPG, G and
+00:58:56.800 --> 00:58:59.519
+usually generate trees, and sometimes
-58:33.240 --> 58:42.080
-ELpeg1.Lua where Lpeg is something very famous. Here is a module of LPG. I could also do something
+00:58:59.520 --> 00:59:00.879
+they generate TeX code.
-58:42.080 --> 58:55.600
-like this for ELpeg, and ELpeg1.lua is the thing that I wrote, the one that has tests in comments
+00:59:00.880 --> 00:59:04.959
+Yeah, so that's it! I wanted to
-58:55.600 --> 59:04.920
-and the tests usually generate trees and sometimes they generate tag code. So that's it, I wanted
+00:59:04.960 --> 00:59:07.159
+present much more but I wasn't able to
-59:04.920 --> 59:26.040
-to present much more, but I wasn't able to prepare it. So sorry, thanks, bye!
+00:59:07.160 --> 00:59:10.480
+prepare it... so: sorry, thanks, bye! =)
diff --git a/2023/info/emacsconf-before.md b/2023/info/emacsconf-before.md
index 272a7eb5..9943c347 100644
--- a/2023/info/emacsconf-before.md
+++ b/2023/info/emacsconf-before.md
@@ -32,6 +32,6 @@ Status: Q&A to be extracted from the room recordings
# Q&A
-<div class="vid"><video controls preload="none" id="emacsconf-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.webm" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 2:00:43 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.webm">Download --answers.webm (317MB)</a></li></ul></div></div>
+<div class="vid"><video controls preload="none" id="emacsconf-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.webm" /><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="emacsconf-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.opus"></audio></div><div></div>Duration: 2:00:43 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.opus">Download --answers.opus (71MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.webm">Download --answers.webm (317MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/flat-before.md b/2023/info/flat-before.md
index f86d6444..9ba28750 100644
--- a/2023/info/flat-before.md
+++ b/2023/info/flat-before.md
@@ -7,6 +7,6 @@ Status: Q&A to be extracted from the room recordings
-<div class="vid"><video controls preload="none" id="flat-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.webm" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 22:20 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.webm">Download --main.webm (121MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/1DRDY8vZK3SW5M8zAPJQSp">View on Toobnix</a></li></ul></div></div>
+<div class="vid"><video controls preload="none" id="flat-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.webm" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 22:20 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.opus">Download --main.opus (10MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.webm">Download --main.webm (121MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/1DRDY8vZK3SW5M8zAPJQSp">View on Toobnix</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/one-before.md b/2023/info/one-before.md
index 6bb07001..0756ab65 100644
--- a/2023/info/one-before.md
+++ b/2023/info/one-before.md
@@ -27,6 +27,6 @@ Status: Q&A to be extracted from the room recordings
# Q&A
-<div class="vid"><video controls preload="none" id="one-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.webm" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 27:39 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.webm">Download --answers.webm (96MB)</a></li></ul></div></div>
+<div class="vid"><video controls preload="none" id="one-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.webm" /><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="one-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.opus"></audio></div><div></div>Duration: 27:39 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.opus">Download --answers.opus (15MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.webm">Download --answers.webm (96MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/repl-after.md b/2023/info/repl-after.md
index d2819d68..a4ebf48c 100644
--- a/2023/info/repl-after.md
+++ b/2023/info/repl-after.md
@@ -1,800 +1,6 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="repl-mainVideo-transcript"></a>
-# Transcript
-
-
-[[!template new="1" text="""Intro""" start="00:00:00.000" video="mainVideo-repl" id="subtitle"]]
-
-[[!template text="""Hi, my name is Eduardo Ochs""" start="00:00:00.000" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and the title of this talk is""" start="00:00:00.015" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""REPLs in Strange Places: Lua, LaTeX,""" start="00:00:05.020" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""LPeg, LPegRex, and TikZ.""" start="00:00:07.840" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I'm the author of an Emacs package called eev,""" start="00:00:10.440" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and this is a talk at the EmacsConf 2023,""" start="00:00:13.400" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that is happening in December 2023 at the Internet.""" start="00:00:17.280" video="mainVideo-repl" id="subtitle"]]
-
-[[!template new="1" text="""Diagrams""" start="00:00:21.560" video="mainVideo-repl" id="subtitle"]]
-
-[[!template text="""This is one of the examples of diagrams""" start="00:00:21.560" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that we are going to see.""" start="00:00:24.244" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Let me show how I generated it.""" start="00:00:25.920" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""One second, I have to use a smaller font here.""" start="00:00:28.400" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""This is a file called parse32.lua.""" start="00:00:34.560" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Let me go back to this block of tests again.""" start="00:00:39.080" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Now, if I run this,""" start="00:00:42.600" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""we get these outputs here at the right.""" start="00:00:46.720" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Then in this line here,""" start="00:00:51.520" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""it generates a PDF,""" start="00:00:53.800" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and if I type `F8` here,""" start="00:00:55.420" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""it shows the PDF in the lower right window.""" start="00:00:57.780" video="mainVideo-repl" id="subtitle"]]
-
-[[!template new="1" text="""eev""" start="00:01:03.320" video="mainVideo-repl" id="subtitle"]]
-
-[[!template text="""Let me start by explaining briefly what is eev.""" start="00:01:03.320" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""First, it's something""" start="00:01:08.920" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that appeared by accident in the mid 90s.""" start="00:01:10.890" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I explained this story in my presentation at EmacsConf 2019.""" start="00:01:14.560" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""It's an Emacs package that is part of ELPA.""" start="00:01:20.640" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""It has at least 10 users.""" start="00:01:25.420" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Those are the ones that I know by name.""" start="00:01:28.720" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""eev means &quot;Emacs, execute verbosely&quot;.""" start="00:01:32.480" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""eev is something that treats eval-last-sexp""" start="00:01:36.960" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""as the central feature of Emacs.""" start="00:01:38.848" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""eev blurs the distinction between programmers and users,""" start="00:01:43.400" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and it replaces the slogan,""" start="00:01:47.280" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""&quot;users should not be forced to see Lisp&quot;""" start="00:01:49.960" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""(that is something that Richard Stallman told me once),""" start="00:01:52.360" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""by &quot;users should see Lisp instead of buttons,&quot;""" start="00:01:55.280" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and &quot;new users should see Lisp in the first five minutes.&quot;""" start="00:01:59.240" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I'm going to show some examples of that soon.""" start="00:02:03.400" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""eev uses code in the comments a lot""" start="00:02:08.160" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and also tests in comments.""" start="00:02:11.566" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I changed my way of presenting it,""" start="00:02:14.120" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and it became very REPL-centric""" start="00:02:16.782" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""in the last few years, in the sense that""" start="00:02:19.191" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I start by explaining its main features""" start="00:02:22.200" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""by its support for REPLs.""" start="00:02:26.461" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""eev supposes that we want to keep""" start="00:02:29.520" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""executable notes of everything.""" start="00:02:32.079" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I'm also going to show examples of this in a second.""" start="00:02:34.560" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""eev has lots of videos for people who hate videos,""" start="00:02:37.800" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and it tries to do everything""" start="00:02:42.120" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""with very little magic and without black boxes.""" start="00:02:44.271" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I'm going to explain many of these things very soon.""" start="00:02:47.640" video="mainVideo-repl" id="subtitle"]]
-
-[[!template new="1" text="""Another figure""" start="00:02:51.360" video="mainVideo-repl" id="subtitle"]]
-
-[[!template text="""This is a figure that I'm going to show in detail soon""" start="00:02:51.360" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that is about something important about Lua.""" start="00:02:58.200" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Oops, the font is very bad now,""" start="00:03:01.640" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""so let me change the font.""" start="00:03:03.400" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""The figure is this one.""" start="00:03:05.200" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""What most people do when they visit a file""" start="00:03:09.880" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""with something interesting in it,""" start="00:03:12.936" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""is that they just go there and they set a bookmark there,""" start="00:03:15.280" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""or they put the position in the register.""" start="00:03:18.360" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""But I prefer to keep links""" start="00:03:22.640" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""to everything that is interesting""" start="00:03:29.782" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""as an Elisp hyperlink.""" start="00:03:30.222" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""For example, this is an Elisp hyperlink to the file""" start="00:03:30.480" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that goes to this anchor here,""" start="00:03:34.237" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and to this string after this anchor.""" start="00:03:36.520" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""This is a variant that opens that file""" start="00:03:39.280" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""in the window at the right here,""" start="00:03:43.389" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and this is a sexp that changes the font.""" start="00:03:46.760" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I have a command with a very short name that does that,""" start="00:03:53.640" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""but I prefer to keep that as a one-liner.""" start="00:03:57.880" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""About the videos, we can see""" start="00:04:03.680" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""the list of first-class videos of eev by executing this,""" start="00:04:04.282" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""`M-x find-1stclassvideos`,""" start="00:04:11.440" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""or by running this alias here, `M-x 1c`,""" start="00:04:14.191" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and then what we see is this.""" start="00:04:18.480" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""The first sexp here regenerates this buffer,""" start="00:04:21.160" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""so we can make a mess here and then run this,""" start="00:04:25.560" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and the original buffer is regenerated again in a clean way.""" start="00:04:29.120" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Each of these things here""" start="00:04:34.120" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""opens a buffer with information about a video.""" start="00:04:36.952" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Let me take a specific example here.""" start="00:04:41.960" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""This video here is about one of the ancestors of this talk""" start="00:04:45.320" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that is a library that I wrote""" start="00:04:50.279" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""for creating diagrams in LaTeX""" start="00:04:52.800" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""using a package called [pict2e-lua] using REPLs.""" start="00:04:56.907" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Anyway, the thing is that if we run a sexp like this one""" start="00:05:03.000" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and we don't have a local copy of the video,""" start="00:05:10.029" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""eev will try to load the local copy""" start="00:05:16.315" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and instead of doing that by asking something""" start="00:05:19.582" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""like &quot;do you want me to download the local copy&quot;""" start="00:05:20.560" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""blah, blah, blah, it simply opens a buffer like this.""" start="00:05:25.382" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""And if we don't have a local copy yet,""" start="00:05:29.240" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""it will open a buffer like this one,""" start="00:05:35.515" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""in which these things here in comments""" start="00:05:37.221" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""are links to the documentation.""" start="00:05:40.031" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""This thing here explains the idea""" start="00:05:42.679" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""of local copies of files from the internet.""" start="00:05:45.781" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""There are more details here and here,""" start="00:05:50.279" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and this is a script that we can execute line by line.""" start="00:05:54.121" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""So instead of this script being hidden behind the button""" start="00:05:59.580" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that we just press after a question""" start="00:06:04.277" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""like &quot;do you want me to do something,&quot; blah, blah, blah,""" start="00:06:07.160" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""&quot;yes or no?&quot;, the script is visible here""" start="00:06:10.709" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and we can execute it step by step.""" start="00:06:13.229" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""It creates a terminal with a shell here in the right window""" start="00:06:15.380" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and when we type `F8` in these lines here,""" start="00:06:22.458" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""the lines are sent to this line.""" start="00:06:26.989" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""So this is going to download a copy of the video,""" start="00:06:30.360" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""the wget says that I already have a copy of the video""" start="00:06:33.843" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and its subtitles and so on.""" start="00:06:38.135" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""And after getting a copy of the video""" start="00:06:40.360" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""we can run this exp here and it displays the video.""" start="00:06:45.740" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I said that eev has lots of videos""" start="00:06:52.960" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""for people who hate videos.""" start="00:06:55.487" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""The idea is that very few people""" start="00:06:57.436" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""are going to watch the videos in real time.""" start="00:07:00.047" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Most of the people that I know, or most of the people""" start="00:07:03.082" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that are interested in eev in some way,""" start="00:07:07.643" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""they are going to watch just small sections of the video.""" start="00:07:10.791" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Most of the time, they are just going to""" start="00:07:14.321" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""read the subtitles of the video.""" start="00:07:17.575" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""For each one of the videos""" start="00:07:19.940" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""we have a page about the video...""" start="00:07:22.532" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Let me see if I have internet here...""" start="00:07:25.296" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""This is a page. Usually these pages""" start="00:07:29.674" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""have a link to another page,""" start="00:07:34.902" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""the page that has all the subtitles of the video,""" start="00:07:38.428" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""wherever. In this one, it's not so visible.""" start="00:07:43.891" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Anyway, there are several ways of accessing""" start="00:07:48.588" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""the subtitles of the video.""" start="00:07:52.002" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""One of the ways is by running this sexp here""" start="00:07:53.964" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that opens a file in Lua.""" start="00:07:58.633" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""That is what I use to generate the subtitles.""" start="00:08:01.065" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""By the way, each one of these things here""" start="00:08:05.440" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""is hyperlinked to a position of the video.""" start="00:08:10.369" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""If I type this, it goes to that position.""" start="00:08:14.680" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Anyway, let me go back.""" start="00:08:21.281" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""So the tutorials of eev, the intros of eev""" start="00:08:24.580" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that start with `find-` and end with `-intro`,""" start="00:08:28.558" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""they have lots of blocks that say""" start="00:08:32.351" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""video links like this one.""" start="00:08:35.333" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""These blocks have links to positions in videos.""" start="00:08:37.613" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""If we don't have a local copy of the video yet,""" start="00:08:41.973" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""the thing shows us a script""" start="00:08:46.333" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that lets us download the local copy.""" start="00:08:49.016" video="mainVideo-repl" id="subtitle"]]
-
-[[!template new="1" text="""eev-wconfig, magic, and black boxes""" start="00:08:52.560" video="mainVideo-repl" id="subtitle"]]
-
-[[!template text="""I said that I was going to explain""" start="00:08:52.560" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""what I mean by magic and black boxes,""" start="00:08:57.441" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""this is something that I've been trying""" start="00:09:01.856" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""to explain for a long time""" start="00:09:03.800" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and I think that I got a very good explanation about that""" start="00:09:05.112" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""in a video that I made about something called eev-wconfig""" start="00:09:08.762" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that is a tool for configuring eev on Windows without magic,""" start="00:09:12.349" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""without buttons that do things,""" start="00:09:17.944" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""without explaining what they are doing.""" start="00:09:20.879" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""This is a part of the subtitles of the video.""" start="00:09:24.380" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Let me read that.""" start="00:09:28.079" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""eev-wconfig is an attempt to solve the problem""" start="00:09:29.446" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""of how to install these things on Windows""" start="00:09:32.532" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""both without magic and with very little magic.""" start="00:09:35.350" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Remember this slogan: &quot;Any sufficiently advanced technology""" start="00:09:40.040" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""is indistinguishable from magic.&quot;""" start="00:09:44.942" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Here in this video I'm going to use the term magic""" start="00:09:47.600" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""as a shorthand for sufficiently advanced technology""" start="00:09:51.434" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that is something that is complex and non obvious""" start="00:09:55.263" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and that is indistinguishable from magic""" start="00:09:58.945" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""in the sense of being almost impossible to understand.""" start="00:10:01.921" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""And I'm also going to use the term black box""" start="00:10:05.840" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""as a near synonym for magic""" start="00:10:09.273" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and sometimes the term black box is more convenient""" start="00:10:11.409" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""even though it's a bit longer,""" start="00:10:15.218" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""it has more letters because when I use the term black box""" start="00:10:17.489" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""it invites us to use expressions""" start="00:10:21.334" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""like opening the black box""" start="00:10:23.522" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and I'm going to use that expression a lot.""" start="00:10:27.873" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Now let me try to explain what is. Sorry,""" start="00:10:34.800" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""let me change the font.""" start="00:10:40.900" video="mainVideo-repl" id="subtitle"]]
-
-[[!template new="1" text="""Lua""" start="00:10:44.240" video="mainVideo-repl" id="subtitle"]]
-
-[[!template text="""What is Lua?""" start="00:10:44.240" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Lua is a minimalistic language""" start="00:10:45.240" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""in the sense of battery is not included.""" start="00:10:48.646" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""It uses associative tables for most of its data structures.""" start="00:10:53.040" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""It's so minimalistic""" start="00:10:57.988" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that the default print function""" start="00:11:00.875" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""when we create an associative table and we ask it to print--""" start="00:11:05.148" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""we ask print to print an associative table--""" start="00:11:11.960" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""it just prints the address of the table.""" start="00:11:14.915" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Here are some examples. Here is a table""" start="00:11:17.600" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and when we ask to print it,""" start="00:11:20.903" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""it just says that it's the table at this address here.""" start="00:11:23.297" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""One of the things that most people do""" start="00:11:28.200" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""when they start using Lua is that either""" start="00:11:30.894" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""they download a package with a print to printing function""" start="00:11:33.587" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""or they write their own print to printing functions.""" start="00:11:36.314" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""My own print to printing function""" start="00:11:39.520" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""is called PP with upper case letters,""" start="00:11:41.976" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and it works like this.""" start="00:11:44.451" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""It prints associative tables in a way like this.""" start="00:11:46.758" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""It says that for the key 1,""" start="00:11:52.073" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""the value associated to it is 2;""" start="00:11:54.126" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""for the key 2, the value is 3;""" start="00:11:56.603" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and for the key 3, the value is 5.""" start="00:11:59.079" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""When I started using Lua, one of my favorite languages""" start="00:12:09.240" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""was also a language that used associative tables a lot.""" start="00:12:12.380" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""It was called Icon. I had to write my own""" start="00:12:16.624" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""print to printing functions for Icon,""" start="00:12:20.340" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""so I just had to port my print to printing functions to Lua.""" start="00:12:23.395" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""My first version looked something like this.""" start="00:12:29.426" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""it just had some global functions. Lots of them actually.""" start="00:12:34.351" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""After a while, I rewrote it.""" start="00:12:40.080" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I rewrote it again and again and again.""" start="00:12:41.934" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""This is one of the versions""" start="00:12:44.504" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that is not even the default at this point.""" start="00:12:48.398" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""`tos` is for to string. This is a demo.""" start="00:12:53.752" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""It's very modular, so it's easy to replace parts of it""" start="00:12:57.703" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""or to toggle flags. This is an example.""" start="00:13:02.906" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""If I try to print the table of methods for a certain class--""" start="00:13:06.568" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I only need a smaller font--it prints the table like this""" start="00:13:11.798" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""with the names of the methods""" start="00:13:16.246" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and then links to the source code of the functions.""" start="00:13:18.511" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""These links only make sense in Emacs and in eev.""" start="00:13:22.360" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""When we run a link like this one,""" start="00:13:26.672" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""it shows the source code and the window at the right.""" start="00:13:30.297" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""For some functions, the source code is three lines.""" start="00:13:34.014" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""For other ones, it's one line and whatever.""" start="00:13:38.648" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Anyway, let me go back.""" start="00:13:42.320" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Lua can be used in many different styles.""" start="00:13:44.150" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Most people hate other people's styles.""" start="00:13:47.491" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""When I started using it in the year 2000,""" start="00:13:52.240" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I learned most of the basic language in a single day.""" start="00:13:55.253" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""It was very similar to things that I was already using.""" start="00:13:59.567" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Then I rewrote the mini language""" start="00:14:04.043" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that I was using to generate the HTML for my pages in Lua.""" start="00:14:08.389" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Actually, I had to rewrite it many times""" start="00:14:15.200" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""but the first version I certainly did""" start="00:14:17.592" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""in my first weeks or first months using Lua.""" start="00:14:21.368" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""In the beginning, I was just using it for writing programs""" start="00:14:25.740" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that either didn't take any input at all""" start="00:14:29.654" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""because the input was already in the source file,""" start="00:14:32.877" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""or that worked as a Unix function:""" start="00:14:36.728" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""the Unix programs that would read files,""" start="00:14:39.400" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""process these files in some way, and output something.""" start="00:14:42.452" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I mentioned the basic language here,""" start="00:14:49.560" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I only learned how to use closures, meta tables,""" start="00:14:52.201" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and coroutines many years later.""" start="00:14:55.626" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""In the beginning when I started using Lua""" start="00:15:00.600" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""it didn't have a package manager.""" start="00:15:02.589" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""It appeared later. It is called luarocks.""" start="00:15:04.200" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""It has had this package manager for several years.""" start="00:15:08.300" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Most of the rocks for luarocks are poorly documented""" start="00:15:13.180" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and hacker-unfriendly.""" start="00:15:17.243" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""You can't rely just on the documentation.""" start="00:15:18.898" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""You can't rely just on the source code,""" start="00:15:22.080" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""because--I mean, if you're a genius, of course you can,""" start="00:15:25.189" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""but for people who are either""" start="00:15:28.707" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""lazy or dumb or whatever like me, or unfocused,""" start="00:15:31.545" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""the source code is hard to understand""" start="00:15:35.896" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and hard to tinker with.""" start="00:15:39.491" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Some rocks are excellent.""" start="00:15:41.760" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""The best rocks are well documented,""" start="00:15:43.761" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""but they are hacker-unfriendly""" start="00:15:46.453" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""in the sense that I hope that I'll be able to explain soon.""" start="00:15:48.760" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""The best rocks use local variables and meta tables a lot,""" start="00:15:53.640" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""so if you are a beginner learning Lua""" start="00:15:59.467" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""you're not going to understand what their source codes do.""" start="00:16:02.906" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""They use lots of dirty tricks.""" start="00:16:08.246" video="mainVideo-repl" id="subtitle"]]
-
-[[!template new="1" text="""Object orientation in Lua""" start="00:16:10.960" video="mainVideo-repl" id="subtitle"]]
-
-[[!template text="""Let me talk a bit about object orientation in Lua.""" start="00:16:10.960" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""It can be done in many ways. The main book about Lua""" start="00:16:14.360" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""called Programming in Lua""" start="00:16:18.276" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""by one of the authors of the language""" start="00:16:20.141" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""called Roberto Ierusalimschy""" start="00:16:22.866" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""presents several ways of doing object orientation in Lua.""" start="00:16:24.730" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I hated all of these ways,""" start="00:16:28.680" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and also the ways that I tried from the rocks.""" start="00:16:31.387" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Then I wrote my own way""" start="00:16:36.057" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""of doing object orientation in Lua.""" start="00:16:37.934" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""It's very minimalistic. It's in this file here eoo.lua.""" start="00:16:40.348" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""The main code is just these five lines here.""" start="00:16:45.654" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Here's an example of how it works.""" start="00:16:49.899" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""We define a class vector with some meta methods.""" start="00:16:56.400" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""This meta method here will tell Lua""" start="00:17:03.002" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""what to do when the user asks to add two vectors.""" start="00:17:06.295" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""This one here tells Lua what to do""" start="00:17:10.868" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""when the user asks Lua to convert a vector to a string""" start="00:17:13.987" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and whatever. This one is something""" start="00:17:18.889" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that I'm going to explain in a second.""" start="00:17:22.008" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Here we create a vector""" start="00:17:25.580" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""with these coordinates 3 and 4.""" start="00:17:25.580" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Here we create another vector.""" start="00:17:25.581" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""If we print here,""" start="00:17:31.600" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""then Lua uses the function here in the `__tostring`.""" start="00:17:33.031" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""If we add two vectors""" start="00:17:37.154" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""it uses the function here in the `__add` meta method.""" start="00:17:38.908" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""If we run the method `norm`,""" start="00:17:42.654" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""it is defined here in the table index.""" start="00:17:45.045" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Anyway, even with this thing being so small,""" start="00:17:51.680" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I used to forget how it works all the time.""" start="00:17:57.676" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Actually, I always forget how things work,""" start="00:18:04.618" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and I have to remember them somehow.""" start="00:18:08.201" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I have to have tricks for remembering,""" start="00:18:11.348" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and tricks for summarizing things and diagrams, and so on.""" start="00:18:14.921" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Every time that I forgot how this thing worked,""" start="00:18:19.770" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I went back to the source code""" start="00:18:23.310" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and then I looked at the diagrams,""" start="00:18:25.461" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""or, of course, the first time,""" start="00:18:28.149" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I had to draw the diagrams. I run the examples.""" start="00:18:30.995" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Of course, in the beginning""" start="00:18:33.801" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I thought that the code was clear.""" start="00:18:35.540" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""My examples were very brief.""" start="00:18:37.504" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""So I had to rewrite the examples many times""" start="00:18:39.738" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""until they became let's say perfect.""" start="00:18:43.566" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I was saying that Lua can be used in many ways""" start="00:18:50.880" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and in my way of using Lua, in my favorite way,""" start="00:18:54.091" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""everything can be inspected and modified from REPLs""" start="00:18:58.404" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""like we can do in Emacs and in SmallTalk, sort of.""" start="00:19:03.076" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""In my favorite way of using Lua""" start="00:19:06.818" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""there's no security at all.""" start="00:19:09.437" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Everything can be changed at all times.""" start="00:19:11.532" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Of course, most people hate that.""" start="00:19:17.460" video="mainVideo-repl" id="subtitle"]]
-
-[[!template new="1" text="""My init file""" start="00:19:19.823" video="mainVideo-repl" id="subtitle"]]
-
-[[!template text="""My init file has lots of classes,""" start="00:19:19.823" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and by the way, instead of""" start="00:19:22.186" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""keeping many small files with many things,""" start="00:19:24.702" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I put lots of stuff in just one big init file.""" start="00:19:28.637" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""My init file has lots of classes,""" start="00:19:33.000" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and lots of global functions and lots of cruft,""" start="00:19:35.521" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""so people hate that, of course.""" start="00:19:39.188" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""This is an example.""" start="00:19:43.700" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""This is the index at the top of my init file.""" start="00:19:46.341" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""The classes start here. Then we have some functions""" start="00:19:52.416" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and then we have functions that load certain packages,""" start="00:19:57.542" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and then we have cruft, whatever.""" start="00:20:02.480" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Most people think that my style of using Lua""" start="00:20:06.580" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""is dirty and dangerous,""" start="00:20:08.924" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and they wouldn't touch my Lua code with a 10 feet pole,""" start="00:20:10.123" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""but most of the things""" start="00:20:14.288" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that I'm going to present here in this presentation""" start="00:20:15.969" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""are ideas that should be easy to port to other environments""" start="00:20:19.257" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and other languages, especially the diagrams,""" start="00:20:23.051" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""so the code is not so important.""" start="00:20:27.739" video="mainVideo-repl" id="subtitle"]]
-
-[[!template new="1" text="""LaTeX and LuaLaTeX""" start="00:20:31.000" video="mainVideo-repl" id="subtitle"]]
-
-[[!template text="""Now let me talk a bit about LaTeX, LuaLaTeX,""" start="00:20:31.000" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that is LaTeX with the Lua interpreter embedded inside""" start="00:20:34.641" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and two ways of generating pictures in LaTeX:""" start="00:20:39.250" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""TikZ that is very famous,""" start="00:20:43.183" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and Pict2e that is not very famous""" start="00:20:45.116" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and that is very low level,""" start="00:20:48.312" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and I think that not many people use.""" start="00:20:50.645" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I said before that when I learned Lua,""" start="00:20:53.840" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I realized that it was very good""" start="00:20:57.049" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""for writing literal languages.""" start="00:21:00.355" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I was doing my PhD at the time""" start="00:21:03.360" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and typesetting the diagrams for my PhD thesis""" start="00:21:05.987" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""was very boring.""" start="00:21:09.970" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""One of the things that I did was that""" start="00:21:11.240" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I created a literal language""" start="00:21:13.865" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""for typesetting the diagrams for me.""" start="00:21:15.721" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""It was called Dednat because initially""" start="00:21:19.340" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""it only generated diagrams for natural deduction""" start="00:21:22.822" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and then it had several versions.""" start="00:21:26.800" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""These are the slides from my presentation about Dednat6""" start="00:21:30.440" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and Dednat6 is an extensible semi preprocessor""" start="00:21:34.380" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""for LuaLaTeX that understands diagrams in ASCII art""" start="00:21:38.991" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""in the sense that when I have a TeX file that has this,""" start="00:21:43.692" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and when Dednat6 is loaded,""" start="00:21:49.035" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""when I get the right comments,""" start="00:21:52.144" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Dednat6 interprets this block here""" start="00:21:55.709" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""as something that defines this diagram.""" start="00:22:00.343" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""It interprets this diagram here,""" start="00:22:05.096" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""this diagram in the comments here,""" start="00:22:07.829" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""as something that defines a diagram called `foo`,""" start="00:22:10.644" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""a deduction called `foo`, and it generates this code here""" start="00:22:16.433" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""so that we can just invoke the definition of the deduction""" start="00:22:23.065" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""by typing `\ded{foo}`.""" start="00:22:28.868" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Dednat6 also supports another language""" start="00:22:31.720" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""for typesetting bidimensional diagrams with arrows and stuff""" start="00:22:36.149" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""for category theory and blah blah.""" start="00:22:40.580" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""The specifications of these diagrams""" start="00:22:43.123" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""look like this. Here is a very good example.""" start="00:22:46.100" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""This is a huge diagram. Sorry, one second.""" start="00:22:53.866" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""So the source code that generates this diagram here""" start="00:23:00.940" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""is just this thing at the left. It's very visual.""" start="00:23:04.758" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""We can typeset the diagram in ASCII art here.""" start="00:23:08.629" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Then in this part here,""" start="00:23:11.843" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""we tell how the nodes are to be joined,""" start="00:23:14.435" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""which arrows have to have annotations, and so on.""" start="00:23:18.274" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""This language is extensible in the sense that""" start="00:23:22.880" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""here, comments that start""" start="00:23:30.951" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""with `%:` are interpreted as definitions""" start="00:23:37.280" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""for tree diagrams,""" start="00:23:42.691" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""lines that start with `%D`""" start="00:23:44.820" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""define 2D diagrams with arrows and stuff,""" start="00:23:49.395" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and lines that start with command `%L`""" start="00:23:53.762" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""contain blocks of Lua code that we can use""" start="00:23:57.684" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""to extend the interpreter on the flag.""" start="00:24:01.198" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Anyway, here are some recent examples""" start="00:24:05.528" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""of diagrams that I used Dednat6 to typeset.""" start="00:24:09.747" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""This diagram here was generated by this specification here,""" start="00:24:16.147" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and this diagram here with the curved arrows""" start="00:24:24.495" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""was generated by this specification here.""" start="00:24:30.620" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Dednat6 was very easy to extend.""" start="00:24:36.200" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""At some point I started to use it to generate diagrams""" start="00:24:39.175" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""using Pict2e, mainly for the classes""" start="00:24:43.044" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that I give at the university,""" start="00:24:46.068" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I teach mathematics in a place.""" start="00:24:49.674" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Let me show an animation. Here is a diagram""" start="00:24:53.862" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that I generated with Dednat6.""" start="00:24:58.980" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""It is a flipbook animation,""" start="00:25:02.326" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""we type page up and page down,""" start="00:25:05.386" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and we go to the next page of the book""" start="00:25:08.254" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and to the previous page of the book.""" start="00:25:10.784" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Here is the source code that generates that.""" start="00:25:13.249" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""This source code is not very visual,""" start="00:25:16.925" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""so it's quite clumsy to edit""" start="00:25:19.701" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""a diagram directly in the TeX file like that.""" start="00:25:21.800" video="mainVideo-repl" id="subtitle"]]
-
-[[!template new="1" text="""Manim""" start="00:25:28.280" video="mainVideo-repl" id="subtitle"]]
-
-[[!template text="""These diagrams were inspired by something called Manim.""" start="00:25:28.280" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I've forgotten the name of the guy, but it's a guy""" start="00:25:33.438" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that makes many videos about mathematics,""" start="00:25:36.714" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and he created this library called Manim""" start="00:25:39.347" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""for generating his animations.""" start="00:25:43.374" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Other people adapted his library to make it more accessible.""" start="00:25:46.418" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I tried to learn it, but each animation,""" start="00:25:52.084" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""even an animation with very few frames,""" start="00:25:55.800" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""each animation took ages to render, so it wasn't fun.""" start="00:25:59.192" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Animations and PDFs can be rendered in seconds,""" start="00:26:03.771" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""so these things were fun for me""" start="00:26:08.346" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""because my laptop is very slow and Manim was not fun.""" start="00:26:11.161" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Anyway, writing code like this inside a TeX file""" start="00:26:17.440" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""was not very fun because it was hard to debug.""" start="00:26:24.264" video="mainVideo-repl" id="subtitle"]]
-
-[[!template new="1" text="""Generating diagrams from REPLs""" start="00:26:30.880" video="mainVideo-repl" id="subtitle"]]
-
-[[!template text="""In 2022, I started to play with ways""" start="00:26:30.880" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""of generating these diagrams from REPLs""" start="00:26:36.511" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and I found a way for Pict2e and a way for Tikz.""" start="00:26:42.000" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Each one of these ways became a video.""" start="00:26:46.310" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""If you go to the list of first class videos of eev,""" start="00:26:49.520" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""you're going to see""" start="00:26:53.221" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that there's a video about Pict2e here""" start="00:26:55.089" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and a video about Tikz.""" start="00:26:59.011" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Here you have some information""" start="00:27:01.159" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""like length and explanation, etc.""" start="00:27:04.188" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Here are the pages for these videos.""" start="00:27:07.509" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""My page about the video about Pict2e is like this.""" start="00:27:11.514" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""It has some diagrams. This one is much nicer.""" start="00:27:15.992" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""A lot of people watched that video. I mean,""" start="00:27:20.800" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I thought that 250 people watched it.""" start="00:27:26.606" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""For me, that's a million of people.""" start="00:27:31.080" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""This video is about how to extract diagrams""" start="00:27:35.345" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""from the Tikz manual, and how to run those examples in REPL""" start="00:27:40.403" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and modify them bit by bit. This is a screenshot.""" start="00:27:46.513" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Let me go back. At that point,""" start="00:27:52.937" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""these things were just prototypes,""" start="00:27:57.433" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""the code was not very nice,""" start="00:28:01.800" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and in this year I wrote...""" start="00:28:04.804" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I was able to unify those two ways of generating PDFs,""" start="00:28:07.593" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""the one for Tikz and the one for Pict2e.""" start="00:28:12.124" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I unified them with many other things""" start="00:28:15.666" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that generated diagrams.""" start="00:28:19.197" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""The basis of these things is something called Show2.lua.""" start="00:28:21.299" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I'm not going to just show its details now,""" start="00:28:28.431" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""but it's an extension that generates Tikz code.""" start="00:28:33.936" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""It's just this. We can specify a diagram""" start="00:28:38.776" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""with just a block like this, and then if we run `show00`,""" start="00:28:43.306" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""it returns a string""" start="00:28:50.539" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that is just the inner body of the TeX file.""" start="00:28:53.695" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""If we run this, we see the whole TeX file.""" start="00:28:59.480" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""If we run this we save the TeX file and""" start="00:29:02.307" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""we compile the TeX file to generate a PDF.""" start="00:29:05.200" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""If we run this, we show the PDF""" start="00:29:09.197" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""in the lower right window.""" start="00:29:12.558" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""That's the same thing for all my recent programs""" start="00:29:15.079" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that generate PDFs. They are all integrated.""" start="00:29:20.027" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Here is the basis for all my modules""" start="00:29:23.811" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that generate diagrams with Pict2e.""" start="00:29:28.268" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Its demos are not very interesting.""" start="00:29:31.424" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Let me show some demos of extensions""" start="00:29:34.338" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that do interesting things. This is a diagram""" start="00:29:38.557" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that I created by editing it in a REPL,""" start="00:29:43.724" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I create several Pict objects here.""" start="00:29:47.902" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""If I execute this, it compiles the object and""" start="00:29:51.872" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""generates a PDF. If I tap this, here is the PDF.""" start="00:29:57.819" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""If I just ask Lua to display what is pux here,""" start="00:30:04.524" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""it shows the source code in Pict2e of the diagram.""" start="00:30:10.920" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""The nice thing is that it is indented,""" start="00:30:17.436" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""so it's easy to debug the Pict2e code.""" start="00:30:20.933" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""If anyone is interested, the module that does the tricks""" start="00:30:24.349" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""for indentation is very easy to understand.""" start="00:30:28.505" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""it has lots of tests and test blocks,""" start="00:30:31.948" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and I think that its data structures are easy to understand.""" start="00:30:34.921" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Anyway, here is another example, the show is here.""" start="00:30:47.439" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""It generates a 3D diagram.""" start="00:30:57.905" video="mainVideo-repl" id="subtitle"]]
-
-[[!template new="1" text="""Parsers""" start="00:31:03.240" video="mainVideo-repl" id="subtitle"]]
-
-[[!template text="""Now let me talk about parsers""" start="00:31:03.240" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and REPLs in a very strange place.""" start="00:31:05.898" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I mean, using REPLs to build parsers step by step""" start="00:31:08.998" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and replacing parts by more complex parts.""" start="00:31:15.149" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I said that Lua is very minimalistic,""" start="00:31:20.439" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and everybody knows that""" start="00:31:24.493" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""implementations of regular expressions""" start="00:31:26.965" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""are big and complex. So instead of coming""" start="00:31:30.720" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""with full regular expressions,""" start="00:31:33.974" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Lua comes with something called patterns""" start="00:31:36.376" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and a library function called string.match.""" start="00:31:41.321" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Here is a copy of the part of the manual""" start="00:31:46.628" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that explains a part of the syntax of patterns.""" start="00:31:50.821" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Here's how string.match is described in the manual.""" start="00:31:55.729" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""It's just this: looks for the first match of pattern""" start="00:32:00.091" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""in the string s, blah blah blah.""" start="00:32:04.537" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Then we have to go to the other section of the manual""" start="00:32:06.546" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that explains patterns. Lua patterns are so simple,""" start="00:32:10.077" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""so limited, that they don't even have""" start="00:32:18.198" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""the alternation operator.""" start="00:32:23.222" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Here is how it is described in the elisp manual,""" start="00:32:26.659" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""`\|` specifies an alternative, blah blah blah.""" start="00:32:33.136" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""When we want to build more complex regular expressions,""" start="00:32:39.678" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""patterns, grammars, etc.,""" start="00:32:45.880" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""we have to use an external library for that.""" start="00:32:48.366" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""No, sorry, a library that is external,""" start="00:32:52.669" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""but that was written by one of the authors of Lua itself.""" start="00:32:56.208" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""This library is called Lpeg.""" start="00:33:01.472" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Its manual says Lpeg is""" start="00:33:03.944" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""a new pattern matching library for Lua""" start="00:33:06.331" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""based on parsing expression grammars (PEGs).""" start="00:33:09.654" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""The manual is very terse.""" start="00:33:14.773" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I found it incredibly hard to read.""" start="00:33:17.781" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""it doesn't have any diagrams.""" start="00:33:21.946" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""It has some examples, though.""" start="00:33:25.416" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""The Lua wiki has a big page called Lpeg Tutorial""" start="00:33:28.770" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""with lots of examples, but it also doesn't have diagrams.""" start="00:33:34.017" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I found some things incredibly hard to understand.""" start="00:33:39.560" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""For example, this is something""" start="00:33:43.132" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that is in the manual of Lpeg that I saw,""" start="00:33:45.080" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and I thought, wow, great, this makes all sense""" start="00:33:48.062" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and this is going to be very useful.""" start="00:33:51.480" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""It's a way to build grammars that can be recursive""" start="00:33:53.947" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and they sort of can encode BNF grammars,""" start="00:33:57.280" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""we just have to translate the BNF a bit""" start="00:34:01.301" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""to get rid of some recursions""" start="00:34:05.129" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and to translate them to something else.""" start="00:34:07.593" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""The manual also has some things that I thought,""" start="00:34:10.960" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""oh no, I don't have any idea of what this thing does.""" start="00:34:14.338" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""In fact, I saw these things for the first time""" start="00:34:17.846" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""more than 10 years ago, and they only started to make sense""" start="00:34:20.769" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""one year ago. One example is group captures.""" start="00:34:27.295" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Lpeg also comes with a module called the re module.""" start="00:34:32.273" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Let me pronounce it in Portuguese, the re module.""" start="00:34:37.835" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Its manual says the re module""" start="00:34:43.183" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""provided by the file re.lua in the distribution""" start="00:34:45.742" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""supports some odd conventional regular expression syntax""" start="00:34:49.504" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""for pattern usage within lpeg. This is a quick reference.""" start="00:34:56.758" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""This thing is very brief. It has some nice examples,""" start="00:35:04.520" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""but it's hard to understand anyway.""" start="00:35:08.465" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Here are some comments about""" start="00:35:11.120" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""my attempts to learn re.lua. This is a class.""" start="00:35:14.181" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""In this case, it's a very small class.""" start="00:35:18.632" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""This file implements a `pm` method.""" start="00:35:22.362" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I'm going to show examples of other `pm` methods very soon.""" start="00:35:26.092" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""So this is a `pm` method for re.lua""" start="00:35:31.401" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that lets us compare the syntax of lua patterns, lpeg,""" start="00:35:34.697" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and re. See this example here. If we run this,""" start="00:35:40.302" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""it loads my version of lpeg, no sorry,""" start="00:35:46.632" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""my version of lpegrex. It shows that""" start="00:35:51.380" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""when we apply the `pm` method to this Lua pattern,""" start="00:35:56.014" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""this lpeg pattern, and this re pattern,""" start="00:36:01.553" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""they all give the same results.""" start="00:36:05.960" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""So we can use this kind of thing here to show""" start="00:36:08.239" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""how to translate from Lua patterns that are familiar""" start="00:36:11.513" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""because they are similar to regular expressions,""" start="00:36:15.589" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""only weaker, to lpeg that is super weird,""" start="00:36:19.280" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and to re that is not so weird.""" start="00:36:25.252" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Anyway, the comment says that in 2012, I had a project""" start="00:36:30.085" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that needed a precedence parser""" start="00:36:35.426" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that could parse arithmetical expressions""" start="00:36:38.591" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""with the right precedences. At that point""" start="00:36:42.278" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I was still struggling with pure lpeg""" start="00:36:46.315" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and I couldn't do much with it,""" start="00:36:49.032" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""so I tried to learn re.lua instead,""" start="00:36:51.319" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and I wrote this old class here that allowed me to use""" start="00:36:54.577" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""a preprocessor on patterns for Lua.""" start="00:36:59.292" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""The thing is that with this preprocessor""" start="00:37:01.756" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I could specify precedence grammars using this thing here""" start="00:37:04.835" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that worked but was super clumsy,""" start="00:37:10.921" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and I gave up after a few attempts.""" start="00:37:14.489" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""And in 2022 I heard about something called lpegrex""" start="00:37:18.160" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that was a kind of extension of re,""" start="00:37:25.633" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and it was much more powerful than re.lua,""" start="00:37:30.760" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""but after a while I realized that""" start="00:37:33.046" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""it had the same defects as re.lua.""" start="00:37:35.785" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Let me explain that,""" start="00:37:38.766" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""because it has all to do with the things""" start="00:37:40.699" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""about black boxes and magic that I told in the beginning.""" start="00:37:43.920" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Neither re.lua or lpegrex had some features that I needed.""" start="00:37:52.027" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""They received a pattern that was specified as a string""" start="00:37:59.047" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and it converted that into an lpeg pattern,""" start="00:38:05.375" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""but it didn't let us explore the lpeg patterns""" start="00:38:08.869" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that it generated.""" start="00:38:12.520" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Their code was written in a way that was REPL-unfriendly.""" start="00:38:14.530" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I couldn't modify parts of the code bit by bit in a REPL""" start="00:38:20.663" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and try to change the code""" start="00:38:26.282" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""without changing the original file, say.""" start="00:38:28.944" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""The code was very hard to explore, to hack,""" start="00:38:32.036" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and to extend in my opinion.""" start="00:38:35.354" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""The documentation was not very clear,""" start="00:38:38.239" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and I sent wonderful messages to the""" start="00:38:42.019" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""developer of lpegrex, and he was too busy to help me.""" start="00:38:45.600" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""He answered very briefly. To be honest, I felt rejected.""" start="00:38:51.014" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I felt that I wasn't doing anything interesting, whatever.""" start="00:38:57.211" video="mainVideo-repl" id="subtitle"]]
-
-[[!template new="1" text="""ELpeg1.lua""" start="00:39:03.200" video="mainVideo-repl" id="subtitle"]]
-
-[[!template text="""So in 2022, I was trying to learn lpegrex""" start="00:39:03.200" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""because I was thinking that it would solve my problems,""" start="00:39:07.471" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""but it didn't. It didn't have the features that I needed,""" start="00:39:13.200" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and it was hard to extend and""" start="00:39:16.667" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""how to explore and hard to debug.""" start="00:39:18.400" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I decided to rewrite it in a more hacker-friendly way,""" start="00:39:22.303" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""in the sense that it was modular""" start="00:39:28.960" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and I could replace any part of the module from a REPL.""" start="00:39:32.036" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""My version of it was called ELpeg1.lua.""" start="00:39:37.160" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I decided that in my version I wouldn't""" start="00:39:42.641" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""have the part that receives a grammar""" start="00:39:48.120" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""specified as a string and converts that to lpeg.""" start="00:39:51.241" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I would just have the backend part""" start="00:39:55.266" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that are the functions in lpeg""" start="00:39:58.985" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that let us specify powerful grammars.""" start="00:40:02.172" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Let me go back. Let me explain a bit about lpeg.""" start="00:40:06.320" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Lua has coercions. The `+` expects to receive two numbers.""" start="00:40:15.162" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""If one of its arguments or both of them are strings,""" start="00:40:20.781" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""it converts the strings to numbers.""" start="00:40:25.931" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""So in this case here, `2 + &quot;3&quot;` returns the number 5.""" start="00:40:30.117" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""This is the concatenation operator.""" start="00:40:37.092" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""It expects to receive strings. In this case, it will""" start="00:40:40.441" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""convert the number 2 to the string &quot;2&quot;""" start="00:40:44.960" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and the concatenation of these two things will be""" start="00:40:47.542" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""&quot;23&quot;. Oops, sorry, &quot;23&quot; as a string.""" start="00:40:50.960" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""lpeg also has some coercions. I usually set these globals""" start="00:40:55.918" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""to let me write my grammars in a very compact way.""" start="00:41:04.480" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""So instead of lpeg.B, lpeg.C, etc.""" start="00:41:10.014" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I use globals like B, C, and so on.""" start="00:41:13.812" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""And with these globals I can write""" start="00:41:17.879" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""things like this, `C(1) * &quot;_&quot;`. And lpeg knows that lpeg.C,""" start="00:41:21.720" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""sorry, it sort of expands these to lpeg.C,""" start="00:41:36.048" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""but lpeg.C expects to receive an lpeg pattern""" start="00:41:41.148" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and 1 is not yet an lpeg pattern.""" start="00:41:43.591" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""So it is coerced into an lpeg pattern by calling lpeg.P.""" start="00:41:48.548" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""So this short thing here becomes equivalent to""" start="00:41:53.348" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""`lpeg.C(lpeg.P(1))`. And the multiplication when at least one of""" start="00:42:02.482" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""its arguments is an lpeg pattern, it expects to receive two lpeg patterns. And in this""" start="00:42:07.200" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""case the one at the right is just a string, so it is coerced to an lpeg pattern by using""" start="00:42:13.320" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""lpeg.P. With this idea we can sort of understand this comparison here. I mean, let me run it""" start="00:42:19.200" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""again. This first part is very similar to a regular expression here at the left. And""" start="00:42:29.360" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""when we apply this lpeg, sorry, this lua pattern to this subject here, the result is this thing""" start="00:42:37.440" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""here, this thing, this thing and this thing. I'm going to call each one of these results""" start="00:42:51.440" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""captures. So each of these things between parentheses captures a substring of the original""" start="00:42:56.040" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""string and these captured substrings are returned in a certain order. Here is how to express""" start="00:43:04.080" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""the same thing in lpeg. It's very cryptic, but it's a good way to understand some basic""" start="00:43:11.520" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""operators of lpeg. I mean, we can look at the menu and understand what C, S and R do""" start="00:43:20.720" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and also exponentiation. And this strange thing here receives this string here, runs""" start="00:43:29.880" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""a function that I have defined that converts it to an object of a certain class and that""" start="00:43:41.360" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""class represents re patterns. So this thing is treated as a pattern for re.lua and it""" start="00:43:46.760" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""is matched again the string and it returns the same thing as the other one. Also this""" start="00:43:55.240" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""thing here also has a comparison with lpeg.rex, but these patterns are very, very trivial.""" start="00:44:04.040" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""They don't do anything very strange. So let's go back and see what kinds of very strange""" start="00:44:10.680" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""things there are. Here is the page of lpeg.rex at GitHub. Here is the documentation. It's""" start="00:44:17.340" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""relatively brief. It explains lpeg.rex as being an extension of re.lua. So""" start="00:44:31.480" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""it explains mainly the additional features. Here is a quick reference that explains only""" start="00:44:39.120" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""the additional features. Some of these things I was able to understand by struggling a lot,""" start="00:44:44.880" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and some I wasn't able to even by spending several evenings trying to build examples.""" start="00:44:56.840" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""This is something very nice. lpeg.rex comes with some example parsers. Here is""" start="00:45:08.720" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""a parser that parses the lua grammar. I mean, this is the grammar for lua 5.4 at the end""" start="00:45:16.600" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""of the reference manual. It's just this. And this is a kind of BNF, and this is the BNF""" start="00:45:25.720" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""translated to the language of lpeg.rex. This thing uses many constructions that are""" start="00:45:35.080" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""in re.lua and some extra constructions that are described here. With these examples,""" start="00:45:43.840" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I was able to understand some of these things here that are described here in the quick""" start="00:45:51.840" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""reference, but not all. So I wasn't able to use lpeg.rex by itself because some things""" start="00:46:00.280" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""didn't make much sense. I decided to re implement it in my own style because that""" start="00:46:13.840" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""would be a way to map... at the very least, map what I understood and what I didn't and""" start="00:46:21.560" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""learn one feature at a time, do comparisons and so on. Here I pointed to two features""" start="00:46:29.120" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""of lpeg. One I said, oh great, this thing can be used to define grammars, even recursive""" start="00:46:38.160" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""grammars and so on. And this is an &quot;oh no&quot; feature. One thing that didn't make any sense at all:""" start="00:46:44.880" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""group captures. One thing that I did to understand group captures was to represent them as diagrams.""" start="00:46:52.260" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""Of course in the beginning I was drawing these diagrams by hand, but then I realized that""" start="00:47:01.760" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I could use the bits of lpeg that I already knew to build a grammar that would parse a""" start="00:47:08.200" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""little language and generate these diagrams in LaTeX. I was able to make this. In""" start="00:47:16.680" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""this diagram here, this thing above the arrow is a piece of Lua code that specifies an lpeg""" start="00:47:24.400" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""pattern. This thing here at the top is the string that is being matched and the things""" start="00:47:35.520" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""below the under braces are the captures that each thing captures. For example, this under""" start="00:47:43.160" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""brace here corresponds to this pattern here that parses a single character but doesn't""" start="00:47:57.880" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""return any captures. This thing here parses a single B and doesn't return any captures.""" start="00:48:03.520" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""This thing here parses a single character and captures it. And this thing here parses""" start="00:48:10.680" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""the character D and captures it. And this other thing here that transforms this pattern""" start="00:48:17.800" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""into another pattern returns first a capture with all the string that was parsed by this""" start="00:48:24.920" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""pattern here and then all the captures returned by this thing here before the column. So this""" start="00:48:35.040" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""was a way to build concrete examples for things that the lpeg manual was explaining in a very""" start="00:48:44.000" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""terse way and it worked for me. Some things that were very mysterious started to make""" start="00:48:51.840" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""sense and I started to have intelligent questions to ask in the mailing list. With that""" start="00:48:58.600" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I was able to understand what are group captures that receive a name. Well, let me explain""" start="00:49:10.200" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""what this does. This thing here parses the empty string and returns this as a constant.""" start="00:49:22.040" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""So this is something that doesn't exist in regular expressions. It parses nothing and""" start="00:49:30.400" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""returns this as a capture. Then this thing here returns two constants here and parses""" start="00:49:38.520" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""the empty string. And this thing here, D, converts the results of this thing here into""" start="00:49:46.800" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""a group capture and stores it in the label D. And then here's another constant capture.""" start="00:49:54.440" video="mainVideo-repl" id="subtitle"]]
-
-[[!template new="1" text="""Building lists""" start="00:50:04.160" video="mainVideo-repl" id="subtitle"]]
-
-[[!template text="""I realized that these things here were similar to how Lua specifies building lists.""" start="00:50:04.160" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""When we build a table and we say that the first element of the table is here, this element""" start="00:50:15.560" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""is put at the end of the table. After that we say D equals to say 42. We are putting""" start="00:50:22.320" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""the 42 in the slot whose key is D. This was happening with lpeg captures but there was""" start="00:50:30.600" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""something very strange. These group captures could hold more than one capture, more than""" start="00:50:39.880" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""one value. So there was something between lists and tables. I started to use this notation""" start="00:50:49.320" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""to explain in my notation what they were doing. Many things started to make sense, many mysterious""" start="00:50:57.400" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""sentences in the manual started to make sense but some didn't. But at least I was able to""" start="00:51:09.840" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""send some intelligent questions to the mailing list and the author of Lua and LPEG answered""" start="00:51:20.480" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""some of them. He was not very happy about my questions. He told me that those diagrams""" start="00:51:26.960" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""were a waste of time, the manual was perfectly clear and so on, whatever. So it was weird,""" start="00:51:35.920" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""but I was able to understand lots of things from his answers. So this is a copy of one""" start="00:51:47.280" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""of my messages, then there's another one, another one, some of the diagrams. Then he""" start="00:51:56.440" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""complained about these diagrams, he said that these things here that look like table constructions""" start="00:52:02.040" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""do not exist, whatever. Anyway, once I understood group captures, many features were very easy""" start="00:52:10.080" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""to understand and I started to be able to use lpeg to build some very interesting things.""" start="00:52:22.720" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I was able to reproduce some of the features that I saw in lpegrex. Remember that this""" start="00:52:30.800" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""is a syntax of Lua. Here I was able to understand how these things here were translated to lpeg""" start="00:52:39.600" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""code, to lpeg patterns by using group captures in a certain way. I was able to implement""" start="00:52:53.400" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""them in ELpeg1.lua. after some time I was able to use ELpeg1.lua to build grammars that""" start="00:53:02.880" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""were able to parse arithmetical expressions with the right precedence. here's an example""" start="00:53:13.080" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""in which I built the grammar step by step and I test the current grammar and I replace""" start="00:53:21.080" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""a bit and then I test the new grammar and so on. You can see that the result is""" start="00:53:26.920" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""always a tree that is drawn in a nice two dimensional way. At this point, these powers""" start="00:53:34.400" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""here are returned as a list, as an operation power with several arguments here and then""" start="00:53:48.720" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I apply a kind of parsing combinator here that transforms these trees into other trees""" start="00:53:57.760" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and with these combinators here I can specify that the power is associative in a certain""" start="00:54:05.560" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""direction, the division is associative in another direction, the minus uses the same""" start="00:54:14.200" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""direction as a division and so on and they have the right precedences. So here are the""" start="00:54:22.320" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""tests. So here's my file ELpeg.lua, it has several classes. Each class has tests after""" start="00:54:29.520" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""it. I was able to implement something that lpeg.rex has that's called keywords, that's""" start="00:54:42.360" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""very useful for parsing problems in programming languages. I was able to implement something""" start="00:54:52.040" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""similar to the debugger, to the pack debugger that lpeg uses, but I was frustrated by some""" start="00:54:59.160" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""limitations of the debugger and I implemented my own that is much better and let me show""" start="00:55:10.640" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""something else. I was able to translate a good part of the Lua parser here to lpeg1.lua.""" start="00:55:23.280" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""I haven't finished yet but I have most of the translation here and after having all""" start="00:55:33.800" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that I was able to build other grammars very quickly. Writing new parsers finally became""" start="00:55:45.880" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""fun and here's one example that I showed in the beginning. If I remember correctly, I""" start="00:55:54.960" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""took a figure from the Wikipedia, I don't have its link now, but I specify a grammar""" start="00:56:08.560" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that parses exactly the example that appears in the Wikipedia. So with my grammar, considering""" start="00:56:15.680" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""that the top level entry is statement, when I parse this string here, the result is this""" start="00:56:24.280" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""tree and I can do some operations on that. I can define how this thing is to be converted""" start="00:56:36.680" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""into LaTeX. I can define other operations that convert trees into other trees and here's""" start="00:56:44.840" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""some tests of these operations. This is what I showed in the beginning. I'm not going to""" start="00:56:53.400" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""explain all the details of this thing now. This show converts this thing into LaTeX in""" start="00:57:01.760" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""the way specified by these instructions here. And here's the result, the LaTeX result.""" start="00:57:10.480" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""These diagrams here are generated by this file here that defines a simple grammar that""" start="00:57:39.320" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""parses this thing here and then LaTeX it in a certain way and also tests to check if this""" start="00:57:46.880" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""code here that is Lua code that generates an lpeg grammar, parses this subject here, and""" start="00:57:56.720" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""returns the expected result. So this is the code that I wanted to show. I wanted to show""" start="00:58:06.600" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""many more things, but I wasn't able to prepare them before the conference. And I hope that""" start="00:58:16.880" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""soon, for some value of soon, I'll be able to create REPL based tutorials for LPG, G and""" start="00:58:23.920" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""ELpeg1.Lua where Lpeg is something very famous. Here is a module of LPG. I could also do something""" start="00:58:33.240" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""like this for ELpeg, and ELpeg1.lua is the thing that I wrote, the one that has tests in comments""" start="00:58:42.080" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""and the tests usually generate trees and sometimes they generate tag code. So that's it, I wanted""" start="00:58:55.600" video="mainVideo-repl" id="subtitle"]]
-[[!template text="""to present much more, but I wasn't able to prepare it. So sorry, thanks, bye!""" start="00:59:04.920" video="mainVideo-repl" id="subtitle"]]
-
Questions or comments? Please e-mail [eduardoochs@gmail.com](mailto:eduardoochs@gmail.com?subject=Comment%20for%20EmacsConf%202023%20repl%3A%20REPLs%20in%20strange%20places%3A%20Lua%2C%20LaTeX%2C%20LPeg%2C%20LPegRex%2C%20TikZ)
diff --git a/2023/info/repl-before.md b/2023/info/repl-before.md
index 5d509837..dccbc016 100644
--- a/2023/info/repl-before.md
+++ b/2023/info/repl-before.md
@@ -7,6 +7,6 @@ Status: Q&A to be extracted from the room recordings
-<div class="vid"><video controls preload="none" id="repl-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--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>Duration: 59:10 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.opus">Download --main.opus (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.webm">Download --main.webm (187MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/oAjqkLNfo9B63EE1G6cJJV">View on Toobnix</a></li></ul></div></div>
+<div class="vid"><video controls preload="none" id="repl-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.webm" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 59:10 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.opus">Download --main.opus (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.webm">Download --main.webm (187MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/oAjqkLNfo9B63EE1G6cJJV">View on Toobnix</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/sat-close-before.md b/2023/info/sat-close-before.md
index 9c154beb..e2d9c1a8 100644
--- a/2023/info/sat-close-before.md
+++ b/2023/info/sat-close-before.md
@@ -9,10 +9,10 @@ Status: Q&A to be extracted from the room recordings
# Talk
-<div class="vid"><video controls preload="none" id="sat-close-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.webm" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 09:00 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--pad.md">Download --pad.md</a></li><li><a href="https://www.youtube.com/playlist?list=PLomc4HLgvuCUdrW3JkugtKv8xPelUoOyP">View on Toobnix</a></li></ul></div></div>
+<div class="vid"><video controls preload="none" id="sat-close-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.webm" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 09:00 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.opus">Download --main.opus (4.7MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--pad.md">Download --pad.md</a></li><li><a href="https://www.youtube.com/playlist?list=PLomc4HLgvuCUdrW3JkugtKv8xPelUoOyP">View on Toobnix</a></li></ul></div></div>
# Q&A
-<div class="vid"><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--pad.md">Download --pad.md</a></li></ul></div></div>
+<div class="vid"><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.opus">Download --main.opus (4.7MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--pad.md">Download --pad.md</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/sun-close-before.md b/2023/info/sun-close-before.md
index 17d56fc6..521f88eb 100644
--- a/2023/info/sun-close-before.md
+++ b/2023/info/sun-close-before.md
@@ -7,6 +7,6 @@ Status: Q&A to be extracted from the room recordings
-<div class="vid"><video controls preload="none" id="sun-close-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--main.webm" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 2:00:43 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--main.webm">Download --main.webm (279MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/p/nMXCCJ25wxKUtbuQiwkakA">View on Toobnix</a></li></ul></div></div>
+<div class="vid"><video controls preload="none" id="sun-close-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--main.webm" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 2:00:43 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--main.opus">Download --main.opus (71MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--main.webm">Download --main.webm (279MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/p/nMXCCJ25wxKUtbuQiwkakA">View on Toobnix</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/test-before.md b/2023/info/test-before.md
index db0cbbd1..f5958b9f 100644
--- a/2023/info/test-before.md
+++ b/2023/info/test-before.md
@@ -37,6 +37,6 @@ Status: Q&A to be extracted from the room recordings
# Q&A
-<div class="vid"><video controls preload="none" id="test-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.webm" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 26:22 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.webm">Download --answers.webm (41MB)</a></li></ul></div></div>
+<div class="vid"><video controls preload="none" id="test-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.webm" /><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="test-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.opus"></audio></div><div></div>Duration: 26:22 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.opus">Download --answers.opus (9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.webm">Download --answers.webm (41MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/schedule-details.md b/2023/schedule-details.md
index 1ee8098f..187e7232 100644
--- a/2023/schedule-details.md
+++ b/2023/schedule-details.md
@@ -11,13 +11,13 @@ Jump to: <a href="#date-2023-12-02">Sat Dec 2</a> - <a href="#date-2023-12-03">S
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers--original.vtt">Download --answers--original.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.opus">Download --answers.opus (34MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.webm">Download --answers.webm (205MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.opus">Download --main.opus (9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--pad.md">Download --pad.md</a></li>""" title="""Enhancing productivity with voice computing""" url="""/2023/talks/voice""" speakers="""Blaine Mooers""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""voice""" note="""captioned, video posted, video: 18:49"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--alternative.mp4">Download --alternative.mp4 (126MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--alternative.webm">Download --alternative.webm (45MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.opus">Download --main.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.webm">Download --main.webm (45MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--pad.md">Download --pad.md</a></li>""" title="""Who needs Excel? Managing your students qualifications with org-table""" url="""/2023/talks/table""" speakers="""Daniel Molina""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""table""" note="""captioned, video posted, video: 15:51"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.opus">Download --answers.opus (17MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.webm">Download --answers.webm (46MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.opus">Download --main.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.webm">Download --main.webm (50MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--pad.md">Download --pad.md</a></li>""" title="""LLM clients in Emacs, functionality and standardization""" url="""/2023/talks/llm""" speakers="""Andrew Hyatt""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""llm""" note="""captioned, video posted, video: 20:26, answers: 28:32"""]]
-[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.webm">Download --answers.webm (96MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.opus">Download --main.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.webm">Download --main.webm (54MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--pad.md">Download --pad.md</a></li>""" title="""one.el: the static site generator for Emacs Lisp Programmers""" url="""/2023/talks/one""" speakers="""Tony Aldon""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""one""" note="""captioned, video posted, video: 22:18, answers: 27:39"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.opus">Download --answers.opus (15MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.webm">Download --answers.webm (96MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.opus">Download --main.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.webm">Download --main.webm (54MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--pad.md">Download --pad.md</a></li>""" title="""one.el: the static site generator for Emacs Lisp Programmers""" url="""/2023/talks/one""" speakers="""Tony Aldon""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""one""" note="""captioned, video posted, video: 22:18, answers: 27:39"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.opus">Download --answers.opus (9.4MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.webm">Download --answers.webm (35MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.opus">Download --main.opus (5.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.webm">Download --main.webm (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen.pdf">Download .pdf</a></li>""" title="""Emacs turbo-charges my writing""" url="""/2023/talks/writing""" speakers="""Jeremy Friesen""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""writing""" note="""captioned, video posted, video: 08:53, answers: 15:53"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.opus">Download --answers.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.webm">Download --answers.webm (20MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--expr_depth.svg">Download --expr_depth.svg</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.opus">Download --main.opus (15MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.webm">Download --main.webm (63MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--testdata.org">Download --testdata.org</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull.org">Download .org</a></li>""" title="""Improving compiler diagnostics with overlays""" url="""/2023/talks/overlay""" speakers="""Jeff Trull""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""overlay""" note="""captioned, video posted, video: 20:57, answers: 11:48"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers--original.vtt">Download --answers--original.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.opus">Download --answers.opus (3.1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.webm">Download --answers.webm (9.1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.opus">Download --main.opus (6.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.webm">Download --main.webm (22MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--silence.mkv">Download --silence.mkv (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen.org">Download .org</a></li>""" title="""Why Nabokov would use Org-Mode if he were writing today""" url="""/2023/talks/nabokov""" speakers="""Edmund Jorgensen""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""nabokov""" note="""captioned, video posted, video: 09:51, answers: 09:21"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.opus">Download --main.opus (4.2MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.webm">Download --main.webm (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--pad.md">Download --pad.md</a></li>""" title="""Editor Integrated REPL Driven Development for all languages""" url="""/2023/talks/eval""" speakers="""Musa Al-hassy""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""eval""" note="""captioned, video posted, video: 09:37"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.opus">Download --main.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.webm">Download --main.webm (62MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--room-noise.webm">Download --room-noise.webm</a></li>""" title="""Collaborative data processing and documenting using org-babel""" url="""/2023/talks/collab""" speakers="""Jonathan Hartman, Lukas C. Bossert""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""collab""" note="""captioned, video posted, video: 19:16"""]]
-[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.opus">Download --main.opus (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.webm">Download --main.webm (187MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--pad.md">Download --pad.md</a></li>""" title="""REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ""" url="""/2023/talks/repl""" speakers="""Eduardo Ochs""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""repl""" note="""video posted, video: 59:10"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.opus">Download --main.opus (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.webm">Download --main.webm (187MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--pad.md">Download --pad.md</a></li>""" title="""REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ""" url="""/2023/talks/repl""" speakers="""Eduardo Ochs""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""repl""" note="""video posted, video: 59:10"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.opus">Download --answers.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.webm">Download --answers.webm (43MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.opus">Download --main.opus (6.6MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.webm">Download --main.webm (52MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--pad.md">Download --pad.md</a></li>""" title="""How I play TTRPGs in Emacs""" url="""/2023/talks/solo""" speakers="""Howard Abrams""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""solo""" note="""captioned, video posted, video: 14:36, answers: 19:20"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.ogg">Download --main.ogg (7.9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.opus">Download --main.opus (7.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.webm">Download --main.webm (38MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--pad.md">Download --pad.md</a></li>""" title="""Org-Mode workflow: informal reference tracking""" url="""/2023/talks/ref""" speakers="""Christopher Howard""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""ref""" note="""captioned, video posted, video: 15:04"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.opus">Download --answers.opus (18MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.webm">Download --answers.webm (69MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.opus">Download --main.opus (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.webm">Download --main.webm (133MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--pad.md">Download --pad.md</a></li>""" title="""Literate Documentation with Emacs and Org Mode""" url="""/2023/talks/doc""" speakers="""Mike Hamrick""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""doc""" note="""captioned, video posted, video: 42:45, answers: 11:00"""]]
@@ -25,7 +25,7 @@ Jump to: <a href="#date-2023-12-02">Sat Dec 2</a> - <a href="#date-2023-12-03">S
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.opus">Download --main.opus (7.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.webm">Download --main.webm (38MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--pad.md">Download --pad.md</a></li>""" title="""Emacs development updates""" url="""/2023/talks/devel""" speakers="""John Wiegley""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""devel""" note="""video posted, video: 23:22"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.opus">Download --answers.opus (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.opus">Download --main.opus (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.webm">Download --main.webm (80MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--pad.md">Download --pad.md</a></li>""" title="""Windows into Freedom""" url="""/2023/talks/windows""" speakers="""Corwin Brust""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""windows""" note="""video posted, video: 57:48"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.opus">Download --main.opus (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.webm">Download --main.webm (211MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--pad.md">Download --pad.md</a></li>""" title="""Emacs core development: how it works""" url="""/2023/talks/core""" speakers="""Stefan Kangas""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""core""" note="""video posted, video: 1:07:13"""]]
-[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--pad.md">Download --pad.md</a></li>""" title="""Saturday closing remarks""" url="""/2023/talks/sat-close""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""sat-close""" note="""video posted, video: 09:00"""]]</div>
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.opus">Download --main.opus (4.7MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--pad.md">Download --pad.md</a></li>""" title="""Saturday closing remarks""" url="""/2023/talks/sat-close""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""sat-close""" note="""video posted, video: 09:00"""]]</div>
Jump to: <a href="#date-2023-12-02">Sat Dec 2</a> - <a href="#date-2023-12-03">Sun Dec 3</a><a name="date-2023-12-03"></a>
# Sunday Dec 3, 2023
@@ -35,22 +35,22 @@ Jump to: <a href="#date-2023-12-02">Sat Dec 2</a> - <a href="#date-2023-12-03">S
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--main.opus">Download --main.opus (2.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--main.webm">Download --main.webm (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--pad.md">Download --pad.md</a></li>""" title="""Sunday opening remarks""" url="""/2023/talks/sun-open""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""sun-open""" note="""captioned, video posted, video: 05:17"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.opus">Download --main.opus (37MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.webm">Download --main.webm (234MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--pad.md">Download --pad.md</a></li>""" title="""Top 10 ways Hyperbole amps up Emacs""" url="""/2023/talks/hyperamp""" speakers="""Robert Weiner""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""hyperamp""" note="""video posted, video: 1:05:16"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.opus">Download --main.opus (4.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.webm">Download --main.webm (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--pad.md">Download --pad.md</a></li>""" title="""Using Koutline for stream of thought journaling""" url="""/2023/talks/koutline""" speakers="""Matthew Jorgensen (PlasmaStrike)""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""koutline""" note="""video posted, video: 06:44"""]]
-[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers.webm">Download --answers.webm (57MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.opus">Download --main.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.webm">Download --main.webm (54MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--pad.md">Download --pad.md</a></li>""" title="""Bringing joy to Scheme programming""" url="""/2023/talks/scheme""" speakers="""Andrew Tropin""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""scheme""" note="""captioned, video posted, video: 21:01"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers.opus">Download --answers.opus (5.1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers.webm">Download --answers.webm (57MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.opus">Download --main.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.webm">Download --main.webm (54MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--pad.md">Download --pad.md</a></li>""" title="""Bringing joy to Scheme programming""" url="""/2023/talks/scheme""" speakers="""Andrew Tropin""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""scheme""" note="""captioned, video posted, video: 21:01"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.opus">Download --answers.opus (6.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.webm">Download --answers.webm (10MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main-vp8.webm">Download --main-vp8.webm (95MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.opus">Download --main.opus</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.webm">Download --main.webm (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--pad.md">Download --pad.md</a></li>""" title="""Parallel text replacement""" url="""/2023/talks/parallel""" speakers="""Lovro, Valentino Picotti""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""parallel""" note="""captioned, video posted, video: 14:46, answers: 10:16"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.opus">Download --main.opus</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.webm">Download --main.webm (39MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--pad.md">Download --pad.md</a></li>""" title="""Eat and Eat powered Eshell, fast featureful terminal inside Emacs""" url="""/2023/talks/eat""" speakers="""Akib Azmain Turja""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""eat""" note="""video posted, video: 08:13"""]]
-[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers.webm">Download --answers.webm (38MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.opus">Download --main.opus (9.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.webm">Download --main.webm (66MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--pad.md">Download --pad.md</a></li>""" title="""GNU Emacs: A World of Possibilities""" url="""/2023/talks/world""" speakers="""Anand Tamariya""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""world""" note="""captioned, video posted, video: 20:31"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers.opus">Download --answers.opus (4.2MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers.webm">Download --answers.webm (38MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.opus">Download --main.opus (9.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.webm">Download --main.webm (66MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--pad.md">Download --pad.md</a></li>""" title="""GNU Emacs: A World of Possibilities""" url="""/2023/talks/world""" speakers="""Anand Tamariya""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""world""" note="""captioned, video posted, video: 20:31"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--main.opus">Download --main.opus (20MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--main.webm">Download --main.webm (185MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--pad.md">Download --pad.md</a></li>""" title="""The browser in a buffer""" url="""/2023/talks/poltys""" speakers="""Michael Bauer""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""poltys""" note="""video posted, video: 34:30"""]]
-[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.webm">Download --main.webm (121MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--pad.md">Download --pad.md</a></li>""" title="""A modern Emacs look-and-feel without pain""" url="""/2023/talks/flat""" speakers="""Pedro A. Aranda""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""flat""" note="""video posted, video: 22:20"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.opus">Download --main.opus (10MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.webm">Download --main.webm (121MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--pad.md">Download --pad.md</a></li>""" title="""A modern Emacs look-and-feel without pain""" url="""/2023/talks/flat""" speakers="""Pedro A. Aranda""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""flat""" note="""video posted, video: 22:20"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--alternative.webm">Download --alternative.webm (16MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.opus">Download --main.opus (8.6MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.vtt.diff">Download --main.vtt.diff</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.webm">Download --main.webm (57MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--presentation.webm">Download --presentation.webm (16MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--solve-demo.webm">Download --solve-demo.webm (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann.pdf">Download .pdf</a></li>""" title="""Speedcubing in Emacs""" url="""/2023/talks/cubing""" speakers="""wasamasa""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""cubing""" note="""captioned, video posted, video: 13:35"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers--original.vtt">Download --answers--original.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.opus">Download --answers.opus (39MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.webm">Download --answers.webm (253MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.opus">Download --main.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--pad.md">Download --pad.md</a></li>""" title="""The Emacsen family, the design of an Emacs and the importance of Lisp""" url="""/2023/talks/emacsen""" speakers="""Fermin""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""emacsen""" note="""captioned, video posted, video: 18:28"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.opus">Download --answers.opus (19MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.webm">Download --answers.webm (52MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.opus">Download --main.opus (21MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.webm">Download --main.webm (139MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin.outline">Download .outline</a></li>""" title="""Emacs MultiMedia System (EMMS)""" url="""/2023/talks/emms""" speakers="""Yoni Rabkin""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""emms""" note="""captioned, video posted, video: 38:38, answers: 32:38"""]]
-[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers.webm">Download --answers.webm (115MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.opus">Download --main.opus (22MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.webm">Download --main.webm (80MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--pad.md">Download --pad.md</a></li>""" title="""emacs-gc-stats: Does garbage collection actually slow down Emacs?""" url="""/2023/talks/gc""" speakers="""Ihor Radchenko""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""gc""" note="""video posted, video: 33:22"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers.opus">Download --answers.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers.webm">Download --answers.webm (115MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.opus">Download --main.opus (22MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.webm">Download --main.webm (80MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--pad.md">Download --pad.md</a></li>""" title="""emacs-gc-stats: Does garbage collection actually slow down Emacs?""" url="""/2023/talks/gc""" speakers="""Ihor Radchenko""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""gc""" note="""video posted, video: 33:22"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.opus">Download --answers.opus (9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.webm">Download --answers.webm (48MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--intro.webm">Download --intro.webm (996kB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.opus">Download --main.opus (18MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.webm">Download --main.webm (149MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--pad.md">Download --pad.md</a></li>""" title="""hyperdrive.el: Peer-to-peer filesystem in Emacs""" url="""/2023/talks/hyperdrive""" speakers="""Joseph Turner and Protesilaos Stavrou""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""hyperdrive""" note="""captioned, video posted, video: 40:03, answers: 28:15"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.opus">Download --main.opus (13MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.webm">Download --main.webm (66MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--pad.md">Download --pad.md</a></li>""" title="""Programming with steno""" url="""/2023/talks/steno""" speakers="""Daniel Alejandro Tapia""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""steno""" note="""captioned, video posted, video: 25:03"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers--original.vtt">Download --answers--original.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers--trimmed.webm">Download --answers--trimmed.webm (176MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.opus">Download --answers.opus (25MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.webm">Download --answers.webm (176MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.opus">Download --main.opus (6.2MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.webm">Download --main.webm (26MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen.pdf">Download .pdf</a></li>""" title="""Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)""" url="""/2023/talks/mentor""" speakers="""Jeremy Friesen""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""mentor""" note="""captioned, video posted, video: 10:44, answers: 1:13:43"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.opus">Download --answers.opus (8.2MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.webm">Download --answers.webm (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.opus">Download --main.opus (8.7MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.webm">Download --main.webm (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault.pdf">Download .pdf (87MB)</a></li>""" title="""Writing a language server in OCaml for Emacs, fun, and profit""" url="""/2023/talks/lspocaml""" speakers="""Austin Theriault""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""lspocaml""" note="""captioned, video posted, video: 16:04, answers: 14:24"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.opus">Download --answers.opus (7.6MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.webm">Download --answers.webm (18MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.opus">Download --main.opus (17MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.webm">Download --main.webm (53MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei.org">Download .org</a></li>""" title="""Emacs saves the Web (maybe)""" url="""/2023/talks/web""" speakers="""Yuchen Pei""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""web""" note="""captioned, video posted, video: 31:33, answers: 15:53"""]]
-[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.webm">Download --answers.webm (41MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.opus">Download --main.opus (13MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.webm">Download --main.webm (57MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--transcript.txt">Download --transcript.txt</a></li>""" title="""What I learned by writing test cases for GNU Hyperbole""" url="""/2023/talks/test""" speakers="""Mats Lidell""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""test""" note="""captioned, video posted, video: 26:55, answers: 26:22"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.opus">Download --answers.opus (9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.webm">Download --answers.webm (41MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.opus">Download --main.opus (13MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.webm">Download --main.webm (57MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--transcript.txt">Download --transcript.txt</a></li>""" title="""What I learned by writing test cases for GNU Hyperbole""" url="""/2023/talks/test""" speakers="""Mats Lidell""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""test""" note="""captioned, video posted, video: 26:55, answers: 26:22"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.opus">Download --answers.opus (16MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.webm">Download --answers.webm (44MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.opus">Download --main.opus (8.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.webm">Download --main.webm (47MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--previous.mkv">Download --previous.mkv (377MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--script.txt">Download --script.txt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman.txt">Download .txt</a></li>""" title="""Sharing Emacs is Caring Emacs: Emacs education and why I embraced video""" url="""/2023/talks/sharing""" speakers="""Jacob Boxerman""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""sharing""" note="""captioned, video posted, video: 16:34, answers: 25:19"""]]
-[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.webm">Download --answers.webm (317MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.opus">Download --main.opus (8.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.webm">Download --main.webm (37MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--pad.md">Download --pad.md</a></li>""" title="""EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference""" url="""/2023/talks/emacsconf""" speakers="""Sacha Chua""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""emacsconf""" note="""captioned, video posted, video: 15:05, answers: 2:00:43"""]]
-[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--main.webm">Download --main.webm (279MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--pad.md">Download --pad.md</a></li>""" title="""Sunday closing remarks""" url="""/2023/talks/sun-close""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""sun-close""" note="""video posted, video: 2:00:43"""]]</div> \ No newline at end of file
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.opus">Download --answers.opus (71MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.webm">Download --answers.webm (317MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.opus">Download --main.opus (8.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.webm">Download --main.webm (37MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--pad.md">Download --pad.md</a></li>""" title="""EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference""" url="""/2023/talks/emacsconf""" speakers="""Sacha Chua""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""emacsconf""" note="""captioned, video posted, video: 15:05, answers: 2:00:43"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--main.opus">Download --main.opus (71MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--main.webm">Download --main.webm (279MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--pad.md">Download --pad.md</a></li>""" title="""Sunday closing remarks""" url="""/2023/talks/sun-close""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""sun-close""" note="""video posted, video: 2:00:43"""]]</div> \ No newline at end of file