summaryrefslogtreecommitdiffstats
path: root/2023
diff options
context:
space:
mode:
authorSacha Chua <sacha@sachachua.com>2023-12-05 15:38:47 -0500
committerSacha Chua <sacha@sachachua.com>2023-12-05 15:38:47 -0500
commit626247c0ca28bda8987a65279033d3fd2b96284c (patch)
tree84c6d49b39aee5eda70151dfd6ec9fabaca465b6 /2023
parent7f56a1b605332add9e919aab63c1278524833078 (diff)
downloademacsconf-wiki-626247c0ca28bda8987a65279033d3fd2b96284c.tar.xz
emacsconf-wiki-626247c0ca28bda8987a65279033d3fd2b96284c.zip
incorporate voice changes into vtt, make chapters
Diffstat (limited to '2023')
-rw-r--r--2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt2219
-rw-r--r--2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main--chapters.vtt53
-rw-r--r--2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt137
-rw-r--r--2023/info/voice-after.md117
-rw-r--r--2023/info/voice-before.md21
-rw-r--r--2023/schedule-details.md2
-rw-r--r--2023/talks/voice.md216
7 files changed, 2434 insertions, 331 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
new file mode 100644
index 00000000..3bd5b01b
--- /dev/null
+++ b/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt
@@ -0,0 +1,2219 @@
+WEBVTT
+
+00:00.000 --> 00:04.880
+Hi, my name is Eduard Duax, and the title of this talk is
+
+00:04.880 --> 00:09.680
+Rapples in Strange Places, Lua, LaTeX, LPEG, LPEG-REX, and TIX.
+
+00:10.720 --> 00:17.200
+I'm the author of an MX package called EEV, and this is a talk at the MXConf 2023
+
+00:17.200 --> 00:20.880
+that is happening in December 2023 at the Internets.
+
+00:21.680 --> 00:25.920
+And this is one of the examples of diagrams that we are going to see.
+
+00:25.920 --> 00:27.680
+Let me show how I generate it.
+
+00:28.640 --> 00:32.240
+One second. I have to use a smaller font here.
+
+00:35.600 --> 00:41.920
+This is a file called parse32.lua. Let me go back to this block of tests again.
+
+00:42.720 --> 00:50.320
+And now if I run this, we get these outputs here at the right.
+
+00:52.000 --> 00:54.960
+And then in this line here, it generates a PDF.
+
+00:55.520 --> 01:01.440
+And if I type f8 here, it shows the PDF in the lower right window.
+
+01:04.240 --> 01:07.600
+Let me start by explaining briefly what is EEV.
+
+01:09.920 --> 01:14.560
+First, it's something that appeared by accident in the mid-90s.
+
+01:14.560 --> 01:19.920
+I explained this story in my presentation at the MXConf 2019.
+
+01:20.720 --> 01:25.520
+It's a package. It's an MX package that is part of ELPA.
+
+01:25.520 --> 01:31.440
+It has at least 10 users. Those are the ones that I know by name.
+
+01:33.360 --> 01:36.320
+EEV means MX Execute Verbosely.
+
+01:37.360 --> 01:42.640
+EEV is something that treats eval as the central feature of MX.
+
+01:43.680 --> 01:46.800
+EEV blurs the distinction between programmers and users,
+
+01:47.520 --> 01:50.080
+and it replaces the slogan,
+
+01:50.080 --> 01:55.360
+users should not be forced to see Lisp, that is something that Richard Stallman told me once,
+
+01:55.360 --> 01:59.280
+by users should see Lisp instead of buttons,
+
+01:59.280 --> 02:02.400
+and new users should see Lisp in the first five minutes.
+
+02:04.240 --> 02:07.120
+I'm going to show some examples of that soon.
+
+02:08.800 --> 02:12.880
+EEV uses code in comments a lot, and also tests in comments.
+
+02:13.600 --> 02:21.040
+I changed my way of presenting it, and it became very REPL-centric in the last few years,
+
+02:21.040 --> 02:28.240
+in the sense that I start by explaining its main features by its support for REPLs.
+
+02:30.320 --> 02:34.320
+EEV supposes that we want to keep executable notes of everything.
+
+02:34.320 --> 02:37.040
+I'm also going to show examples of this in a second.
+
+02:38.080 --> 02:41.600
+EEV has lots of videos for people who hate videos,
+
+02:42.240 --> 02:47.520
+and it tries to do everything with very little magic and without black boxes.
+
+02:47.520 --> 02:50.240
+I'm going to explain many of these things very soon.
+
+02:52.880 --> 02:58.160
+This is a figure that I'm going to show in detail soon,
+
+02:58.160 --> 03:01.520
+that is about something important about Lua.
+
+03:01.520 --> 03:05.280
+Oops, the font is very bad now, so let me change the font.
+
+03:05.280 --> 03:07.840
+The figure is this one, and
+
+03:08.560 --> 03:13.440
+what most people do when they visit a file with something interesting on it
+
+03:13.440 --> 03:16.640
+is that they just go there, and they set a bookmark there,
+
+03:16.640 --> 03:19.760
+or they put the position in the register.
+
+03:21.760 --> 03:28.480
+But I prefer to keep links to everything that is interesting as a list of hyperlinks.
+
+03:28.480 --> 03:32.640
+So, for example, this is an at least hyperlink to the file
+
+03:32.640 --> 03:36.480
+that goes to this anchor here, and to this string I've added.
+
+03:36.480 --> 03:38.560
+And to this string after this anchor.
+
+03:39.760 --> 03:45.760
+This is a variant that opens that file in the window at the right here.
+
+03:47.440 --> 03:53.520
+And this is a sexpid that changes the font.
+
+03:53.520 --> 03:57.680
+I have a command with a very short name that does that,
+
+03:58.400 --> 04:02.880
+but I prefer to keep that as a one-liner.
+
+04:03.840 --> 04:11.440
+About the videos, we can see the list of first-class videos of Eevee by executing this,
+
+04:11.440 --> 04:16.960
+meta-x, find first-class videos, or by running this alias here,
+
+04:16.960 --> 04:20.320
+meta-x1c, and then what we see is this.
+
+04:21.520 --> 04:25.440
+The first sexpid here regenerates this buffer,
+
+04:25.440 --> 04:28.960
+so we can make a mess here and then run this,
+
+04:29.040 --> 04:33.040
+and the original buffer is regenerated again in a clean way.
+
+04:34.880 --> 04:42.000
+Each of these things here opens a buffer with information about a video.
+
+04:42.000 --> 04:44.400
+Let me take a specific example here.
+
+04:46.080 --> 04:50.720
+This video here is about one of the ancestors of this talk,
+
+04:50.720 --> 04:52.960
+that is a library that I wrote for
+
+04:53.920 --> 05:01.120
+creating diagrams in LaTeX using a package called pic2e, using repls.
+
+05:02.320 --> 05:10.720
+Anyway, the thing is that if we run a sexpid like this one,
+
+05:10.720 --> 05:13.440
+and we don't have a local copy of the video,
+
+05:14.080 --> 05:16.320
+Eevee will try to load the local copy,
+
+05:16.320 --> 05:19.600
+and instead of doing that and by asking something like,
+
+05:19.680 --> 05:20.720
+asking something like,
+
+05:20.720 --> 05:24.560
+do you want me to download the local copy, blah, blah, blah, blah,
+
+05:25.680 --> 05:28.720
+it simply opens a buffer like this.
+
+05:28.720 --> 05:32.480
+I mean, if we don't have a local copy yet,
+
+05:32.480 --> 05:34.400
+it will open a buffer like this one,
+
+05:35.440 --> 05:41.760
+in which these things here in comments are links to the documentation.
+
+05:41.760 --> 05:48.240
+I mean, this thing here explains the idea of local copies of files from the internet,
+
+05:48.880 --> 05:52.960
+uh, there are more details here and here,
+
+05:53.840 --> 05:59.280
+and this is a script that we can execute line by line.
+
+05:59.280 --> 06:04.080
+So, instead of this script being hidden behind the button that we just
+
+06:04.960 --> 06:07.360
+press after a question like,
+
+06:07.360 --> 06:09.920
+do you want me to do something, blah, blah, blah, yes or no,
+
+06:11.200 --> 06:15.120
+the script is visible here, and we can execute it step by step.
+
+06:15.200 --> 06:22.080
+It creates a terminal with a shell here in the right window,
+
+06:22.080 --> 06:28.880
+and when we type f8 in these lines here, the lines are sent to this line.
+
+06:30.080 --> 06:33.920
+So, this is going to download the copy of the video,
+
+06:33.920 --> 06:39.360
+the wget says that I already have a copy of the video in its subtitles, and so on.
+
+06:39.920 --> 06:47.600
+And after getting a copy of the video, we can run this exp here, and it displays the video.
+
+06:52.880 --> 06:57.840
+I said that Eevee has lots of videos for people who hate videos,
+
+06:57.840 --> 07:02.960
+and the idea is that very few people are going to watch the videos in real time,
+
+07:03.920 --> 07:10.480
+and most of the people that I know, or most of the people that are interested in Eevee in some way,
+
+07:10.480 --> 07:15.280
+they are going to watch just small sections of the video,
+
+07:15.280 --> 07:18.720
+and most of the time they're just going to read the subtitles of the video.
+
+07:19.680 --> 07:25.760
+So, for each one of the videos, we have a page about the video.
+
+07:25.760 --> 07:28.400
+Let me see if I have internet here.
+
+07:28.400 --> 07:29.680
+Yes, this is a page,
+
+07:29.920 --> 07:36.080
+and usually these pages have a link to another page,
+
+07:36.080 --> 07:42.880
+the page that has all the subtitles of the video, wherever.
+
+07:42.880 --> 07:46.960
+In this one, it's not so visible, but anyway,
+
+07:46.960 --> 07:50.480
+there are several ways of accessing the subtitles of the video,
+
+07:50.480 --> 07:54.720
+and one of the ways is by running this exp here,
+
+07:55.040 --> 07:57.280
+is by running this exp here,
+
+07:59.440 --> 08:03.680
+that opens a file in Lua that is what I use to generate the subtitles.
+
+08:04.880 --> 08:13.760
+Anyway, by the way, each one of these things here is hyperlinked to a position of the video,
+
+08:14.400 --> 08:19.280
+so if I type this in the right way, it goes to that position.
+
+08:20.160 --> 08:21.280
+Anyway, let me go back.
+
+08:21.920 --> 08:26.640
+Also, the tutorials of Eevee, the intros of Eevee,
+
+08:26.640 --> 08:30.560
+let's start with find, and with intro,
+
+08:30.560 --> 08:35.760
+they have lots of blocks that say video links, like this one,
+
+08:36.800 --> 08:40.080
+and these blocks have links to the positions in videos,
+
+08:40.080 --> 08:43.600
+and if we don't have a local copy of the video yet,
+
+08:44.480 --> 08:48.800
+the thing shows us a script that lets us download the local copy.
+
+08:48.880 --> 08:56.720
+Anyway, I said that I was going to explain what I mean by magic and black boxes.
+
+08:59.360 --> 09:02.080
+This is something that I've been trying to explain for a long time,
+
+09:02.080 --> 09:05.840
+and I think that I got a very good explanation about that
+
+09:05.840 --> 09:09.440
+in a video that I made about something called Eevee wconfig,
+
+09:09.440 --> 09:15.120
+that is a tool for configuring Eevee on Windows without magic,
+
+09:15.840 --> 09:20.320
+on Windows without magic, without buttons that do things
+
+09:21.040 --> 09:22.720
+without explaining what they are doing.
+
+09:24.080 --> 09:26.720
+This is a part of the subtitles of the video.
+
+09:26.720 --> 09:27.680
+Let me read that.
+
+09:30.080 --> 09:32.640
+Eevee wconfig is an attempt to solve the problem
+
+09:32.640 --> 09:35.040
+of how to install these things on Windows,
+
+09:35.040 --> 09:38.240
+both without magic and with very little magic.
+
+09:39.520 --> 09:40.640
+Remember this slogan,
+
+09:41.200 --> 09:45.760
+any sufficiently advanced technology is indistinguishable from magic.
+
+09:47.280 --> 09:51.600
+Here in this video, I'm going to use the term magic as a shorthand
+
+09:51.600 --> 09:55.520
+for sufficiently advanced technology,
+
+09:55.520 --> 09:59.040
+that is something that is complex and non-obvious,
+
+09:59.040 --> 10:01.840
+and that is indistinguishable from magic
+
+10:01.840 --> 10:04.640
+in the sense of being almost impossible to understand.
+
+10:05.600 --> 10:10.720
+And I'm also going to use the term black box as a near synonym for magic,
+
+10:11.360 --> 10:15.360
+and sometimes the term black box is more convenient,
+
+10:15.360 --> 10:18.800
+even though it's a bit longer, it has more letters,
+
+10:18.800 --> 10:20.880
+because when I use the term black box,
+
+10:20.880 --> 10:25.440
+it invites us to use expressions like opening the black box,
+
+10:25.440 --> 10:27.840
+and I'm going to use that expression a lot.
+
+10:34.640 --> 10:37.360
+Now, let me try to explain what is...
+
+10:37.360 --> 10:40.400
+Sorry, let me change the font.
+
+10:44.000 --> 10:44.800
+What is Lua?
+
+10:46.000 --> 10:51.840
+Lua is a minimalistic language in the sense of batteries not included.
+
+10:52.880 --> 10:56.640
+It uses associative tables for most of its data structures,
+
+10:58.800 --> 11:02.240
+and it's so minimalistic that it's the default print function.
+
+11:03.120 --> 11:09.280
+When we create an associative table and we ask it to print...
+
+11:11.760 --> 11:14.560
+We ask print to print an associative table,
+
+11:14.560 --> 11:17.280
+it just prints the address of the table.
+
+11:17.280 --> 11:18.480
+Here are some examples.
+
+11:19.920 --> 11:23.760
+Here is a table, and when we ask print to print it,
+
+11:23.760 --> 11:26.720
+it just says that it's the table at this address here.
+
+11:27.440 --> 11:32.400
+So, one of the things that most people do when they start using Lua
+
+11:32.400 --> 11:36.320
+is that either they download a package with a print to printing function,
+
+11:36.320 --> 11:38.720
+or they write their own print to printing functions.
+
+11:39.360 --> 11:42.000
+My own print to printing function is called pp,
+
+11:42.000 --> 11:45.840
+with uppercase letters, and it works like this,
+
+11:47.600 --> 11:50.880
+and it prints associative tables in a way like this.
+
+11:50.880 --> 11:54.800
+It says that for the key 1,
+
+11:55.200 --> 11:57.280
+the value associated to it is 2,
+
+11:57.280 --> 11:59.200
+for the key 2, the value is 3,
+
+11:59.200 --> 12:01.760
+and for the key 3, the value is 5.
+
+12:08.960 --> 12:12.160
+When I started using Lua, one of my favorite languages
+
+12:12.160 --> 12:15.600
+was also a language that used associative tables a lot.
+
+12:15.600 --> 12:16.720
+It was called Icon,
+
+12:18.400 --> 12:22.640
+and I had to write my own print to printing functions for Icon.
+
+12:22.720 --> 12:28.800
+So, I just had to port my print to printing functions to Lua,
+
+12:28.800 --> 12:31.600
+and my first version looked something like this.
+
+12:32.240 --> 12:36.560
+It just had some global functions, lots of them actually,
+
+12:39.680 --> 12:41.840
+and after a while I rewrote it,
+
+12:41.840 --> 12:44.320
+and I rewrote it again, and again, and again,
+
+12:44.320 --> 12:49.200
+and this is one of the versions that is not even the default at this point.
+
+12:50.000 --> 12:53.920
+TOS is for toString,
+
+12:56.800 --> 12:57.920
+and this is a demo.
+
+12:58.800 --> 13:04.560
+It's very modular, so it's easy to replace parts of it or to toggle flags,
+
+13:04.560 --> 13:05.760
+and this is an example.
+
+13:05.760 --> 13:10.320
+If I try to print the table of methods for a certain class,
+
+13:11.760 --> 13:13.040
+I'll need a smaller font,
+
+13:14.320 --> 13:16.480
+it prints the table like this,
+
+13:16.480 --> 13:18.480
+with the names of the methods,
+
+13:18.560 --> 13:21.520
+and then links to the source code of the functions.
+
+13:22.080 --> 13:25.360
+These links only make sense in Emacs and in Eevee,
+
+13:26.000 --> 13:28.560
+and when we run a link like this one,
+
+13:29.840 --> 13:33.920
+it shows the source code in the window at the right.
+
+13:33.920 --> 13:37.760
+So, for some functions, the source code is three lines,
+
+13:37.760 --> 13:40.400
+for other ones it's one line, and whatever.
+
+13:41.920 --> 13:43.200
+Anyway, let me go back.
+
+13:45.360 --> 13:48.000
+Lua can be used in many different styles.
+
+13:48.000 --> 13:50.160
+Most people hate other people's styles.
+
+13:51.920 --> 13:56.080
+When I started using it in the year 2000,
+
+13:56.080 --> 13:59.040
+I learned most of the basic language in a single day.
+
+13:59.040 --> 14:02.000
+It was very similar to things that I was already using,
+
+14:02.800 --> 14:08.560
+and then I rewrote the mini language that I was using
+
+14:08.560 --> 14:14.800
+to generate the HTML for my pages in Lua.
+
+14:14.800 --> 14:16.960
+Actually, I had to rewrite it many times,
+
+14:16.960 --> 14:20.880
+but the first version I certainly did in my first weeks
+
+14:20.880 --> 14:22.480
+or first months using Lua.
+
+14:25.520 --> 14:29.040
+In the beginning, I was just using it for writing programs
+
+14:29.040 --> 14:32.160
+that either didn't take in any input at all,
+
+14:32.160 --> 14:35.280
+because the input was already in the source file,
+
+14:35.280 --> 14:39.200
+or that worked as a Unix function,
+
+14:39.200 --> 14:42.960
+the Unix programs that would read files
+
+14:42.960 --> 14:46.160
+and process these files in some way and output something.
+
+14:47.840 --> 14:52.480
+I mentioned the basic language here.
+
+14:52.480 --> 14:55.520
+I only learned how to use closures, metatables,
+
+14:55.520 --> 14:58.240
+and coroutines many years later.
+
+15:00.320 --> 15:02.240
+In the beginning, when I started using Lua,
+
+15:02.240 --> 15:04.080
+it didn't have a package manager.
+
+15:04.080 --> 15:05.200
+It appeared later.
+
+15:05.200 --> 15:06.560
+It is called Lua-rocks.
+
+15:07.680 --> 15:11.600
+It has had this package manager for several years.
+
+15:12.720 --> 15:15.520
+Most of the rocks for Lua-rocks are poorly documented,
+
+15:16.480 --> 15:19.040
+documented, and hacker-unfriendly,
+
+15:19.040 --> 15:21.600
+so you can't rely just on the documentation,
+
+15:22.160 --> 15:24.320
+and you can't rely just on the source code,
+
+15:24.320 --> 15:28.320
+because, I mean, if you're a genius, of course you can,
+
+15:28.320 --> 15:32.320
+but for people who are either lazy or dumb or whatever,
+
+15:32.320 --> 15:33.920
+like me, or unfocused,
+
+15:35.120 --> 15:37.120
+the source code is hard to understand
+
+15:37.120 --> 15:38.800
+and hard to tinker with.
+
+15:41.440 --> 15:43.040
+Some rocks are excellent.
+
+15:43.040 --> 15:46.640
+The best rocks are well documented,
+
+15:46.640 --> 15:48.640
+but they are hacker-unfriendly,
+
+15:48.640 --> 15:51.840
+in the sense that I hope that I'll be able to explain soon.
+
+15:53.440 --> 15:58.560
+The best rocks use local variables and metatables a lot,
+
+15:59.280 --> 16:03.120
+so if you are a beginner learning Lua,
+
+16:03.120 --> 16:06.080
+you're not going to understand what their source codes do.
+
+16:06.080 --> 16:08.320
+They use lots of dirty tricks.
+
+16:08.640 --> 16:12.240
+Let me talk a bit about object orientation in Lua.
+
+16:12.240 --> 16:13.840
+It can be done in many ways.
+
+16:15.360 --> 16:18.000
+The main book about Lua, called Programming in Lua,
+
+16:18.000 --> 16:20.240
+by one of the authors of the language,
+
+16:21.120 --> 16:22.320
+Roberto Ierzalimschi,
+
+16:23.200 --> 16:26.960
+presents several ways of doing object orientation in Lua.
+
+16:26.960 --> 16:29.040
+I hated all of these ways,
+
+16:29.840 --> 16:32.720
+and also the ways that I tried from the rocks.
+
+16:34.400 --> 16:36.880
+And then I wrote my own way,
+
+16:37.360 --> 16:40.160
+wrote my own way of doing object orientation in Lua.
+
+16:40.160 --> 16:41.440
+It's very minimalistic.
+
+16:42.000 --> 16:45.120
+It's in this file here, eoo.lua.
+
+16:47.040 --> 16:49.440
+The main code is just these five lines here,
+
+16:50.640 --> 16:53.120
+and here's an example of how it works.
+
+16:56.080 --> 17:02.640
+Here we define a class vector with some metamethods.
+
+17:02.640 --> 17:07.920
+This metamethod here will tell Lua what to do
+
+17:07.920 --> 17:11.040
+when the user asks to add two vectors.
+
+17:11.600 --> 17:14.320
+This one here tells Lua what to do
+
+17:14.320 --> 17:18.320
+when the user asks Lua to convert a vector to a string,
+
+17:18.880 --> 17:20.640
+and whatever.
+
+17:20.640 --> 17:23.920
+This one is something that I'm going to explain in a second.
+
+17:25.360 --> 17:28.240
+So here we create a vector with these coordinates,
+
+17:28.240 --> 17:29.360
+three and four.
+
+17:29.360 --> 17:31.360
+Here we create another vector.
+
+17:31.360 --> 17:35.200
+If we print here, then Lua uses the function here
+
+17:35.200 --> 17:36.160
+in the toString.
+
+17:37.200 --> 17:40.880
+If we add two vectors, it uses the function here
+
+17:40.880 --> 17:42.400
+in the add metamethod.
+
+17:42.960 --> 17:45.280
+And if we run the method norm,
+
+17:45.280 --> 17:49.760
+it is defined here in the table index.
+
+17:51.280 --> 17:51.780
+Anyway.
+
+17:52.740 --> 17:54.740
+Even this thing being so small,
+
+17:54.740 --> 17:58.500
+I used to forget how it's in odds worked all the time.
+
+17:58.500 --> 18:01.700
+Actually, I always forget how things work,
+
+18:01.700 --> 18:03.940
+and I have to remember them somehow.
+
+18:03.940 --> 18:07.940
+And I have to have tricks for remembering
+
+18:07.940 --> 18:11.940
+and tricks for summarizing things and diagrams and so on.
+
+18:13.540 --> 18:15.940
+And every time that I forgot how to do it,
+
+18:15.940 --> 18:17.220
+I just go back to the code.
+
+18:17.220 --> 18:18.420
+I just go back to the code.
+
+18:18.500 --> 18:23.140
+And every time that I forgot how this thing worked,
+
+18:23.140 --> 18:25.540
+I went back to the source code,
+
+18:25.540 --> 18:27.380
+and then I looked at the diagrams.
+
+18:27.380 --> 18:29.940
+Or, of course, in the first time,
+
+18:29.940 --> 18:31.460
+I had to draw the diagrams.
+
+18:32.260 --> 18:34.420
+And I run the examples.
+
+18:34.420 --> 18:35.780
+And, of course, in the beginning,
+
+18:35.780 --> 18:37.460
+I thought that the code was clear.
+
+18:37.460 --> 18:38.900
+My examples were very brief.
+
+18:38.900 --> 18:42.820
+And so I had to rewrite the examples many times
+
+18:42.820 --> 18:46.420
+until they became, let's say, perfect.
+
+18:48.660 --> 18:53.220
+And I was saying that Lua can be used in many ways.
+
+18:53.780 --> 18:57.700
+And in my way of using Lua, my favorite way,
+
+18:57.700 --> 19:02.020
+everything can be inspected and modified from REPLs,
+
+19:03.140 --> 19:07.140
+like we can do in MX and in Smalltalk, or sort of.
+
+19:07.860 --> 19:09.940
+So in my favorite way of using Lua,
+
+19:09.940 --> 19:11.860
+there's no security at all.
+
+19:11.860 --> 19:14.740
+Everything can be changed at all times.
+
+19:15.140 --> 19:16.980
+Of course, most people hate that.
+
+19:17.780 --> 19:20.180
+My init file has lots of classes.
+
+19:20.820 --> 19:24.100
+And, by the way, instead of keeping many small files
+
+19:24.100 --> 19:25.140
+with many things,
+
+19:25.140 --> 19:29.300
+I put lots of stuff in just one big init file.
+
+19:31.060 --> 19:33.860
+My init file has lots of classes
+
+19:33.860 --> 19:36.660
+and lots of global functions and lots of crafts.
+
+19:36.660 --> 19:40.020
+So people hate that, of course.
+
+19:41.380 --> 19:42.580
+This is an example.
+
+19:43.460 --> 19:44.500
+This is an example.
+
+19:44.500 --> 19:48.260
+This is the index at the top of my init file.
+
+19:50.580 --> 19:52.820
+The classes start here.
+
+19:55.060 --> 19:57.220
+And then we have some functions.
+
+19:57.780 --> 20:02.500
+And then we have functions that load certain packages.
+
+20:02.500 --> 20:03.540
+And then we have craft.
+
+20:04.260 --> 20:04.760
+Whatever.
+
+20:06.180 --> 20:08.580
+Most people think that my style of using Lua
+
+20:08.580 --> 20:10.340
+is dirty and dangerous.
+
+20:10.340 --> 20:11.860
+And they wouldn't touch my Lua code.
+
+20:12.100 --> 20:13.140
+With a 10-feet pole.
+
+20:14.740 --> 20:18.100
+But most of the things that I'm going to present here
+
+20:18.100 --> 20:20.740
+in this presentation are ideas that should be easy
+
+20:20.740 --> 20:24.180
+to port to other environments and other languages.
+
+20:24.180 --> 20:25.780
+Especially the diagrams.
+
+20:25.780 --> 20:27.620
+So the code is not so important.
+
+20:30.740 --> 20:33.140
+Now let me talk a bit about LaTeX.
+
+20:33.140 --> 20:33.860
+Lua LaTeX.
+
+20:33.860 --> 20:38.820
+That is LaTeX with the Lua interpreter embedded inside.
+
+20:39.380 --> 20:43.300
+And two ways of generating pictures in LaTeX.
+
+20:43.300 --> 20:44.820
+Text that is very famous.
+
+20:44.820 --> 20:47.300
+And picture that is not very famous.
+
+20:47.300 --> 20:48.900
+And that is very low level.
+
+20:48.900 --> 20:51.700
+And I think that not many people use.
+
+20:53.700 --> 20:57.300
+I said before that when I learned Lua,
+
+20:57.300 --> 21:01.540
+I realized that it was very good for writing little languages.
+
+21:03.220 --> 21:05.220
+I was doing my PhD at the time.
+
+21:05.300 --> 21:11.220
+And typesetting the diagrams for my PhD thesis was very boring.
+
+21:11.220 --> 21:14.100
+So one of the things that I did was that I created
+
+21:14.980 --> 21:17.540
+a little language for typesetting the diagrams for me.
+
+21:19.140 --> 21:20.900
+It was called DEDNOT.
+
+21:20.900 --> 21:25.300
+Because initially it only generated diagrams
+
+21:25.300 --> 21:26.820
+for natural deduction.
+
+21:26.820 --> 21:28.580
+And then it had several versions.
+
+21:30.180 --> 21:34.420
+These are the slides for my presentation about DEDNOT6.
+
+21:34.420 --> 21:39.140
+And DEDNOT6 is an extensible semi-preprocessor for Lua LaTeX
+
+21:39.140 --> 21:41.780
+that understands diagrams in ASCII art.
+
+21:42.340 --> 21:48.740
+In the sense that when I have a LaTeX file that has this.
+
+21:49.380 --> 21:51.860
+And when DEDNOT6 is loaded.
+
+21:53.220 --> 21:58.820
+When I give the right commands, DEDNOT6 interprets this block here
+
+21:58.820 --> 22:00.980
+as something that defines this diagram.
+
+22:02.260 --> 22:03.540
+Oops, sorry.
+
+22:05.380 --> 22:07.540
+It interprets this diagram here.
+
+22:08.340 --> 22:10.900
+This diagram in the comments here
+
+22:11.460 --> 22:14.260
+as something that defines a diagram called foo,
+
+22:14.260 --> 22:16.100
+a deduction called foo.
+
+22:16.100 --> 22:19.140
+And it generates this code here.
+
+22:19.940 --> 22:27.300
+So that we can just invoke the definition of the deduction
+
+22:27.300 --> 22:30.260
+by typing backslash DED foo.
+
+22:31.220 --> 22:37.140
+And DEDNOT6 also supports another language
+
+22:37.140 --> 22:39.860
+for typesetting bi-dimensional diagrams
+
+22:39.860 --> 22:42.660
+with arrows and stuff for category theory and blah blah.
+
+22:44.180 --> 22:46.900
+The specifications of these diagrams look like this.
+
+22:49.540 --> 22:53.540
+Here is a very good example.
+
+22:55.540 --> 22:56.980
+This is a huge diagram.
+
+22:58.420 --> 22:59.460
+Sorry, one second.
+
+23:00.740 --> 23:03.620
+So the source code that generates this diagram here
+
+23:03.620 --> 23:05.140
+is just this thing at the left.
+
+23:07.220 --> 23:08.340
+So it's very visual.
+
+23:09.220 --> 23:12.340
+We can typeset the diagram in ASCII art here.
+
+23:12.340 --> 23:13.780
+And then in this part here,
+
+23:13.780 --> 23:16.660
+we tell how the nodes are to be joined,
+
+23:17.620 --> 23:20.660
+which arrows have to have annotations and so on.
+
+23:22.420 --> 23:25.460
+And this language is extensible in the sense that...
+
+23:25.780 --> 23:26.580
+Where is that?
+
+23:32.020 --> 23:32.520
+Here.
+
+23:34.420 --> 23:36.660
+Comments that start with percent colon
+
+23:37.940 --> 23:41.620
+are interpreted as definitions for three diagrams.
+
+23:43.620 --> 23:47.220
+Lines that start with percent uppercase D
+
+23:47.220 --> 23:52.260
+define 2D diagrams with arrows and stuff.
+
+23:52.740 --> 23:58.020
+And lines that start with comment uppercase L
+
+23:58.660 --> 24:00.580
+contain blocks of Lua code
+
+24:00.580 --> 24:04.180
+that we can use to extend the interpreter on the flag.
+
+24:06.020 --> 24:09.860
+Anyway, here are some recent examples of diagrams
+
+24:09.860 --> 24:14.580
+that I used DEDNOT6 to typeset.
+
+24:15.780 --> 24:17.220
+This diagram here
+
+24:17.780 --> 24:20.580
+was generated by this specification here.
+
+24:23.460 --> 24:26.980
+And this diagram here with the curved arrows
+
+24:27.780 --> 24:30.580
+was generated by this specification here.
+
+24:34.180 --> 24:37.220
+So DEDNOT6 was very easy to extend.
+
+24:37.220 --> 24:38.260
+At that some point,
+
+24:38.260 --> 24:42.820
+I started to use it to generate diagrams using Peaked Chewy,
+
+24:42.820 --> 24:45.540
+mainly for the classes that I gave you.
+
+24:45.540 --> 24:48.420
+For the classes that I give at the university.
+
+24:48.420 --> 24:50.900
+I teach mathematics and whatever.
+
+24:51.860 --> 24:52.900
+In a bad place.
+
+24:52.900 --> 24:53.400
+Whatever.
+
+24:56.260 --> 24:58.500
+Let me show an animation.
+
+24:59.060 --> 25:02.420
+Here is a diagram that I generated with DEDNOT6.
+
+25:02.980 --> 25:05.300
+And it is a flipbook animation.
+
+25:05.300 --> 25:08.740
+Like we type page up and page down
+
+25:08.740 --> 25:10.660
+and we go to the next page of the book
+
+25:10.660 --> 25:12.340
+and to the previous page of the book.
+
+25:13.060 --> 25:15.940
+And here is the source code that generates that.
+
+25:16.980 --> 25:19.140
+This source code is not very visual.
+
+25:19.140 --> 25:22.740
+So it's quite clumsy to edit a diagram
+
+25:22.740 --> 25:25.460
+directly in the tag file like that.
+
+25:28.020 --> 25:31.860
+These diagrams were inspired by something called Manim.
+
+25:32.500 --> 25:33.000
+That's...
+
+25:34.580 --> 25:36.340
+Oh, I've forgotten the name of the guy.
+
+25:36.340 --> 25:39.300
+But it's a guy that makes many videos about mathematics.
+
+25:39.300 --> 25:41.780
+And he created this library called Manim
+
+25:41.780 --> 25:43.460
+for generating his animations.
+
+25:45.540 --> 25:51.460
+Other people adapted his library to make it more accessible.
+
+25:52.580 --> 25:53.700
+I tried to learn it.
+
+25:53.700 --> 25:55.700
+But each animation,
+
+25:57.060 --> 25:59.220
+even an animation with very few frames,
+
+25:59.220 --> 26:01.300
+each animation took ages to render.
+
+26:01.300 --> 26:03.060
+So it wasn't fun.
+
+26:03.700 --> 26:07.060
+And animations and PDFs can be rendered in seconds.
+
+26:07.940 --> 26:11.060
+So these things were fun for me
+
+26:11.060 --> 26:15.300
+because my laptop is very slow and Manim was not fun.
+
+26:20.100 --> 26:26.020
+Anyway, writing code like this inside the attack file
+
+26:26.020 --> 26:29.620
+was not very fun because it was hard to debug.
+
+26:30.500 --> 26:35.860
+So in 2022, I started to play with ways
+
+26:35.860 --> 26:40.340
+of generating these diagrams from REPLs.
+
+26:40.980 --> 26:44.500
+And I found a way for PIC2E and a way for TIX.
+
+26:45.380 --> 26:47.780
+Each one of these ways became a video.
+
+26:48.740 --> 26:53.780
+If you go to the list of first class videos of EEV,
+
+26:53.780 --> 26:57.540
+you're going to see that there's a video about PIC2E here
+
+26:57.540 --> 26:58.740
+and a video about TIX.
+
+27:00.340 --> 27:07.540
+Here you have some information like length and explanation, etc.
+
+27:08.180 --> 27:10.420
+And here are the pages for these videos.
+
+27:12.420 --> 27:15.860
+My page about the video, about PIC2E is like this.
+
+27:15.860 --> 27:18.740
+It has some diagrams, whatever.
+
+27:18.740 --> 27:20.980
+And this one is much nicer.
+
+27:20.980 --> 27:26.100
+And a lot of people watched that video.
+
+27:26.100 --> 27:30.260
+I mean, I thought that 250 people watched it.
+
+27:30.900 --> 27:33.940
+For me, that's a million of people.
+
+27:36.660 --> 27:42.900
+And this video is about how to extract diagrams from the TIX manual
+
+27:42.900 --> 27:47.700
+and how to run those examples in a REPL
+
+27:47.700 --> 27:49.780
+and modify them bit by bit.
+
+27:49.780 --> 27:51.380
+This is a screenshot.
+
+27:52.100 --> 27:53.620
+But let me go back.
+
+27:56.420 --> 27:59.700
+At that point, these things were just prototypes.
+
+27:59.700 --> 28:01.460
+The code was not very nice.
+
+28:02.020 --> 28:10.500
+And in this year, I was able to unify those two ways of generating PDFs,
+
+28:11.380 --> 28:14.100
+the one for TIX and the one for PIC2E.
+
+28:14.100 --> 28:18.740
+And I unified them with many other things that generated diagrams.
+
+28:19.220 --> 28:27.460
+The basis of these things is something called showchew.lua.
+
+28:27.460 --> 28:31.380
+I'm not going to show its details now.
+
+28:32.100 --> 28:40.420
+But its extension that generates TIX code is just this.
+
+28:40.420 --> 28:45.540
+So we can specify a diagram with just a block like this.
+
+28:46.260 --> 28:54.180
+And then if we run show00 and it returns a string
+
+28:54.180 --> 28:58.580
+that is just the inner body of the TIX file.
+
+28:59.220 --> 29:02.020
+If we run this, we see the whole TIX file.
+
+29:02.020 --> 29:04.340
+And if we run this, we save the TIX file
+
+29:04.340 --> 29:08.420
+and we compile the TIX file to generate a PDF.
+
+29:08.420 --> 29:14.180
+And if we run this, we show the PDF in the lower right window.
+
+29:16.020 --> 29:20.740
+And that's the same thing for all my recent programs that generate PDFs.
+
+29:21.620 --> 29:22.980
+They are all integrated.
+
+29:24.500 --> 29:30.660
+Here is the one that the basis for all my modules that generate diagrams with PIC2E.
+
+29:33.060 --> 29:34.980
+Its demos are not very interesting.
+
+29:34.980 --> 29:39.700
+So let me show some demos of extensions that do interesting things.
+
+29:40.660 --> 29:47.220
+So this is a diagram that I created by editing it in a REPL.
+
+29:48.820 --> 29:51.220
+I create several PIC2E objects here.
+
+29:52.500 --> 29:58.660
+And if I execute this, it compiles the object, generates a PDF.
+
+29:58.660 --> 30:03.860
+And if I tap this, here is the PDF.
+
+30:04.740 --> 30:10.020
+And if I just ask Lua to display what is books here,
+
+30:11.700 --> 30:17.220
+it shows the source code in PIC2E of the diagram.
+
+30:17.940 --> 30:20.340
+And the nice thing is that it is indented.
+
+30:20.340 --> 30:23.460
+So it's easy to debug the PIC2E code.
+
+30:24.340 --> 30:30.180
+If anyone is interested, the module that does the tricks for indentation
+
+30:30.180 --> 30:31.460
+is very easy to understand.
+
+30:31.540 --> 30:34.500
+It has lots of tests and test blocks.
+
+30:34.500 --> 30:39.060
+And I think that its data structures are easy to understand.
+
+30:42.500 --> 30:44.820
+Anyway, here is another example.
+
+30:50.260 --> 30:51.620
+The show is here.
+
+30:53.460 --> 30:56.340
+It generates a 3D diagram.
+
+31:02.420 --> 31:08.500
+Now let me talk about parsers and REPLs in a very strange place.
+
+31:09.140 --> 31:18.340
+I mean, using REPLs to build parsers step by step and replacing parts by more complex parts.
+
+31:21.060 --> 31:23.780
+So I said that Lua is very minimalistic.
+
+31:25.780 --> 31:30.660
+And everybody knows that implementations of regular expressions
+
+31:30.740 --> 31:31.780
+are big and complex.
+
+31:33.060 --> 31:39.220
+So instead of coming with full regular expressions, Lua comes with something called patterns
+
+31:39.220 --> 31:43.620
+and a library function called string.match.
+
+31:45.380 --> 31:54.420
+Here is a copy of the part of the manual that explains a part of the syntax of patterns.
+
+31:56.260 --> 32:00.100
+Here's how string.match is described in the manual.
+
+32:01.220 --> 32:02.500
+It's just this.
+
+32:02.500 --> 32:06.260
+Looks for the first match of pattern in the string as blah, blah, blah.
+
+32:07.220 --> 32:11.300
+And then we have to go to the other section of the manual that explains patterns.
+
+32:17.780 --> 32:26.500
+Lua patterns are so simple, so limited, that they don't even have the alternation operator.
+
+32:27.220 --> 32:31.460
+Here is how it is described in the ELLISP manual.
+
+32:33.300 --> 32:37.780
+Backslash pipe specifies an alternative, blah, blah, blah.
+
+32:40.820 --> 32:47.940
+When we want to build more complex regular expressions, patterns, grammars, etc.,
+
+32:47.940 --> 32:51.780
+we have to use an external library for that.
+
+32:52.740 --> 32:59.140
+No, sorry, a library that is external, but that was written by one of the authors of Lua itself.
+
+33:00.340 --> 33:05.380
+This library is called LPEG, and its manual says,
+
+33:06.180 --> 33:11.940
+LPEG is a new pattern matching library for Lua based on parsing expression grammars, PEGs.
+
+33:14.900 --> 33:17.460
+The manual is very terse.
+
+33:18.180 --> 33:20.500
+I found it incredibly hard to read.
+
+33:20.900 --> 33:22.740
+It doesn't have any diagrams.
+
+33:22.740 --> 33:24.420
+It has some examples, though.
+
+33:26.180 --> 33:34.420
+And the Lua wiki has a big page called LPEG tutorial with lots of examples.
+
+33:35.700 --> 33:42.020
+But it also doesn't have diagrams, and I found some things incredibly hard to understand.
+
+33:42.020 --> 33:48.500
+For example, this is something that is in the manual of LPEG that I saw and I thought,
+
+33:49.460 --> 33:53.060
+wow, great, this makes all sense, and this is going to be very useful.
+
+33:53.060 --> 33:57.300
+It's a way to build grammars that can be recursive,
+
+33:57.300 --> 34:02.020
+and they sort of can encode BNF grammars.
+
+34:02.020 --> 34:06.980
+We just have to translate the BNF a bit to get rid of some recursions
+
+34:06.980 --> 34:08.820
+and to translate them to something else.
+
+34:10.580 --> 34:13.620
+And the manual also has some things that I thought,
+
+34:13.620 --> 34:16.580
+oh, no, I don't have any idea of what this thing does.
+
+34:17.380 --> 34:22.020
+And in fact, I saw these things for the first time more than 10 years ago,
+
+34:22.020 --> 34:26.020
+and they only started to make sense one year ago.
+
+34:28.420 --> 34:30.340
+One example is group captures.
+
+34:33.380 --> 34:37.620
+LPEG also comes with a module called the RE module.
+
+34:37.620 --> 34:40.180
+Let me pronounce it in Portuguese, the RE module.
+
+34:40.660 --> 34:45.540
+And its manual says, the RE module provided by the file repo.luen
+
+34:45.540 --> 34:48.100
+in the distribution supports a somewhat conventional
+
+34:48.980 --> 34:54.420
+regular expression syntax for pattern usage within LPEG.
+
+34:55.140 --> 34:57.460
+And this is a quick reference.
+
+35:00.500 --> 35:02.820
+And this thing is very brief.
+
+35:02.820 --> 35:06.420
+It has some nice examples, but it's hard to understand in a way.
+
+35:06.660 --> 35:12.500
+And here are some comments about my attempts to learn HerdotLua.
+
+35:14.020 --> 35:15.220
+This is a class.
+
+35:15.220 --> 35:17.060
+In this case, it's a very small class.
+
+35:18.180 --> 35:21.940
+And this file implements a PM method.
+
+35:23.540 --> 35:26.980
+I'm going to show examples of other PM methods very soon.
+
+35:28.020 --> 35:33.380
+So this is a PM method for HerdotLua that lets us compare the syntax
+
+35:33.620 --> 35:39.460
+of Lua patterns, LPEG, and HerdotLua.
+
+35:41.620 --> 35:43.060
+See this example here.
+
+35:43.700 --> 35:49.940
+So if we run this, it loads my version of LPEG.
+
+35:50.660 --> 35:52.740
+No, sorry, my version of LPEG-REX.
+
+35:54.820 --> 36:00.180
+And it shows that when we apply the PM method to this Lua pattern,
+
+36:00.740 --> 36:07.380
+this LPEG pattern, and this RE pattern, they all get the same results.
+
+36:07.380 --> 36:12.820
+So we can use this thing, this kind of thing here to show how to translate from
+
+36:14.420 --> 36:20.180
+Lua patterns that are familiar because they are similar to regular expressions, only weaker,
+
+36:22.260 --> 36:27.620
+to LPEG that is super weird, and to RE that is not so weird.
+
+36:28.580 --> 36:37.940
+Anyway, the comment says that in 2012, I had a project that needed a precedence parser that
+
+36:37.940 --> 36:42.900
+could parse arithmetical expressions with the right precedences.
+
+36:44.580 --> 36:50.180
+And at that point, I was still struggling with pure LPEG, and I couldn't do much with it.
+
+36:50.180 --> 36:55.300
+So I tried to learn HerdotLua instead, and I wrote this old class here.
+
+36:56.260 --> 36:59.620
+That allowed me to use preprocessor on patterns for Lua.
+
+36:59.620 --> 37:04.980
+And the thing is that with this preprocessor, I could specify precedence grammars using this
+
+37:04.980 --> 37:12.900
+thing here that worked, but it was super clumsy, and I gave up after a few attempts.
+
+37:14.900 --> 37:21.300
+And in 2022, I heard about something called LPEG-REX that was an
+
+37:22.260 --> 37:28.740
+a kind of extension of Re, and it was much more powerful than HerdotLua, but after a while,
+
+37:28.740 --> 37:32.660
+I realized that it had the same defects as HerdotLua.
+
+37:32.660 --> 37:41.620
+And let me explain that because it has all to do with the things about black boxes and magic
+
+37:41.620 --> 37:42.980
+that I told in the beginning.
+
+37:43.380 --> 37:50.100
+Both, I mean, sorry, neither HerdotLua or LPEG-REX had some features that I needed.
+
+37:51.620 --> 37:57.940
+They didn't let us explain, sorry, they received a pattern that was specified as a string,
+
+37:57.940 --> 38:04.740
+and it converted that into an LPEG pattern, but it didn't let us explore the LPEG patterns
+
+38:04.740 --> 38:05.540
+that it was using.
+
+38:05.540 --> 38:12.900
+So I had to use the LPEG-REX, and it didn't let me explore the LPEG patterns that it was
+
+38:12.900 --> 38:13.540
+generated.
+
+38:16.420 --> 38:21.060
+Their code was written in a way that was REPL unfriendly.
+
+38:21.060 --> 38:28.580
+I couldn't modify parts of the code bit by bit in a REPL and try to change the code
+
+38:29.700 --> 38:31.620
+without changing the original file, say.
+
+38:33.300 --> 38:37.220
+The code was very hard to explore, to hack, and to extend, in my opinion.
+
+38:37.780 --> 38:39.700
+The documentation was not very clear.
+
+38:40.580 --> 38:50.660
+And I sent one or two messages to the developer of LPEG-REX, and he was too busy to help me.
+
+38:50.660 --> 38:55.460
+He answered very briefly, and to be honest, I felt rejected.
+
+38:55.460 --> 38:58.580
+I felt that I wasn't doing anything interesting.
+
+38:58.580 --> 38:59.380
+Whatever, whatever.
+
+39:00.340 --> 39:11.940
+So, in 2022, I was trying to learn LPEG-REX, because I was thinking that it would solve
+
+39:11.940 --> 39:13.780
+my problems, but it didn't.
+
+39:14.500 --> 39:20.900
+It didn't have the features that I needed, and it was hard to extend, and hard to explore,
+
+39:20.900 --> 39:22.100
+and hard to debug.
+
+39:22.980 --> 39:32.420
+I decided to rewrite it in a more hacker-friendly way, in the sense that it was modular, and
+
+39:32.420 --> 39:35.460
+I could replace any part of the module from a REPL.
+
+39:37.300 --> 39:48.340
+My version of it was called lpeg1.lua, and I decided that in my version, I wouldn't have
+
+39:49.060 --> 39:55.460
+the part that receives a grammar specified as a string and converts that to LPEG.
+
+39:55.460 --> 40:03.780
+I would just have the backend part that are the functions in LPEG that let us specify
+
+40:04.340 --> 40:05.380
+powerful grammars.
+
+40:10.340 --> 40:11.540
+So, let me go back.
+
+40:12.260 --> 40:14.260
+Let me explain a bit about LPEG.
+
+40:14.900 --> 40:16.180
+Lua has coercions.
+
+40:18.660 --> 40:22.740
+The plus expects to receive two numbers.
+
+40:22.740 --> 40:29.860
+If one of its arguments, or both of them, are strings, it converts the strings to numbers.
+
+40:29.860 --> 40:39.220
+So, in this case here, 2 plus string 3 returns the number 5, and this is the concatenation
+
+40:39.220 --> 40:39.860
+operator.
+
+40:40.820 --> 40:42.820
+It expects to receive strings.
+
+40:43.780 --> 40:49.860
+So, in this case, it will convert the number 2 to the string 2, and the concatenation of
+
+40:49.860 --> 40:51.700
+these two things will be 23.
+
+40:52.420 --> 40:54.420
+Sorry, 23 as a string.
+
+40:56.260 --> 40:58.420
+LPEG also has some coercions.
+
+41:00.260 --> 41:09.620
+I usually set these globals to let me write my grammars in a very compact way.
+
+41:10.260 --> 41:17.460
+So, instead of lpeg.p, lpeg.c, etc., I use these globals like uppercase B, uppercase
+
+41:17.460 --> 41:18.420
+C, and so on.
+
+41:19.540 --> 41:27.540
+And with these globals, I can write things like this, c1 times string underscore.
+
+41:28.420 --> 41:40.820
+And LPEG knows that lpeg.c, sorry, it sort of expands these to lpeg.c, but lpeg.c expects
+
+41:40.820 --> 41:47.380
+to receive an LPEG pattern, and one is not yet an LPEG pattern, so it is coerced into
+
+41:47.380 --> 41:50.900
+an LPEG pattern by calling lpeg.p.
+
+41:51.220 --> 42:02.740
+So, this shorting here becomes equivalent to lpeg.c, lpeg.p1, and the multiplication,
+
+42:02.740 --> 42:09.940
+when at least one of its arguments is an LPEG pattern, it expects to receive two LPEG patterns,
+
+42:09.940 --> 42:15.700
+and in this case, the one at the right is just a string, so it is coerced to an LPEG
+
+42:15.700 --> 42:17.620
+pattern by using lpeg.p.
+
+42:18.180 --> 42:22.180
+With this idea, we can sort of understand this comparison here.
+
+42:22.900 --> 42:24.980
+I mean, let me run it again.
+
+42:24.980 --> 42:33.620
+This first part is very similar to a regular expression here at the left, and when we apply
+
+42:33.620 --> 42:45.940
+this LPEG, sorry, this Lua pattern to this subject here, the result is that the Lua pattern
+
+42:46.740 --> 42:53.540
+the result is this thing here, this thing, this thing, and this thing.
+
+42:53.540 --> 43:00.580
+I'm going to call each one of these results captures, so each of these things between
+
+43:00.580 --> 43:08.020
+parentheses captures a substring of the original string, and these captured substrings are
+
+43:08.020 --> 43:09.460
+returned in a certain order.
+
+43:10.420 --> 43:12.740
+Here is how to express the same thing in LPEG.
+
+43:13.540 --> 43:22.660
+It's very cryptic, but it's a good way to understand some basic operators of LPEG.
+
+43:22.660 --> 43:34.900
+I mean, we can look at the menu and understand what C, S, and R do, and also exponentiation.
+
+43:35.860 --> 43:43.060
+And this strange thing here receives this string here, runs a function that I have defined
+
+43:43.060 --> 43:50.260
+that converts it to an object of a certain class, and that class represents He patterns.
+
+43:50.260 --> 43:56.900
+So this thing is treated as a pattern for He.Lua, and it is matched against the string,
+
+43:56.900 --> 43:59.300
+and it returns the same thing as the other one.
+
+43:59.860 --> 44:06.260
+Also, this thing here also has a comparison with LPEG-REGS, but these patterns are very
+
+44:06.260 --> 44:06.820
+trivial.
+
+44:06.820 --> 44:10.180
+They don't do anything very strange.
+
+44:10.180 --> 44:14.260
+So let's go back and see what kinds of very strange things there are.
+
+44:16.660 --> 44:23.620
+Here is the page of LPEG-REGS at GitHub.
+
+44:24.260 --> 44:25.860
+Here's the documentation.
+
+44:27.940 --> 44:29.380
+It's relatively brief.
+
+44:29.380 --> 44:35.300
+It explains LPEG-REGS as being an extension of He.Lua.
+
+44:36.500 --> 44:40.100
+So it explains mainly the additional features.
+
+44:40.100 --> 44:44.180
+Here is a quick reference that explains only the additional features.
+
+44:46.820 --> 44:53.380
+Some of these things I was able to understand by using the LPEG-REGS.
+
+44:54.340 --> 45:02.820
+I was struggling a lot, and some I wasn't able to, even by spending several evenings
+
+45:02.820 --> 45:04.420
+trying to build examples.
+
+45:08.260 --> 45:10.900
+And this is something very nice.
+
+45:12.100 --> 45:19.700
+LPEG-REGS comes with some example parsers, and here is a parser that parses the Lua grammar.
+
+45:19.700 --> 45:28.100
+I mean, this is the grammar for Lua 5.4 at the end of the reference manual.
+
+45:28.660 --> 45:35.860
+It's just this, and this is a kind of the BNF, and this is the BNF translated to
+
+45:37.300 --> 45:39.860
+the language of LPEG-REGS.
+
+45:40.420 --> 45:47.300
+So this thing uses many constructions that are in He.Lua and some extra constructions
+
+45:47.300 --> 45:49.460
+that are described here.
+
+45:50.260 --> 45:58.980
+And with these examples, I was able to understand some of these things here that are described
+
+45:58.980 --> 46:02.660
+here in the quick reference, but not all.
+
+46:06.660 --> 46:15.300
+So I wasn't able to use LPEG-REGS by itself because some things didn't make much sense,
+
+46:15.300 --> 46:18.900
+and I decided to reimplement it in my own style.
+
+46:20.900 --> 46:27.860
+Because that would be a way to map, at the very least, map what I understood and what
+
+46:27.860 --> 46:32.980
+I didn't, and learn one feature at a time, do comparisons, and so on.
+
+46:35.380 --> 46:38.900
+Here, I pointed to two features of LPEG.
+
+46:38.900 --> 46:44.820
+One, I said, oh great, this thing can be used to define grammars, even recursive
+
+46:44.900 --> 46:46.020
+grammars, and so on.
+
+46:46.740 --> 46:52.820
+And this is an oh-no feature, one thing that didn't make any sense at all, group captures.
+
+46:55.380 --> 47:01.620
+One thing that I did to understand group captures was to represent them as diagrams.
+
+47:01.620 --> 47:08.020
+Of course, in the beginning, I was drawing these diagrams by hand, but then I realized
+
+47:08.020 --> 47:15.220
+that I could use the bits of LPEG that I already knew to build a grammar that would
+
+47:15.220 --> 47:19.380
+parse a little language and generate these diagrams in LaTeX.
+
+47:20.340 --> 47:21.940
+And I was able to make this.
+
+47:24.180 --> 47:34.500
+In this diagram here, this thing above the arrow is a piece of Lua code that specifies
+
+47:34.500 --> 47:36.100
+an LPEG pattern.
+
+47:36.820 --> 47:43.540
+This thing here at the top is the string that is being matched, and the things below the
+
+47:43.540 --> 47:51.220
+under braces are the captures that each thing, sorry, each thing captures.
+
+47:54.580 --> 48:02.100
+And for example, this under brace here corresponds to this pattern here that parses a single
+
+48:02.100 --> 48:05.060
+character but doesn't return any captures.
+
+48:05.140 --> 48:10.420
+This thing here parses a single B and doesn't return any captures.
+
+48:10.420 --> 48:16.740
+This thing here parses a single character and captures it, and this thing here parses
+
+48:17.620 --> 48:19.700
+the character D and captures it.
+
+48:20.340 --> 48:29.220
+And this other thing here that transforms this pattern into another pattern returns
+
+48:29.780 --> 48:36.500
+first a capture with all the string that was parsed by this pattern here, and then all
+
+48:36.500 --> 48:41.380
+the captures returned by this thing here before the column.
+
+48:43.380 --> 48:50.900
+So this was a way to build concrete examples for things that the LPEG manual was explaining
+
+48:50.900 --> 48:53.940
+in a very terse way, and it worked for me.
+
+48:54.740 --> 49:01.540
+Some things that were very mysterious started to make sense, and I started to have intelligent
+
+49:01.540 --> 49:03.300
+questions to ask in the mailing list.
+
+49:07.700 --> 49:16.980
+And with that, I was able to understand what are group captures and group captures that
+
+49:16.980 --> 49:17.860
+receive a name.
+
+49:20.900 --> 49:23.140
+Well, let me explain what this does.
+
+49:23.220 --> 49:30.180
+This thing here captures, sorry, parses the empty string and returns this as a constant.
+
+49:30.180 --> 49:35.860
+So this is something that doesn't exist in regular expressions.
+
+49:36.980 --> 49:40.180
+It parses nothing and returns this as a capture.
+
+49:40.820 --> 49:48.580
+Then this thing here returns these two constants here and parses the empty string, and this
+
+49:48.660 --> 49:56.500
+thing here, d, converts the results of this thing here into a group capture and stores
+
+49:56.500 --> 49:58.020
+it in the label d.
+
+50:01.380 --> 50:03.860
+And then here's another constant capture.
+
+50:03.860 --> 50:11.460
+And I realized that these things here were similar to how Lua specifies building lists.
+
+50:11.780 --> 50:16.580
+When we build, sorry, a table, when we build a table and we say that the first element
+
+50:16.580 --> 50:20.420
+of the table is here, this element is put at the end of the table.
+
+50:21.140 --> 50:30.820
+When after that we say d equals to, say, 42, we are putting the 42 in the slot whose key
+
+50:30.820 --> 50:31.380
+is d.
+
+50:33.380 --> 50:37.860
+This was happening with LPEG captures, but there was something very strange.
+
+50:37.860 --> 50:46.260
+These group captures could hold more than one capture, more than one value.
+
+50:46.260 --> 50:50.340
+So there was something between lists and tables.
+
+50:51.300 --> 51:00.740
+I started to use this notation to explain in my notation what they were doing.
+
+51:02.340 --> 51:04.900
+Many things start, things stop.
+
+51:05.220 --> 51:08.900
+Many things start, things started to make sense.
+
+51:08.900 --> 51:14.420
+Many mysterious sentences in the manual started to make sense, but some didn't.
+
+51:16.100 --> 51:25.060
+But at least I was able to send some intelligent questions to the mailing list, and the author
+
+51:25.060 --> 51:27.540
+of Lua and LPEG answered some of them.
+
+51:29.700 --> 51:31.860
+He was not very happy about my questions.
+
+51:32.020 --> 51:40.100
+He told me that those diagrams were a waste of time, that the manual was perfectly clear,
+
+51:40.100 --> 51:42.900
+and so on, whatever.
+
+51:42.900 --> 51:51.620
+But I was able to, so it was weird, but I was able to understand lots of things from
+
+51:51.620 --> 51:52.340
+his answers.
+
+51:53.940 --> 51:57.380
+So this is a copy of one of my messages.
+
+51:57.380 --> 51:59.300
+Then there's another one, another one.
+
+51:59.300 --> 52:04.580
+Some were the diagrams, then he complained about these diagrams.
+
+52:04.580 --> 52:12.980
+He said that these things here that look like table constructions do not exist, whatever.
+
+52:15.380 --> 52:23.220
+Anyway, once I understood group captures, many features were very, very easy to understand,
+
+52:23.780 --> 52:28.260
+and I started to be able to use LPEG to build some very interesting things.
+
+52:30.260 --> 52:36.340
+I was able to reproduce some of the features that I saw in LPEG-REX.
+
+52:38.420 --> 52:40.980
+Remember that this, where is that?
+
+52:42.420 --> 52:44.020
+This is a syntax of Lua.
+
+52:45.860 --> 52:54.820
+Here, I was able to understand how these things here were translated to LPEG code, to LPEG
+
+52:54.820 --> 52:58.340
+patterns by using group captures in a certain way.
+
+52:59.460 --> 53:05.060
+And I was able to implement them in lpeg1.lua.
+
+53:06.340 --> 53:14.180
+And after some time, I was able to use lpeg1.lua to build grammars that were able to parse
+
+53:17.300 --> 53:19.860
+arithmetical expressions with the right precedence.
+
+53:19.860 --> 53:25.700
+And here's an example in which I built the grammar step by step, and I test the current
+
+53:25.700 --> 53:29.300
+grammar, and I replace a bit, and then I test the new grammar, and so on.
+
+53:31.780 --> 53:38.580
+And you can see that the result is always a tree that is drawn in a nice two-dimensional way.
+
+53:42.580 --> 53:52.340
+At this point, these powers here are returned as a list, as an operation
+
+53:52.900 --> 53:56.260
+pow with several arguments here.
+
+53:56.820 --> 54:04.820
+And then I apply a kind of parsing combinator here that transforms these trees into other trees.
+
+54:05.540 --> 54:14.180
+And with these combinators here, I can specify that the power is associative in a certain
+
+54:14.180 --> 54:20.340
+direction, the division is associative in another direction, the minus is associative,
+
+54:20.420 --> 54:24.420
+so it uses the same direction as a division, and so on.
+
+54:24.420 --> 54:26.020
+And they have the right precedences.
+
+54:28.660 --> 54:30.020
+So here are the tests.
+
+54:33.700 --> 54:37.140
+So here's my file lpeg1.lua.
+
+54:37.140 --> 54:38.340
+It has several classes.
+
+54:38.980 --> 54:42.980
+Each class has tests after it.
+
+54:43.940 --> 54:51.780
+I was able to implement something that lpeg-reqs has that's called keywords.
+
+54:51.780 --> 54:56.980
+That's very useful for parsing programs in programming languages.
+
+54:56.980 --> 55:06.580
+I was able to implement something similar to the debugger, to the PEG debugger that lpeg uses,
+
+55:07.220 --> 55:12.740
+but I was frustrated by some limitations of that debugger,
+
+55:12.740 --> 55:16.180
+and I implemented my own that is much better.
+
+55:17.700 --> 55:23.860
+And let me show something else.
+
+55:23.860 --> 55:32.900
+I was able to translate a good part of the Lua parser here to lpeg1.lua.
+
+55:33.700 --> 55:39.940
+I haven't finished yet, but I have most of the translation here.
+
+55:43.140 --> 55:50.420
+And after having all that, I was able to build other grammars very quickly.
+
+55:51.380 --> 55:59.220
+Writing new parsers finally became fun, and here's one example that I showed in the beginning.
+
+56:03.620 --> 56:11.220
+If I remember correctly, I took a figure from the Wikipedia.
+
+56:11.220 --> 56:17.220
+I don't have its link now, but I specified a grammar that parses
+
+56:18.500 --> 56:21.140
+exactly the example that appears in the Wikipedia.
+
+56:21.140 --> 56:28.100
+So with my grammar, considering that the top-level entry is statement,
+
+56:28.100 --> 56:36.900
+when I parse this string here, the result is this tree.
+
+56:38.100 --> 56:41.780
+And I can do some operations on that.
+
+56:41.780 --> 56:45.780
+I can define how this thing is to be converted into LaTeX.
+
+56:47.460 --> 56:51.700
+I can define other operations that convert trees into other trees.
+
+56:52.580 --> 56:54.980
+And here are some tests of these operations.
+
+56:58.340 --> 57:00.660
+This is what I showed in the beginning.
+
+57:00.660 --> 57:04.100
+I'm not going to explain all the details of this thing now.
+
+57:07.460 --> 57:14.260
+This show converts this thing into LaTeX in the way specified by these instructions here.
+
+57:15.380 --> 57:16.340
+Let's say that...
+
+57:19.540 --> 57:20.260
+Well, whatever.
+
+57:22.740 --> 57:23.540
+Really, whatever.
+
+57:24.020 --> 57:28.500
+And here's the result, the LaTeX result.
+
+57:34.900 --> 57:46.260
+And these diagrams here are generated by this file here that defines a simple grammar that parses
+
+57:46.260 --> 57:53.460
+this thing here, and then LaTeX it in a certain way, and then also tests this thing.
+
+57:54.100 --> 58:00.900
+To check if this code here, that is Lua code that generates an LPEG grammar,
+
+58:02.900 --> 58:08.740
+parses this subject here and returns the expected result.
+
+58:12.740 --> 58:15.140
+So this is the code that I wanted to show.
+
+58:15.700 --> 58:21.700
+I wanted to show many more things, but I wasn't able to prepare them before the conference.
+
+58:22.580 --> 58:29.060
+And I hope that soon, for some value of soon, I'll be able to create
+
+58:29.620 --> 58:37.060
+REPL-based tutorials for LPEG here and lpeg1.lua, where LPEG is something very famous.
+
+58:37.060 --> 58:39.460
+Here is a module of LPEG.
+
+58:40.500 --> 58:48.100
+I could also do something like this for LPEG-REX, and lpeg1.lua is the thing that I wrote,
+
+58:48.820 --> 58:58.900
+the one that has tests in comments, and the tests usually generate trees,
+
+58:58.900 --> 59:00.900
+and sometimes they generate tag code.
+
+59:03.300 --> 59:04.420
+Yeah, so that's it.
+
+59:04.420 --> 59:07.860
+I wanted to present much more, but I wasn't able to prepare it.
+
+59:07.860 --> 59:08.660
+So sorry.
+
+59:08.660 --> 59:09.140
+Thanks.
+
+59:09.140 --> 59:10.260
+Bye.
+
diff --git a/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main--chapters.vtt b/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main--chapters.vtt
new file mode 100644
index 00000000..aac6f54c
--- /dev/null
+++ b/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main--chapters.vtt
@@ -0,0 +1,53 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:37.399
+Introduction
+
+00:00:37.400 --> 00:01:02.559
+Three activities in voice computing
+
+00:01:02.560 --> 00:01:53.519
+Talk is not about ... and about ...
+
+00:01:53.520 --> 00:03:33.239
+Motivations
+
+00:03:33.240 --> 00:03:58.679
+Data
+
+00:03:58.680 --> 00:04:25.627
+Voice In in the Chrome Store
+
+00:04:25.628 --> 00:05:16.879
+Works in web pages with text areas
+
+00:05:16.880 --> 00:06:41.739
+Built-in commands in Voice In Plus
+
+00:06:41.740 --> 00:08:14.759
+Common errors made by Voice In
+
+00:08:14.760 --> 00:09:59.419
+Custom speech-to-text commands
+
+00:09:59.420 --> 00:10:37.539
+Custom speech-to-commands
+
+00:10:37.540 --> 00:12:28.399
+Introducing Talon Voice
+
+00:12:28.400 --> 00:14:02.539
+Talon GUI
+
+00:14:02.540 --> 00:15:34.014
+Talon file with web scope
+
+00:15:34.015 --> 00:16:52.499
+Terminals on remote and virtual machines
+
+00:16:52.500 --> 00:18:17.719
+Recommendations
+
+00:18:17.720 --> 00:18:48.880
+Acknowledgements
diff --git a/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt b/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt
index 650d2d49..5ff59fdc 100644
--- a/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt
+++ b/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt
@@ -1,5 +1,7 @@
WEBVTT captioned by sachac
+NOTE Introduction
+
00:00:00.000 --> 00:00:04.359
Hi, I'm Blaine Mooers. I'm an associate professor
@@ -33,6 +35,8 @@ I was seeking ways of using voice computing
00:00:33.040 --> 00:00:37.399
to try to enhance my productivity.
+NOTE Three activities in voice computing
+
00:00:37.400 --> 00:00:41.319
I divide voice computing into three activities,
@@ -54,17 +58,19 @@ that are probably most broadly applicable
00:00:57.320 --> 00:01:02.559
to the workflows of people attending this conference.
+NOTE Talk is not about ... and about ...
+
00:01:02.560 --> 00:01:06.799
This talk will not be about Emacspeak.
00:01:06.800 --> 00:01:11.359
-This is a verbal program for converting text to speech.
+This is a venerated program for converting text to speech.
00:01:11.360 --> 00:01:13.319
We're talking about the flow of information
00:01:13.320 --> 00:01:16.519
-opposite direction, speech-to-text.
+in the opposite direction, speech-to-text.
00:01:16.520 --> 00:01:20.599
We need an Emacs Listens. We don't have one,
@@ -99,7 +105,7 @@ and it's also great at speech-to-code.
NOTE Motivations
00:01:53.520 --> 00:01:57.239
-So, the motivations are, obviously, as I mentioned already,
+The motivations are, obviously, as I mentioned already,
00:01:57.240 --> 00:01:59.159
for improved productivity.
@@ -209,7 +215,7 @@ I adopted the use of voice computing
in the middle of August. As you can see,
00:03:53.920 --> 00:03:58.679
-I got a over three-fold increase in my output.
+I got an over three-fold increase in my output.
NOTE Voice In in the Chrome Store
@@ -217,7 +223,7 @@ NOTE Voice In in the Chrome Store
So this is the Chrome store website for voice-in.
00:04:07.120 --> 00:04:11.119
-So it's only available for Google Chrome.
+It's only available for Google Chrome.
00:04:11.120 --> 00:04:13.239
You just hit the install button to install it.
@@ -231,8 +237,13 @@ It has support for 40 languages
00:04:19.560 --> 00:04:23.119
and it supports about a dozen different dialects of English,
-00:04:23.120 --> 00:04:29.959
-including Australian. It works on web pages with text areas,
+00:04:23.120 --> 00:04:25.627
+including Australian.
+
+NOTE Works in web pages with text areas
+
+00:04:25.628 --> 00:04:29.959
+It works on web pages with text areas,
00:04:29.960 --> 00:04:33.319
so it works. I use it regularly
@@ -265,15 +276,15 @@ I've mapped option-L to opening Voice In
when the cursor is on a web page that has a text area.
00:05:09.120 --> 00:05:16.879
-So that's the main limiting factor.
+So [the presence of a text area is] the main limiting factor.
NOTE Built-in commands in Voice In Plus
00:05:16.880 --> 00:05:19.159
-So it has a number of built-in commands.
+[Voice In] has a number of built-in commands.
00:05:19.160 --> 00:05:24.879
-You can turn it off by saying stop dictation.
+You can turn it off by saying "stop dictation".
00:05:24.880 --> 00:05:26.119
It doesn't distinguish between
@@ -282,16 +293,16 @@ It doesn't distinguish between
a command mode and a dictation mode.
00:05:28.800 --> 00:05:33.599
-It has undo command. When you use a command,
+It has undo command. You use the command
00:05:33.600 --> 00:05:36.919
-copy that to a copy of selection.
+"copy that" to copy a selection.
00:05:36.920 --> 00:05:40.079
-And the `press` commands are used in the browser,
+The "press" commands are used in the browser.
00:05:40.080 --> 00:05:44.839
-so you press Enter to issue a command or a text
+You [say] "press enter" to issue a command or [submit] text
00:05:44.840 --> 00:05:50.319
that has been written in a web form,
@@ -335,7 +346,7 @@ I also provide an Elisp version of this quiz,
00:06:35.600 --> 00:06:41.739
but it's a little slower to operate.
-NOTE Common errors
+NOTE Common errors made by Voice In
00:06:41.740 --> 00:06:43.399
These are some common errors
@@ -368,7 +379,7 @@ It inserts the wrong word because it's not in the dictionary
that was used to train it. So, for example,
00:07:22.620 --> 00:07:26.919
-the word PyMOL is the name of a lexicographic program
+the word PyMOL is the name of a molecular graphics program
00:07:26.920 --> 00:07:31.639
that we use in our field. It doesn't recognize PyMOL.
@@ -409,13 +420,13 @@ that's separate from a dictation mode.
NOTE Custom speech-to-text commands
00:08:14.760 --> 00:08:20.319
-So you can set up through a very easy-to-use GUI
+You can set up through a very easy-to-use GUI
00:08:20.320 --> 00:08:26.959
-custom voice commands mapped to what you want inserted.
+custom voice commands mapped to what you want inserted,
00:08:26.960 --> 00:08:32.399
-So this is how misinterpreted words can be corrected.
+so this is how misinterpreted words can be corrected.
00:08:32.400 --> 00:08:35.759
You just map the misinterpreted word to the intended word.
@@ -427,7 +438,7 @@ You can also map the contractions to their expansions.
I did this for 94 English contractions,
00:08:46.960 --> 00:08:50.139
-and you can find this on GitHub.
+and you can find these on GitHub.
00:08:50.140 --> 00:08:56.079
You can also insert acronyms and expand those acronyms.
@@ -439,19 +450,19 @@ I apply the same approach to the first names of colleagues.
I say "expand Fred", for example,
00:09:03.760 --> 00:09:06.999
-to get Fred's first and last name with the spelling
+to get Fred's first and last name
00:09:07.000 --> 00:09:12.599
-of his very long German name.
+with the [correct] spelling of his very long German name.
00:09:12.600 --> 00:09:19.399
You can also insert other trivia like favorite URLs.
00:09:19.400 --> 00:09:24.559
-You can insert a lot of text snippets,
+You can insert LaTeX snippets.
00:09:24.560 --> 00:09:34.799
-and so it handles correctly multi-line snippets.
+It handles correctly multi-line snippets.
00:09:34.800 --> 00:09:39.419
You just have to enclose them in double quotes.
@@ -465,11 +476,13 @@ that you use frequently. All fields
00:09:46.880 --> 00:09:59.419
have certain key references for certain methods or topics.
+NOTE Custom speech-to-commands
+
00:09:59.420 --> 00:10:05.079
Then it has a set of commands that you can customize
00:10:05.080 --> 00:10:08.199
-for the purpose of speech to commands
+for the purpose of speech-to-commands
00:10:08.200 --> 00:10:09.679
to get the computer to do something
@@ -477,22 +490,22 @@ to get the computer to do something
00:10:09.680 --> 00:10:15.399
like open up a specific website or save the current writing.
-00:10:15.400 --> 00:10:19.919
-In this case, we have "press" is a mapping of
+00:10:15.400 --> 00:10:23.540
+In this case, we have "press: command-s"
-00:10:19.920 --> 00:10:27.759
-is applied to the command `s` for saving current writing.
+00:10:23.541 --> 00:10:27.759
+for saving current writing.
00:10:27.760 --> 00:10:28.099
-You can change the language,
+You can change the language [with "lang:"],
00:10:28.100 --> 00:10:37.539
-and you can change the case of the text.
+and you can change the case of the text [with "case:"].
NOTE Introducing Talon Voice
00:10:37.540 --> 00:10:41.039
-But the speech to command repertoire is quite limited
+But the speech-to-command repertoire is quite limited
00:10:41.040 --> 00:10:49.759
in Voice In, so it's now time to pick up on Talon Voice.
@@ -537,10 +550,10 @@ You can activate it,
and it'll be in a listening state asleep.
00:11:31.360 --> 00:11:36.279
-You just bark out Talon Wake to start to wake it up,
+You just bark out "Talon Wake" to start to wake it up,
00:11:36.280 --> 00:11:43.799
-and Talon Sleep to have it go into a listening state.
+and "Talon Sleep" to have it go into a listening state.
00:11:43.800 --> 00:11:47.919
It has a very welcoming community
@@ -578,7 +591,7 @@ for which he's primarily developing Cursorless.
NOTE Talon GUI
00:12:28.400 --> 00:12:35.519
-So, I followed the protocol outlined by Tara Roys.
+I followed the [install] protocol outlined by Tara Roys.
00:12:35.520 --> 00:12:38.759
She has a collection of tutorials
@@ -590,7 +603,7 @@ on YouTube as well as on GitHub that are quite helpful.
I followed her tutorial for installing
00:12:49.480 --> 00:12:51.359
-Talend on macOS without any issues,
+Talon on macOS without any issues,
00:12:51.360 --> 00:12:55.319
but allow for half an hour to an hour
@@ -611,13 +624,13 @@ that means it's in the sleep state.
So, this leads to cascading pull-down menus.
00:13:13.520 --> 00:13:19.639
-This is it for the GUI interface.
+This is it for the GUI.
00:13:19.640 --> 00:13:26.519
-One of your first tasks is to select a large language model
+One of your first tasks is to select
00:13:26.520 --> 00:13:30.439
-or language model that will be used to interpret
+a language model that will be used to interpret
00:13:30.440 --> 00:13:35.179
the sounds that you generate as words.
@@ -643,8 +656,10 @@ You do not have to restart Talon
00:13:57.600 --> 00:14:02.539
to get the change to take effect.
+NOTE Talon file with web scope
+
00:14:02.540 --> 00:14:04.759
-So, this is an example of a Talon file.
+This is an example of a Talon file.
00:14:04.760 --> 00:14:10.499
It has two components. It has a header above the dash that describes
@@ -706,20 +721,25 @@ it's an optional feature of Talon files,
00:15:29.600 --> 00:15:32.639
then the commands in the file will apply in all situations,
-00:15:32.640 --> 00:15:36.959
-in all modes. Here we have two restrictions.
+00:15:32.640 --> 00:15:34.014
+in all modes.
+
+NOTE Terminals on remote and virtual machines
+
+00:15:34.015 --> 00:15:36.959
+Here we have two restrictions.
00:15:36.960 --> 00:15:38.959
-This is only, these commands will only work
+These commands will only work
00:15:38.960 --> 00:15:42.959
-when using the iTerm2 terminal emulator for the Mac,
+when using the iTerm2 [ccc] terminal emulator for the Mac,
00:15:42.960 --> 00:15:48.239
and then only when the title of the window in iTerm2
00:15:48.240 --> 00:15:52.439
-has this particular address, which corresponds to,
+has this particular address,
00:15:52.440 --> 00:15:55.559
which is what appears when I've logged into
@@ -728,7 +748,7 @@ which is what appears when I've logged into
the supercomputer at the University of Oklahoma.
00:16:00.060 --> 00:16:03.479
-So, one of the commands in this file is checkjobs.
+One of the commands in this file is checkjobs.
00:16:03.480 --> 00:16:05.539
It's mapped to an alias,
@@ -749,13 +769,13 @@ of the pending and running jobs on the supercomputer
in a format that I find pleasing.
00:16:26.081 --> 00:16:34.559
-So, this backslash n after cj, new line character,
+This `\n` after cj, the new line character,
00:16:34.560 --> 00:16:39.839
-enters the command. So, I don't have to do that
+enters the command, so I don't have to do that
00:16:39.840 --> 00:16:43.799
-as an additional step. And then, likewise,
+as an additional step. Likewise,
00:16:43.800 --> 00:16:46.799
here's a similar setup for interacting with
@@ -766,7 +786,7 @@ a Ubuntu virtual machine.
NOTE Recommendations
00:16:52.500 --> 00:16:55.919
-So, in terms of picking up voice computing,
+In terms of picking up voice computing,
00:16:55.920 --> 00:16:57.479
these are my recommendations.
@@ -822,20 +842,25 @@ versus Talon Voice where I think
00:17:56.320 --> 00:17:59.879
the error rate is closer to 5 percent.
-00:18:00.840 --> 00:18:04.759
-I have put together contractions also for Talon,
+00:18:00.840 --> 00:18:03.507
+I have put together [a library of English] contractions
-00:18:04.760 --> 00:18:07.479
+00:18:03.508 --> 00:18:04.880
+[and their expansion] for Talon [too],
+
+00:18:04.881 --> 00:18:07.479
and they can be found here on GitHub.
00:18:07.480 --> 00:18:12.959
-And I also have a quiz of 600 questions
+And I also have [posted] a quiz of 600 questions
00:18:12.960 --> 00:18:17.719
about some basic Talon commands.
+NOTE Acknowledgements
+
00:18:17.720 --> 00:18:20.999
-So, I'd like to thank the people who've helped me out
+I'd like to thank the people who've helped me out
00:18:21.000 --> 00:18:22.159
on the Talon Slack channel
@@ -856,7 +881,7 @@ I'd like to thank my friends
at the Berlin and Austin Emacs Meetup
00:18:37.400 --> 00:18:42.659
-and at the M-x Research Slack channel.
+and at the M-x research Slack channel.
00:18:42.660 --> 00:18:45.119
And I thank these grant funding agencies
diff --git a/2023/info/voice-after.md b/2023/info/voice-after.md
index dd449d66..5609b7cd 100644
--- a/2023/info/voice-after.md
+++ b/2023/info/voice-after.md
@@ -4,7 +4,7 @@
<a name="voice-mainVideo-transcript"></a>
# Transcript
-[[!template text="""Hi, I'm Blaine Mooers. I'm an associate professor""" start="00:00:00.000" video="mainVideo-voice" id="subtitle"]]
+[[!template new="1" text="""Hi, I'm Blaine Mooers. I'm an associate professor""" start="00:00:00.000" video="mainVideo-voice" id="subtitle"]]
[[!template text="""of biochemistry at the University of Oklahoma""" start="00:00:04.360" video="mainVideo-voice" id="subtitle"]]
[[!template text="""Health Sciences Center in Oklahoma City.""" start="00:00:06.520" video="mainVideo-voice" id="subtitle"]]
[[!template text="""My lab studies the role of RNA structure in RNA editing.""" start="00:00:09.320" video="mainVideo-voice" id="subtitle"]]
@@ -15,17 +15,17 @@
[[!template text="""analyzing the resulting data.""" start="00:00:26.720" video="mainVideo-voice" id="subtitle"]]
[[!template text="""I was seeking ways of using voice computing""" start="00:00:29.720" video="mainVideo-voice" id="subtitle"]]
[[!template text="""to try to enhance my productivity.""" start="00:00:33.040" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""I divide voice computing into three activities,""" start="00:00:37.400" video="mainVideo-voice" id="subtitle"]]
+[[!template new="1" text="""I divide voice computing into three activities,""" start="00:00:37.400" video="mainVideo-voice" id="subtitle"]]
[[!template text="""speech-to-text or dictation, speech-to-commands,""" start="00:00:41.320" video="mainVideo-voice" id="subtitle"]]
[[!template text="""and speech-to-code. I'll be talking about""" start="00:00:44.960" video="mainVideo-voice" id="subtitle"]]
[[!template text="""speech-to-text and speech-to-commands today""" start="00:00:47.640" video="mainVideo-voice" id="subtitle"]]
[[!template text="""because these are two activities""" start="00:00:50.160" video="mainVideo-voice" id="subtitle"]]
[[!template text="""that are probably most broadly applicable""" start="00:00:55.080" video="mainVideo-voice" id="subtitle"]]
[[!template text="""to the workflows of people attending this conference.""" start="00:00:57.320" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""This talk will not be about Emacspeak.""" start="00:01:02.560" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""This is a verbal program for converting text to speech.""" start="00:01:06.800" video="mainVideo-voice" id="subtitle"]]
+[[!template new="1" text="""This talk will not be about Emacspeak.""" start="00:01:02.560" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""This is a venerated program for converting text to speech.""" start="00:01:06.800" video="mainVideo-voice" id="subtitle"]]
[[!template text="""We're talking about the flow of information""" start="00:01:11.360" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""opposite direction, speech-to-text.""" start="00:01:13.320" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""in the opposite direction, speech-to-text.""" start="00:01:13.320" video="mainVideo-voice" id="subtitle"]]
[[!template text="""We need an Emacs Listens. We don't have one,""" start="00:01:16.520" video="mainVideo-voice" id="subtitle"]]
[[!template text="""so I had to seek help from outside the Emacs world""" start="00:01:20.600" video="mainVideo-voice" id="subtitle"]]
[[!template text="""via the Voice In Plus. This runs in""" start="00:01:25.480" video="mainVideo-voice" id="subtitle"]]
@@ -36,7 +36,7 @@
[[!template text="""However, Talon Voice is much better""" start="00:01:42.000" video="mainVideo-voice" id="subtitle"]]
[[!template text="""with the speech-to-commands,""" start="00:01:44.800" video="mainVideo-voice" id="subtitle"]]
[[!template text="""and it's also great at speech-to-code.""" start="00:01:47.560" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""So, the motivations are, obviously, as I mentioned already,""" start="00:01:53.520" video="mainVideo-voice" id="subtitle"]]
+[[!template new="1" text="""The motivations are, obviously, as I mentioned already,""" start="00:01:53.520" video="mainVideo-voice" id="subtitle"]]
[[!template text="""for improved productivity.""" start="00:01:57.240" video="mainVideo-voice" id="subtitle"]]
[[!template text="""So, if you're a fast typist""" start="00:01:59.160" video="mainVideo-voice" id="subtitle"]]
[[!template text="""who types faster than they can speak,""" start="00:02:00.400" video="mainVideo-voice" id="subtitle"]]
@@ -66,20 +66,21 @@
[[!template text="""while looking out the window,""" start="00:03:21.800" video="mainVideo-voice" id="subtitle"]]
[[!template text="""thereby giving your lower body a break""" start="00:03:25.000" video="mainVideo-voice" id="subtitle"]]
[[!template text="""and your eyes a break.""" start="00:03:27.780" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""I'm not God, so I have to bring data.""" start="00:03:33.240" video="mainVideo-voice" id="subtitle"]]
+[[!template new="1" text="""I'm not God, so I have to bring data.""" start="00:03:33.240" video="mainVideo-voice" id="subtitle"]]
[[!template text="""I have two data points here,""" start="00:03:35.640" video="mainVideo-voice" id="subtitle"]]
[[!template text="""the number of words that I wrote in June and July this year""" start="00:03:38.040" video="mainVideo-voice" id="subtitle"]]
[[!template text="""and in September and October.""" start="00:03:42.400" video="mainVideo-voice" id="subtitle"]]
[[!template text="""I adopted the use of voice computing""" start="00:03:45.160" video="mainVideo-voice" id="subtitle"]]
[[!template text="""in the middle of August. As you can see,""" start="00:03:49.520" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""I got a over three-fold increase in my output.""" start="00:03:53.920" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""So this is the Chrome store website for voice-in.""" start="00:03:58.680" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""So it's only available for Google Chrome.""" start="00:04:07.120" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""I got an over three-fold increase in my output.""" start="00:03:53.920" video="mainVideo-voice" id="subtitle"]]
+[[!template new="1" text="""So this is the Chrome store website for voice-in.""" start="00:03:58.680" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""It's only available for Google Chrome.""" start="00:04:07.120" video="mainVideo-voice" id="subtitle"]]
[[!template text="""You just hit the install button to install it.""" start="00:04:11.120" video="mainVideo-voice" id="subtitle"]]
[[!template text="""To configure it, you need to select a language.""" start="00:04:13.240" video="mainVideo-voice" id="subtitle"]]
[[!template text="""It has support for 40 languages""" start="00:04:16.640" video="mainVideo-voice" id="subtitle"]]
[[!template text="""and it supports about a dozen different dialects of English,""" start="00:04:19.560" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""including Australian. It works on web pages with text areas,""" start="00:04:23.120" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""including Australian.""" start="00:04:23.120" video="mainVideo-voice" id="subtitle"]]
+[[!template new="1" text="""It works on web pages with text areas,""" start="00:04:25.628" video="mainVideo-voice" id="subtitle"]]
[[!template text="""so it works. I use it regularly""" start="00:04:29.960" video="mainVideo-voice" id="subtitle"]]
[[!template text="""on Overleaf and 750words.com,""" start="00:04:33.320" video="mainVideo-voice" id="subtitle"]]
[[!template text="""a distraction-free environment for writing.""" start="00:04:37.880" video="mainVideo-voice" id="subtitle"]]
@@ -90,15 +91,15 @@
[[!template text="""It should work in Cloudmacs.""" start="00:04:58.000" video="mainVideo-voice" id="subtitle"]]
[[!template text="""I've mapped option-L to opening Voice In""" start="00:05:01.320" video="mainVideo-voice" id="subtitle"]]
[[!template text="""when the cursor is on a web page that has a text area.""" start="00:05:04.160" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""So that's the main limiting factor.""" start="00:05:09.120" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""So it has a number of built-in commands.""" start="00:05:16.880" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""You can turn it off by saying stop dictation.""" start="00:05:19.160" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""So [the presence of a text area is] the main limiting factor.""" start="00:05:09.120" video="mainVideo-voice" id="subtitle"]]
+[[!template new="1" text="""[Voice In] has a number of built-in commands.""" start="00:05:16.880" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""You can turn it off by saying &quot;stop dictation&quot;.""" start="00:05:19.160" video="mainVideo-voice" id="subtitle"]]
[[!template text="""It doesn't distinguish between""" start="00:05:24.880" video="mainVideo-voice" id="subtitle"]]
[[!template text="""a command mode and a dictation mode.""" start="00:05:26.120" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""It has undo command. When you use a command,""" start="00:05:28.800" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""copy that to a copy of selection.""" start="00:05:33.600" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""And the `press` commands are used in the browser,""" start="00:05:36.920" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""so you press Enter to issue a command or a text""" start="00:05:40.080" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""It has undo command. You use the command""" start="00:05:28.800" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""&quot;copy that&quot; to copy a selection.""" start="00:05:33.600" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""The &quot;press&quot; commands are used in the browser.""" start="00:05:36.920" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""You [say] &quot;press enter&quot; to issue a command or [submit] text""" start="00:05:40.080" video="mainVideo-voice" id="subtitle"]]
[[!template text="""that has been written in a web form,""" start="00:05:44.840" video="mainVideo-voice" id="subtitle"]]
[[!template text="""and then &quot;press tab&quot; will open up the next tab""" start="00:05:50.320" video="mainVideo-voice" id="subtitle"]]
[[!template text="""in a web browser. The scroll up and down""" start="00:05:55.280" video="mainVideo-voice" id="subtitle"]]
@@ -113,7 +114,7 @@
[[!template text="""in less than a minute, once you know the commands.""" start="00:06:26.560" video="mainVideo-voice" id="subtitle"]]
[[!template text="""I also provide an Elisp version of this quiz,""" start="00:06:32.160" video="mainVideo-voice" id="subtitle"]]
[[!template text="""but it's a little slower to operate.""" start="00:06:35.600" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""These are some common errors""" start="00:06:41.740" video="mainVideo-voice" id="subtitle"]]
+[[!template new="1" text="""These are some common errors""" start="00:06:41.740" video="mainVideo-voice" id="subtitle"]]
[[!template text="""that I've run into with Voice In.""" start="00:06:43.400" video="mainVideo-voice" id="subtitle"]]
[[!template text="""It likes to contract statements like &quot;I will&quot; into &quot;I'll&quot;.""" start="00:06:45.400" video="mainVideo-voice" id="subtitle"]]
[[!template text="""Contractions are not used in formal writing,""" start="00:06:50.320" video="mainVideo-voice" id="subtitle"]]
@@ -123,7 +124,7 @@
[[!template text="""This might be some speech issue that I have.""" start="00:07:10.040" video="mainVideo-voice" id="subtitle"]]
[[!template text="""It inserts the wrong word because it's not in the dictionary""" start="00:07:13.360" video="mainVideo-voice" id="subtitle"]]
[[!template text="""that was used to train it. So, for example,""" start="00:07:17.600" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""the word PyMOL is the name of a lexicographic program""" start="00:07:22.620" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""the word PyMOL is the name of a molecular graphics program""" start="00:07:22.620" video="mainVideo-voice" id="subtitle"]]
[[!template text="""that we use in our field. It doesn't recognize PyMOL.""" start="00:07:26.920" video="mainVideo-voice" id="subtitle"]]
[[!template text="""Instead, it substitutes in the word &quot;primal&quot;.""" start="00:07:31.640" video="mainVideo-voice" id="subtitle"]]
[[!template text="""Since I don't use &quot;primal&quot; very often,""" start="00:07:34.240" video="mainVideo-voice" id="subtitle"]]
@@ -136,34 +137,34 @@
[[!template text="""So this is a problem, a pitfall of Voice In,""" start="00:08:01.440" video="mainVideo-voice" id="subtitle"]]
[[!template text="""in that it doesn't have a command mode""" start="00:08:07.120" video="mainVideo-voice" id="subtitle"]]
[[!template text="""that's separate from a dictation mode.""" start="00:08:08.920" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""So you can set up through a very easy-to-use GUI""" start="00:08:14.760" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""custom voice commands mapped to what you want inserted.""" start="00:08:20.320" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""So this is how misinterpreted words can be corrected.""" start="00:08:26.960" video="mainVideo-voice" id="subtitle"]]
+[[!template new="1" text="""You can set up through a very easy-to-use GUI""" start="00:08:14.760" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""custom voice commands mapped to what you want inserted,""" start="00:08:20.320" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""so this is how misinterpreted words can be corrected.""" start="00:08:26.960" video="mainVideo-voice" id="subtitle"]]
[[!template text="""You just map the misinterpreted word to the intended word.""" start="00:08:32.400" video="mainVideo-voice" id="subtitle"]]
[[!template text="""You can also map the contractions to their expansions.""" start="00:08:35.760" video="mainVideo-voice" id="subtitle"]]
[[!template text="""I did this for 94 English contractions,""" start="00:08:42.840" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""and you can find this on GitHub.""" start="00:08:46.960" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""and you can find these on GitHub.""" start="00:08:46.960" video="mainVideo-voice" id="subtitle"]]
[[!template text="""You can also insert acronyms and expand those acronyms.""" start="00:08:50.140" video="mainVideo-voice" id="subtitle"]]
[[!template text="""I apply the same approach to the first names of colleagues.""" start="00:08:56.080" video="mainVideo-voice" id="subtitle"]]
[[!template text="""I say &quot;expand Fred&quot;, for example,""" start="00:09:00.240" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""to get Fred's first and last name with the spelling""" start="00:09:03.760" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""of his very long German name.""" start="00:09:07.000" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""to get Fred's first and last name""" start="00:09:03.760" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""with the [correct] spelling of his very long German name.""" start="00:09:07.000" video="mainVideo-voice" id="subtitle"]]
[[!template text="""You can also insert other trivia like favorite URLs.""" start="00:09:12.600" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""You can insert a lot of text snippets,""" start="00:09:19.400" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""and so it handles correctly multi-line snippets.""" start="00:09:24.560" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""You can insert LaTeX snippets.""" start="00:09:19.400" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""It handles correctly multi-line snippets.""" start="00:09:24.560" video="mainVideo-voice" id="subtitle"]]
[[!template text="""You just have to enclose them in double quotes.""" start="00:09:34.800" video="mainVideo-voice" id="subtitle"]]
[[!template text="""You can even insert BibTeX cite keys for references""" start="00:09:39.420" video="mainVideo-voice" id="subtitle"]]
[[!template text="""that you use frequently. All fields""" start="00:09:45.040" video="mainVideo-voice" id="subtitle"]]
[[!template text="""have certain key references for certain methods or topics.""" start="00:09:46.880" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""Then it has a set of commands that you can customize""" start="00:09:59.420" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""for the purpose of speech to commands""" start="00:10:05.080" video="mainVideo-voice" id="subtitle"]]
+[[!template new="1" text="""Then it has a set of commands that you can customize""" start="00:09:59.420" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""for the purpose of speech-to-commands""" start="00:10:05.080" video="mainVideo-voice" id="subtitle"]]
[[!template text="""to get the computer to do something""" start="00:10:08.200" video="mainVideo-voice" id="subtitle"]]
[[!template text="""like open up a specific website or save the current writing.""" start="00:10:09.680" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""In this case, we have &quot;press&quot; is a mapping of""" start="00:10:15.400" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""is applied to the command `s` for saving current writing.""" start="00:10:19.920" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""You can change the language,""" start="00:10:27.760" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""and you can change the case of the text.""" start="00:10:28.100" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""But the speech to command repertoire is quite limited""" start="00:10:37.540" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""In this case, we have &quot;press: command-s&quot;""" start="00:10:15.400" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""for saving current writing.""" start="00:10:23.541" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""You can change the language [with &quot;lang:&quot;],""" start="00:10:27.760" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""and you can change the case of the text [with &quot;case:&quot;].""" start="00:10:28.100" video="mainVideo-voice" id="subtitle"]]
+[[!template new="1" text="""But the speech-to-command repertoire is quite limited""" start="00:10:37.540" video="mainVideo-voice" id="subtitle"]]
[[!template text="""in Voice In, so it's now time to pick up on Talon Voice.""" start="00:10:41.040" video="mainVideo-voice" id="subtitle"]]
[[!template text="""This is an open source project. It's free.""" start="00:10:49.760" video="mainVideo-voice" id="subtitle"]]
[[!template text="""It is highly configurable via TalonScript,""" start="00:10:54.120" video="mainVideo-voice" id="subtitle"]]
@@ -178,8 +179,8 @@
[[!template text="""that's separate from a command mode.""" start="00:11:21.520" video="mainVideo-voice" id="subtitle"]]
[[!template text="""You can activate it,""" start="00:11:24.600" video="mainVideo-voice" id="subtitle"]]
[[!template text="""and it'll be in a listening state asleep.""" start="00:11:25.600" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""You just bark out Talon Wake to start to wake it up,""" start="00:11:31.360" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""and Talon Sleep to have it go into a listening state.""" start="00:11:36.280" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""You just bark out &quot;Talon Wake&quot; to start to wake it up,""" start="00:11:31.360" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""and &quot;Talon Sleep&quot; to have it go into a listening state.""" start="00:11:36.280" video="mainVideo-voice" id="subtitle"]]
[[!template text="""It has a very welcoming community""" start="00:11:43.800" video="mainVideo-voice" id="subtitle"]]
[[!template text="""in the Talon Slack channel.""" start="00:11:47.920" video="mainVideo-voice" id="subtitle"]]
[[!template text="""Then I need to point out that there's several packages""" start="00:11:50.920" video="mainVideo-voice" id="subtitle"]]
@@ -191,20 +192,20 @@
[[!template text="""This, however, runs on VS Code.""" start="00:12:17.240" video="mainVideo-voice" id="subtitle"]]
[[!template text="""At least that's the text editor""" start="00:12:20.560" video="mainVideo-voice" id="subtitle"]]
[[!template text="""for which he's primarily developing Cursorless.""" start="00:12:23.360" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""So, I followed the protocol outlined by Tara Roys.""" start="00:12:28.400" video="mainVideo-voice" id="subtitle"]]
+[[!template new="1" text="""I followed the [install] protocol outlined by Tara Roys.""" start="00:12:28.400" video="mainVideo-voice" id="subtitle"]]
[[!template text="""She has a collection of tutorials""" start="00:12:35.520" video="mainVideo-voice" id="subtitle"]]
[[!template text="""on YouTube as well as on GitHub that are quite helpful.""" start="00:12:38.760" video="mainVideo-voice" id="subtitle"]]
[[!template text="""I followed her tutorial for installing""" start="00:12:44.600" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""Talend on macOS without any issues,""" start="00:12:49.480" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""Talon on macOS without any issues,""" start="00:12:49.480" video="mainVideo-voice" id="subtitle"]]
[[!template text="""but allow for half an hour to an hour""" start="00:12:51.360" video="mainVideo-voice" id="subtitle"]]
[[!template text="""to go through the process. When you're done,""" start="00:12:55.320" video="mainVideo-voice" id="subtitle"]]
[[!template text="""you'll have this Talon icon appear in the toolbar""" start="00:12:57.720" video="mainVideo-voice" id="subtitle"]]
[[!template text="""on the Mac. When it has this diagonal line across it,""" start="00:13:02.200" video="mainVideo-voice" id="subtitle"]]
[[!template text="""that means it's in the sleep state.""" start="00:13:06.120" video="mainVideo-voice" id="subtitle"]]
[[!template text="""So, this leads to cascading pull-down menus.""" start="00:13:09.540" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""This is it for the GUI interface.""" start="00:13:13.520" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""One of your first tasks is to select a large language model""" start="00:13:19.640" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""or language model that will be used to interpret""" start="00:13:26.520" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""This is it for the GUI.""" start="00:13:13.520" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""One of your first tasks is to select""" start="00:13:19.640" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""a language model that will be used to interpret""" start="00:13:26.520" video="mainVideo-voice" id="subtitle"]]
[[!template text="""the sounds that you generate as words.""" start="00:13:30.440" video="mainVideo-voice" id="subtitle"]]
[[!template text="""And the other kind of key feature is that there's a,""" start="00:13:35.180" video="mainVideo-voice" id="subtitle"]]
[[!template text="""under scripting, there's a view log pull-down""" start="00:13:38.960" video="mainVideo-voice" id="subtitle"]]
@@ -213,7 +214,7 @@
[[!template text="""that change is implemented immediately.""" start="00:13:52.880" video="mainVideo-voice" id="subtitle"]]
[[!template text="""You do not have to restart Talon""" start="00:13:55.080" video="mainVideo-voice" id="subtitle"]]
[[!template text="""to get the change to take effect.""" start="00:13:57.600" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""So, this is an example of a Talon file.""" start="00:14:02.540" video="mainVideo-voice" id="subtitle"]]
+[[!template new="1" text="""This is an example of a Talon file.""" start="00:14:02.540" video="mainVideo-voice" id="subtitle"]]
[[!template text="""It has two components. It has a header above the dash that describes""" start="00:14:04.760" video="mainVideo-voice" id="subtitle"]]
[[!template text="""the scope of the commands contained below the dash.""" start="00:14:10.500" video="mainVideo-voice" id="subtitle"]]
[[!template text="""Each command is separated by a blank line.""" start="00:14:14.920" video="mainVideo-voice" id="subtitle"]]
@@ -234,26 +235,27 @@
[[!template text="""So, if there's no header present,""" start="00:15:24.080" video="mainVideo-voice" id="subtitle"]]
[[!template text="""it's an optional feature of Talon files,""" start="00:15:26.440" video="mainVideo-voice" id="subtitle"]]
[[!template text="""then the commands in the file will apply in all situations,""" start="00:15:29.600" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""in all modes. Here we have two restrictions.""" start="00:15:32.640" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""This is only, these commands will only work""" start="00:15:36.960" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""when using the iTerm2 terminal emulator for the Mac,""" start="00:15:38.960" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""in all modes.""" start="00:15:32.640" video="mainVideo-voice" id="subtitle"]]
+[[!template new="1" text="""Here we have two restrictions.""" start="00:15:34.015" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""These commands will only work""" start="00:15:36.960" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""when using the iTerm2 [ccc] terminal emulator for the Mac,""" start="00:15:38.960" video="mainVideo-voice" id="subtitle"]]
[[!template text="""and then only when the title of the window in iTerm2""" start="00:15:42.960" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""has this particular address, which corresponds to,""" start="00:15:48.240" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""has this particular address,""" start="00:15:48.240" video="mainVideo-voice" id="subtitle"]]
[[!template text="""which is what appears when I've logged into""" start="00:15:52.440" video="mainVideo-voice" id="subtitle"]]
[[!template text="""the supercomputer at the University of Oklahoma.""" start="00:15:55.560" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""So, one of the commands in this file is checkjobs.""" start="00:16:00.060" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""One of the commands in this file is checkjobs.""" start="00:16:00.060" video="mainVideo-voice" id="subtitle"]]
[[!template text="""It's mapped to an alias,""" start="00:16:03.480" video="mainVideo-voice" id="subtitle"]]
[[!template text="""a bash alias called cj for &quot;check jobs&quot;,""" start="00:16:05.540" video="mainVideo-voice" id="subtitle"]]
[[!template text="""which in turn is mapped to a script called checkjobs.sh""" start="00:16:10.920" video="mainVideo-voice" id="subtitle"]]
[[!template text="""that, when it's run, returns a listing""" start="00:16:17.080" video="mainVideo-voice" id="subtitle"]]
[[!template text="""of the pending and running jobs on the supercomputer""" start="00:16:20.400" video="mainVideo-voice" id="subtitle"]]
[[!template text="""in a format that I find pleasing.""" start="00:16:23.220" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""So, this backslash n after cj, new line character,""" start="00:16:26.081" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""enters the command. So, I don't have to do that""" start="00:16:34.560" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""as an additional step. And then, likewise,""" start="00:16:39.840" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""This `\n` after cj, the new line character,""" start="00:16:26.081" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""enters the command, so I don't have to do that""" start="00:16:34.560" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""as an additional step. Likewise,""" start="00:16:39.840" video="mainVideo-voice" id="subtitle"]]
[[!template text="""here's a similar setup for interacting with""" start="00:16:43.800" video="mainVideo-voice" id="subtitle"]]
[[!template text="""a Ubuntu virtual machine.""" start="00:16:46.800" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""So, in terms of picking up voice computing,""" start="00:16:52.500" video="mainVideo-voice" id="subtitle"]]
+[[!template new="1" text="""In terms of picking up voice computing,""" start="00:16:52.500" video="mainVideo-voice" id="subtitle"]]
[[!template text="""these are my recommendations.""" start="00:16:55.920" video="mainVideo-voice" id="subtitle"]]
[[!template text="""You're going to run into more errors""" start="00:16:57.480" video="mainVideo-voice" id="subtitle"]]
[[!template text="""than you may like initially,""" start="00:16:59.760" video="mainVideo-voice" id="subtitle"]]
@@ -272,18 +274,19 @@
[[!template text="""That is, 1 to 2 out of 100 words are incorrect""" start="00:17:48.080" video="mainVideo-voice" id="subtitle"]]
[[!template text="""versus Talon Voice where I think""" start="00:17:53.880" video="mainVideo-voice" id="subtitle"]]
[[!template text="""the error rate is closer to 5 percent.""" start="00:17:56.320" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""I have put together contractions also for Talon,""" start="00:18:00.840" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""and they can be found here on GitHub.""" start="00:18:04.760" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""And I also have a quiz of 600 questions""" start="00:18:07.480" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""I have put together [a library of English] contractions""" start="00:18:00.840" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""[and their expansion] for Talon [too],""" start="00:18:03.508" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""and they can be found here on GitHub.""" start="00:18:04.881" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""And I also have [posted] a quiz of 600 questions""" start="00:18:07.480" video="mainVideo-voice" id="subtitle"]]
[[!template text="""about some basic Talon commands.""" start="00:18:12.960" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""So, I'd like to thank the people who've helped me out""" start="00:18:17.720" video="mainVideo-voice" id="subtitle"]]
+[[!template new="1" text="""I'd like to thank the people who've helped me out""" start="00:18:17.720" video="mainVideo-voice" id="subtitle"]]
[[!template text="""on the Talon Slack channel""" start="00:18:21.000" video="mainVideo-voice" id="subtitle"]]
[[!template text="""and members of the Oklahoma Data Science Workshop""" start="00:18:22.160" video="mainVideo-voice" id="subtitle"]]
[[!template text="""where I gave an hour-long talk on this topic""" start="00:18:25.800" video="mainVideo-voice" id="subtitle"]]
[[!template text="""several weeks ago.""" start="00:18:29.880" video="mainVideo-voice" id="subtitle"]]
[[!template text="""I'd like to thank my friends""" start="00:18:30.960" video="mainVideo-voice" id="subtitle"]]
[[!template text="""at the Berlin and Austin Emacs Meetup""" start="00:18:34.160" video="mainVideo-voice" id="subtitle"]]
-[[!template text="""and at the M-x Research Slack channel.""" start="00:18:37.400" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""and at the M-x research Slack channel.""" start="00:18:37.400" video="mainVideo-voice" id="subtitle"]]
[[!template text="""And I thank these grant funding agencies""" start="00:18:42.660" video="mainVideo-voice" id="subtitle"]]
[[!template text="""for supporting my work. I'll be happy to take any questions.""" start="00:18:45.120" video="mainVideo-voice" id="subtitle"]]
diff --git a/2023/info/voice-before.md b/2023/info/voice-before.md
index 4776d676..c994a55b 100644
--- a/2023/info/voice-before.md
+++ b/2023/info/voice-before.md
@@ -7,6 +7,25 @@ Status: Q&A finished, IRC and pad will be archived on this page
-<div class="vid"><video controls preload="none" id="voice-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 18:49 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-voice">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=8ddd81ef601d78f7b9ac2093f3700a29b5595ff3-1701529315435">Play recording from BigBlueButton</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.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.txt">Download --main.txt</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--original.mov">Download --original.mov (151MB)</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><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--reencoded.webm">Download --reencoded.webm (32MB)</a></li></ul></div></div>
+<div class="vid"><video controls preload="none" id="voice-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="voice-mainVideo" data="""
+00:00.000 Introduction
+00:37.400 Three activities in voice computing
+01:02.560 Talk is not about ... and about ...
+01:53.520 Motivations
+03:33.240 Data
+03:58.680 Voice In in the Chrome Store
+04:25.628 Works in web pages with text areas
+05:16.880 Built-in commands in Voice In Plus
+06:41.740 Common errors made by Voice In
+08:14.760 Custom speech-to-text commands
+09:59.420 Custom speech-to-commands
+10:37.540 Introducing Talon Voice
+12:28.400 Talon GUI
+14:02.540 Talon file with web scope
+15:34.015 Terminals on remote and virtual machines
+16:52.500 Recommendations
+18:17.720 Acknowledgements
+
+"""]]<div></div>Duration: 18:49 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-voice">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=8ddd81ef601d78f7b9ac2093f3700a29b5595ff3-1701529315435">Play recording from BigBlueButton</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.txt">Download --main.txt</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--original.mov">Download --original.mov (151MB)</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><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--reencoded.webm">Download --reencoded.webm (32MB)</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 7f5a7c19..972430d5 100644
--- a/2023/schedule-details.md
+++ b/2023/schedule-details.md
@@ -8,7 +8,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-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main--after-zaeph.webm">Download --main--after-zaeph.webm (273MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.opus">Download --main.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.webm">Download --main.webm (283MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--normalized.opus">Download --normalized.opus (7.9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--original.vtt">Download --original.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--original.webm">Download --original.webm (287MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--reencoded.webm">Download --reencoded.webm (71MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--slides.pdf">Download --slides.pdf (26MB)</a></li>""" title="""Authoring and presenting university courses with Emacs and a full libre software stack""" url="""/2023/talks/uni""" speakers="""James Howell""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""uni""" note="""captioned, video posted"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--final.webm">Download --final.webm (49MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.opus">Download --main.opus (5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.txt">Download --main.txt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.webm">Download --main.webm (49MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--normalized.opus">Download --normalized.opus (8.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--original.webm">Download --original.webm (462MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--reencoded.webm">Download --reencoded.webm (46MB)</a></li>""" title="""MatplotLLM, iterative natural language data visualization in org-babel""" url="""/2023/talks/matplotllm""" speakers="""Abhinav Tushar""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""matplotllm""" note="""captioned, video posted"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--final.webm">Download --final.webm (44MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.opus">Download --main.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.txt">Download --main.txt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.webm">Download --main.webm (44MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--normalized.opus">Download --normalized.opus (17MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--original.webm">Download --original.webm (60MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--reencoded.webm">Download --reencoded.webm (41MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe.odp">Download .odp (15MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe.pdf">Download .pdf (2.9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe.pptx">Download .pptx (15MB)</a></li>""" title="""Teaching computer and data science with literate programming tools""" url="""/2023/talks/teaching""" speakers="""Marcus Birkenkrahe""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""teaching""" note="""captioned, video posted"""]]
-[[!template id=sched resources="""<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.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.txt">Download --main.txt</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--original.mov">Download --original.mov (151MB)</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><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--reencoded.webm">Download --reencoded.webm (32MB)</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"""]]
+[[!template id=sched resources="""<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.txt">Download --main.txt</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--original.mov">Download --original.mov (151MB)</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><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--reencoded.webm">Download --reencoded.webm (32MB)</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"""]]
[[!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--final.webm">Download --final.webm (23MB)</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.txt">Download --main.txt</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 (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--normalized.opus">Download --normalized.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--original.mp4">Download --original.mp4 (56MB)</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><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--reencoded.webm">Download --reencoded.webm (21MB)</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"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--final.webm">Download --final.webm (50MB)</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--normalized.opus">Download --normalized.opus (18MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--original.mp4">Download --original.mp4 (2.8GB)</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><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--reencoded.webm">Download --reencoded.webm (44MB)</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"""]]
[[!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--final.webm">Download --final.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--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.txt">Download --main.txt</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--normalized.opus">Download --normalized.opus (19MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--original.mp4">Download --original.mp4 (49MB)</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><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--reencoded.webm">Download --reencoded.webm (49MB)</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"""]]
diff --git a/2023/talks/voice.md b/2023/talks/voice.md
index 6d44de97..f12d5195 100644
--- a/2023/talks/voice.md
+++ b/2023/talks/voice.md
@@ -66,222 +66,6 @@ stress injury flared up while entering data in a spreadsheet. I
tripled my daily word count by using the speech-to-text, and I get a
kick out of running remote computers by speech-to-command.
-# Transcript
-
-[slide 1]
-Hi, I'm Blaine Mooers. I'm an associate professor of biochemistry at
- the University of Oklahoma Health Sciences Center in Oklahoma City.
- My lab studies the role of RNA structure in RNA editing. We use X-ray
- crystallography to study the structures of these RNAs. We spend a lot
- of time in the lab preparing our samples for structural studies, and then
- we also spend a lot of time at the computer analyzing the resulting data.
- I was seeking ways of using voice computing to try to enhance
- my productivity.
-
-[slide 2]
-I divide voice computing into three activities, speech-to-text or dictation,
-speech-to-commands, and speech-to-code. I'll be talking about
-speech-to-text and speech-to-commands today because these are two
-activities that are probably most broadly applicable to the workflows of
-people attending this conference.
-
-[slide 3]
-This talk will not be about Emacspeak. This is a venerated program for
-converting text to speech. We're talking about the flow of information in
-the opposite direction, speech-to-text. We need an Emacs Listens. We
-don't have one, so I had to seek help from outside the Emacs world via
- the Voice In Plus. This runs in the Google Chrome web browser, and it's
- very good for speech-to-text and very easy to learn how to use. It also
- has some speech-to-commands. However, Talon Voice is much better
- with the speech-to-commands, and it's also great at speech-to-code.
-
-[slide 4]
-The motivations are, obviously, as I mentioned already, for improved
-productivity. So, if you're a fast typist who types faster than they can speak,
-then nonetheless you might still benefit from voice computing when you
-grow tired of using the keyboard. On the other hand, you might be a
-slow typist who talks faster than they can type. In this case, you're
-definitely going to benefit from dictation because you'll be able to encode
-more words in text documents in a given day. If you're a coder,
-then you may get a kick out of opening programs and websites and
-coding projects by using your voice.
-
-Then there are health-related reasons. You may have impaired use
-of your hands, eyes, or both due to accident or disease, or you may
-suffer from a repetitive stress injury. Many of us have this in a mild
-but chronic form of it. We can't take a three-month sabbatical from
-the keyboard without losing our jobs, so these injuries tend to persist.
-And then you may have learned that it's not good for your health to
-sit for prolonged periods of time with your staring at a computer screen.
-You can actually dictate to your computer from 20 feet away while
-looking out the window, thereby giving your lower body a break
-and your eyes a break.
-
-[slide 5]
-I'm not God, so I have to bring data. I have two data points here,
-the number of words that I wrote in June and July this year and in
-September and October. I adopted the use of voice computing in
-the middle of August. As you can see, I got an over three-fold increase
- in my output.
-
-[slide 6]
-So this is the Chrome store website for voice-in. It's only available
-for Google Chrome. You just hit the install button to install it. To configure it,
-you need to select a language. It has support for 40 languages and
-it supports about a dozen different dialects of English, including Australian.
-
-[slide 7]
-It works on web pages with text areas, so it works. I use it regularly on
-Overleaf and 750words.com, a distraction-free environment for writing.
- It also works in webmails. It works in Google. It works in Jupyter Lab,
- of course, because that runs in the browser. It also works in Jupyter
- Notebook and Colab Notebook. It should work in Cloudmacs. I've
- mapped option-L to opening Voice In when the cursor is on a web page
- that has a text area. The presence of a text area is the main limiting factor.
-
-[slide 8]
-Voice In has a number of built-in commands. You can turn it off by saying
-"stop dictation". It doesn't distinguish between a command mode and
-a dictation mode. It has undo command. When you use the command
-"copy that" to a copy of selection. You say "press enter" to issue a
-command or submit text that has been written in a web form, and then
-"press tab" will open up the next tab in a web browser. The scroll up
-and down will allow you to navigate a web page. I've put together a quiz
-about these commands so that you can go through this quiz several
-times until you get at least 90 percent of them correct, 90 percent of
-the questions correct. In order to boost your recall of the commands,
-I have a Python script that you can probably pound through the quiz
-with in less than a minute, once you know the commands. I also
-provide an Elisp version of this quiz, but it's a little slower to operate.
-
-[slide 9]
-These are some common errors that I've run into with Voice In. It
-likes to contract statements like "I will" into "I'll". Contractions are not
-used in formal writing, and most of my writing is formal writing, so
-this annoys me. I will show you how I corrected for that problem. It
-also drops the first word in sentences quite often. This might be some
-speech issue that I have. It inserts the wrong word because it's not
-in the dictionary that was used to train it. So, for example, the word
-PyMOL is the name of a molecular graphics program that we use in
-our field. It doesn't recognize PyMOL. Instead, it substitutes in the
-word "primal". Since I don't use "primal" very often, I've mapped the
-word "primal" to "PyMOL" in some custom commands I'll talk about
-in a minute. Then there's a problem that the commands that exist might
-get executed when you speak them when, in fact, you wanted to use
-the words in those commands during your dictation. So this is a problem,
-a pitfall of Voice In, in that it doesn't have a command mode that's
-separate from a dictation mode.
-
-[slide 10]
-You can set up through a very easy-to-use GUI custom voice
-commands mapped to what you want inserted, so this is how
-misinterpreted words can be corrected. You just map the misinterpreted
-word to the intended word. You can also map the contractions to their
-expansions. I did this for 94 English contractions, and you can find
-these on GitHub. You can also insert acronyms and expand those
-acronyms. I apply the same approach to the first names of colleagues.
-I say "expand Fred", for example, to get Fred's first and last name
-with the correct spelling of his very long German name. You can also
-insert other trivia like favorite URLs. You can insert LaTeX snippets.
-It handles correctly multi-line snippets. You just have to enclose them
-in double quotes. You can even insert BibTeX cite keys for references
-that you use frequently. All fields have certain key references for certain
-methods or topics.
-
-[slide 11]
-Then it has a set of commands that you can customize for the purpose
-of speech-to-commands to get the computer to do something like open
-up a specific website or save the current writing. In this case, we have
-"press: command-s" for saving the current writing. You can change the
-language with "lang:", and you can change the case of the text with "case:".
-
-[slide 12]
-But the speech-to-command repertoire is quite limited in Voice In,
-so it's now time to pick up on Talon Voice. This is an open source project.
-It's free. It is highly configurable via TalonScript, which is a subset of
-Python. You can use either TalonScript or Python to configure it, but it's
-easier to code up your configuration in TalonScript. It has a Python
-interpreter embedded in it, so you don't have to mess around with
-installing yet another Python interpreter. It runs on all platforms, and it
-has a dictation mode that's separate from a command mode. You can
-activate it, and it'll be in a listening state asleep. You just bark out
-"Talon Wake" to start to wake it up, and "Talon Sleep" to have it go into
-a listening state. It has a very welcoming community in the Talon Slack
-channel. Then I need to point out that there's several packages that
-others have developed that run on top of Talon, but one of particular note
-is by Pokey Rule. He has on his website some really well-done videos
-that demonstrate how he uses Cursorless to move the cursor around
-using voice commands. This, however, runs on VS Code. At least that's
-the text editor for which he's primarily developing Cursorless.
-
-[slide 13]
-I followed the install protocol outlined by Tara Roys. She has a collection
-of tutorials on YouTube as well as on GitHub that are quite helpful. I
-followed her tutorial for installing Talon on macOS without any issues,
-but allow for half an hour to an hour to go through the process. When
-you're done, you'll have this Talon icon appear in the toolbar on the Mac.
-When it has this diagonal line across it, that means it's in the sleep state.
-So, this leads to cascading pull-down menus. This is it for the GUI. One
-of your first tasks is to select a language model that will be used to
-interpret the sounds that you generate as words. And the other kind of
-key feature is that there's a, under scripting, there's a view log pull-down
-that opens up a window displaying the log file. Whenever you make a
-change in a Talon configuration file, that change is implemented
-immediately. You do not have to restart Talon to get the change
-to take effect.
-
-[slide 14]
-This is an example of a Talon file. It has two components. It has a header
-above the dash that describes the scope of the commands contained
-below the dash. Each command is separated by a blank line. If a voice
-command is mapped to multiple actions, these are listed separately on
-indented lines below the first line. The words that are in square brackets
-are optional. So, I have mapped the word toggle voice in, or the phrase
-toggle voice in, to the keyboard shortcut Alt L in order to toggle on or off
-voice in. If I toggle voice in on, I need to immediately toggle off Talon,
-and this is done through this key command for Control T, which is
-mapped to speech toggle. Speech toggle. Then there are, there's a
-couple other examples. So, if there's no header present, it's an optional
-feature of Talon files, then the commands in the file will apply in all
-situations, in all modes.
-
-[slide 15]
-Here we have two restrictions. These commands will only work when
-using the iTerm2 terminal emulator for the Mac, and then only when the
-title of the window in ccc has this particular address, which is what
-appears when I've logged into the supercomputer at the University of
-Oklahoma. One of the commands in this file is checkjobs. It's mapped
-to an alias, a bash alias called cj for "check jobs", which in turn is mapped
-to a script called checkjobs.sh that, when it's run, returns a listing of the
-pending and running jobs on the supercomputer in a format that I find
-pleasing. This backslash n after cj, the new line character, enters the
-command, so I don't have to do that as an additional step. Likewise,
-here's a similar setup for interacting with a Ubuntu virtual machine.
-
-[slide 16]
-In terms of picking up voice computing, these are my recommendations.
-You're going to run into more errors than you may like initially, and so
-you need some patience in dealing with those. And also, it'll take you
-a while to get your head wrapped around Talon and how it works. You'll
-definitely want to use custom commands to correct the errors or
-shortcomings of the language models. And you've seen how, by
-opening up projects by voice commands, you can reduce friction in
-terms of restarting work on a project. You've seen how Voice In is
-preferred for more accurate dictation. I think my error rate is about
-1 to 2 percent. That is, 1 to 2 out of 100 words are incorrect versus
-Talon Voice where I think the error rate is closer to 5 percent. I have
-put together a library of Enlgish contractions and their expansion for
-Talon too, and they can be found here on GitHub. And I also have posted
-a quiz of 600 questions about some basic Talon commands.
-
-[slide 17]
-I'd like to thank the people who've helped me out on the Talon Slack
-channel and members of the Oklahoma Data Science Workshop where
-I gave an hour-long talk on this topic several weeks ago. I'd like to thank
-my friends at the Berlin and Austin Emacs Meetup and at the M-x research
-Slack channel. And I thank these grant funding agencies for supporting
-my work. I'll be happy to take any questions.
-
[[!inline pages="internal(2023/info/voice-after)" raw="yes"]]
[[!inline pages="internal(2023/info/voice-nav)" raw="yes"]]