summaryrefslogtreecommitdiffstats
path: root/2021
diff options
context:
space:
mode:
authorSacha Chua <sacha@sachachua.com>2021-11-29 09:45:57 -0500
committerSacha Chua <sacha@sachachua.com>2021-11-29 09:45:57 -0500
commite8e25c3c457b30b34bbae4c93ebd08ae48d1d710 (patch)
treea00344b4b26f2afe6842d2971b08832d27f6b4d5 /2021
parent51620ae048f47c88b163fbb8844a5575c6b35c4e (diff)
downloademacsconf-wiki-e8e25c3c457b30b34bbae4c93ebd08ae48d1d710.tar.xz
emacsconf-wiki-e8e25c3c457b30b34bbae4c93ebd08ae48d1d710.zip
Update
Diffstat (limited to '')
-rw-r--r--2021/captions/emacsconf-2021-borg--manual-package-management-in-the-era-of-repositories-why-and-how--codingquark--main.vtt457
-rw-r--r--2021/captions/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.vtt457
-rw-r--r--2021/captions/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main.vtt622
-rw-r--r--2021/captions/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main.vtt820
-rw-r--r--2021/captions/emacsconf-2021-janitor--a-day-in-the-life-of-a-janitor--stefan-monnier--main.vtt1780
-rw-r--r--2021/captions/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main.vtt730
-rw-r--r--2021/captions/emacsconf-2021-nangulator--introducing-n-angulator--kevin-haddock--main.vtt673
-rw-r--r--2021/captions/emacsconf-2021-pattern--edit--main.vtt13
-rw-r--r--2021/captions/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla--main.vtt768
-rw-r--r--2021/captions/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla-and-evgeny-zajcev--main.vtt769
10 files changed, 7089 insertions, 0 deletions
diff --git a/2021/captions/emacsconf-2021-borg--manual-package-management-in-the-era-of-repositories-why-and-how--codingquark--main.vtt b/2021/captions/emacsconf-2021-borg--manual-package-management-in-the-era-of-repositories-why-and-how--codingquark--main.vtt
new file mode 100644
index 00000000..c3d95a56
--- /dev/null
+++ b/2021/captions/emacsconf-2021-borg--manual-package-management-in-the-era-of-repositories-why-and-how--codingquark--main.vtt
@@ -0,0 +1,457 @@
+WEBVTT
+
+00:00.950 --> 00:03.225
+Hello, my name is Dhavan,
+
+00:03.225 --> 00:05.500
+also known as codingquark!
+
+00:05.500 --> 00:08.041
+I started out learning Emacs
+
+00:08.041 --> 00:12.540
+without knowing I had to plug things in
+
+00:12.540 --> 00:13.629
+to make it work.
+
+00:13.629 --> 00:14.849
+Eventually I had to learn to set up ELPA.
+
+00:14.849 --> 00:16.850
+Since then I’ve used MELPA
+
+00:16.850 --> 00:21.030
+and Debian apt sources.
+
+00:21.030 --> 00:21.054
+Recent discussions about ELPA,
+
+00:21.054 --> 00:21.054
+NonGNU ELPA, MELPA, etc.
+
+00:21.054 --> 00:21.054
+made me reconsider
+
+00:21.054 --> 00:21.054
+what I was doing
+
+00:21.054 --> 00:28.590
+with my Emacs.
+
+00:28.590 --> 00:30.887
+I am not the kind of person
+
+00:30.887 --> 00:34.290
+to mindlessly ram things into my emacs.
+
+00:34.290 --> 00:36.041
+I like to ponder,
+
+00:36.041 --> 00:37.500
+to understand,
+
+00:37.500 --> 00:40.128
+to have a level of control
+
+00:40.128 --> 00:42.069
+and mindfulness
+
+00:42.069 --> 00:43.890
+about my Emacs.
+
+00:43.890 --> 00:45.730
+It is not just a matter
+
+00:45.730 --> 00:47.340
+of trying things out,
+
+00:47.340 --> 00:50.909
+it is about living an examined life
+
+00:50.909 --> 00:53.387
+as the Greeks would say;
+
+00:53.387 --> 00:57.040
+or sutta as Buddhists would say.
+
+00:57.040 --> 00:59.860
+Such an Emacs is an Emacs worth having.
+
+00:59.860 --> 01:01.414
+This pursuit of mine
+
+01:01.414 --> 01:03.710
+brought me to learn about borg.
+
+01:03.710 --> 01:05.595
+And I am going to share with you
+
+01:05.595 --> 01:06.479
+how to use it.
+
+01:06.479 --> 01:09.018
+I believe the approach of using borg
+
+01:09.018 --> 01:10.597
+for package management
+
+01:10.597 --> 01:12.710
+is not for everyone.
+
+01:12.710 --> 01:14.307
+It involves knowing git,
+
+01:14.307 --> 01:16.648
+it involves looking into source code
+
+01:16.648 --> 01:18.229
+and reading makefiles.
+
+01:18.229 --> 01:20.170
+Sure, anyone can learn
+
+01:20.170 --> 01:22.617
+should they be motivated so,
+
+01:22.617 --> 01:25.740
+but people have different priorities.
+
+01:25.740 --> 01:29.056
+This is what is working for me right now.
+
+01:29.056 --> 01:32.826
+Here is what we are going to do.
+
+01:32.826 --> 01:35.696
+We'll set up Debian, install dependencies,
+
+01:35.696 --> 01:39.032
+set up borg, install a package,
+
+01:39.032 --> 01:42.090
+and make sure it installs all the docs.
+
+01:42.090 --> 01:47.240
+Let’s get started!
+
+01:47.240 --> 01:48.342
+Would it not be amazing
+
+01:48.342 --> 01:49.560
+if we could start out with
+
+01:49.560 --> 01:52.399
+just Debian and basic tools?
+
+01:52.399 --> 01:54.848
+For borg, we need git,
+
+01:54.848 --> 01:55.916
+build-essential,
+
+01:55.916 --> 01:57.384
+and something to build docs.
+
+01:57.384 --> 02:00.499
+Nothing more!
+
+02:00.499 --> 02:04.658
+Now that we have the OS setup,
+
+02:04.658 --> 02:06.226
+it is time to clone
+
+02:06.226 --> 02:09.429
+what is called a “seed”.
+
+02:09.429 --> 02:11.431
+A seed will speed our process up
+
+02:11.431 --> 02:13.379
+by providing things like
+
+02:13.379 --> 02:15.500
+magit, epkg, auto-compile, etc.
+
+02:15.500 --> 02:20.430
+We will soon be using epkg and magit.
+
+02:20.430 --> 02:22.642
+The docs cover how to start
+
+02:22.642 --> 02:23.477
+without a seed,
+
+02:23.477 --> 02:25.779
+but for the purposes of a short demo,
+
+02:25.779 --> 02:27.770
+seeds are better.
+
+02:27.770 --> 02:28.682
+I started with a seed
+
+02:28.682 --> 02:30.083
+for my own dot emacs.
+
+02:30.083 --> 02:32.890
+It is fairly slim.
+
+02:32.890 --> 02:33.854
+As you can see,
+
+02:33.854 --> 02:35.088
+borg uses git URLs
+
+02:35.088 --> 02:37.290
+and /not/ HTTPS URLs.
+
+02:37.290 --> 02:38.992
+Make sure you have your ssh keys
+
+02:38.992 --> 02:43.989
+set up on GitHub, GitLab, etc.
+
+02:43.989 --> 02:45.899
+Bootstrapping is like cloning a dot emacs,
+
+02:45.899 --> 02:47.310
+but it only comes with a
+
+02:47.310 --> 02:51.400
+useful dot git submodules file.
+
+02:51.400 --> 02:54.841
+We get a Makefile that has targets
+
+02:54.841 --> 02:57.739
+like help and bootstrap-borg.
+
+02:57.739 --> 02:59.880
+There will be more targets
+
+02:59.880 --> 03:02.115
+after we finish the bootstrapping process.
+
+03:30.110 --> 03:35.582
+Then, we need to clone all the git modules,
+
+03:35.582 --> 03:38.310
+which is also done by a make target.
+
+03:38.310 --> 03:40.754
+This time, it will not just pull
+
+03:40.754 --> 03:42.656
+the git submodules,
+
+03:42.656 --> 03:44.658
+but will also run various things
+
+03:44.658 --> 03:45.826
+like auto-compilation,
+
+03:45.826 --> 03:48.030
+Info doc installation, etc.
+
+03:48.030 --> 04:08.680
+Good thing we installed texinfo earlier!
+
+04:08.282 --> 04:10.884
+Now that we have borg bootstrapped,
+
+04:10.884 --> 04:14.520
+let’s see how to “assimilate” a drone.
+
+04:14.520 --> 04:17.090
+Well, that’s just a borg way of saying
+
+04:17.090 --> 04:19.900
+how to install a new package.
+
+04:19.900 --> 04:22.910
+We get to work from inside Emacs now.
+
+04:22.910 --> 04:26.366
+Borg has excellent info docs,
+
+04:26.366 --> 04:28.450
+should you ever be having questions.
+
+04:28.450 --> 04:32.240
+I earlier talked about using a seed.
+
+04:32.240 --> 04:34.830
+Borg docs go into details of what that means.
+
+04:34.830 --> 04:40.190
+I encourage you to read the docs.
+
+04:40.190 --> 04:51.500
+Let’s try to install lsp-mode.
+
+04:51.500 --> 04:52.459
+Examining lsp-mode
+
+04:52.459 --> 04:54.694
+with epkg’s helper function,
+
+04:54.694 --> 04:57.280
+we can see details of the package,
+
+04:57.280 --> 05:00.200
+dependencies required, and so on.
+
+05:00.200 --> 05:02.470
+epkg uses sqlite database.
+
+05:02.470 --> 05:04.871
+Now you know why I installed sqlite
+
+05:04.871 --> 05:12.350
+in the OS preparation step!
+
+05:20.820 --> 05:22.622
+Well, lsp-mode has
+
+05:22.622 --> 05:24.057
+way too many dependencies
+
+05:24.057 --> 05:25.830
+for this demo.
+
+05:25.830 --> 05:28.795
+Note how one is naturally led
+
+05:28.795 --> 05:32.332
+to take a peek at the innards of the packages
+
+05:32.332 --> 05:34.780
+in this simple workflow.
+
+05:34.780 --> 05:37.270
+As I said, it is about being mindful!
+
+05:37.270 --> 05:39.573
+Okay, instead of lsp-mode,
+
+05:39.573 --> 05:41.308
+let’s take a look at
+
+05:41.308 --> 05:45.400
+Prot’s excellent modus-themes.
+
+05:45.400 --> 05:47.247
+No extra dependencies needed.
+
+05:47.247 --> 05:49.870
+That is perfect!
+
+05:49.870 --> 05:52.018
+The themes have great docs
+
+05:52.018 --> 05:53.620
+and our philosopher friend
+
+05:53.620 --> 05:56.000
+is good at writing.
+
+05:56.000 --> 06:02.930
+Alright, first, we clone the package.
+
+06:02.930 --> 06:04.664
+This allows us to inspect the code,
+
+06:04.664 --> 06:06.330
+should we want to.
+
+06:06.330 --> 06:23.000
+Well, you /should/.
+
+06:23.000 --> 06:25.552
+Upon inspecting the code,
+
+06:25.552 --> 06:30.620
+we ask borg to assimilate the package.
+
+06:30.620 --> 06:33.927
+This will load the code in our Emacs
+
+06:33.927 --> 06:37.270
+and make the package available for use.
+
+06:39.799 --> 06:42.135
+Wait, I was praising all the docs,
+
+06:42.135 --> 06:43.690
+but where are they?
+
+06:43.690 --> 06:44.571
+To install the docs,
+
+06:44.571 --> 06:46.273
+we need to instruct borg
+
+06:46.273 --> 06:48.020
+about where to find them.
+
+06:48.020 --> 06:51.978
+To do this, we edit the gitmodules file
+
+06:51.978 --> 06:53.910
+and add the details.
+
+06:53.910 --> 06:58.310
+There they are!
+
+06:58.310 --> 07:04.170
+We have our docs!
+
+07:04.170 --> 07:09.940
+Alright, we have assimilated a package.
+
+07:09.940 --> 07:11.398
+After sufficient testing,
+
+07:11.398 --> 07:14.234
+we can commit it as a part of our own dot emacs,
+
+07:14.234 --> 07:19.272
+which is a drone of our borg collective.
+
+07:19.272 --> 07:21.741
+Since all the packages are git submodules,
+
+07:21.741 --> 07:23.810
+we get to use magit
+
+07:23.810 --> 07:25.245
+(all hail magit!)
+
+07:25.245 --> 07:27.514
+and borg’s helper functions
+
+07:27.514 --> 07:29.530
+to commit the code.
+
+07:29.530 --> 07:31.818
+Now create your own dot el file
+
+07:31.818 --> 07:38.758
+and hack away!
+
+07:38.758 --> 07:39.793
+So that is it.
+
+00:07:39.793 --> 00:07:41.661
+I hope you enjoyed the talk
+
+07:41.661 --> 07:45.131
+and I will be hanging out in IRC
+
+07:45.131 --> 07:46.666
+if you have any questions.
+
+07:46.666 --> 07:48.330
+Thank you, and bye.
diff --git a/2021/captions/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.vtt b/2021/captions/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.vtt
new file mode 100644
index 00000000..b10e834a
--- /dev/null
+++ b/2021/captions/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.vtt
@@ -0,0 +1,457 @@
+WEBVTT
+
+00:00.240 --> 00:00:02.639
+hi my name is eduardox i'm the author of
+
+00:02.639 --> 00:00:05.040
+an mx package called ev and this talk is
+
+00:05.040 --> 00:00:07.200
+about a new feature of ev called test
+
+00:07.200 --> 00:00:08.400
+blocks
+
+00:08.400 --> 00:00:10.320
+let's start by demo
+
+00:10.320 --> 00:00:12.559
+this is a file in lua that defines these
+
+00:12.559 --> 00:00:14.160
+two functions here
+
+00:14.160 --> 00:00:16.720
+and with it if we type f8 several times
+
+00:16.720 --> 00:00:18.000
+here
+
+00:18.000 --> 00:00:20.880
+the f8s create a lower apple here and
+
+00:20.880 --> 00:00:24.400
+then they send these lines to the rebel
+
+00:24.400 --> 00:00:27.039
+where this line here loads this file
+
+00:27.039 --> 00:00:29.679
+into the repo and these other lines here
+
+00:29.679 --> 00:00:33.200
+are tests for these lines
+
+00:33.200 --> 00:00:35.120
+there's a lot of information here so let
+
+00:35.120 --> 00:00:40.480
+me organize them in a more visual way
+
+00:40.480 --> 00:00:42.960
+this is our file in lua
+
+00:42.960 --> 00:00:45.760
+lua sees this thing as a as a multi-line
+
+00:45.760 --> 00:00:47.760
+comment but we are going to see it as a
+
+00:47.760 --> 00:00:51.920
+test block and eev mode is active and so
+
+00:51.920 --> 00:00:54.480
+f8 does the right thing
+
+00:54.480 --> 00:00:57.360
+uh these three lines here set up the
+
+00:57.360 --> 00:01:00.079
+target buffer running a lower apple you
+
+01:00.079 --> 00:01:03.520
+can see the the prompt of the rebel here
+
+01:03.520 --> 00:01:05.360
+and these lines here are sent to the
+
+01:05.360 --> 00:01:07.200
+rebel
+
+01:07.200 --> 00:01:09.680
+and when we type f8 on the line that
+
+01:09.680 --> 00:01:10.720
+starts
+
+01:10.720 --> 00:01:13.600
+with the red star like these lines here
+
+01:13.600 --> 00:01:15.759
+what if it does is that it sends the
+
+01:15.759 --> 00:01:18.240
+rest of the line sorry it
+
+01:18.240 --> 00:01:21.119
+executes the rest of the line as lisp
+
+01:21.119 --> 00:01:23.920
+so it executes the three effects here
+
+01:23.920 --> 00:01:26.240
+executes these lines as lisp and they
+
+01:26.240 --> 00:01:29.520
+set up the target buffer here
+
+01:29.520 --> 00:01:31.759
+and when we type f8 on the line that
+
+01:31.759 --> 00:01:34.159
+does not start with the red star
+
+01:34.159 --> 00:01:36.640
+the f8 sends the line to the target
+
+01:36.640 --> 00:01:38.799
+buffer and moves down
+
+01:38.799 --> 00:01:41.040
+and this line loads this file under
+
+01:41.040 --> 00:01:45.200
+apple and these lines are tests
+
+01:45.200 --> 00:01:47.520
+so we just saw how to use an existing
+
+01:47.520 --> 00:01:50.000
+test block let's now see how to create a
+
+01:50.000 --> 00:01:52.640
+new test block we just have to run this
+
+01:52.640 --> 00:01:55.680
+meta x e insert test block
+
+01:55.680 --> 00:01:58.079
+or meta x euat
+
+01:58.079 --> 00:02:01.439
+and the result depends on the major mode
+
+02:01.439 --> 00:02:03.920
+uh let's see let's understand that that
+
+02:03.920 --> 00:02:06.079
+by looking at the source code
+
+02:06.079 --> 00:02:08.720
+eeit is an alias to this function here
+
+02:08.720 --> 00:02:10.640
+and this function is just five lines of
+
+02:10.640 --> 00:02:12.800
+code plus a dot string
+
+02:12.800 --> 00:02:14.560
+and the dot string explains that if the
+
+02:14.560 --> 00:02:16.480
+major mode is full mode then this
+
+02:16.480 --> 00:02:18.800
+function tries to call
+
+02:18.800 --> 00:02:21.360
+a function called e insert test plot
+
+02:21.360 --> 00:02:24.800
+test full mode if that function exists
+
+02:24.800 --> 00:02:27.280
+and that if that function does not exist
+
+02:27.280 --> 00:02:29.680
+then it yields an error
+
+02:29.680 --> 00:02:32.080
+and here's an example of one such
+
+02:32.080 --> 00:02:34.239
+function that's a function that
+
+02:34.239 --> 00:02:37.280
+inserts a test block in haskell mode
+
+02:37.280 --> 00:02:40.319
+and here we can see two functions like
+
+02:40.319 --> 00:02:42.480
+this one for haskell mode and one for
+
+02:42.480 --> 00:02:46.080
+javascript mode
+
+02:46.080 --> 00:02:48.560
+uh these functions look quite similar
+
+02:48.560 --> 00:02:49.440
+but
+
+02:49.440 --> 00:02:52.720
+their effects look quite different
+
+02:52.720 --> 00:02:55.760
+to make this comparison here i started
+
+02:55.760 --> 00:02:57.280
+by writing
+
+02:57.280 --> 00:02:59.680
+by creating seven files each one in a
+
+02:59.680 --> 00:03:01.120
+different language
+
+03:01.120 --> 00:03:03.040
+and initially each one of these files
+
+03:03.040 --> 00:03:04.959
+only had a comment with the name of the
+
+03:04.959 --> 00:03:08.239
+language so c haskell javascript org
+
+03:08.239 --> 00:03:10.560
+mode etc
+
+03:10.560 --> 00:03:13.040
+and in each one of these files i typed
+
+03:13.040 --> 00:03:16.959
+meta x eeit to insert the test block
+
+03:16.959 --> 00:03:18.800
+so here we can see that these test
+
+03:18.800 --> 00:03:20.319
+blocks are different
+
+03:20.319 --> 00:03:22.080
+for example the syntax for multi-line
+
+03:22.080 --> 00:03:24.000
+comments is different depending on the
+
+03:24.000 --> 00:03:25.200
+language
+
+03:25.200 --> 00:03:27.760
+uh this block here that selects which
+
+03:27.760 --> 00:03:30.319
+rebel to run is also different
+
+03:30.319 --> 00:03:33.200
+this line here that shows how that
+
+03:33.200 --> 00:03:34.879
+tells the repo to
+
+03:34.879 --> 00:03:37.680
+load the current file is also different
+
+03:37.680 --> 00:03:39.680
+depending on the language
+
+03:39.680 --> 00:03:41.840
+in some cases i had to improvise a bit
+
+03:41.840 --> 00:03:43.360
+for example
+
+03:43.360 --> 00:03:46.400
+uh to implement test blocks in shell
+
+03:46.400 --> 00:03:48.560
+mode i had to use this
+
+03:48.560 --> 00:03:52.560
+this with syntax using a rear document
+
+03:52.560 --> 00:03:55.280
+in tcl i also had to improvise a bit and
+
+03:55.280 --> 00:03:57.840
+in some cases i had to improvise a lot
+
+03:57.840 --> 00:04:01.120
+for example in org mode there isn't an
+
+04:01.120 --> 00:04:03.360
+obvious rebel to run and there isn't an
+
+04:03.360 --> 00:04:05.280
+obvious way to load the
+
+04:05.280 --> 00:04:08.080
+the current org file into the repo so
+
+04:08.080 --> 00:04:11.680
+the default action of meta x eeit
+
+04:11.680 --> 00:04:14.400
+in log mode is just to insert this thing
+
+04:14.400 --> 00:04:15.439
+here
+
+04:15.439 --> 00:04:17.519
+that we can use to run a
+
+04:17.519 --> 00:04:22.320
+shell in a rebel
+
+04:22.320 --> 00:04:23.199
+so
+
+04:23.199 --> 00:04:25.680
+these functions are quite similar and in
+
+04:25.680 --> 00:04:27.440
+the beginning i was writing all of them
+
+04:27.440 --> 00:04:29.680
+by hand but then i got bored and i wrote
+
+04:29.680 --> 00:04:32.320
+a function to help you write functions
+
+04:32.320 --> 00:04:33.840
+like that
+
+04:33.840 --> 00:04:35.759
+this function is called
+
+04:35.759 --> 00:04:38.080
+find e-uit-links and it creates a
+
+04:38.080 --> 00:04:39.919
+temporary buffer
+
+04:39.919 --> 00:04:41.680
+and the contents of this temporary
+
+04:41.680 --> 00:04:43.440
+buffer depends on the major mode for
+
+04:43.440 --> 00:04:45.680
+example if the current mode is python
+
+04:45.680 --> 00:04:48.880
+mode then running this function here
+
+04:48.880 --> 00:04:51.840
+creates a temporary buffer that lets me
+
+04:51.840 --> 00:04:53.840
+write the support for
+
+04:53.840 --> 00:04:56.880
+test blocks into python mode or rewrite
+
+04:56.880 --> 00:04:59.040
+the function that supports test blocks
+
+04:59.040 --> 00:05:00.880
+and python mode
+
+05:00.880 --> 00:05:03.600
+so if i'm in python mode and i run this
+
+05:03.600 --> 00:05:06.639
+i get a temporary buffer like this
+
+05:06.639 --> 00:05:08.800
+in which this thing is my template for
+
+05:08.800 --> 00:05:11.120
+the function usually this thing is
+
+05:11.120 --> 00:05:13.039
+totally wrong i have to rewrite to this
+
+05:13.039 --> 00:05:13.919
+string
+
+05:13.919 --> 00:05:16.400
+but the rest is right you can see python
+
+05:16.400 --> 00:05:18.720
+mode here in the name of the function so
+
+05:18.720 --> 00:05:21.360
+we have to edit this and save that to
+
+05:21.360 --> 00:05:22.840
+our home
+
+05:22.840 --> 00:05:25.520
+slash.mx and by the way these things
+
+05:25.520 --> 00:05:28.880
+here hyperlinks to many different things
+
+05:28.880 --> 00:05:31.600
+this elias piper link here
+
+05:31.600 --> 00:05:34.160
+points to the source code to the section
+
+05:34.160 --> 00:05:35.280
+in which
+
+05:35.280 --> 00:05:36.400
+these
+
+05:36.400 --> 00:05:38.400
+functions are defined
+
+05:38.400 --> 00:05:40.320
+so you can see this here the function
+
+05:40.320 --> 00:05:41.759
+that supports c
+
+05:41.759 --> 00:05:43.440
+the function for haskell the function
+
+05:43.440 --> 00:05:46.400
+for javascript etc
+
+05:46.400 --> 00:05:49.440
+and that's it this is a five-minute talk
+
+05:49.440 --> 00:05:50.960
+so i can't say much
+
+05:50.960 --> 00:05:52.639
+if you want more information or if you
+
+05:52.639 --> 00:05:55.120
+want to see real world examples how i
+
+05:55.120 --> 00:05:58.000
+use test blocks etc etc see this page
+
+05:58.000 --> 00:06:00.479
+here and i do not have time to explain
+
+06:00.479 --> 00:06:02.560
+this by the way here
+
+06:02.560 --> 06:06.080
+so that's it thanks
diff --git a/2021/captions/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main.vtt b/2021/captions/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main.vtt
new file mode 100644
index 00000000..77133079
--- /dev/null
+++ b/2021/captions/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main.vtt
@@ -0,0 +1,622 @@
+WEBVTT
+
+00:03.040 -->00:00:05.206
+Hi, my name is Matthew Zeng,
+
+00:00:05.206 --> 00:00:07.526
+aka MT or Mingde.
+
+00:00:07.526 --> 00:00:10.766
+Welcome to EmacsConf2021.
+
+00:00:10.766 --> 00:00:12.846
+I hope everyone is enjoying
+
+00:00:12.846 --> 00:00:14.286
+the conference so far.
+
+00:00:14.286 --> 00:00:16.766
+I am one of the maintainers
+
+00:00:16.766 --> 00:00:18.566
+of the Emacs Application Framework.
+
+00:00:18.566 --> 00:00:22.606
+I was also here last year during EmacsConf2020
+
+00:00:22.606 --> 00:00:24.366
+and did a 20 minute presentation
+
+00:00:24.366 --> 00:00:26.606
+on the overall architecture of EAF
+
+00:00:26.606 --> 00:00:28.486
+as well as a small demo.
+
+00:00:28.486 --> 00:00:31.966
+A lot of things had changed since 2020,
+
+00:00:31.966 --> 00:00:34.406
+and that's why today I'm here to present:
+
+00:00:34.406 --> 00:00:38.045
+Emacs Application Framework, A 2021 Update.
+
+00:00:38.046 --> 00:00:41.086
+So we all know Emacs,
+
+00:00:41.086 --> 00:00:42.326
+and we definitely know that
+
+00:00:42.326 --> 00:00:44.486
+Emacs is not just a text editor,
+
+00:00:44.486 --> 00:00:46.926
+but a text-centric work environment,
+
+00:00:46.926 --> 00:00:48.606
+and it lacks *efficient*
+
+00:00:48.606 --> 00:00:50.686
+multimedia rendering capabilities
+
+00:00:50.686 --> 00:00:53.126
+such as website, PDF, and video rendering.
+
+00:00:53.126 --> 00:00:55.361
+We all want that, right?
+
+00:00:55.361 --> 00:00:58.366
+Therefore the EAF project wants to
+
+00:00:58.366 --> 00:01:00.286
+solve this problem while also
+
+00:01:00.286 --> 00:01:02.806
+retaining the rich Emacs ecosystem
+
+00:01:02.806 --> 00:01:06.046
+and its customizability and extensibility.
+
+00:01:06.046 --> 00:01:10.726
+The solution is to outsource the hard part
+
+00:01:10.726 --> 00:01:12.486
+to Python and NodeJS
+
+00:01:12.486 --> 00:01:14.366
+by bridging Elisp with them
+
+00:01:14.366 --> 00:01:16.126
+so that Python and JavaScript
+
+00:01:16.126 --> 00:01:17.926
+can do the hard work
+
+00:01:17.926 --> 00:01:20.126
+and minimize the Elisp workload,
+
+00:01:20.126 --> 00:01:21.926
+which ultimately speeds up
+
+00:01:21.926 --> 00:01:24.446
+our end-user experience using Emacs.
+
+00:01:24.446 --> 00:01:27.646
+Do note that Python and JavaScript
+
+00:01:27.646 --> 00:01:30.406
+already have a very mature ecosystem
+
+00:01:30.406 --> 00:01:32.206
+that provides a foundation
+
+00:01:32.206 --> 00:01:34.366
+to modern multimedia applications,
+
+00:01:34.366 --> 00:01:38.006
+so basically, EAF enables Emacs to extend
+
+00:01:38.006 --> 00:01:40.406
+to Python and JavaScript ecosystems,
+
+00:01:40.406 --> 00:01:42.286
+therefore extending to
+
+00:01:42.286 --> 00:01:44.366
+modern multimedia apps too.
+
+00:01:44.366 --> 00:01:47.606
+As we're on a tight schedule today,
+
+00:01:47.606 --> 00:01:49.726
+I can't go into every detail
+
+00:01:49.726 --> 00:01:51.486
+about how EAF achieves this.
+
+00:01:51.486 --> 00:01:53.606
+I did go through a lot of things
+
+00:01:53.606 --> 00:01:54.886
+during last year's presentation,
+
+00:01:54.886 --> 00:01:57.326
+so I highly recommend anyone interested
+
+00:01:57.326 --> 00:01:59.206
+to check out that presentation,
+
+00:01:59.206 --> 00:02:01.686
+and the project repository itself.
+
+00:02:01.686 --> 00:02:05.725
+Today we're focusing on *what changed*.
+
+00:02:05.726 --> 00:02:09.606
+Now the first change
+
+00:02:09.606 --> 00:02:10.926
+that you'll definitely notice
+
+00:02:10.926 --> 00:02:12.686
+is that we have a new logo!
+
+00:02:12.686 --> 00:02:15.926
+This logo uses gearwheels
+
+00:02:15.926 --> 00:02:18.486
+to symbolize how EAF extends Emacs
+
+00:02:18.486 --> 00:02:20.886
+to web and multimedia applications
+
+00:02:20.886 --> 00:02:23.286
+that bring new possibilities to Emacs.
+
+00:02:23.286 --> 00:02:28.726
+Since last year, EAF has replaced
+
+00:02:28.726 --> 00:02:30.886
+the DBus communication technology
+
+00:02:30.886 --> 00:02:33.446
+with the cross-platform EPC,
+
+00:02:33.446 --> 00:02:35.286
+the Emacs RPC stack,
+
+00:02:35.286 --> 00:02:37.526
+which has an Elisp implementation
+
+00:02:37.526 --> 00:02:39.246
+and a Python implementation,
+
+00:02:39.246 --> 00:02:41.006
+exactly what we need.
+
+02:42.160 --> 00:02:43.760
+This and some other changes
+
+00:02:43.760 --> 00:02:46.080
+enable EAF to support Windows,
+
+00:02:46.080 --> 00:02:49.519
+Windows 10 and Windows Subsystem for Linux,
+
+00:02:49.519 --> 00:02:51.840
+as well as all distros that support
+
+00:02:51.840 --> 00:02:54.319
+pacman, apt, dnf, pkg,
+
+00:02:54.319 --> 00:02:56.959
+zypper package installer commands,
+
+02:56.959 --> 00:02:59.840
+which includes Arch-based, Debian,
+
+00:02:59.840 --> 00:03:04.720
+or Ubuntu-based, Fedora, etc.
+
+03:04.720 --> 00:03:08.239
+However, do note that the maOS support
+
+03:08.239 --> 00:03:10.319
+works with some known issues.
+
+00:03:10.319 --> 00:03:15.359
+Have a look if you want to try out.
+
+03:15.360 --> 00:03:18.400
+Previously, EAF was able to make Elisp
+
+03:18.400 --> 00:03:20.720
+communicate with Python, as well as
+
+00:03:20.720 --> 00:03:23.280
+Python to communicate with JavaScript,
+
+03:23.280 --> 00:03:24.959
+meaning that Elisp can call
+
+00:03:24.959 --> 00:03:27.280
+Python functions and vice versa,
+
+00:03:27.280 --> 00:03:29.680
+and Python can call JavaScript functions
+
+00:03:29.680 --> 00:03:32.560
+and vice versa, but if you want Elisp
+
+00:03:32.560 --> 00:03:34.720
+to communicate with JavaScript,
+
+00:03:34.720 --> 00:03:36.239
+you have to go through Python,
+
+00:03:36.239 --> 00:03:38.879
+which is rather troublesome.
+
+03:38.879 --> 00:03:41.120
+Now, thanks to the EPC,
+
+00:03:41.120 --> 00:03:42.400
+Elisp can communicate
+
+00:03:42.400 --> 00:03:43.840
+with JavaScript directly
+
+03:43.840 --> 00:03:45.519
+using =eval_js= function
+
+00:03:45.519 --> 00:03:47.040
+and =eval_emacs_function=
+
+00:03:47.040 --> 00:03:49.840
+in Elisp and Python respectively.
+
+03:49.840 --> 00:03:51.840
+This greatly simplifies the code
+
+00:03:51.840 --> 00:03:52.640
+that will be needed
+
+00:03:52.640 --> 00:03:56.958
+to write a web app in EAF.
+
+03:56.959 --> 00:03:59.120
+Speaking of web applications,
+
+00:03:59.120 --> 00:04:01.200
+VueJS is a web framework
+
+00:04:01.200 --> 00:04:03.840
+that's been gaining a lot of popularity
+
+00:04:03.840 --> 00:04:04.720
+in recent years
+
+00:04:04.720 --> 00:04:08.959
+for its simplicity and functionality.
+
+04:08.959 --> 00:04:11.840
+In the past, you were only able to write
+
+04:11.840 --> 00:04:14.319
+simple JavaScript and HTML web apps
+
+00:04:14.319 --> 00:04:17.280
+for EAF. It was quite some work
+
+04:17.280 --> 00:04:20.880
+to create a full-featured web application.
+
+04:20.880 --> 00:04:23.360
+Now you can write new apps using EAF
+
+04:23.360 --> 00:04:27.919
+that work seamlessly with Emacs and Elisp.
+
+00:04:27.919 --> 00:04:30.880
+There are a few existing EAF apps
+
+04:30.880 --> 00:04:32.800
+written with Vue already
+
+04:32.800 --> 00:04:34.639
+to demonstrate the possibilities
+
+00:04:34.639 --> 00:04:38.720
+of Vue-based extensions in Emacs.
+
+04:38.720 --> 00:04:41.520
+The first one is the EAF File Manager,
+
+04:41.520 --> 00:04:44.160
+written by ManateeLazycat himself,
+
+00:04:44.160 --> 00:04:46.400
+as an alternative option to dired,
+
+00:04:46.400 --> 00:04:47.919
+as he found dired's performance
+
+00:04:47.919 --> 00:04:49.280
+to lag considerably
+
+04:49.280 --> 00:04:52.240
+when there are way too many files.
+
+04:52.240 --> 00:04:56.080
+It supports wdired and fd functionality,
+
+00:04:56.080 --> 00:05:01.600
+and let me demonstrate that to you.
+
+05:01.600 --> 00:05:06.160
+See? And this is the app.
+
+05:06.160 --> 00:05:08.639
+Go back here.
+
+05:08.639 --> 00:05:12.240
+Another one is the EAF RSS Reader,
+
+05:12.240 --> 00:05:15.039
+written by our Summer of Code 2021 student
+
+00:05:15.039 --> 00:05:18.240
+ShaoChenHeng. It is a fast RSS reader
+
+00:05:18.240 --> 00:05:21.600
+that uses the EAF browser for previews,
+
+05:21.600 --> 00:05:32.479
+and let me demo that to you as well.
+
+05:32.479 --> 00:05:35.039
+Pragmatic Emacs.
+
+05:35.039 --> 00:05:37.199
+And you can view every site
+
+00:05:37.199 --> 00:05:45.359
+in the EAF Browser.
+
+05:45.360 --> 00:05:46.880
+To ease the process
+
+00:05:46.880 --> 00:05:49.840
+of creating a new EAF application,
+
+00:05:49.840 --> 00:05:52.880
+we've separated the EAF core and its apps,
+
+00:05:52.880 --> 00:05:54.479
+so that EAF apps now have
+
+00:05:54.479 --> 00:05:56.800
+their individual repositories.
+
+00:05:56.800 --> 00:05:58.000
+You can find them under
+
+00:05:58.000 --> 00:06:02.000
+the emacs-eaf GitHub organization.
+
+06:02.000 --> 00:06:04.560
+Because of the number of EAF apps
+
+00:06:04.560 --> 00:06:05.840
+and their dependencies
+
+00:06:05.840 --> 00:06:08.319
+that vary from system to system,
+
+06:08.319 --> 00:06:10.080
+we've also introduced a new
+
+00:06:10.080 --> 00:06:12.639
+=M-x eaf-install-and-update= command
+
+00:06:12.639 --> 00:06:14.560
+which is a wrapper around the new
+
+00:06:14.560 --> 00:06:17.039
+install-eaf python script
+
+00:06:17.039 --> 00:06:19.280
+dedicated to installing, updating,
+
+00:06:19.280 --> 00:06:20.720
+and maintaining EAF apps
+
+00:06:20.720 --> 00:06:21.680
+and their dependencies
+
+00:06:21.680 --> 00:06:24.160
+for the end user.
+
+06:24.160 --> 00:06:25.600
+Now it is very easy
+
+00:06:25.600 --> 00:06:27.440
+to create a new EAF app.
+
+00:06:27.440 --> 00:06:29.039
+You just need to do it.
+
+00:06:29.039 --> 00:06:31.120
+You can just do it in your own repository,
+
+00:06:31.120 --> 00:06:34.720
+such as in GitHub, GitLab, or wherever.
+
+06:34.720 --> 00:06:36.160
+The first thing to do is
+
+00:06:36.160 --> 00:06:39.520
+to fork the eaf-demo or the eaf-vue-demo
+
+00:06:39.520 --> 00:06:41.280
+as a starting template,
+
+00:06:41.280 --> 00:06:43.520
+then update the dependencies.json file
+
+00:06:43.520 --> 00:06:46.400
+to list the new dependencies you introduced
+
+06:46.400 --> 00:06:48.560
+on various systems.
+
+06:48.560 --> 00:06:51.199
+Afterwards, once your app is finished,
+
+00:06:51.199 --> 00:06:53.039
+you simply need to submit a PR
+
+00:06:53.039 --> 00:06:54.000
+to the EAF core
+
+06:54.000 --> 00:06:56.720
+that modifies the applications.json list
+
+06:56.720 --> 00:07:03.039
+to include your new app. And that's it.
+
+07:03.039 --> 00:07:04.720
+Come try it out and write your own
+
+00:07:04.720 --> 00:07:09.598
+EAF extensions today!
+
+07:09.599 --> 00:07:11.840
+There are many other new updates.
+
+00:07:11.840 --> 00:07:13.919
+To list a few: we reached
+
+00:07:13.919 --> 00:07:17.199
+more than 60 contributors, hooray!
+
+07:17.199 --> 00:07:19.759
+And also, you can now use the familiar
+
+07:19.759 --> 00:07:22.160
+Control s and Control r isearch
+
+00:07:22.160 --> 00:07:23.280
+for real-time search,
+
+00:07:23.280 --> 00:07:24.560
+functioning very similar
+
+00:07:24.560 --> 00:07:27.039
+to the Emacs isearch,
+
+07:27.039 --> 00:07:29.759
+in the EAF Browser, PDF Viewer,
+
+00:07:29.759 --> 00:07:32.080
+and many other applications.
+
+07:32.080 --> 00:07:34.000
+Additionally, you can also create
+
+00:07:34.000 --> 00:07:35.680
+EAF PDF annotations
+
+00:07:35.680 --> 00:07:44.318
+either inline or as a pop-up, etc. etc. etc.
+
+07:44.319 --> 00:07:47.680
+Finally, let's talk about Popweb.
+
+07:47.680 --> 00:07:50.080
+Popweb is a very, very new project
+
+00:07:50.080 --> 00:07:52.639
+that started like exactly two weeks ago,
+
+00:07:52.639 --> 00:07:55.199
+that focuses particularly on the
+
+00:07:55.199 --> 00:07:55.919
+multimedia pop-up functionality in Emacs.
+
+00:07:55.919 --> 00:08:02.080
+Pop is considered to be a sister project
+
+00:08:02.080 --> 00:08:04.879
+and lightweight version of EAF.
+
+08:04.879 --> 00:08:07.039
+They both share a very similar design
+
+08:07.039 --> 00:08:09.039
+and some code, and they are maintained
+
+00:08:09.039 --> 00:08:10.080
+by the same people,
+
+00:08:10.080 --> 00:08:13.680
+which is me and ManateeLazycat.
+
+08:13.680 --> 00:08:15.599
+Here's a quick demo to see the
+
+08:15.599 --> 00:08:23.840
+responsiveness of its preview.
+
+08:23.840 --> 00:08:27.919
+Here we go. On the right, see...
+
+00:08:27.919 --> 00:08:30.720
+Oh, here we go. Yes.
+
+08:30.720 --> 00:08:32.560
+And these are the LaTeX preview.
+
+00:08:32.560 --> 00:08:44.800
+I can quickly show the next one.
+
+08:44.800 --> 00:08:48.160
+So this is the end of my presentation.
+
+08:48.160 --> 00:08:50.000
+Feel free to post questions
+
+00:08:50.000 --> 00:08:52.160
+on the collaborative pad, IRC,
+
+00:08:52.160 --> 00:08:53.519
+or directly send me an email.
+
+00:08:53.519 --> 00:08:55.680
+I'll be around all this,
+
+00:08:55.680 --> 00:08:57.839
+at all these places,
+
+08:57.839 --> 00:08:59.519
+and if you found any issue,
+
+00:08:59.519 --> 00:09:01.200
+please submit an issue
+
+00:09:01.200 --> 00:09:04.160
+to the EAF official issues,
+
+00:09:04.160 --> 00:09:08.880
+and don't forget to check out the wiki.
+
+09:08.880 --> 00:09:10.160
+Thank you and enjoy
+
+00:09:10.160 --> 00:09:13.680
+the rest of EmacsConf 2021.
+
+00:09:13.680 --> 00:09:14.680
+[captions by sachac]
diff --git a/2021/captions/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main.vtt b/2021/captions/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main.vtt
new file mode 100644
index 00000000..083f2278
--- /dev/null
+++ b/2021/captions/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main.vtt
@@ -0,0 +1,820 @@
+WEBVTT
+
+00:00.240 --> 00:00:02.320
+Hello, everyone, my name is Spencer,
+
+00:00:02.320 --> 00:00:03.600
+and today I'm going to tell you all
+
+00:00:03.600 --> 00:00:05.296
+a little bit about how to typeset
+
+00:00:05.296 --> 00:00:06.640
+Gregorian chant sheet music
+
+00:00:06.640 --> 00:00:10.000
+using Emacs and a tool called Gregorio.
+
+00:10.000 --> 00:00:12.160
+Now I expect many, if not all, of you
+
+00:00:12.160 --> 00:00:14.000
+are unfamiliar with Gregorio,
+
+00:00:14.000 --> 00:00:14.719
+so we'll start off
+
+00:00:14.719 --> 00:00:16.240
+with a brief overview of the tool
+
+00:16.240 --> 00:18.080
+and the appropriate syntax.
+
+00:18.080 --> 00:19.760
+Next, I'll show you how I've automated
+
+00:19.760 --> 00:00:20.720
+some of the workflow
+
+00:00:20.720 --> 00:00:22.480
+using some Emacs Lisp functions
+
+00:00:22.480 --> 00:00:23.920
+which I've slowly been turning into
+
+00:00:23.920 --> 00:00:26.080
+a package called `gregorian-mode`.
+
+00:26.080 --> 00:00:26.720
+This will include
+
+00:00:26.720 --> 00:00:28.320
+some live typesetting examples
+
+00:00:28.320 --> 00:00:29.359
+to give you a better idea
+
+00:00:29.359 --> 00:00:31.279
+of how this all works.
+
+00:31.279 --> 00:00:32.079
+Finally, I'll share
+
+00:00:32.079 --> 00:00:33.120
+some information with you
+
+00:00:33.120 --> 00:00:34.480
+about how you can contribute
+
+00:34.480 --> 00:00:35.680
+to the package if you'd like,
+
+00:00:35.680 --> 00:00:38.000
+and how you can learn more about
+
+00:38.000 --> 00:39.600
+both Gregorio and `gregorian-mode`.
+
+00:39.600 --> 00:00:41.120
+And of course, all of the examples
+
+00:00:41.120 --> 00:00:42.320
+from this presentation today
+
+00:00:42.320 --> 00:00:44.079
+have been available online
+
+00:00:44.079 --> 00:00:44.879
+so you can review them
+
+00:00:44.879 --> 00:00:46.800
+all at your own pace.
+
+00:46.800 --> 00:49.440
+Gregorio is a tool that takes
+
+00:49.440 --> 00:51.500
+a `gabc` text file and compiles it
+
+00:51.500 --> 00:52.879
+into a LaTeX document.
+
+00:52.879 --> 00:00:54.719
+Gregorio is included by default
+
+00:00:54.719 --> 00:00:56.559
+with many LaTeX distributions,
+
+00:00:56.559 --> 00:00:58.079
+so you may already have it installed
+
+00:00:58.079 --> 00:01:01.120
+on your machine if you are a user of LaTeX.
+
+01:01.120 --> 01:02.879
+You can see here on the left an example
+
+01:02.879 --> 00:01:04.960
+of some input `gabc` text,
+
+00:01:04.960 --> 00:01:05.600
+and on the right,
+
+00:01:05.600 --> 00:01:08.080
+what the compiled score will look like.
+
+01:08.080 --> 01:10.080
+Looking at the `gabc`, we can see that
+
+01:10.080 --> 01:12.640
+it starts with the clef in parentheses,
+
+01:12.640 --> 00:01:13.600
+and then following this
+
+00:01:13.600 --> 00:01:15.119
+are the syllables of the lyrics
+
+00:01:15.119 --> 00:01:18.080
+and the corresponding notes in parentheses.
+
+01:18.080 --> 01:21.119
+For example, you can see that "EX,"
+
+01:21.119 --> 00:01:22.240
+the first syllable,
+
+00:01:22.240 --> 00:01:24.080
+corresponds to a `d` note
+
+00:01:24.080 --> 00:01:25.920
+in parentheses there,
+
+00:01:25.920 --> 00:01:27.119
+and if you look at the right,
+
+00:01:27.119 --> 00:01:28.560
+you can easily verify that
+
+00:01:28.560 --> 00:01:30.320
+in the output.
+
+01:30.320 --> 00:01:31.040
+Now the last thing
+
+00:01:31.040 --> 00:01:31.680
+that I want to note here
+
+01:31.680 --> 01:34.079
+is that `gabc` files are all plain text,
+
+01:34.079 --> 01:36.320
+meaning they can easily be shared
+
+01:36.320 --> 01:38.000
+and can easily be tracked using
+
+01:38.000 --> 01:40.400
+your favorite version-control software.
+
+01:40.400 --> 01:41.920
+Since these are plain text,
+
+01:41.920 --> 01:43.520
+it's really pretty easy to integrate
+
+01:43.520 --> 01:46.079
+them into your existing workflows.
+
+01:46.079 --> 00:01:48.079
+The `gabc` format also supports
+
+00:01:48.079 --> 00:01:49.439
+many optional header fields
+
+00:01:49.439 --> 00:01:50.560
+for adding more information
+
+00:01:50.560 --> 00:01:51.920
+about your score.
+
+01:51.920 --> 01:53.520
+You can see all the supported fields
+
+01:53.520 --> 00:01:54.799
+listed below, along with
+
+00:01:54.799 --> 00:01:56.479
+some placeholder text.
+
+01:56.479 --> 00:01:57.360
+These fields are placed
+
+00:01:57.360 --> 00:01:58.399
+at the top of a file
+
+00:01:58.399 --> 00:02:01.000
+and are separated from the actual score
+
+02:01.000 --> 00:02:01.439
+by the two percent symbols
+
+00:02:01.439 --> 00:02:03.000
+seen at the bottom.
+
+02:03.000 --> 02:04.399
+After these symbols, you would have the
+
+02:04.399 --> 00:02:05.600
+lines of your score,
+
+00:02:05.600 --> 00:02:07.080
+similar to what you saw
+
+00:02:07.080 --> 00:02:08.560
+on the previous slide.
+
+02:08.560 --> 00:02:09.599
+As I said earlier,
+
+00:02:09.599 --> 00:02:10.560
+I've automated some of
+
+02:10.560 --> 02:12.959
+the score build steps using Emacs Lisp,
+
+02:12.959 --> 00:02:14.000
+and have started turning them
+
+00:02:14.000 --> 00:02:16.480
+into a package called `gregorian-mode`.
+
+02:16.480 --> 00:02:18.160
+This is my first Emacs package,
+
+00:02:18.160 --> 00:02:20.400
+so the code is rather messy at the moment,
+
+00:02:20.400 --> 00:02:22.160
+and for the most part is just a wrapper
+
+02:22.160 --> 02:24.319
+around the Gregorio build process.
+
+02:24.319 --> 00:02:25.536
+However, I have made some
+
+00:02:25.536 --> 00:02:26.720
+quality-of-life improvements
+
+00:02:26.720 --> 00:02:27.920
+to the score writing,
+
+00:02:27.920 --> 00:02:30.239
+and have some more planned for the future.
+
+02:30.239 --> 00:02:31.360
+You'll get to see some of that
+
+00:02:31.360 --> 00:02:32.480
+in some live examples
+
+00:02:32.480 --> 00:02:34.319
+in just a little bit.
+
+02:34.319 --> 02:36.000
+This package is not currently on MELPA
+
+02:36.000 --> 00:02:37.760
+at the time of recording,
+
+00:02:37.760 --> 00:02:38.640
+so if you want it,
+
+00:02:38.640 --> 00:02:40.000
+you will have to clone it manually
+
+00:02:40.000 --> 00:02:41.920
+from GitHub, but it is planned
+
+02:41.920 --> 02:44.080
+to be on MELPA in the near future.
+
+02:44.080 --> 00:02:44.959
+It just needs to go through
+
+00:02:44.959 --> 00:02:46.400
+a little more rigorous cleanup
+
+00:02:46.400 --> 00:02:48.640
+and testing.
+
+02:48.640 --> 02:50.400
+Now that we've covered the basics,
+
+02:50.400 --> 02:52.560
+let's take a look at an actual example.
+
+02:52.560 --> 02:54.319
+In this example, I'm assuming that
+
+02:54.319 --> 02:56.480
+my `gregorian-mode` package is installed.
+
+02:56.480 --> 02:57.920
+However, there is nothing in these steps
+
+02:57.920 --> 00:02:59.200
+that cannot be done manually
+
+00:02:59.200 --> 00:03:01.120
+by just following the official
+
+03:01.120 --> 03:02.480
+Gregorio documentation.
+
+03:02.480 --> 03:04.000
+So if you don't want to use a package,
+
+03:04.000 --> 03:05.840
+you can do all of this pretty easily
+
+03:05.840 --> 03:07.280
+on your own just by following
+
+03:07.280 --> 03:10.000
+their documentation.
+
+03:10.000 --> 00:03:11.680
+So first we'll open up Emacs,
+
+00:03:11.680 --> 00:03:12.480
+and in my case,
+
+00:03:12.480 --> 00:03:14.560
+I'm using the GUI version.
+
+03:14.560 --> 03:16.640
+So now that Emacs is open, we can call
+
+03:16.640 --> 03:21.440
+the function `gregorian-create-new-gabc`,
+
+03:21.440 --> 03:23.680
+and this will prompt us for a file name.
+
+03:23.680 --> 03:25.599
+So we need to pick out a name
+
+03:25.599 --> 03:26.799
+for our new score.
+
+03:26.799 --> 00:03:28.239
+So I think I'm going to go ahead
+
+00:03:28.239 --> 00:03:33.280
+and name ours `emacsconf2021`.
+
+03:33.280 --> 03:34.959
+So you can see here that we now have
+
+03:34.959 --> 00:03:36.879
+a new `gabc` file with all of the
+
+00:03:36.879 --> 00:03:38.720
+optional header fields added,
+
+00:03:38.720 --> 00:03:40.400
+and we can keep whichever of these
+
+00:03:40.400 --> 00:03:41.120
+that we would like,
+
+03:41.120 --> 03:43.200
+and we can modify them as needed.
+
+03:43.200 --> 03:45.360
+So for right now, all I'm going to change
+
+03:45.360 --> 03:47.360
+is this commentary; I'm going to update
+
+03:47.360 --> 00:03:52.560
+this source of words to `emacsconf`,
+
+03:52.560 --> 00:03:53.760
+and then at the bottom here,
+
+00:03:53.760 --> 00:03:55.040
+this is where we'd go ahead
+
+00:03:55.040 --> 00:03:56.959
+and add our score.
+
+03:56.959 --> 03:58.799
+So I don't have time today to typeset
+
+03:58.799 --> 04:01.040
+an entire score, and I think that would
+
+04:01.040 --> 00:04:02.239
+probably be rather boring
+
+00:04:02.239 --> 00:04:03.760
+for most of you to watch,
+
+00:04:03.760 --> 00:04:05.680
+so I'll just demonstrate very briefly
+
+00:04:05.680 --> 00:04:08.500
+with a few syllables and notes here.
+
+04:15.840 --> 04:17.680
+Okay, so now that we have our first few
+
+04:17.680 --> 04:19.840
+syllables and notes down, let's take a
+
+04:19.840 --> 04:21.759
+look at what our score actually looks
+
+04:21.759 --> 04:23.520
+like so far.
+
+04:23.520 --> 04:25.040
+So in order to do this, we're going to
+
+04:25.040 --> 04:29.600
+call the function `gregorian-build`,
+
+04:29.600 --> 00:04:31.199
+and what this function does is
+
+00:04:31.199 --> 00:04:32.320
+it takes this score
+
+00:04:32.320 --> 00:04:33.680
+and creates a LaTeX file for it
+
+04:33.680 --> 04:36.080
+and then goes ahead and compiles it
+
+04:36.080 --> 04:38.160
+into a PDF file that we can actually
+
+04:38.160 --> 04:39.840
+take a look at.
+
+04:39.840 --> 04:42.479
+And this does take a few seconds to run...
+
+04:42.479 --> 04:44.320
+and there it goes...
+
+04:44.320 --> 04:47.040
+so we can see here we have a new buffer
+
+04:47.040 --> 04:48.560
+with all of the output
+
+04:48.560 --> 04:50.320
+from that build process,
+
+04:50.320 --> 00:04:51.840
+but what we really care about
+
+00:04:51.840 --> 00:04:54.000
+is that PDF.
+
+04:56.080 --> 04:58.479
+So opening that up, you can see
+
+04:58.479 --> 05:00.560
+we have a very short score.
+
+05:00.560 --> 05:02.320
+So far we haven't done a whole lot,
+
+05:02.320 --> 05:03.919
+but if you go ahead and compare the
+
+05:03.919 --> 05:05.000
+score on the right
+
+05:05.000 --> 05:06.479
+with the file on the left,
+
+05:06.479 --> 05:08.080
+you can really pretty clearly see that
+
+05:08.080 --> 05:10.080
+those are, in fact, the lyrics
+
+05:10.080 --> 05:11.199
+that we wrote.
+
+05:11.199 --> 05:13.280
+You can see at the top right there,
+
+05:13.280 --> 05:14.300
+the source has, in fact,
+
+05:14.300 --> 05:16.000
+changed to `emacsconf`
+
+05:16.000 --> 00:05:18.240
+so at this point, we could go ahead
+
+00:05:18.240 --> 00:05:20.000
+and just keep adding more lines,
+
+00:05:20.000 --> 00:05:22.240
+more notes, and so on,
+
+05:22.240 --> 05:24.080
+and we would end up with
+
+05:24.080 --> 05:25.919
+a completed score.
+
+05:25.919 --> 00:05:27.919
+Now this process is great and all,
+
+00:05:27.919 --> 00:05:29.120
+but as you can imagine,
+
+00:05:29.120 --> 00:05:30.880
+more complex `gabc` files
+
+05:30.880 --> 05:32.720
+can quickly become pretty difficult
+
+05:32.720 --> 05:34.479
+to read with the notes and the syllables
+
+05:34.479 --> 05:36.080
+all bunched together.
+
+05:36.080 --> 05:37.840
+So to get around this, I've been playing
+
+05:37.840 --> 05:39.840
+around with an alternative format
+
+05:39.840 --> 05:41.000
+called a `greg` file.
+
+05:41.000 --> 05:42.160
+I have an example of that
+
+05:42.160 --> 05:43.919
+for you right here.
+
+05:43.919 --> 05:45.919
+So here we can see there are
+
+05:45.919 --> 05:48.000
+two files side-by-side:
+
+05:48.000 --> 05:50.000
+on the left, we have a `gabc` file,
+
+05:50.000 --> 00:05:51.022
+and then on the right,
+
+00:05:51.022 --> 00:05:52.000
+we have a `greg` file,
+
+05:52.000 --> 05:53.360
+both of them for the same score.
+
+05:53.360 --> 05:55.600
+Now in my opinion, the `gabc` on the left
+
+05:55.600 --> 00:05:57.199
+is really rather difficult to read
+
+00:05:57.199 --> 00:05:58.319
+at a glance.
+
+00:05:58.319 --> 00:05:59.280
+You can see there
+
+00:05:59.280 --> 00:06:00.880
+the notes and the syllables
+
+00:06:00.880 --> 00:06:02.160
+are really all grouped together
+
+00:06:02.160 --> 00:06:03.919
+pretty tightly.
+
+06:03.919 --> 00:06:05.520
+Looking at the `greg` on the right,
+
+00:06:05.520 --> 00:06:06.560
+you can see that all of the
+
+00:06:06.560 --> 00:06:08.479
+header information is the same,
+
+00:06:08.479 --> 00:06:09.680
+but the score itself
+
+00:06:09.680 --> 00:06:11.840
+is split across several lines.
+
+06:11.840 --> 00:06:13.039
+The idea here is that
+
+00:06:13.039 --> 00:06:15.039
+the notes and the corresponding syllables
+
+00:06:15.039 --> 00:06:16.560
+will be on separate lines,
+
+00:06:16.560 --> 00:06:17.600
+one after the other,
+
+06:17.600 --> 06:20.639
+to help improve readability.
+
+06:20.639 --> 00:06:21.906
+Now the `greg` file format
+
+00:06:21.906 --> 00:06:23.800
+is still a work-in-progress.
+
+06:23.800 --> 06:24.960
+It's really not
+
+06:24.960 --> 06:27.520
+set in stone at all,
+
+06:27.520 --> 06:29.840
+but already I think this is a pretty
+
+06:29.840 --> 06:32.560
+substantial quality-of-life improvement,
+
+06:32.560 --> 06:34.720
+and already `gregorian-mode` can, in fact,
+
+06:34.720 --> 00:06:36.720
+build scores from `greg` files
+
+00:06:36.720 --> 00:06:38.300
+as long as they follow the conventions
+
+06:38.300 --> 06:40.400
+that you see in this file here,
+
+06:40.400 --> 00:06:42.560
+and I'm planning to have that
+
+00:06:42.560 --> 00:06:44.240
+quite a bit more well-defined
+
+00:06:44.240 --> 00:06:45.360
+moving forward.
+
+06:45.360 --> 06:47.360
+Like I said, this is really still
+
+06:47.360 --> 06:49.520
+a work-in-progress.
+
+06:49.520 --> 00:06:51.039
+Finally, I want to end today
+
+00:06:51.039 --> 00:06:52.319
+by sharing some resources
+
+00:06:52.319 --> 00:06:53.840
+where you can learn more.
+
+06:53.840 --> 00:06:55.039
+First, you can learn more about
+
+00:06:55.039 --> 00:06:56.319
+the Gregorio project
+
+00:06:56.319 --> 00:06:57.500
+on their official website,
+
+06:57.500 --> 06:58.960
+and I have the link for that
+
+06:58.960 --> 07:00.720
+on this slide here,
+
+07:00.720 --> 07:02.319
+and this site has several detailed examples
+
+07:02.319 --> 07:04.080
+and a lot of additional information
+
+07:04.080 --> 00:07:05.840
+about the project
+
+00:07:05.840 --> 00:07:07.500
+and about chant notation in general.
+
+07:07.500 --> 07:09.500
+It goes into much more depth
+
+07:09.500 --> 00:07:12.000
+than what we covered in this presentation,
+
+00:07:12.000 --> 00:07:13.199
+and overall, it's really
+
+00:07:13.199 --> 00:07:14.960
+a fantastic resource
+
+07:14.960 --> 07:16.560
+for learning more about how to use
+
+07:16.560 --> 07:19.360
+the Gregorio software and more about
+
+07:19.360 --> 07:21.840
+the specifics of chant notation.
+
+07:21.840 --> 00:07:23.680
+Second, if you're interested in using
+
+00:07:23.680 --> 00:07:25.840
+or contributing to `gregorian-mode`,
+
+00:07:25.840 --> 00:07:28.240
+you can check out the project on GitHub
+
+07:28.240 --> 07:30.400
+with the link here on this slide.
+
+07:30.400 --> 07:31.919
+And if you're interested in helping out
+
+07:31.919 --> 07:34.080
+in any way, feel free to open an issue,
+
+07:34.080 --> 07:36.560
+and we can discuss further.
+
+07:36.560 --> 00:07:38.160
+And finally, all of the examples
+
+00:07:38.160 --> 00:07:40.400
+from today are also available on GitHub,
+
+07:40.400 --> 07:42.479
+and that's the last link on this slide,
+
+07:42.479 --> 07:44.160
+and you can feel free to experiment
+
+07:44.160 --> 07:45.919
+with these and really just use them
+
+07:45.919 --> 07:48.560
+in any way that you'd like.
+
+07:48.560 --> 07:50.319
+Now that's all that I had for today,
+
+07:50.319 --> 00:07:51.360
+but I do want to take a moment
+
+00:07:51.360 --> 00:07:52.000
+to thank you all
+
+07:52.000 --> 07:54.160
+for checking out my presentation,
+
+07:54.160 --> 07:55.680
+and I want to thank the organizers
+
+07:55.680 --> 00:07:56.400
+for giving me some time
+
+00:07:56.400 --> 00:07:57.759
+to speak with you all.
+
+07:57.759 --> 00:07:59.120
+I hope that this was at least
+
+00:07:59.120 --> 00:08:01.120
+a little bit interesting to some of you,
+
+00:08:01.120 --> 00:08:02.319
+and I hope that you all enjoy
+
+00:08:02.319 --> 00:08:02.800
+the rest of the conference.
+
+08:02.800 --> 00:08:06.520
+Thank you for your time today.
+
+00:08:06.520 --> 00:08:07.520
+[captions by Hannah Miller]
diff --git a/2021/captions/emacsconf-2021-janitor--a-day-in-the-life-of-a-janitor--stefan-monnier--main.vtt b/2021/captions/emacsconf-2021-janitor--a-day-in-the-life-of-a-janitor--stefan-monnier--main.vtt
new file mode 100644
index 00000000..7e9e4bb8
--- /dev/null
+++ b/2021/captions/emacsconf-2021-janitor--a-day-in-the-life-of-a-janitor--stefan-monnier--main.vtt
@@ -0,0 +1,1780 @@
+WEBVTT
+
+00:01.520 --> 00:04.400
+Hello, my name is Stefan Monnier,
+
+00:04.400 --> 00:06.799
+and I'm going to talk to you about--
+
+00:06.799 --> 00:08.240
+well, I'm going to present a bit
+
+00:08.240 --> 00:11.840
+of the life of a janitor.
+
+00:11.840 --> 00:14.050
+So by and large, there's just
+
+00:14.050 --> 00:16.299
+nothing to see here,
+
+00:16.299 --> 00:17.199
+and that's probably
+
+00:17.199 --> 00:18.240
+not super interesting,
+
+00:18.240 --> 00:19.920
+but some of you might actually like to
+
+00:19.920 --> 00:00:23.050
+see how I work, so I figured why not.
+
+00:25.359 --> 00:27.279
+Usually what I do just doesn't make any
+
+00:27.279 --> 00:00:29.920
+any significant difference,
+
+00:00:29.920 --> 00:00:32.160
+and so I basically take existing code
+
+00:00:32.160 --> 00:00:35.040
+that's working, and I try to change it
+
+00:00:35.040 --> 00:00:37.680
+hopefully without breaking it too much
+
+00:00:37.680 --> 00:00:40.079
+and make it slightly more...
+
+00:40.079 --> 00:42.719
+you know, following some of the more
+
+00:42.719 --> 00:44.640
+modern style, let's say,
+
+00:44.640 --> 00:00:46.719
+and sometimes along the way,
+
+00:00:46.719 --> 00:00:50.399
+it actually fixes some bugs.
+
+00:50.399 --> 00:00:51.983
+More concretely, the kind of things
+
+00:00:51.983 --> 00:00:54.079
+that I do is basically activate
+
+00:00:54.079 --> 00:00:54.480
+lexical scoping--
+
+00:54.480 --> 00:56.239
+that's really my main goal usually--
+
+00:56.239 --> 00:58.960
+but also do things like convert
+
+00:58.960 --> 00:01:00.719
+from `cl` to `cl-lib`,
+
+00:01:00.719 --> 00:01:01.440
+sometimes I have to
+
+01:01.440 --> 01:03.760
+fix some compilation dependencies,
+
+01:03.760 --> 01:07.280
+I might convert from `defadvice` to `advice-add`,
+
+01:07.280 --> 01:11.439
+and many of the things--
+
+01:11.439 --> 00:01:13.119
+in terms of number of changes,
+
+00:01:13.119 --> 00:01:14.000
+most of them are actually
+
+00:01:14.000 --> 00:01:16.560
+changing `quote fun` to `hash quote fun`
+
+00:01:16.560 --> 00:01:17.360
+because I prefer it,
+
+01:17.360 --> 00:01:19.920
+but also it often helps me
+
+00:01:19.920 --> 00:01:21.439
+have a better understanding
+
+00:01:21.439 --> 00:01:23.920
+of which function is called where,
+
+01:23.920 --> 01:26.799
+and so the warnings I get from it
+
+01:26.799 --> 01:28.799
+sometimes help me. You look concretely...
+
+01:28.799 --> 00:01:30.880
+it's not nothing really clear;
+
+00:01:30.880 --> 00:01:33.360
+it's more in terms of helping me
+
+00:01:33.360 --> 00:01:35.759
+have a mental image
+
+00:01:35.759 --> 00:01:39.439
+of how the package works.
+
+01:39.439 --> 01:42.880
+So let's take a look.
+
+01:42.880 --> 00:01:45.840
+I'm going to start with
+
+00:01:45.840 --> 00:01:46.799
+the package `heap`,
+
+00:01:46.799 --> 00:01:50.560
+which I saw had a few weird things in it,
+
+00:01:50.560 --> 00:01:53.680
+so I'm going to compile it.
+
+01:53.680 --> 01:55.600
+That's basically the way the way I work,
+
+01:55.600 --> 00:01:57.840
+right. I take a package.
+
+00:01:57.840 --> 00:02:00.479
+I just pass it to the byte compiler.
+
+00:02:00.479 --> 00:02:02.159
+I do that by just having
+
+02:02.159 --> 02:04.560
+a clone of the whole
+
+02:04.560 --> 00:02:06.799
+GNU ELPA repository,
+
+00:02:06.799 --> 00:02:10.000
+and so that's why I built them.
+
+02:10.000 --> 02:11.520
+I use the build rules
+
+02:11.520 --> 02:15.120
+from the GNU ELPA repository.
+
+02:15.120 --> 00:02:16.720
+These build rules enforce--
+
+00:02:16.720 --> 00:02:17.680
+make sure that the files
+
+00:02:17.680 --> 00:02:19.680
+are compiled in a clean environment
+
+00:02:19.680 --> 00:02:21.920
+so you get fairly good warnings.
+
+00:02:21.920 --> 00:02:23.680
+If you look at the warnings you see here,
+
+00:02:23.680 --> 00:02:24.720
+there's a lot of things
+
+00:02:24.720 --> 00:02:26.480
+which are completely irrelevant,
+
+00:02:26.480 --> 00:02:28.400
+which are due to details
+
+00:02:28.400 --> 00:02:30.319
+of the way I have my Emacs set up
+
+00:02:30.319 --> 00:02:31.599
+and some of the local changes
+
+00:02:31.599 --> 00:02:34.319
+I had in it so, you know,
+
+00:02:34.319 --> 00:02:35.280
+there's no point
+
+00:02:35.280 --> 00:02:37.920
+paying too much attention to it,
+
+02:37.920 --> 02:40.400
+but here we have a first warning.
+
+02:40.400 --> 02:42.959
+We see that this is using `cl`,
+
+02:42.959 --> 02:45.040
+so we want to change this to `cl-lib`,
+
+02:45.040 --> 00:02:46.879
+but that also means
+
+00:02:46.879 --> 00:02:48.400
+that we may have a new dependency
+
+00:02:48.400 --> 00:02:49.920
+on the `cl-lib` package,
+
+00:02:49.920 --> 00:02:51.120
+so we have to go check
+
+00:02:51.120 --> 00:02:52.000
+the start of the file
+
+00:02:52.000 --> 00:02:54.080
+to see if it already declares
+
+00:02:54.080 --> 00:02:56.800
+some dependency, and we see it doesn't,
+
+02:56.800 --> 00:03:00.640
+not even on a on a recent-enough Emacs,
+
+00:03:00.640 --> 00:03:02.325
+so we have to add--
+
+00:03:02.325 --> 00:03:05.360
+sorry, that's not going very well...
+
+03:05.360 --> 03:06.480
+oh...
+
+03:06.480 --> 03:08.560
+okay, we're going to get there somewhere...
+
+03:08.560 --> 03:13.200
+somehow...
+
+03:13.200 --> 03:18.020
+oh, that still wasn't it, wow, okay--
+
+03:20.480 --> 03:22.159
+and along the way...
+
+03:22.159 --> 00:03:24.159
+Of course, since we converted to `cl-lib`,
+
+00:03:24.159 --> 00:03:26.159
+we have to update the uses
+
+00:03:26.159 --> 00:03:29.840
+so `defstruct` shouldn't be used anymore.
+
+03:29.840 --> 03:31.599
+We may want to reindent this
+
+03:31.599 --> 03:36.000
+to get something a bit cleaner.
+
+03:37.040 --> 00:03:40.589
+We have here a missing quote...
+
+00:03:40.589 --> 00:03:41.920
+hash, sorry.
+
+03:41.920 --> 00:03:46.480
+We have `decf`, so `decf` is here,
+
+03:46.480 --> 00:03:48.000
+and that needs to be replaced
+
+00:03:48.000 --> 00:03:49.920
+with `cl-decf`.
+
+00:03:49.920 --> 00:03:51.120
+Sometimes it's worth doing
+
+00:03:51.120 --> 00:03:53.360
+a search-and-replace.
+
+00:03:53.360 --> 00:03:54.799
+Here I see there's only two,
+
+00:03:54.799 --> 00:03:57.760
+so it's not worth the trouble;
+
+03:57.760 --> 00:04:00.711
+I just do it by hand, and that's it.
+
+00:04:00.711 --> 00:04:02.000
+Well, that was easy.
+
+04:02.000 --> 04:05.000
+So let's recompile, see what it says.
+
+04:10.159 --> 04:12.959
+Ah, this is clean. Perfect!
+
+04:12.959 --> 04:15.000
+Let's.. we can go see...
+
+04:15.000 --> 04:17.280
+There is another one I had.
+
+04:17.280 --> 04:20.239
+Was it `counsel`, I think. Yes.
+
+04:20.239 --> 00:04:24.160
+So also I saw some funny things
+
+00:04:24.160 --> 00:04:24.320
+going on here.
+
+04:24.320 --> 00:04:26.479
+So I'm going to do
+
+00:04:26.479 --> 00:04:31.040
+the same procedure as before:
+
+00:04:31.040 --> 00:04:32.800
+I just compile the file
+
+00:04:32.800 --> 00:04:35.000
+and look at the warnings.
+
+04:38.000 --> 04:40.479
+Oh, we have many more here.
+
+04:40.479 --> 04:43.120
+So let's see...
+
+04:43.120 --> 00:04:46.504
+Okay, so we have missing quotes--
+
+00:04:46.504 --> 00:04:49.240
+oh, hashes. They're not really missing;
+
+04:49.240 --> 04:54.639
+it's just a personal preference.
+
+04:54.639 --> 04:57.440
+Oh, here... here's an important one:
+
+04:57.440 --> 04:59.280
+so as you know,
+
+04:59.280 --> 05:00.639
+if you look at the top of the file,
+
+05:00.639 --> 00:05:02.240
+you see that here
+
+00:05:02.240 --> 00:05:04.960
+it says it's using lexical binding,
+
+05:04.960 --> 05:07.120
+yet it's not fully using lexical binding,
+
+05:07.120 --> 00:05:08.960
+because as we just saw,
+
+00:05:08.960 --> 00:05:11.039
+there's a call to the `eval` function
+
+00:05:11.039 --> 00:05:11.680
+with only one argument,
+
+05:11.680 --> 05:13.280
+which means the second argument is nil,
+
+05:13.280 --> 05:16.880
+which means that the expression read
+
+05:16.880 --> 00:05:19.520
+by `read` here is going to be evaluated
+
+05:19.520 --> 00:05:22.160
+using the old dialects,
+
+00:05:22.160 --> 00:05:24.240
+which is only dynamic scoping.
+
+00:05:24.240 --> 00:05:25.680
+So here I like to just change this
+
+00:05:25.680 --> 00:05:26.800
+to use lexical scoping,
+
+05:26.800 --> 00:05:28.080
+which in most cases
+
+00:05:28.080 --> 00:05:29.680
+just doesn't make any difference.
+
+00:05:29.680 --> 00:05:30.870
+It just makes me feel better.
+
+05:35.919 --> 05:40.160
+So there's lots of those hashes
+
+05:40.160 --> 05:41.759
+all over the place.
+
+05:43.680 --> 05:45.680
+It's not strictly necessary, as you know,
+
+05:45.680 --> 05:51.500
+but I'm just going to add them anyway.
+
+05:52.479 --> 00:05:53.199
+Here we see
+
+00:05:53.199 --> 00:05:54.800
+it's not going to warn me here
+
+00:05:54.800 --> 00:05:55.759
+because it doesn't know
+
+00:05:55.759 --> 00:05:57.600
+that `ivy-make-magic-action`
+
+00:05:57.600 --> 00:05:58.400
+takes a function,
+
+00:05:58.400 --> 00:06:02.319
+but it's a pretty good guess that it does.
+
+06:12.319 --> 06:14.479
+And here's some more.
+
+06:14.479 --> 06:16.080
+What else do we have?
+
+06:16.080 --> 06:19.120
+Is that all we have here?
+
+06:19.120 --> 06:21.440
+Well, looks like it. Oh, I see a few...
+
+06:21.440 --> 06:27.680
+a few more here...
+
+06:27.680 --> 06:30.639
+and one more.
+
+06:30.639 --> 06:33.039
+And oh, this is more interesting.
+
+06:33.039 --> 06:35.280
+So here we have a use of `defadvice`,
+
+06:35.280 --> 06:37.440
+so if we go back
+
+06:37.440 --> 06:38.479
+to the beginning of the file,
+
+06:40.720 --> 06:42.880
+we see that it actually depends
+
+06:42.880 --> 00:06:47.360
+on Emacs 24.5, so it actually has
+
+06:47.360 --> 00:06:49.280
+the new advice system available
+
+00:06:49.280 --> 00:06:51.520
+without having to add any dependency,
+
+00:06:51.520 --> 00:06:53.599
+so there's really no good reason
+
+00:06:53.599 --> 00:06:54.880
+to keep this.
+
+06:54.880 --> 00:06:56.160
+So we just convert this
+
+00:06:56.160 --> 00:06:58.560
+to an `advice-add`,
+
+06:58.560 --> 00:06:59.840
+so it just says, you know,
+
+00:06:59.840 --> 00:07:02.319
+this is the function that's advised.
+
+07:02.319 --> 07:04.560
+This was a `before` advice.
+
+07:04.560 --> 07:05.500
+The `before` advice, sometimes,
+
+07:05.500 --> 07:08.479
+when we convert it to `advice-add`,
+
+07:08.479 --> 07:11.199
+need to be converted to `around` advice.
+
+07:11.199 --> 07:13.280
+This is when the function
+
+07:13.280 --> 07:15.840
+looks or modifies the argument.
+
+07:15.840 --> 07:18.639
+In this case, if I look at it,
+
+07:18.639 --> 07:20.319
+I see it doesn't seem to be using
+
+07:20.319 --> 07:21.280
+the arguments at all.
+
+07:21.280 --> 00:07:25.280
+So I'm just going to keep it
+
+00:07:25.280 --> 00:07:27.520
+as a `before` advice.
+
+07:27.520 --> 00:07:28.672
+And we have to give it a name.
+
+00:07:28.672 --> 00:07:30.880
+Well, we don't really have to,
+
+07:30.880 --> 07:32.800
+but it's convenient to give it a name
+
+07:32.800 --> 07:34.800
+to the new function.
+
+07:34.800 --> 00:07:36.880
+So here, they actually had
+
+00:07:36.880 --> 00:07:38.080
+given a name to the advice,
+
+00:07:38.080 --> 00:07:39.599
+so we're going to keep it,
+
+00:07:39.599 --> 00:07:41.440
+and indeed it's the only function.
+
+00:07:41.440 --> 00:07:43.360
+This name is not used as a function,
+
+00:07:43.360 --> 00:07:44.160
+so we can use it
+
+00:07:44.160 --> 00:07:46.960
+as the name of the function.
+
+07:46.960 --> 00:07:49.039
+I'm going to add a dash here
+
+00:07:49.039 --> 00:07:51.120
+because I think this function
+
+00:07:51.120 --> 00:07:53.039
+is really fundamentally
+
+00:07:53.039 --> 00:07:54.639
+an internal function.
+
+07:54.639 --> 07:56.720
+So here I just said I add the advice,
+
+07:56.720 --> 07:58.000
+but I still need to actually
+
+07:58.000 --> 07:59.800
+define the function.
+
+08:02.879 --> 00:08:04.160
+So that's what I do here,
+
+00:08:04.160 --> 00:08:06.500
+and we need here to list the arguments
+
+08:06.500 --> 08:08.240
+that are going to be taken.
+
+08:08.240 --> 00:08:09.199
+I don't know what these are,
+
+00:08:09.199 --> 00:08:10.960
+but I know we're not using them,
+
+00:08:10.960 --> 00:08:13.759
+so we'll just accept anything,
+
+08:13.759 --> 08:16.560
+and that will do the trick.
+
+08:16.560 --> 08:19.199
+It's a future-proof as well,
+
+08:19.199 --> 08:22.240
+so that should work.
+
+08:22.240 --> 00:08:24.160
+Oh, here we have another, so it's
+
+00:08:24.160 --> 00:08:29.919
+basically the same story, I think.
+
+08:29.919 --> 00:08:31.599
+It's a `before` advice as well.
+
+00:08:31.599 --> 00:08:32.959
+It doesn't seem to be using
+
+00:08:32.959 --> 00:08:35.599
+the argument at all,
+
+08:35.599 --> 00:08:38.596
+and let's see if this name is not taken.
+
+00:08:38.596 --> 00:08:43.360
+Yeah, good, so we can just do the same:
+
+08:43.360 --> 08:46.880
+turn this into an `advice-add`...
+
+08:46.880 --> 08:48.300
+`before`...
+
+08:53.040 --> 08:55.000
+I just add a dash here.
+
+09:02.480 --> 00:09:05.440
+And same thing--
+
+00:09:05.440 --> 00:09:06.959
+a function that just takes...
+
+09:06.959 --> 09:08.240
+because I don't know which arguments
+
+09:08.240 --> 09:10.480
+these are so...
+
+09:10.480 --> 09:14.640
+I think that should do the trick.
+
+09:14.640 --> 00:09:16.080
+Actually, we see that this function
+
+00:09:16.080 --> 00:09:18.560
+is very similar to the other one.
+
+09:18.560 --> 09:23.000
+Let's look at the two side-by-side...
+
+09:31.519 --> 00:09:33.055
+...it really is--
+
+00:09:33.055 --> 00:09:36.097
+oh, it's not exactly identical...
+
+00:09:36.097 --> 00:09:39.120
+it's, you know, we could try
+
+09:39.120 --> 09:41.680
+to merge them into a single function,
+
+09:41.680 --> 09:43.279
+but it's probably not worth the trouble
+
+09:43.279 --> 09:45.920
+so we can keep it this way.
+
+09:45.920 --> 09:48.720
+Okay, next warning: an `eval` again,
+
+09:48.720 --> 09:50.640
+so I could just add `t` here,
+
+09:50.640 --> 00:09:55.120
+but if you look at it a bit more,
+
+00:09:55.120 --> 00:09:56.000
+you see that the code
+
+00:09:56.000 --> 00:09:57.760
+we're going to evaluate
+
+09:57.760 --> 00:09:59.279
+using either lexical scoping
+
+00:09:59.279 --> 00:10:00.560
+or dynamic scoping
+
+00:10:00.560 --> 00:10:03.440
+is actually just evaluating a symbol,
+
+00:10:03.440 --> 00:10:06.240
+since we just call an `intern` here.
+
+10:06.240 --> 00:10:07.839
+So instead of replacing this
+
+00:10:07.839 --> 00:10:09.279
+by adding an argument,
+
+00:10:09.279 --> 00:10:11.680
+I'm just going to call `symbol-value`
+
+00:10:11.680 --> 00:10:12.640
+because that's exactly
+
+00:10:12.640 --> 00:10:14.480
+what we need to do here, right.
+
+00:10:14.480 --> 00:10:16.320
+I call this "strength reduction,"
+
+00:10:16.320 --> 00:10:17.200
+and I'm using
+
+00:10:17.200 --> 00:10:19.680
+a more primitive function instead,
+
+00:10:19.680 --> 00:10:23.200
+which does just what we need,
+
+10:23.200 --> 10:25.680
+and this one knows that it has to be
+
+10:25.680 --> 00:10:30.640
+accessed by dynamic scoping, of course.
+
+10:30.640 --> 00:10:32.959
+Here I have a `kmacro-ring`,
+
+00:10:32.959 --> 00:10:35.600
+so here I have a function that uses--
+
+10:35.600 --> 00:10:37.360
+`kmacro-ring` comes from
+
+00:10:37.360 --> 00:10:39.760
+the `kmacro` package, obviously,
+
+10:39.760 --> 10:41.600
+and we probably don't want to
+
+10:41.600 --> 10:42.959
+`require` `kmacro` package
+
+10:42.959 --> 00:10:48.560
+all over the place in `counsel` itself,
+
+10:48.560 --> 00:10:50.240
+because `counsel` can be used
+
+00:10:50.240 --> 00:10:53.279
+without `kmacro`.
+
+10:53.279 --> 00:10:55.200
+So I think we're just going to add
+
+00:10:55.200 --> 00:11:04.000
+a `defvar` to silence the warning.
+
+11:05.519 --> 00:11:10.720
+And we have several more. So we have
+
+11:10.720 --> 00:11:14.000
+`initial-counter-value`. (Sorry.)
+
+11:20.480 --> 11:23.360
+We have `kmacro-counter`.
+
+11:23.360 --> 11:25.760
+Do we have more?
+
+11:25.760 --> 11:28.560
+Oh, yes, we do.
+
+11:28.560 --> 11:35.040
+We have `kmacro-counter-value-start`
+
+11:35.040 --> 11:40.839
+and `kmacro-counter-format-start`.
+
+11:40.839 --> 11:43.920
+Okay.
+
+11:45.040 --> 11:50.160
+I hope this is it.
+
+11:50.160 --> 11:52.880
+`kmacro-ring`, `counter`, `ring`...
+
+11:52.880 --> 11:54.959
+blah blah blah.
+
+11:54.959 --> 00:12:00.240
+Here we have another one, `quote`.
+
+12:00.240 --> 12:03.279
+Here we have another hash missing.
+
+12:03.279 --> 12:06.079
+It's not missing...
+
+12:06.079 --> 12:08.000
+but same thing here.
+
+12:12.079 --> 00:12:16.560
+Okay, this is a function from `kmacro`.
+
+12:16.560 --> 00:12:18.079
+We could declare it
+
+00:12:18.079 --> 00:12:20.880
+just to silence the warning
+
+12:20.880 --> 00:12:22.320
+although we don't actually...
+
+00:12:22.320 --> 00:12:24.480
+normally, when we declare such things--
+
+12:24.480 --> 00:12:25.279
+same thing with variables--
+
+00:12:25.279 --> 00:12:27.300
+we should try to make sure that indeed
+
+12:27.300 --> 12:28.760
+by the time the code is executed,
+
+12:28.760 --> 12:30.800
+the function will be available,
+
+12:30.800 --> 00:12:32.800
+and then very often is
+
+00:12:32.800 --> 00:12:34.320
+because there's a `require`
+
+00:12:34.320 --> 00:12:35.680
+sometimes inside a function,
+
+00:12:35.680 --> 00:12:36.399
+and so we should put
+
+00:12:36.399 --> 00:12:37.680
+the `declare` function
+
+00:12:37.680 --> 00:12:39.920
+right after the `require`,
+
+00:12:39.920 --> 00:12:41.839
+but I don't think it's the case here.
+
+12:41.839 --> 00:12:46.399
+So I'm just going to to add this.
+
+12:46.399 --> 12:49.040
+I know this comes from `kmacro`,
+
+12:49.040 --> 00:12:53.500
+and I could actually check the arguments.
+
+12:56.320 --> 00:12:58.480
+It's just taking an optional argument
+
+00:12:58.480 --> 00:13:00.880
+so I'm going to put it there,
+
+00:13:00.880 --> 00:13:06.720
+so we have it complete.
+
+13:06.720 --> 13:10.800
+Okay, we can just recompile,
+
+13:10.800 --> 00:13:14.800
+see what is left
+
+00:13:14.800 --> 00:13:17.760
+from those warnings we've fixed,
+
+00:13:17.760 --> 00:13:21.360
+and we may have new warnings, in any case,
+
+00:13:21.360 --> 00:13:25.440
+because especially when we add the hashes,
+
+00:13:25.440 --> 00:13:29.519
+it tends to give us more warnings.
+
+13:29.519 --> 00:13:31.200
+So we have two more functions
+
+00:13:31.200 --> 00:13:34.560
+which are not known.
+
+13:34.560 --> 13:39.440
+You can just add them here...
+
+13:39.440 --> 13:44.720
+`set-format "kmacro"`
+
+13:44.720 --> 13:48.160
+and same thing for `set-counter`.
+
+13:48.160 --> 13:50.000
+Okay, whatever.
+
+13:54.959 --> 00:13:57.120
+This just takes a `format` argument,
+
+00:13:57.120 --> 00:14:05.920
+and this one just takes an `arg` argument.
+
+14:05.920 --> 14:10.800
+Okay, so let's see what this says now.
+
+14:10.800 --> 14:15.519
+Hopefully, there's no warnings anymore.
+
+14:15.519 --> 14:17.839
+We're done. Okay!
+
+14:17.839 --> 00:14:20.079
+Okay, the last one we're going to see
+
+00:14:20.079 --> 00:14:23.440
+is in `enwc`, I saw the other day...
+
+14:23.440 --> 14:26.240
+I think I have it here...
+
+14:27.760 --> 14:29.680
+here we go, yes...
+
+14:29.680 --> 14:32.800
+so `enwc` is an interesting package here
+
+14:32.800 --> 14:35.680
+because it has-- as you can see it has--
+
+14:35.680 --> 14:37.760
+it's lexical binding,
+
+14:37.760 --> 14:39.760
+but actually some of the files in it
+
+14:39.760 --> 14:42.320
+do not use lexical binding,
+
+14:42.320 --> 14:44.320
+so it has been partly converted
+
+14:44.320 --> 14:46.160
+but not completely.
+
+14:46.160 --> 00:14:49.920
+So here I'm going to
+
+00:14:49.920 --> 00:14:54.160
+enable lexical binding.
+
+14:54.160 --> 14:58.880
+I have also, I think, in `cm`...
+
+14:58.880 --> 15:01.199
+yes...
+
+15:01.199 --> 15:04.000
+so I enable it here,
+
+15:04.000 --> 15:07.360
+and also, I think, `test`.
+
+15:07.360 --> 00:15:09.360
+The test files are often
+
+00:15:09.360 --> 00:15:11.839
+somewhat problematic
+
+00:15:11.839 --> 00:15:15.199
+because very often they're not quite
+
+15:15.199 --> 15:18.880
+as heavily tested themselves, actually,
+
+15:18.880 --> 00:15:20.320
+or they only run
+
+00:15:20.320 --> 00:15:22.160
+in very specific contexts,
+
+00:15:22.160 --> 00:15:24.399
+and so they may have problems
+
+00:15:24.399 --> 00:15:27.360
+with missing `requires` or using packages
+
+00:15:27.360 --> 00:15:29.199
+which are not explicitly in the dependencies
+
+15:29.199 --> 15:31.279
+and those kinds of things.
+
+15:31.279 --> 15:33.360
+I think this is not the case here,
+
+15:33.360 --> 15:35.440
+but we'll see.
+
+15:35.440 --> 15:38.880
+`enwc`...
+
+15:38.880 --> 15:42.320
+Yes, I want to save this one and that one.
+
+15:42.320 --> 15:45.000
+Let's see what it says.
+
+15:47.199 --> 15:51.440
+Okay, unused lexical variable `x`...
+
+15:51.440 --> 15:52.240
+`x`...
+
+15:52.240 --> 15:57.120
+Yes, so here we have an unused variable,
+
+15:57.120 --> 15:58.320
+and indeed, it's not used.
+
+15:58.320 --> 16:00.880
+It probably had to be named before
+
+16:00.880 --> 16:04.079
+because it was...
+
+16:04.079 --> 00:16:05.120
+with dynamic scoping,
+
+00:16:05.120 --> 00:16:06.399
+the `dotimes` requires
+
+00:16:06.399 --> 00:16:08.160
+the variable to be named, actually,
+
+00:16:08.160 --> 00:16:10.399
+because it's used internally somehow,
+
+16:10.399 --> 00:16:11.600
+but with lexical scoping,
+
+00:16:11.600 --> 00:16:12.320
+that's not the case,
+
+00:16:12.320 --> 00:16:14.079
+so we can just put an underscore.
+
+16:14.079 --> 00:16:15.199
+I'm going to change this
+
+00:16:15.199 --> 00:16:16.880
+because I really don't like
+
+16:16.880 --> 16:19.000
+this three-part `dotimes`.
+
+16:19.000 --> 00:16:21.360
+I prefer to have
+
+00:16:21.360 --> 00:16:23.040
+the return value at the end.
+
+16:23.040 --> 00:16:26.480
+It's sort of stashed hidden in the middle.
+
+16:26.480 --> 16:29.680
+That's just a personal preference.
+
+16:29.680 --> 16:31.920
+Okay, what else... we have a `widget`.
+
+16:31.920 --> 16:34.000
+Okay, this argument here says that
+
+16:34.000 --> 16:37.000
+it's not used, so if we look at...
+
+16:44.320 --> 00:16:47.040
+We were here, right? Yes. Right here.
+
+00:16:47.040 --> 00:16:50.480
+Indeed, `widget` is really not used.
+
+16:50.480 --> 16:51.230
+(Sorry.)
+
+16:53.600 --> 00:16:55.279
+Here's what I get for using
+
+00:16:55.279 --> 00:16:58.320
+a somewhat vanilla configuration of Emacs,
+
+16:58.320 --> 17:01.279
+compared to the one I use...
+
+17:01.279 --> 17:04.000
+the personally tricked one.
+
+17:04.000 --> 17:05.439
+Actually, I can...
+
+17:05.439 --> 17:07.919
+so we can just mark this argument
+
+17:07.919 --> 17:09.360
+as unused,
+
+17:09.360 --> 17:11.199
+and we don't want to remove the argument
+
+17:11.199 --> 00:17:12.480
+probably, or maybe we could;
+
+00:17:12.480 --> 00:17:15.679
+we could see where the function is used,
+
+17:15.679 --> 00:17:18.542
+and here we see that it's passed
+
+00:17:18.542 --> 00:17:20.959
+to a higher-order function,
+
+17:20.959 --> 17:24.480
+basically, so it's going to be...
+
+17:24.480 --> 00:17:25.360
+We can't really change
+
+00:17:25.360 --> 00:17:25.760
+the calling convention
+
+17:25.760 --> 17:27.120
+so we have to mark the argument
+
+17:27.120 --> 17:29.600
+as being just an unused argument,
+
+17:29.600 --> 17:34.000
+but we're going to still receive it.
+
+17:34.000 --> 00:17:35.360
+And here it says same thing:
+
+00:17:35.360 --> 00:17:38.240
+that `widget` is not used in this function.
+
+17:38.240 --> 17:40.000
+Let's take a look at the function.
+
+17:40.000 --> 17:42.400
+Indeed it seems it's not used,
+
+17:42.400 --> 17:44.000
+and so we're just going to mark it
+
+17:44.000 --> 17:46.480
+as unused.
+
+17:46.480 --> 00:17:48.320
+This is the part of the conversion
+
+00:17:48.320 --> 00:17:49.200
+to lexical scoping
+
+00:17:49.200 --> 00:17:51.280
+that's somewhat tricky sometimes
+
+00:17:51.280 --> 00:17:53.760
+because we don't really know
+
+00:17:53.760 --> 00:17:56.240
+whether this variable should be using
+
+00:17:56.240 --> 00:17:58.559
+lexical scoping or dynamic scoping.
+
+17:58.559 --> 00:18:00.480
+The fact that it's not used
+
+00:18:00.480 --> 00:18:02.320
+is a hint that there's probably
+
+00:18:02.320 --> 00:18:03.679
+something going on,
+
+18:03.679 --> 00:18:04.960
+so either it's not used
+
+00:18:04.960 --> 00:18:06.400
+because it should be using
+
+00:18:06.400 --> 00:18:07.200
+dynamic scoping--
+
+00:18:07.200 --> 00:18:08.080
+it is going to be used
+
+00:18:08.080 --> 00:18:10.480
+by some other code somewhere else--
+
+18:10.480 --> 00:18:11.840
+or it's really not used
+
+00:18:11.840 --> 00:18:14.000
+because it's just not used, right,
+
+00:18:14.000 --> 00:18:16.320
+and so we need to distinguish the two,
+
+00:18:16.320 --> 00:18:20.880
+and for that, I basically use
+
+00:18:20.880 --> 00:18:22.240
+my own judgment.
+
+18:22.240 --> 18:24.880
+This is based typically on the fact that
+
+18:24.880 --> 00:18:27.760
+this is just a very short name,
+
+00:18:27.760 --> 00:18:32.000
+and most local identifiers use short names,
+
+18:32.000 --> 18:34.400
+whereas item values used for dynamic scoping
+
+18:34.400 --> 18:36.720
+typically have a package prefix
+
+18:36.720 --> 00:18:37.679
+or something like this.
+
+00:18:37.679 --> 00:18:38.960
+So the fact that it's a short name
+
+00:18:38.960 --> 00:18:40.880
+gives me a good idea.
+
+18:40.880 --> 00:18:41.520
+Here in this case,
+
+00:18:41.520 --> 00:18:42.640
+I actually look at the code,
+
+00:18:42.640 --> 00:18:45.600
+and we see that there's nothing in here
+
+18:45.600 --> 00:18:47.039
+that may actually refer
+
+00:18:47.039 --> 00:18:48.080
+to this variable `widget`,
+
+00:18:48.080 --> 00:18:49.280
+so I think it's safe,
+
+18:49.280 --> 00:18:51.360
+but in the general case,
+
+00:18:51.360 --> 00:18:54.400
+we may look here and be surprised,
+
+18:54.400 --> 00:18:55.760
+or, you know, you may call out
+
+00:18:55.760 --> 00:18:58.320
+the functions which may themselves end up
+
+18:58.320 --> 19:00.080
+referring to this variable.
+
+19:00.080 --> 19:02.640
+So sometimes we need to investigate a
+
+19:02.640 --> 19:03.840
+little more.
+
+19:03.840 --> 19:05.919
+We are most of the time not completely sure
+
+19:05.919 --> 19:07.520
+whether the result is correct or not,
+
+19:07.520 --> 00:19:09.520
+of course, so the other thing
+
+00:19:09.520 --> 00:19:10.640
+you may want to check
+
+00:19:10.640 --> 00:19:12.160
+is also uses of things
+
+00:19:12.160 --> 00:19:14.400
+like `eval` or `symbol-value`.
+
+19:14.400 --> 19:17.200
+So it's often a good idea to search,
+
+19:17.200 --> 00:19:18.799
+and you do a search of `eval`,
+
+00:19:18.799 --> 00:19:21.490
+and you see here it's using `eval`.
+
+00:19:21.490 --> 00:19:24.160
+Hmmm... Okay, so what does this `eval` do?
+
+19:24.160 --> 00:19:25.760
+It's evaluating expressions
+
+00:19:25.760 --> 00:19:28.240
+that appear in `args` here
+
+19:28.240 --> 19:31.840
+so you can see where those args come from,
+
+19:31.840 --> 00:19:35.120
+and we see here, these are expressions
+
+00:19:35.120 --> 00:19:36.840
+that don't do anything very special.
+
+19:36.840 --> 19:41.520
+It's just using `make-supplicant-choice`,
+
+19:41.520 --> 19:44.960
+and `make-supplicant-choice` itself
+
+19:44.960 --> 19:47.120
+just doesn't refer to `widget`, for example,
+
+19:47.120 --> 19:50.000
+so you know we should be safe,
+
+19:50.000 --> 19:52.559
+but while I'm here...
+
+19:52.559 --> 19:53.840
+okay, well, then we can do that later.
+
+19:53.840 --> 19:55.679
+Well, that's actually the next warning,
+
+19:55.679 --> 00:19:58.080
+exactly. So here we see that this is
+
+00:19:58.080 --> 00:20:00.000
+using the dynamically-scoped dialect,
+
+00:20:00.000 --> 00:20:02.799
+so we convert it to lexical-scoped.
+
+20:02.799 --> 20:04.559
+Of course, this may introduce errors,
+
+20:04.559 --> 20:07.200
+but we hope it doesn't.
+
+20:07.200 --> 20:08.880
+And actually, it was a good change here,
+
+20:08.880 --> 20:12.080
+because if you see again,
+
+20:12.080 --> 00:20:14.240
+this actually evals expressions
+
+00:20:14.240 --> 00:20:16.159
+that appear here in `args`,
+
+20:16.159 --> 20:18.480
+and so these are expressions
+
+20:18.480 --> 20:21.039
+that are passed here.
+
+20:21.039 --> 20:23.679
+So this expression here used to be
+
+20:23.679 --> 00:20:24.480
+evaluated with dynamic scoping,
+
+00:20:24.480 --> 00:20:28.000
+even though it appears to be normal code
+
+00:20:28.000 --> 00:20:29.760
+within this file, which says
+
+00:20:29.760 --> 00:20:32.559
+it's using lexical scoping,
+
+20:32.559 --> 20:34.400
+and so there are some remnants
+
+20:34.400 --> 20:36.640
+of dynamic scoping all over the place
+
+20:36.640 --> 00:20:37.840
+in Emacs still, because we have
+
+00:20:37.840 --> 00:20:43.679
+those calls of `eval` with a nil argument.
+
+20:44.880 --> 20:47.039
+Here we have `cons`...
+
+20:47.039 --> 20:50.400
+that needs to be `hash quoted`.
+
+20:52.400 --> 00:20:54.080
+Oh, and we have a reference
+
+00:20:54.080 --> 00:20:56.720
+to this variable `enwc-edit-id'.
+
+00:20:56.720 --> 00:20:57.520
+So this is clearly
+
+00:20:57.520 --> 00:21:00.400
+a dynamic-scoped variable.
+
+21:00.400 --> 21:02.000
+We can either add a `defvar`
+
+21:02.000 --> 21:03.440
+to silence the warning,
+
+21:03.440 --> 00:21:06.799
+or maybe we can `require` the package.
+
+21:06.799 --> 21:10.080
+The file that defines it...
+
+21:14.080 --> 21:17.360
+So let's see where it's defined.
+
+21:17.360 --> 21:21.200
+Here it's defined in `enwc.el`,
+
+21:21.200 --> 00:21:23.440
+so I'm going to try just to add
+
+00:21:23.440 --> 00:21:25.039
+the dependency.
+
+21:25.039 --> 00:21:27.840
+I'm going to `require` here. This is risky.
+
+21:27.840 --> 21:30.159
+We'll see when we compile a file later,
+
+21:30.159 --> 21:32.320
+we may get a circular dependency
+
+21:32.320 --> 21:34.720
+because of it.
+
+21:34.720 --> 21:36.320
+If that's the case, we're going to
+
+21:36.320 --> 00:21:38.320
+have to remove this `require`
+
+00:21:38.320 --> 00:21:42.000
+and instead put `defvar`s.
+
+21:42.000 --> 21:42.559
+Sometimes it's worth actually
+
+21:42.559 --> 21:44.640
+looking further at the various files
+
+21:44.640 --> 00:21:48.080
+to see how to redefine the dependencies
+
+21:48.080 --> 21:49.840
+to break those circular dependencies,
+
+21:49.840 --> 21:52.320
+but it's often not really
+
+21:52.320 --> 21:54.720
+worth the trouble.
+
+21:55.679 --> 00:21:58.400
+Oh, no, that's not what--
+
+00:21:58.400 --> 00:22:01.440
+I'm not going to the right place...
+
+00:22:01.440 --> 00:22:07.039
+Here I was. So here `edit-map`.
+
+22:07.039 --> 22:09.760
+Well, we can probably...
+
+22:09.760 --> 22:12.159
+it may disappear or...
+
+22:12.159 --> 22:13.760
+oh, I see.
+
+22:13.760 --> 22:16.320
+Okay, so this `edit-map` actually is
+
+22:16.320 --> 22:18.559
+defined in this very file.
+
+22:18.559 --> 00:22:20.240
+It's just that it's defined later.
+
+00:22:20.240 --> 00:22:21.600
+So all we need to do
+
+00:22:21.600 --> 00:22:24.320
+is to move this definition
+
+00:22:24.320 --> 00:22:27.200
+to before its first use,
+
+22:27.200 --> 22:28.960
+since otherwise it's going to be taken
+
+22:28.960 --> 22:33.520
+as lexically-scoped, which we don't want.
+
+22:33.520 --> 22:35.360
+And while I'm here, I see this `copy-keymap`.
+
+22:35.360 --> 22:38.400
+I don't like `copy-keymap`,
+
+22:38.400 --> 22:40.960
+so I'm going to change this
+
+22:40.960 --> 22:44.080
+to a normal keymap,
+
+22:44.080 --> 22:46.159
+and then I'm just going to use
+
+22:46.159 --> 22:50.080
+`set-keymap-parent` instead of `copy-keymap`
+
+22:50.080 --> 00:22:51.600
+to get basically the same result,
+
+00:22:51.600 --> 00:22:55.280
+but without having copied anything.
+
+22:55.280 --> 22:57.760
+And this one will disappear...
+
+22:57.760 --> 23:00.240
+this one as well-- or should hopefully,
+
+23:00.240 --> 23:03.360
+thanks to the `require`.
+
+23:03.360 --> 23:09.840
+Here we have a `hash` missing,
+
+23:09.840 --> 00:23:11.840
+and we have some functions
+
+00:23:11.840 --> 00:23:14.000
+which are unknown,
+
+23:14.000 --> 00:23:14.666
+so let's see...
+
+00:23:14.666 --> 00:23:18.240
+Where is this function defined?
+
+23:18.240 --> 23:21.679
+Nowhere. Huh, wonderful, okay.
+
+23:21.679 --> 00:23:25.200
+So we'll just leave it like it is,
+
+00:23:25.200 --> 00:23:27.120
+and that's going to be
+
+00:23:27.120 --> 00:23:31.360
+for the author of the package to fix.
+
+23:31.360 --> 23:37.120
+How about this one?
+
+23:37.120 --> 23:40.240
+Oh, okay, so it's defined in `enwc.el`
+
+23:40.240 --> 00:23:41.679
+so presumably,
+
+00:23:41.679 --> 00:23:44.559
+this is going to disappear as well.
+
+23:50.159 --> 23:51.030
+One more...
+
+23:56.159 --> 23:58.640
+Okay, so this one
+
+23:58.640 --> 23:59.919
+is just like the previous one.
+
+23:59.919 --> 24:04.000
+We're going to leave it at that.
+
+24:04.000 --> 24:06.720
+And this is it! Huh, wonderful.
+
+24:06.720 --> 24:10.000
+So let's recompile.
+
+24:16.080 --> 24:23.520
+Oh, we have a warning for `fin`.
+
+24:25.679 --> 00:24:28.640
+This variable seems not to be used
+
+00:24:28.640 --> 00:24:32.000
+anywhere in the file, so we're just
+
+24:32.000 --> 00:24:33.440
+going to remove it.
+
+00:24:33.440 --> 00:24:34.880
+I leave it there just in case
+
+00:24:34.880 --> 00:24:36.000
+someone needs later on
+
+00:24:36.000 --> 00:24:37.679
+to look for a `fin` variable
+
+00:24:37.679 --> 00:24:39.760
+to see where it used to be.
+
+24:39.760 --> 24:41.600
+Again, you know, maybe it's actually used...
+
+24:41.600 --> 24:43.519
+yeah, dynamic scoping somehow,
+
+24:43.519 --> 24:46.159
+but given the short name,
+
+24:46.159 --> 24:48.960
+I presume this is not the case.
+
+24:48.960 --> 24:51.200
+Here, oh, that's the code removed
+
+24:51.200 --> 24:52.559
+that had a hash missing.
+
+24:52.559 --> 24:54.159
+That's the one that's not defined.
+
+24:54.159 --> 24:56.799
+This one is not defined,
+
+24:56.799 --> 24:58.000
+and this is it.
+
+24:58.000 --> 25:03.039
+Let's make a last recompilation
+
+25:03.039 --> 25:06.080
+to see if we missed yet something else.
+
+25:06.080 --> 25:07.919
+Nope, and that's it, okay.
+
+25:07.919 --> 25:11.200
+Well, here we go; we're done.
+
+25:11.200 --> 00:25:14.240
+Okay so this was it.
+
+00:25:14.240 --> 00:25:15.440
+You've seen, I think,
+
+25:15.440 --> 25:18.000
+pretty much examples of all of those,
+
+25:18.000 --> 25:20.159
+and I hope you enjoyed it.
+
+25:20.960 --> 25:22.580
+Lessons to take home:
+
+25:22.580 --> 25:23.919
+use the byte compiler.
+
+25:23.919 --> 25:26.000
+You can also use `flymake-mode` instead.
+
+25:26.000 --> 00:25:31.600
+I recommend enabling it as much as you can,
+
+25:31.600 --> 25:33.520
+and head the warnings.
+
+25:33.520 --> 25:35.440
+Follow the warnings. Try to fix them.
+
+25:35.440 --> 25:37.200
+If you can fix all of the warnings,
+
+25:37.200 --> 00:25:38.080
+it's always much better,
+
+00:25:38.080 --> 00:25:39.200
+because then the new warnings
+
+00:25:39.200 --> 00:25:40.960
+really show up.
+
+25:40.960 --> 25:42.880
+And once you've done it, it's really
+
+25:42.880 --> 00:25:44.559
+kind of-- because there's always
+
+00:25:44.559 --> 00:25:46.799
+new things coming up.
+
+25:46.799 --> 25:48.799
+And I think this is it.
+
+25:48.799 --> 00:25:50.720
+I hope you liked it, and thank you
+
+00:25:50.720 --> 00:25:56.000
+for attending this presentation. Bye.
+
+00:25:56.000 --> 00:25:57.000
+[captions by Hannah Miller]
diff --git a/2021/captions/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main.vtt b/2021/captions/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main.vtt
new file mode 100644
index 00000000..c47bf7d2
--- /dev/null
+++ b/2021/captions/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main.vtt
@@ -0,0 +1,730 @@
+WEBVTT
+
+00:00.799 --> 00:00:02.734
+Hello, I'm Bastien Guerry,
+
+00:00:02.734 --> 00:00:04.701
+and I'm happy to be here.
+
+00:00:04.701 --> 00:00:07.734
+I've been the Org-mode maintainer
+
+00:00:07.734 --> 00:00:09.501
+for the last 10 years,
+
+00:00:09.501 --> 00:00:11.368
+and I would like to ask the question
+
+00:00:11.368 --> 00:00:14.034
+how to help GNU Emacs maintainers in general.
+
+00:14.400 --> 00:00:15.519
+By GNU Emacs, I mean
+
+00:00:15.519 --> 00:00:18.080
+the whole GNU Emacs ecosystem,
+
+00:00:18.080 --> 00:00:19.520
+including packages,
+
+00:00:19.520 --> 00:00:21.039
+not just the core GNU Emacs
+
+00:00:21.039 --> 00:00:24.880
+that we all love.
+
+00:00:24.880 --> 00:00:28.268
+After a decade of dealing with
+
+00:00:28.268 --> 00:00:29.368
+the Org community,
+
+00:00:29.368 --> 00:00:32.934
+my view of what a maintainer is changed.
+
+00:00:32.934 --> 00:00:35.101
+I'd like to share some ideas with you
+
+00:00:35.101 --> 00:00:37.234
+as I think they could be useful
+
+00:00:37.234 --> 00:00:39.201
+to help Emacs maintainers in general.
+
+00:00:39.201 --> 00:00:41.968
+And hopefully, these ideas also apply
+
+00:00:41.968 --> 00:00:43.601
+to other free software projects,
+
+00:00:43.601 --> 00:00:45.901
+at least those where contributors
+
+00:00:45.901 --> 00:00:47.568
+are all volunteers.
+
+00:00:47.568 --> 00:00:51.368
+First of all, what is a free software maintainer?
+
+00:00:51.368 --> 00:00:54.601
+- Obviously this is some rich dude
+
+00:00:54.601 --> 00:00:56.268
+with a lot of free time
+
+00:00:56.268 --> 00:00:58.968
+- Acting both as a supersmart hacker
+
+00:00:58.968 --> 00:01:02.401
+and a super-patient community manager
+
+00:01:02.401 --> 00:01:05.101
+- Someone who acts as the central hotline
+
+00:01:05.101 --> 00:01:06.901
+for users and contributors
+
+00:01:06.901 --> 00:01:09.568
+- Who knows how to write many emails,
+
+00:01:09.568 --> 00:01:11.468
+probably at the same time
+
+00:01:11.468 --> 00:01:14.101
+- Who does not hesitate
+
+00:01:14.101 --> 00:01:16.934
+to publicly scold annoying users
+
+00:01:16.934 --> 00:01:19.801
+- and someone narcissistic enough
+
+00:01:19.801 --> 00:01:22.668
+to seek credits for community efforts
+
+00:01:22.668 --> 00:01:26.034
+- But really looking for a job
+
+00:01:26.034 --> 00:01:27.768
+in some big IT company
+
+00:01:27.768 --> 00:01:32.234
+Right? Well... no. That was a joke.
+
+00:01:32.234 --> 00:01:34.601
+But maybe you did smile
+
+00:01:34.601 --> 00:01:36.634
+and that's probably
+
+00:01:36.634 --> 00:01:39.401
+because there is some truth to it.
+
+00:01:39.401 --> 00:01:43.834
+Why? Because our culture encourages
+
+00:01:43.834 --> 00:01:45.634
+free software users and casual contributors
+
+00:01:45.634 --> 00:01:47.868
+to think about maintainers this way.
+
+00:01:47.868 --> 00:01:51.568
+Don't we continue to use the expression
+
+00:01:51.568 --> 00:01:54.001
+"Benevolent Dictator For Life"?
+
+00:01:54.001 --> 00:01:56.434
+This is what I'd call
+
+00:01:56.434 --> 00:01:58.068
+the "Spiderman syndrome":
+
+00:01:58.068 --> 00:02:01.268
+maintenance is perceived in terms of
+
+00:02:01.268 --> 00:02:04.168
+great power and great responsibility.
+
+00:02:04.168 --> 00:02:07.268
+But I believe our culture of superheroes
+
+00:02:07.268 --> 00:02:09.101
+is not helpful here:
+
+00:02:09.101 --> 00:02:11.301
+it does not reflect the truth,
+
+00:02:11.301 --> 00:02:14.134
+it does not set the right expectations,
+
+00:02:14.134 --> 00:02:16.334
+and it prevents contributors
+
+00:02:16.334 --> 00:02:17.601
+to properly understand
+
+00:02:17.601 --> 00:02:19.601
+how to help maintainers.
+
+00:02:19.601 --> 00:02:21.334
+So let's start again.
+
+00:02:21.334 --> 00:02:24.968
+Instead of asking what a maintainer is,
+
+00:02:24.968 --> 00:02:27.068
+let me take the list of
+
+00:02:27.068 --> 00:02:30.001
+what I do as the Org maintainer.
+
+00:02:30.001 --> 00:02:31.034
+Here is my TODO-list:
+
+00:02:31.034 --> 00:02:33.934
+- First of all, I take care of
+
+00:02:33.934 --> 00:02:35.201
+the orgmode.org website.
+
+00:02:35.201 --> 00:02:37.401
+- I also take care of the
+
+00:02:37.401 --> 00:02:41.434
+org-contrib NonGNU ELPA package.
+
+00:02:41.434 --> 00:02:44.034
+- I do gardening on the
+
+00:02:44.034 --> 00:02:46.168
+community-driven documentation, Worg.
+
+00:02:46.168 --> 00:02:48.401
+- I do add contributors to Worg.
+
+00:02:48.401 --> 00:02:51.134
+- I read emails on emacs-orgmode@,
+
+00:02:51.134 --> 00:02:54.134
+emacs-devel@ and bug-gnu-emacs@.
+
+00:02:54.134 --> 00:02:56.868
+- I contribute to email moderation
+
+00:02:56.868 --> 00:02:59.801
+of the emacs-orgmode@ list
+
+00:02:59.801 --> 00:03:02.468
+with a bunch of other contributors.
+
+00:03:02.468 --> 00:03:05.134
+- I reply to private emails
+
+00:03:05.134 --> 00:03:06.834
+asking me for help about org-mode.
+
+00:03:06.834 --> 00:03:10.168
+- I coordinate with GNU Emacs maintainers
+
+00:03:10.168 --> 00:03:12.934
+and thanks to them for Emacs/Org integration.
+
+00:03:12.934 --> 00:03:16.034
+- I contribute with public emails
+
+00:03:16.034 --> 00:03:17.801
+on the Org mailing list.
+
+00:03:17.801 --> 00:03:20.501
+- I release new versions of Org-mode.
+
+00:03:20.501 --> 00:03:22.634
+- and sometimes, sometimes,
+
+00:03:22.634 --> 00:03:24.601
+I contribute with code.
+
+00:03:24.601 --> 00:03:27.168
+Do you see a pattern here?
+
+00:03:27.168 --> 00:03:30.468
+Yes. I bet the last three tasks
+
+00:03:30.468 --> 00:03:31.801
+is what most people have in mind
+
+00:03:31.801 --> 00:03:34.201
+when they think of a maintainer:
+
+00:03:34.201 --> 00:03:35.534
+it's all about hacking
+
+00:03:35.534 --> 00:03:37.734
+and being an efficient hotline.
+
+00:03:37.734 --> 00:03:39.734
+But in fact, these tasks
+
+00:03:39.734 --> 00:03:41.601
+are only a superficial part
+
+00:03:41.601 --> 00:03:43.201
+of what I do as a maintainer.
+
+00:03:43.201 --> 00:03:47.001
+Some would consider that these core tasks
+
+00:03:47.001 --> 00:03:48.501
+are the /interesting/ ones,
+
+00:03:48.501 --> 00:03:51.634
+while the others are the /boring/ ones.
+
+00:03:51.634 --> 00:03:53.901
+I don't see it that way:
+
+00:03:53.901 --> 00:03:56.534
+some tasks are about the product,
+
+00:03:56.534 --> 00:03:58.801
+others are about the project.
+
+00:03:58.801 --> 00:04:00.834
+Without a good product,
+
+00:04:00.834 --> 00:04:02.168
+there is little chance
+
+00:04:02.168 --> 00:04:03.401
+you will have a good project,
+
+00:04:03.401 --> 00:04:07.534
+but maintaining a project requires thinking
+
+00:04:07.534 --> 00:04:09.301
+in terms of infrastructure,
+
+00:04:09.301 --> 00:04:11.068
+not in terms of bugs,
+
+00:04:11.068 --> 00:04:13.334
+thinking in terms of resources
+
+00:04:13.334 --> 00:04:16.701
+that enable both users and contributors,
+
+00:04:16.701 --> 00:04:18.401
+not in terms of commits.
+
+00:04:18.401 --> 00:04:21.001
+So let me try to define again
+
+00:04:21.001 --> 00:04:23.334
+what a free software maintainer is
+
+00:04:23.334 --> 00:04:24.434
+or should be.
+
+00:04:24.434 --> 00:04:26.234
+A free software maintainer
+
+00:04:26.234 --> 00:04:28.368
+is someone who cares about
+
+00:04:28.368 --> 00:04:30.968
+enabling users and contributors
+
+00:04:30.968 --> 00:04:32.768
+so that they collectively
+
+00:04:32.768 --> 00:04:34.201
+take care of the project.
+
+00:04:34.201 --> 00:04:36.734
+See another pattern here?
+
+00:04:36.734 --> 00:04:40.301
+That's all about the /project/,
+
+00:04:40.301 --> 00:04:41.501
+versus the product.
+
+00:04:41.501 --> 00:04:43.634
+It's about /taking care of it/,
+
+00:04:43.634 --> 00:04:46.934
+versus being a direct hotline for users,
+
+00:04:46.934 --> 00:04:49.901
+caring about the project infrastructure
+
+00:04:49.901 --> 00:04:52.134
+and about empowering users
+
+00:04:52.134 --> 00:04:54.234
+with tools and incentives
+
+00:04:54.234 --> 00:04:55.268
+so that they care too.
+
+00:04:55.268 --> 00:04:58.434
+How can you help such a maintainer?
+
+00:04:58.434 --> 00:05:00.901
+By focusing on the project
+
+00:05:00.901 --> 00:05:03.901
+and becoming an enabler yourself.
+
+00:05:03.901 --> 00:05:06.934
+Let's pause and summarize:
+
+00:05:06.934 --> 00:05:08.801
+our culture wants heroes
+
+00:05:08.801 --> 00:05:12.434
+and this leads us to expect maintainers
+
+00:05:12.434 --> 00:05:15.234
+to be superhackers and superactive hotlines.
+
+00:05:15.234 --> 00:05:19.568
+This is the HOT mindset of maintenance,
+
+00:05:19.568 --> 00:05:23.368
+where the maintainers are Headmasters Of Tweaks
+
+00:05:23.368 --> 00:05:26.901
+and soon becomes the Headmaster Of Troubles.
+
+00:05:26.901 --> 00:05:29.501
+To resist this HOT mindset,
+
+00:05:29.501 --> 00:05:33.201
+I suggest to redefine maintenance as ACDC:
+
+00:05:33.201 --> 00:05:36.534
+*Asynchronous Collective Distributed Care*:
+
+00:05:36.534 --> 00:05:38.968
+- /Asynchronous/ because time management
+
+00:05:38.968 --> 00:05:40.168
+is a private matter
+
+00:05:40.168 --> 00:05:41.968
+and we are all volunteers.
+
+00:05:41.968 --> 00:05:44.168
+- /Collective/ because, well,
+
+00:05:44.168 --> 00:05:45.634
+no man is an island.
+
+00:05:45.634 --> 00:05:49.201
+- /Distributed/: because the more power
+
+00:05:49.201 --> 00:05:51.601
+to the "edges", the more resilient
+
+00:05:51.601 --> 00:05:53.534
+the system and the project is.
+
+00:05:53.534 --> 00:05:56.368
+- /Care/ because this is all about care:
+
+00:05:56.368 --> 00:05:58.501
+with each other as users
+
+00:05:58.501 --> 00:06:00.134
+or as contributors,
+
+00:06:00.134 --> 00:06:02.101
+with the project's infrastructure
+
+00:06:02.101 --> 00:06:05.301
+(servers, websites, bug trackers, etc.)
+
+00:06:05.301 --> 00:06:08.701
+and care about having a useful product.
+
+00:06:08.701 --> 00:06:13.901
+/Enabling/ users and contributors means
+
+00:06:13.901 --> 00:06:16.468
+encouraging them to take ownership,
+
+00:06:16.468 --> 00:06:19.801
+which is more than just delegating tasks.
+
+00:06:19.801 --> 00:06:22.068
+Let your users and contributors know
+
+00:06:22.068 --> 00:06:23.901
+that they need to tap into
+
+00:06:23.901 --> 00:06:26.434
+the collective attention pool with care:
+
+00:06:26.434 --> 00:06:28.801
+the more autonomous they are, the better.
+
+00:06:28.801 --> 00:06:33.801
+So, with this ACDC definition in mind,
+
+00:06:33.801 --> 00:06:37.534
+how can /you/ help Emacs maintainers?
+
+00:06:37.534 --> 00:06:41.268
+- First of all, by *becoming a maintainer
+
+00:06:41.268 --> 00:06:44.334
+for your own project*, however small.
+
+00:06:44.334 --> 00:06:47.001
+Think in terms of project (vs product).
+
+00:06:47.001 --> 00:06:49.034
+Empower users and contributors.
+
+00:06:49.034 --> 00:06:50.668
+This will help you understand
+
+00:06:50.668 --> 00:06:54.068
+how to help other maintainers.
+
+00:06:54.068 --> 00:06:56.501
+("More power to the edges!")
+
+00:06:56.501 --> 00:07:00.001
+- *Volunteer as a contributor steward
+
+00:07:00.001 --> 00:07:02.201
+for another project*: you don't need to
+
+00:07:02.201 --> 00:07:03.868
+be a supersmart hacker
+
+00:07:03.868 --> 00:07:05.634
+to help others to contribute.
+
+00:07:05.634 --> 00:07:07.701
+(For Org-mode, we are lucky to have
+
+00:07:07.701 --> 00:07:10.901
+two great contributor stewards.)
+
+00:07:10.901 --> 00:07:12.868
+- *Learn how to teach*,
+
+00:07:12.868 --> 00:07:16.468
+because pedagogical skills are invaluable.
+
+00:07:16.468 --> 00:07:18.301
+(Taking the time to explain
+
+00:07:18.301 --> 00:07:20.868
+how to write a bug report or a patch
+
+00:07:20.868 --> 00:07:23.834
+is invaluable and this is a core part
+
+00:07:23.834 --> 00:07:25.401
+of the Org culture.)
+
+00:07:25.401 --> 00:07:27.801
+- *Test and enhance the project's
+
+00:07:27.801 --> 00:07:30.001
+contribution process*. (For Org-mode,
+
+00:07:30.001 --> 00:07:33.268
+you would read and suggest contributions to
+
+00:07:33.268 --> 00:07:35.634
+the org-contribute pages on Worg.)
+
+00:07:35.634 --> 00:07:38.601
+- *Take care of the project's calls for help*.
+
+00:07:38.601 --> 00:07:40.968
+(For Org-mode, this would be this list
+
+07:40.560 --> 00:07:43.599
+that we have on updates.orgmode.org
+
+07:43.599 --> 00:07:47.234
+For Emacs, this would be =etc/TODO= file.)
+
+00:07:47.234 --> 00:07:50.834
+If the calls for help are not explicit enough,
+
+00:07:50.834 --> 00:07:52.834
+try to contribute some.
+
+00:07:52.834 --> 00:07:56.701
+- *Encourage users from outside the project
+
+00:07:56.701 --> 00:07:58.434
+to contribute to the core forum*.
+
+00:07:58.434 --> 00:08:01.434
+(For Org-mode, there are many hacks and fixes
+
+00:08:01.434 --> 00:08:03.901
+being shared on reddit and stackoverflow:
+
+00:08:03.901 --> 00:08:05.401
+and that's fine, but we we should not
+
+00:08:05.401 --> 00:08:07.401
+wait for months before having this
+
+00:08:07.401 --> 00:08:08.801
+shared on the list.)
+
+00:08:08.801 --> 00:08:11.434
+- *Let the core forum know about
+
+00:08:11.434 --> 00:08:13.701
+what happens in this outside world*
+
+00:08:13.701 --> 00:08:16.601
+by sharing important information yourself.
+
+00:08:16.601 --> 00:08:19.868
+- *Propose your help for non-code tasks*:
+
+00:08:19.868 --> 00:08:21.368
+maintain a website,
+
+00:08:21.368 --> 00:08:23.734
+enhance the (community-driven) documentation,
+
+00:08:23.734 --> 00:08:26.101
+help with bug triage, etc.
+
+00:08:26.101 --> 00:08:29.568
+- *If you expect someone else to fix your bug,
+
+00:08:29.568 --> 00:08:33.234
+try fixing someone else's bug too*:
+
+00:08:33.234 --> 00:08:36.234
+that's how you'll learn Emacs Lisp
+
+00:08:36.234 --> 00:08:37.668
+and that's how you'll concretely
+
+00:08:37.668 --> 00:08:40.501
+train your empathy, your sense of taking care.
+
+00:08:40.501 --> 00:08:42.068
+That is so critical.
+
+00:08:42.068 --> 00:08:44.101
+- *Don't expect the maintainer
+
+00:08:44.101 --> 00:08:45.168
+to be a hotline*,
+
+00:08:45.168 --> 00:08:46.801
+especially a private one.
+
+00:08:46.801 --> 00:08:49.234
+Address yourself to the community.
+
+00:08:49.234 --> 00:08:51.968
+- and last but not least,
+
+00:08:51.968 --> 00:08:53.120
+*complete this list*.
+
+00:08:53.120 --> 00:08:54.959
+I'm trying to open a conversation here,
+
+00:08:54.959 --> 00:08:57.168
+so don't be shy.
+
+00:08:57.168 --> 00:09:01.760
+That's it. Is it hard? Yes, this is hard,
+
+00:09:01.760 --> 00:09:04.640
+and that's because helping maintainers
+
+00:09:04.640 --> 00:09:07.760
+by becoming such a enabler
+
+00:09:07.760 --> 00:09:09.839
+in this ACDC mindset
+
+00:09:09.839 --> 00:09:12.080
+is not immediately rewarding,
+
+00:09:12.080 --> 00:09:15.168
+whereas fixing a bug clearly, clearly is.
+
+00:09:15.168 --> 00:09:17.701
+But if you start thinking of the project
+
+00:09:17.701 --> 00:09:19.301
+as something that enables you
+
+00:09:19.301 --> 00:09:21.440
+to do amazing things, and I believe
+
+00:09:21.440 --> 00:09:23.434
+Org is this kind of project,
+
+00:09:23.434 --> 00:09:25.034
+and if you start thinking
+
+00:09:25.034 --> 00:09:26.634
+of the maintenance as something
+
+00:09:26.634 --> 00:09:28.934
+that enables more contributions,
+
+00:09:28.934 --> 00:09:31.734
+you will see how important and rewarding
+
+00:09:31.734 --> 00:09:35.668
+it is to become such an enabler.
+
+00:09:35.668 --> 00:09:39.701
+So, definitely grateful to all enablers
+
+00:09:39.701 --> 00:09:41.401
+that we have in Org's community!
+
+00:09:41.401 --> 00:09:43.734
+And to everyone who maintains
+
+00:09:43.734 --> 00:09:45.701
+a culture of teaching and learning
+
+00:09:45.701 --> 00:09:49.068
+through polite and respectful interactions
+
+00:09:49.068 --> 00:09:50.801
+on the mailing list and elsewhere:
+
+00:09:50.801 --> 00:09:55.001
+we always need more "power to the edges".
+
+00:09:55.001 --> 00:09:57.168
+And I'm also very grateful
+
+00:09:57.168 --> 00:09:59.034
+to the EmacsConf 2021 organizers,
+
+00:09:59.034 --> 00:10:02.568
+because that's really taking care
+
+00:10:02.568 --> 00:10:03.568
+of the community! Thanks very much.
+
+00:10:03.568 --> 00:10:04.000
+[captions by sachac]
diff --git a/2021/captions/emacsconf-2021-nangulator--introducing-n-angulator--kevin-haddock--main.vtt b/2021/captions/emacsconf-2021-nangulator--introducing-n-angulator--kevin-haddock--main.vtt
new file mode 100644
index 00000000..99d8802b
--- /dev/null
+++ b/2021/captions/emacsconf-2021-nangulator--introducing-n-angulator--kevin-haddock--main.vtt
@@ -0,0 +1,673 @@
+WEBVTT
+
+00:00.240 --> 00:00:02.800
+Hello. This is Kevin Haddock
+
+00:00:02.800 --> 00:00:05.839
+to announce the introduction of N-Angulator,
+
+00:00:05.839 --> 00:00:07.759
+hereafter called NA.
+
+00:07.759 --> 00:00:10.240
+NA allows you, the user, to supply
+
+00:00:10.240 --> 00:00:11.679
+the meaning to your data
+
+00:00:11.679 --> 00:00:13.599
+in a concise, efficient way.
+
+00:00:13.599 --> 00:00:14.880
+How does it work?
+
+00:14.880 --> 00:00:16.880
+Your files are stored on your hard disk
+
+00:00:16.880 --> 00:00:18.160
+in what technically is called
+
+00:00:18.160 --> 00:00:20.640
+a hierarchical file system.
+
+00:20.640 --> 00:00:22.240
+What this means is that
+
+00:00:22.240 --> 00:00:24.560
+the root of the directory tree can be
+
+00:00:24.560 --> 00:00:27.760
+not only files, or what we call leaves,
+
+00:00:27.760 --> 00:00:30.720
+but also other folders/branches
+
+00:00:30.720 --> 00:00:33.680
+that themselves contain other files, leaves,
+
+00:00:33.680 --> 00:00:36.000
+and/or branches.
+
+00:36.000 --> 00:00:37.680
+This structure is supposed to
+
+00:00:37.680 --> 00:00:40.079
+make it easy to locate your data,
+
+00:00:40.079 --> 00:00:42.079
+but as anyone knows who has worked with this
+
+00:00:42.079 --> 00:00:43.600
+single-dimensional file system
+
+00:00:43.600 --> 00:00:45.280
+for any length of time,
+
+00:45.280 --> 00:00:46.800
+it can get quite frustrating
+
+00:00:46.800 --> 00:00:48.960
+when your file would fit equally well
+
+00:00:48.960 --> 00:00:52.079
+on more than one branch of the tree.
+
+00:52.079 --> 00:00:53.920
+What are you to do?
+
+00:53.920 --> 00:00:55.920
+Create multiple copies everywhere
+
+00:00:55.920 --> 00:00:57.840
+it might appropriately fit.
+
+00:00:57.840 --> 00:00:59.039
+What if the file was something
+
+00:00:59.039 --> 00:01:01.120
+people would occasionally modify,
+
+00:01:01.120 --> 00:01:04.879
+like a spreadsheet or a computer source file?
+
+01:04.879 --> 00:01:07.760
+You would have to hunt it down in every place
+
+00:01:07.760 --> 00:01:11.840
+and apply those changes everywhere by hand.
+
+01:11.840 --> 00:01:14.720
+Also, let's say not only did you want
+
+00:01:14.720 --> 00:01:17.040
+to put the file in multiple places,
+
+00:01:17.040 --> 00:01:18.799
+but it was also more appropriate
+
+00:01:18.799 --> 00:01:21.280
+to give it different names?
+
+01:21.280 --> 00:01:23.280
+Plus, let's say in different areas
+
+00:01:23.280 --> 00:01:25.119
+of the tree, there were files
+
+00:01:25.119 --> 00:01:26.560
+with the same name
+
+01:26.560 --> 00:01:29.280
+that had totally different content?
+
+01:29.280 --> 00:01:31.280
+Then updating all the different instances
+
+00:01:31.280 --> 00:01:32.640
+of the file you need
+
+00:01:32.640 --> 00:01:35.200
+would become more and more of a nightmare.
+
+01:35.200 --> 00:01:37.920
+In addition, wouldn't it be great
+
+00:01:37.920 --> 00:01:39.520
+if we could all speed up
+
+00:01:39.520 --> 00:01:42.479
+the actual searching for a particular file
+
+01:42.479 --> 00:01:45.680
+by selecting multiple branches in the tree
+
+00:01:45.680 --> 00:01:47.200
+and simply asking the computer
+
+00:01:47.200 --> 00:01:49.680
+to tell us which branches under those
+
+01:49.680 --> 00:01:52.560
+contain the same file and which do not?
+
+01:52.560 --> 00:01:54.000
+This would be especially great
+
+00:01:54.000 --> 00:01:56.719
+if it were instantaneous.
+
+01:56.719 --> 00:01:58.640
+Well, believe it or not, this is what NA
+
+01:58.640 --> 00:02:00.079
+brings to the table.
+
+02:00.079 --> 00:02:03.040
+In fact, this is how NA got its name.
+
+02:03.040 --> 00:02:05.040
+Your data is located by a process
+
+00:02:05.040 --> 00:02:06.960
+very similar to the triangulation
+
+00:02:06.960 --> 00:02:09.119
+used to locate radio signals,
+
+00:02:09.119 --> 00:02:10.160
+only we are not limited
+
+00:02:10.160 --> 00:02:12.000
+to just two or three angles,
+
+00:02:12.000 --> 00:02:14.720
+but instead, many dozens can be used,
+
+02:14.720 --> 00:02:16.879
+this makes NA appear to be
+
+00:02:16.879 --> 00:02:18.640
+what is known in computer lingo
+
+00:02:18.640 --> 00:02:21.760
+as an n-dimensional sparse array.
+
+02:21.760 --> 00:02:23.599
+If that sounds complex, don't worry.
+
+00:02:23.599 --> 00:02:25.280
+It will become clear when you see it
+
+00:02:25.280 --> 00:02:28.720
+in operation in a couple of minutes.
+
+02:28.720 --> 00:02:32.560
+To start out, here we see the NA main screen.
+
+02:32.560 --> 00:02:36.080
+There are two vital aspects of mastering NA.
+
+00:02:36.080 --> 00:02:37.760
+First is the actual mechanics
+
+00:02:37.760 --> 00:02:39.120
+of using the program,
+
+00:02:39.120 --> 00:02:40.480
+which should be second nature
+
+00:02:40.480 --> 00:02:41.920
+for most anyone familiar with
+
+02:41.920 --> 00:02:46.160
+either a Windows or Unix/apple file system.
+
+02:46.160 --> 00:02:48.080
+We have the same operations
+
+00:02:48.080 --> 00:02:50.400
+as one might do with Windows Explorer
+
+02:50.400 --> 00:02:52.560
+or any number of other file tools,
+
+00:02:52.560 --> 00:02:54.560
+but what we also do
+
+00:02:54.560 --> 00:02:56.080
+that generally they do not
+
+00:02:56.080 --> 00:02:58.000
+is place a leaf on a branch,
+
+00:02:58.000 --> 00:03:00.560
+then cruise around adding links to that leaf
+
+03:00.560 --> 00:03:02.720
+on a multitude of other branches,
+
+00:03:02.720 --> 00:03:05.120
+which could include creating, renaming,
+
+00:03:05.120 --> 00:03:07.360
+or restructuring more branches on the fly
+
+03:07.360 --> 00:03:10.480
+as needed. Plus, when we find ourselves
+
+00:03:10.480 --> 00:03:12.319
+hunting for that file,
+
+00:03:12.319 --> 00:03:13.840
+we can incrementally select
+
+00:03:13.840 --> 00:03:15.120
+a stack of branches
+
+00:03:15.120 --> 00:03:17.200
+while seeking what the latter branches
+
+00:03:17.200 --> 00:03:19.920
+have in common with the earlier ones,
+
+03:19.920 --> 00:03:22.720
+to make putting one's finger on exactly
+
+00:03:22.720 --> 00:03:26.239
+the item they're looking for a snap.
+
+03:26.239 --> 00:03:28.319
+Secondly, you have the actual art
+
+00:03:28.319 --> 00:03:29.680
+of organizing your data,
+
+00:03:29.680 --> 00:03:31.120
+and NA doesn't really put
+
+00:03:31.120 --> 00:03:32.640
+any limitations on this,
+
+00:03:32.640 --> 00:03:34.799
+other than the underlying limitations
+
+00:03:34.799 --> 00:03:36.560
+of the file system.
+
+03:36.560 --> 00:03:39.760
+Let's get started, shall we?
+
+03:39.760 --> 00:03:41.920
+Right-clicking the mouse button here
+
+03:41.920 --> 00:03:43.760
+will bring up what we call
+
+00:03:43.760 --> 00:03:46.000
+a branch navigation menu,
+
+00:03:46.000 --> 00:03:46.959
+because it allows you
+
+00:03:46.959 --> 00:03:48.239
+to move around the tree
+
+00:03:48.239 --> 00:03:50.159
+or commence a new angle.
+
+03:50.159 --> 00:03:52.480
+We have chosen to organize our data
+
+00:03:52.480 --> 00:03:55.519
+with a hopper to put new items in,
+
+00:03:55.519 --> 00:03:57.360
+and the initial branches representing
+
+00:03:57.360 --> 00:03:59.519
+who, what, where, why, and how.
+
+00:03:59.519 --> 00:04:01.280
+We right-click on the root
+
+00:04:01.280 --> 00:04:03.439
+and select 0hopper,
+
+04:03.439 --> 00:04:06.000
+and that branch is added to the display.
+
+04:06.000 --> 00:04:08.080
+If we middle-click on the branch,
+
+04:08.080 --> 00:04:09.360
+we get what is called
+
+00:04:09.360 --> 00:04:11.280
+the branch command menu,
+
+00:04:11.280 --> 00:04:12.959
+which gives us many options,
+
+00:04:12.959 --> 00:04:13.920
+not the least of which
+
+00:04:13.920 --> 00:04:15.920
+is to create a leaf here.
+
+04:15.920 --> 00:04:18.000
+Remember this item as we progress,
+
+04:18.000 --> 00:04:20.320
+because it will become important.
+
+04:20.320 --> 00:04:22.960
+Next we pick what we know is a leaf item,
+
+04:22.960 --> 00:04:24.720
+due to the fact that it does not have
+
+00:04:24.720 --> 00:04:30.960
+a trailing slash.
+
+04:30.960 --> 00:04:32.960
+Now, when we right-click on it,
+
+04:32.960 --> 00:04:35.040
+notice the navigation menu is limited to
+
+00:04:35.040 --> 00:04:37.040
+the two items: New Angle
+
+00:04:37.040 --> 00:04:40.960
+and the leaf name itself.
+
+04:40.960 --> 00:04:43.680
+If we want to view or edit that leaf item,
+
+00:04:43.680 --> 00:04:45.440
+we can select that item.
+
+04:45.440 --> 00:04:47.280
+Now that we have selected a leaf,
+
+00:04:47.280 --> 00:04:48.560
+let's middle-click on it
+
+00:04:48.560 --> 00:04:49.520
+to bring up what we call
+
+00:04:49.520 --> 00:04:51.600
+the leaf command menu.
+
+04:51.600 --> 00:04:54.080
+This shows us a bunch of standard options
+
+00:04:54.080 --> 00:04:56.160
+one might do in a typical file tool
+
+00:04:56.160 --> 00:04:58.320
+like Microsoft Explorer.
+
+04:58.320 --> 00:05:00.479
+Since we want to do what they cannot do,
+
+05:00.479 --> 00:05:01.680
+let's right-click the leaf
+
+00:05:01.680 --> 00:05:04.639
+and select New Angle.
+
+05:04.639 --> 00:05:06.400
+Notice that another slash has appeared
+
+00:05:06.400 --> 00:05:09.840
+below the displayed path of the leaf.
+
+05:09.840 --> 00:05:11.520
+Right-click on it, and you will see
+
+00:05:11.520 --> 00:05:14.639
+the root branch navigation menu appears again,
+
+05:14.639 --> 00:05:19.039
+but now 0hopper entry has a line
+
+00:05:19.039 --> 00:05:20.960
+both above and below it.
+
+05:20.960 --> 00:05:23.199
+Items in between these two lines
+
+00:05:23.199 --> 00:05:24.560
+are called members,
+
+00:05:24.560 --> 00:05:27.520
+and items below them are called others.
+
+05:27.520 --> 00:05:29.680
+What this is saying is that
+
+00:05:29.680 --> 00:05:32.160
+the previously selected angle,
+
+05:32.160 --> 00:05:34.160
+which can be a single leaf
+
+05:34.160 --> 00:05:35.840
+as in this instance,
+
+05:35.840 --> 00:05:37.360
+or can be all of the leaves
+
+00:05:37.360 --> 00:05:38.960
+under a particular branch
+
+00:05:38.960 --> 00:05:43.039
+chosen to navigate new angle from,
+
+05:43.039 --> 00:05:44.880
+shares content with the items
+
+00:05:44.880 --> 00:05:47.680
+under the member area of the menu,
+
+00:05:47.680 --> 00:05:50.880
+but items in the others area do not.
+
+05:50.880 --> 00:05:53.600
+Since the first angle is 0hopper,
+
+05:53.600 --> 00:05:56.800
+of course it shares content with itself,
+
+05:56.800 --> 00:05:59.199
+and so it appears in members.
+
+05:59.199 --> 00:06:01.199
+Now let's click the middle button
+
+00:06:01.199 --> 00:06:02.960
+on the root branch, and see what
+
+00:06:02.960 --> 00:06:07.360
+the branch command menu has to say.
+
+06:07.360 --> 00:06:09.280
+Notice that the entry that used to say
+
+06:09.280 --> 00:06:13.120
+Create a New Leaf now says Add a Link.
+
+06:13.120 --> 00:06:15.039
+This is because we have already selected
+
+06:15.039 --> 00:06:17.360
+a leaf, and now we want to add links
+
+00:06:17.360 --> 00:06:20.479
+to it rather than create a new one.
+
+06:20.479 --> 00:06:21.840
+If you go back to the root
+
+00:06:21.840 --> 00:06:24.319
+and reselect 0hopper,
+
+06:24.319 --> 00:06:29.039
+that option will revert back again.
+
+06:29.039 --> 00:06:40.880
+So let's add a link under person.
+
+06:40.880 --> 00:06:42.720
+We right-click the root,
+
+00:06:42.720 --> 00:06:46.720
+select person, and let's add a link.
+
+06:46.720 --> 00:06:50.560
+Notice the bottom area (called the minibuffer)
+
+00:06:50.560 --> 00:06:53.360
+gives us the proposed name of the link,
+
+06:53.360 --> 00:06:55.680
+and we choose to accept it by hitting enter,
+
+00:06:55.680 --> 00:07:09.759
+or edit it to taste first.
+
+07:09.759 --> 00:07:10.960
+Now let's go back up to
+
+00:07:10.960 --> 00:07:13.120
+the end of the prior angle,
+
+07:13.120 --> 00:07:15.360
+select New Angle again,
+
+07:15.360 --> 00:07:18.319
+and then click the resultant /,
+
+00:07:18.319 --> 00:07:20.240
+and see what are members
+
+00:07:20.240 --> 00:07:21.840
+and what are others.
+
+07:21.840 --> 00:07:24.319
+Notice that the 0hopper and person
+
+07:24.319 --> 00:07:25.759
+are members.
+
+07:25.759 --> 00:07:28.319
+NA knows you added content to the person,
+
+00:07:28.319 --> 00:07:32.160
+so it moves to members.
+
+07:32.160 --> 00:07:33.599
+Now let's add some more links
+
+00:07:33.599 --> 00:07:35.360
+and perhaps a few subdirectories
+
+00:07:35.360 --> 00:08:06.960
+for this item.
+
+08:06.960 --> 00:08:08.960
+Notice how we can even eliminate
+
+00:08:08.960 --> 00:08:11.039
+the file name extension.
+
+08:11.039 --> 00:08:13.680
+It will still know how to display the item
+
+00:08:13.680 --> 00:08:15.440
+as it actually analyzes the file
+
+00:08:15.440 --> 00:08:17.120
+to determine its type.
+
+08:17.120 --> 00:08:19.120
+This greatly cleans up your metadata
+
+00:08:19.120 --> 00:08:40.719
+and makes it more human.
+
+08:40.719 --> 00:08:41.839
+Now let's pick a branch
+
+00:08:41.839 --> 00:08:43.519
+from one of the menus.
+
+08:43.519 --> 00:08:44.880
+For instance, let's look and see
+
+00:08:44.880 --> 00:08:54.880
+where any events broadcast were done from.
+
+08:54.880 --> 00:09:06.640
+We select event, broadcast, then New Angle,
+
+09:06.640 --> 00:09:09.600
+and we can see California is in members.
+
+09:09.600 --> 00:09:11.600
+Now we can also do New Angle
+
+00:09:11.600 --> 00:09:13.920
+and select person,
+
+09:13.920 --> 00:09:16.160
+and we can see who did them.
+
+09:16.160 --> 00:09:18.720
+Another thing we can do is pick a leaf
+
+09:18.720 --> 00:09:19.920
+and quickly display
+
+00:09:19.920 --> 00:09:21.920
+all angles or links for it,
+
+00:09:21.920 --> 00:09:24.160
+or if we are willing to wait a little longer,
+
+00:09:24.160 --> 00:09:26.720
+have NA construct all the display items
+
+00:09:26.720 --> 00:09:28.320
+with Edit All Angles,
+
+00:09:28.320 --> 00:09:30.160
+so we can manipulate them
+
+00:09:30.160 --> 00:09:31.440
+just as if we had entered
+
+00:09:31.440 --> 00:09:44.320
+or selected them by hand.
+
+09:44.320 --> 00:09:46.080
+There are many more tools in NA
+
+00:09:46.080 --> 00:09:47.440
+to handle sets of leaves
+
+00:09:47.440 --> 00:09:50.320
+such as scanned pages of a book,
+
+09:50.320 --> 00:09:53.040
+promoting /, demoting nodes,
+
+09:53.040 --> 00:09:54.560
+and so forth.
+
+09:54.560 --> 00:09:55.560
+Thanks for watching.
+
+00:09:55.560 --> 00:09:58.040
+[captions by sachac]
diff --git a/2021/captions/emacsconf-2021-pattern--edit--main.vtt b/2021/captions/emacsconf-2021-pattern--edit--main.vtt
new file mode 100644
index 00000000..ecff1823
--- /dev/null
+++ b/2021/captions/emacsconf-2021-pattern--edit--main.vtt
@@ -0,0 +1,13 @@
+WEBVTT
+
+00:00.000 --> 06:13.400
+#+START: 00:00:00.000
+#+END: 00:06:13.400
+#+VIDEO_SUBTITLES: 1
+[[file:emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz.webm]]
+
+06:55.120 --> 23:43.480
+#+START: 00:06:55.120
+#+END: 00:23:43.480
+#+VIDEO_SUBTITLES: 1
+[[file:emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz.webm]]
diff --git a/2021/captions/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla--main.vtt b/2021/captions/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla--main.vtt
new file mode 100644
index 00000000..0a977036
--- /dev/null
+++ b/2021/captions/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla--main.vtt
@@ -0,0 +1,768 @@
+WEBVTT
+
+00:00.000 --> 00:01.599
+Hello, my name is Gabriele,
+
+00:01.599 --> 00:03.439
+and today I'm going to tell you about Telega
+
+00:03.439 --> 00:05.600
+and the Emacs community on Telegram.
+
+00:05.600 --> 00:08.400
+I'm not affiliated with Telegram or Telega,
+
+00:08.400 --> 00:10.719
+and opinions are my own in general.
+
+00:10.719 --> 00:14.160
+I'm going to give you my personal spin about these topics.
+
+00:14.160 --> 00:16.160
+The plan for the talk is the following.
+
+00:16.160 --> 00:18.800
+First, I'm going to talk about what is Telegram.
+
+00:18.800 --> 00:19.840
+Next, I'm going to tell you
+
+00:19.840 --> 00:21.840
+about the Emacs community on Telegram.
+
+00:21.840 --> 00:24.720
+And finally, I'm going to discuss telega.el,
+
+00:24.720 --> 00:26.560
+an Emacs package for Telegram.
+
+00:26.560 --> 00:29.359
+In all of these, I'm now going to dive into details.
+
+00:29.359 --> 00:30.880
+My goal here is to give you
+
+00:30.880 --> 00:33.120
+some exposure about these topics.
+
+00:33.120 --> 00:35.840
+You can find out more online, if you want.
+
+00:35.840 --> 00:38.960
+Let's get started with what is
+Telegram.
+
+00:38.960 --> 00:41.100
+Telegram is a cloud-based
+
+00:41.100 --> 00:42.879
+instant messaging platform.
+
+00:42.879 --> 00:44.079
+It's a popular one.
+
+00:44.079 --> 00:46.559
+It has more than half a billion users.
+
+00:46.559 --> 00:47.840
+I think one of the reasons
+
+00:47.840 --> 00:49.600
+why it's so popular, it's because
+
+00:49.600 --> 00:51.360
+it's really rich in features
+
+00:51.360 --> 00:52.960
+while being user friendly.
+
+00:52.960 --> 00:54.640
+Hence, in some regions,
+
+00:54.640 --> 00:56.960
+Telegram has good market penetration.
+
+00:56.960 --> 00:59.039
+And of course, because of network effects,
+
+00:59.039 --> 01:01.120
+this brings even more users.
+
+01:01.120 --> 01:02.239
+The details of the features
+
+01:02.239 --> 01:03.680
+is not particularly important.
+
+01:03.680 --> 01:04.879
+What I want to emphasize, though,
+
+01:04.879 --> 01:08.400
+is that while Telegram is mostly text-based,
+
+01:08.400 --> 01:12.000
+there's also support for audio/video calls and notes,
+
+01:12.000 --> 01:13.600
+and there's also a lot of features
+
+01:13.600 --> 01:15.119
+which typically you find
+
+01:15.119 --> 01:17.360
+in other instant messaging platforms:
+
+01:17.360 --> 01:18.479
+you can chat with yourself,
+
+01:18.479 --> 01:19.360
+you can make polls,
+
+01:19.360 --> 01:20.159
+you can make quizzes,
+
+01:20.159 --> 01:21.280
+you can schedule messages,
+
+01:21.280 --> 01:23.280
+you can send attachments of any kind,
+
+01:23.280 --> 01:25.759
+even big ones, and you can send stickers.
+
+01:25.759 --> 01:27.759
+Telegram, overall, is quite customizable,
+
+01:27.759 --> 01:30.560
+and I would say that the platform is, overall, hackable.
+
+01:30.560 --> 01:32.799
+You can expand it with bots
+
+01:32.799 --> 01:35.280
+and the clients are open source.
+
+01:35.280 --> 01:37.280
+In all of this, we shouldn't forget, though,
+
+01:37.280 --> 01:38.448
+the Telegram is centralized
+
+01:38.448 --> 01:39.840
+and it is not free software.
+
+01:39.840 --> 01:42.720
+Nonetheless, it's still used by a number of people,
+
+01:42.720 --> 01:45.200
+and people use Telegram for different reasons.
+
+01:45.200 --> 01:47.200
+For example, some people use it to stay in touch
+
+01:47.200 --> 01:48.399
+with friends and families.
+
+01:48.399 --> 01:50.560
+For this, Telegram offers private chats
+
+01:50.560 --> 01:53.600
+or group chats with a restricted number of people.
+
+01:53.600 --> 01:55.040
+A lot of people use it
+
+01:55.040 --> 01:57.600
+for engaging in online communities.
+
+01:57.600 --> 01:59.439
+For this, Telegram has super groups,
+
+01:59.439 --> 02:00.719
+which are groups with up to
+
+02:00.719 --> 02:02.159
+hundreds of thousands of users,
+
+02:02.159 --> 02:03.360
+and has also channels,
+
+02:03.360 --> 02:07.119
+which are one-to-many ways of communicating,
+
+02:07.119 --> 02:09.280
+so these are ideally suited for,
+
+02:09.280 --> 02:10.959
+for example, following news,
+
+02:10.959 --> 02:12.167
+all sorts of news.
+
+02:12.167 --> 02:13.680
+Telegram also has bots
+
+02:13.680 --> 02:15.840
+which can be useful by themselves.
+
+02:15.840 --> 02:17.040
+They provide value.
+
+02:17.040 --> 02:18.400
+And the chat with oneself
+
+02:18.400 --> 02:20.400
+can be used for sending links,
+
+02:20.400 --> 02:23.440
+making notes, or sending reminders.
+
+02:23.440 --> 02:24.959
+So overall, there's multiple ways
+
+02:24.959 --> 02:26.560
+in which you can use Telegram.
+
+02:26.560 --> 02:28.239
+When it comes to instant messaging,
+
+02:28.239 --> 02:30.000
+many people call Telegram home.
+
+02:30.000 --> 02:31.840
+It shouldn't come as a surprise, then,
+
+02:31.840 --> 02:34.480
+that Emacs users want to meet
+
+02:34.480 --> 02:35.680
+on Telegram as well.
+
+02:35.680 --> 02:38.480
+And indeed, there's an Emacs community on Telegram.
+
+02:38.480 --> 02:41.519
+Here I'm listing a few super groups
+about Emacs.
+
+02:41.519 --> 02:43.040
+There are language groups,
+
+02:43.040 --> 02:45.599
+so there's Emacs English, Emacs Russian,
+
+02:45.599 --> 02:48.800
+Emacs Spanish, Emacs Mandarin, Portuguese...
+
+02:48.800 --> 02:51.440
+There are groups which are specific to starter packs.
+
+02:51.440 --> 02:53.040
+For example, there are Doom Emacs,
+
+02:53.040 --> 02:54.879
+Spacemacs, and there are groups
+
+02:54.879 --> 02:57.280
+which are specific to packages like telega
+
+02:57.280 --> 02:58.720
+which I'm going to discuss later.
+
+02:58.720 --> 03:00.159
+These are what you would expect
+
+03:00.159 --> 03:02.800
+from traditional internet chat rooms.
+
+03:02.800 --> 03:04.319
+So they're used for shared links,
+
+03:04.319 --> 03:06.959
+they're used for discussing, troubleshooting,
+
+03:06.959 --> 03:09.120
+giving each other recommendations...
+
+03:09.120 --> 03:10.879
+I think there are healthy communities
+
+03:10.879 --> 03:12.239
+with typically a hundred
+
+03:12.239 --> 03:13.519
+to a thousand members.
+
+03:13.519 --> 03:15.280
+An example of an initiative that's put forth
+
+03:15.280 --> 03:16.879
+by the Emacs community on Telegram
+
+03:16.879 --> 03:18.720
+is @emacs_stories. @emacs_stories
+
+03:18.720 --> 03:21.680
+collects links and messages and pictures
+
+03:21.680 --> 03:24.080
+that can showcase what Emacs can do.
+
+03:24.080 --> 03:25.680
+One of the goals here is
+
+03:25.680 --> 03:28.239
+to show people that are new to emacs
+
+03:28.239 --> 03:29.120
+what you can achieve
+
+03:29.120 --> 03:31.200
+if you spend time with your editor.
+
+03:31.200 --> 03:32.480
+And here, what I'm showing you
+
+03:32.480 --> 03:34.159
+is a screenshot from Telega.
+
+03:34.159 --> 03:36.080
+So let's move on to the final topic
+
+03:36.080 --> 03:37.040
+of this discussion,
+
+03:37.040 --> 03:39.200
+which is telega.el.
+
+03:39.200 --> 03:41.440
+Telega is a terrific piece of software.
+
+03:41.440 --> 03:45.280
+Telega is a interface to telegram within Emacs.
+
+03:45.280 --> 03:46.959
+It's developed by @zevlg,
+
+03:46.959 --> 03:49.680
+which is a long-time Emacs hacker,
+
+03:49.680 --> 03:51.280
+and it's very actively developed.
+
+03:51.280 --> 03:54.000
+Telegram itself is under active development,
+
+03:54.000 --> 03:55.840
+and telega has to implement
+
+03:55.840 --> 03:57.200
+all these new features
+
+03:57.200 --> 03:58.720
+that Telegram implements.
+
+03:58.720 --> 04:00.400
+Indeed, Telega implements
+
+04:00.400 --> 04:01.360
+almost all the features
+
+04:01.360 --> 04:02.319
+available in Telegram,
+
+04:02.319 --> 04:04.159
+even things like live location,
+
+04:04.159 --> 04:05.439
+except for audio/video calls
+
+04:05.439 --> 04:07.040
+but these are work in progress.
+
+04:07.040 --> 04:08.000
+Just to give you an idea
+
+04:08.000 --> 04:09.040
+of the size of this effort,
+
+04:09.040 --> 04:09.680
+we're talking about
+
+04:09.680 --> 04:11.280
+30,000 lines of code,
+
+04:11.280 --> 04:12.720
+which doesn't tell you much,
+
+04:12.720 --> 04:14.080
+but maybe you can get a sense
+
+04:14.080 --> 04:16.000
+that this is a significant project.
+
+04:16.000 --> 04:18.400
+In fact, I think Telega is a really remarkable
+
+04:18.400 --> 04:19.199
+piece of software.
+
+04:19.199 --> 04:20.639
+Not only it implements all the features
+
+04:20.639 --> 04:21.680
+available in Telegram,
+
+04:21.680 --> 04:22.960
+but implements new ones,
+
+04:22.960 --> 04:25.120
+which are only available to Emacs users.
+
+04:25.120 --> 04:26.800
+Here I'm blinking the documentation
+
+04:26.800 --> 04:28.560
+for you to read if you're interested.
+
+04:28.560 --> 04:29.759
+What I want to mention, though,
+
+04:29.759 --> 04:31.360
+is that Telega is available on MELPA,
+
+04:31.360 --> 04:34.160
+but it requires an external library, TDlib.
+
+04:34.160 --> 04:35.759
+Most distributions do not pack
+
+04:35.759 --> 04:37.360
+a recent version of TDlib.
+
+04:37.360 --> 04:39.600
+Such you have to compile yourself.
+
+04:39.600 --> 04:41.280
+if you don't want to compile TDlib,
+
+04:41.280 --> 04:43.120
+you can use the officially supported
+
+04:43.120 --> 04:44.560
+Dockerfile or guix file
+
+04:44.560 --> 04:46.080
+so that you can get everything
+
+04:46.080 --> 04:48.000
+without too much worry.
+
+04:48.000 --> 04:50.720
+Now let me tell you more about Telegram.
+
+04:50.720 --> 04:52.080
+Of course, the best way is to just
+
+04:52.080 --> 04:53.520
+experiment with it yourself.
+
+04:53.520 --> 04:54.800
+And here I just want to give you
+
+04:54.800 --> 04:56.720
+a glimpse of how Telega works.
+
+04:56.720 --> 04:57.840
+When you start Telega,
+
+04:57.840 --> 05:00.000
+what you see is a root buffer.
+
+05:00.000 --> 05:01.280
+The root buffer is essentially
+
+05:01.280 --> 05:02.960
+the list of all the chats that you have,
+
+05:02.960 --> 05:05.199
+and, by itself, is a really powerful tool.
+
+05:05.199 --> 05:06.639
+You can use it for sorting
+
+05:06.639 --> 05:07.680
+and filtering your chats,
+
+05:07.680 --> 05:10.639
+or you can create groups which are thematic.
+
+05:10.639 --> 05:12.720
+There's sophisticated search functions.
+
+05:12.720 --> 05:14.240
+For example, if you want to search only
+
+05:14.240 --> 05:16.800
+for specific type of media,
+
+05:16.800 --> 05:18.240
+you can start new chats,
+
+05:18.240 --> 05:19.680
+you can get info about the chats,
+
+05:19.680 --> 05:22.479
+and you can even change Telegram settings
+
+05:22.479 --> 05:24.720
+which are applied across the board.
+
+05:24.720 --> 05:26.479
+Here I'm showing you an example
+
+05:26.479 --> 05:27.520
+of what it looks like.
+
+05:27.520 --> 05:30.720
+As you see, we're enjoying the support for emoji
+
+05:30.720 --> 05:33.039
+that Emacs has been improving upon
+
+05:33.039 --> 05:34.320
+over the past years.
+
+05:34.320 --> 05:36.400
+Once you select one of these charts,
+
+05:36.400 --> 05:38.880
+you're brought to the chat buffer.
+
+05:38.880 --> 05:40.400
+Here I'm showing an example of
+
+05:40.400 --> 05:42.320
+what a chat buffer looks like.
+
+05:42.320 --> 05:43.360
+So this is a screenshot
+
+05:43.360 --> 05:45.520
+from the Emacs English group
+
+05:45.520 --> 05:47.840
+where people were discussing about
+
+05:47.840 --> 05:49.039
+compiling Emacs.
+
+05:49.039 --> 05:52.000
+As you can see, we see the conversation.
+
+05:52.000 --> 05:53.280
+We see the avatars.
+
+05:53.280 --> 05:54.639
+We see that there's a thread.
+
+05:54.639 --> 05:55.440
+We also see that
+
+05:55.440 --> 05:57.360
+I'm going to send a message,
+
+05:57.360 --> 05:58.240
+message with emoji,
+
+05:58.240 --> 05:59.440
+a message with formatting,
+
+05:59.440 --> 06:01.120
+and I'm attaching an object.
+
+06:01.120 --> 06:03.680
+I can format my messages
+
+06:03.680 --> 06:05.520
+using Markdown or Org Mode
+
+06:05.520 --> 06:06.720
+or whatever I prefer
+
+06:06.720 --> 06:09.199
+and I can attach any kind of attachment
+
+06:09.199 --> 06:10.560
+I like. For example...
+
+06:10.560 --> 06:11.520
+What I can also do is,
+
+06:11.520 --> 06:13.120
+if I'm editing a buffer,
+
+06:13.120 --> 06:15.680
+I can send that buffer through Telega,
+
+06:15.680 --> 06:17.199
+which I find quite useful
+
+06:17.199 --> 06:18.720
+especially when I'm sending code.
+
+06:18.720 --> 06:20.240
+And again, just to show you that
+
+06:20.240 --> 06:22.319
+Telegram is not just text messages
+
+06:22.319 --> 06:25.199
+and Telega supports all the features in Telegram,
+
+06:25.199 --> 06:27.199
+here at the bottom, I'm showing
+
+06:27.199 --> 06:29.759
+a voice note being played through Emacs,
+
+06:29.759 --> 06:31.919
+and as you see, there are some buttons
+
+06:31.919 --> 06:33.199
+which are functional.
+
+06:33.199 --> 06:36.240
+If I hit the two times button,
+
+06:36.240 --> 06:38.160
+the playback speed will be twice,
+
+06:38.160 --> 06:39.600
+which is really neat.
+
+06:39.600 --> 06:40.800
+Telega and Emacs can even
+
+06:40.800 --> 06:43.039
+reproduce videos or gifs,
+
+06:43.039 --> 06:45.280
+at least for a recent version of Emacs.
+
+06:45.280 --> 06:47.520
+Finally, I want to emphasize that Telega
+
+06:47.520 --> 06:49.280
+integrates really well with Emacs.
+
+06:49.280 --> 06:51.039
+For example, we are showing you
+
+06:51.039 --> 06:54.319
+how you can use a transient interface
+
+06:54.319 --> 06:56.720
+to Telega, or on the other side,
+
+06:56.720 --> 06:59.280
+I'm showing you how Telega integrates
+
+06:59.280 --> 07:00.080
+with dashboard,
+
+07:00.080 --> 07:01.440
+so that we have recent chats
+
+07:01.440 --> 07:03.120
+and we have the Emacs stories.
+
+07:03.120 --> 07:03.840
+Because, you know,
+
+07:03.840 --> 07:05.759
+who doesn't like Emacs with stories.
+
+07:05.759 --> 07:06.880
+On top, on the other hand,
+
+07:06.880 --> 07:08.880
+I'm showing you that we can have
+
+07:08.880 --> 07:09.919
+syntax highlighting,
+
+07:09.919 --> 07:11.759
+which is something that Telegram by itself
+
+07:11.759 --> 07:14.240
+doesn't have, this Emacs-only feature,
+
+07:14.240 --> 07:15.919
+and we can edit this
+
+07:15.919 --> 07:17.599
+in the same way we edit
+
+07:17.599 --> 07:19.759
+Org Mode source blocks,
+
+07:19.759 --> 07:20.880
+so we can edit this
+
+07:20.880 --> 07:22.800
+with the minor mode for,
+
+07:22.800 --> 07:24.080
+in this case, Emacs Lisp.
+
+07:24.080 --> 07:26.240
+So, to conclude, I wanted to show you
+
+07:26.240 --> 07:27.759
+that the Emacs community
+
+07:27.759 --> 07:29.120
+also meets on Telegram,
+
+07:29.120 --> 07:31.360
+and we're an active and healthy community,
+
+07:31.360 --> 07:32.880
+and I want to present Telega
+
+07:32.880 --> 07:35.759
+as a really amazing piece of software,
+
+07:35.759 --> 07:37.919
+one of the best clients available for
+
+07:37.919 --> 07:39.599
+Telegram with Emacs.
+
+07:39.599 --> 07:41.680
+Even if you don't use Telegram,
+
+07:41.680 --> 07:43.599
+I think you should have a look at Telega
+
+07:43.599 --> 07:46.080
+just to appreciate how amazing
+
+07:46.080 --> 07:47.280
+a piece of software it is.
+
+07:47.280 --> 07:49.680
+And with this, I thank you for your attention,
+
+07:49.680 --> 07:50.960
+and if you like Telega,
+
+07:50.960 --> 07:52.720
+please consider donating
+
+07:52.720 --> 07:54.800
+to support the development of the package.
+
+07:54.800 --> 07:57.599
+Thanks.
diff --git a/2021/captions/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla-and-evgeny-zajcev--main.vtt b/2021/captions/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla-and-evgeny-zajcev--main.vtt
new file mode 100644
index 00000000..87161e3d
--- /dev/null
+++ b/2021/captions/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla-and-evgeny-zajcev--main.vtt
@@ -0,0 +1,769 @@
+WEBVTT
+
+00:00.000 --> 00:01.599
+Hello, my name is Gabriele,
+
+00:01.599 --> 00:03.439
+and today I'm going to tell you about Telega
+
+00:03.439 --> 00:05.600
+and the Emacs community on Telegram.
+
+00:05.600 --> 00:08.400
+I'm not affiliated with Telegram or Telega,
+
+00:08.400 --> 00:10.719
+and opinions are my own in general.
+
+00:10.719 --> 00:14.160
+I'm going to give you my personal spin about these topics.
+
+00:14.160 --> 00:16.160
+The plan for the talk is the following.
+
+00:16.160 --> 00:18.800
+First, I'm going to talk about what is Telegram.
+
+00:18.800 --> 00:19.840
+Next, I'm going to tell you
+
+00:19.840 --> 00:21.840
+about the Emacs community on Telegram.
+
+00:21.840 --> 00:24.720
+And finally, I'm going to discuss telega.el,
+
+00:24.720 --> 00:26.560
+an Emacs package for Telegram.
+
+00:26.560 --> 00:29.359
+In all of these, I'm now going to dive into details.
+
+00:29.359 --> 00:30.880
+My goal here is to give you
+
+00:30.880 --> 00:33.120
+some exposure about these topics.
+
+00:33.120 --> 00:35.840
+You can find out more online, if you want.
+
+00:35.840 --> 00:38.960
+Let's get started with what is
+Telegram.
+
+00:38.960 --> 00:41.100
+Telegram is a cloud-based
+
+00:41.100 --> 00:42.879
+instant messaging platform.
+
+00:42.879 --> 00:44.079
+It's a popular one.
+
+00:44.079 --> 00:46.559
+It has more than half a billion users.
+
+00:46.559 --> 00:47.840
+I think one of the reasons
+
+00:47.840 --> 00:49.600
+why it's so popular, it's because
+
+00:49.600 --> 00:51.360
+it's really rich in features
+
+00:51.360 --> 00:52.960
+while being user friendly.
+
+00:52.960 --> 00:54.640
+Hence, in some regions,
+
+00:54.640 --> 00:56.960
+Telegram has good market penetration.
+
+00:56.960 --> 00:59.039
+And of course, because of network effects,
+
+00:59.039 --> 01:01.120
+this brings even more users.
+
+01:01.120 --> 01:02.239
+The details of the features
+
+01:02.239 --> 01:03.680
+is not particularly important.
+
+01:03.680 --> 01:04.879
+What i want to emphasize, though,
+
+01:04.879 --> 01:08.400
+is that while telegram is mostly text-based
+
+01:08.400 --> 01:12.000
+there's also support for audio/video calls and notes,
+
+01:12.000 --> 01:13.600
+and there's also a lot of features
+
+01:13.600 --> 01:15.119
+which typically you find
+
+01:15.119 --> 01:17.360
+in other instant messaging platforms:
+
+01:17.360 --> 01:18.479
+you can chat with yourself,
+
+01:18.479 --> 01:19.360
+you can make polls,
+
+01:19.360 --> 01:20.159
+you can make quizzes,
+
+01:20.159 --> 01:21.280
+you can schedule messages,
+
+01:21.280 --> 01:23.280
+you can send attachments of any kind,
+
+01:23.280 --> 01:25.759
+even big ones, and you can send stickers.
+
+01:25.759 --> 01:27.759
+Telegram, overall, is quite customizable,
+
+01:27.759 --> 01:30.560
+and I would say that the platform is, overall, hackable.
+
+01:30.560 --> 01:32.799
+You can expand it with bots
+
+01:32.799 --> 01:35.280
+and the clients are open source.
+
+01:35.280 --> 01:37.280
+In all of this, we shouldn't forget, though,
+
+01:37.280 --> 01:38.448
+the Telegram is centralized
+
+01:38.448 --> 01:39.840
+and it is not free software.
+
+01:39.840 --> 01:42.720
+Nonetheless, it's still used by a number of people,
+
+01:42.720 --> 01:45.200
+and people use telegram for different reasons.
+
+01:45.200 --> 01:47.200
+For example, some people use it to stay in touch
+
+01:47.200 --> 01:48.399
+with friends and families.
+
+01:48.399 --> 01:50.560
+For this, Telegram offers private chats
+
+01:50.560 --> 01:53.600
+or group chats with a restricted number of people.
+
+01:53.600 --> 01:55.040
+A lot of people use it
+
+01:55.040 --> 01:57.600
+for engaging in online communities.
+
+01:57.600 --> 01:59.439
+For this, Telegram has super groups,
+
+01:59.439 --> 02:00.719
+which are groups with up to
+
+02:00.719 --> 02:02.159
+hundreds of thousands of users,
+
+02:02.159 --> 02:03.360
+and has also channels,
+
+02:03.360 --> 02:07.119
+which are one-to-many ways of communicating,
+
+02:07.119 --> 02:09.280
+so these are ideally suited for,
+
+02:09.280 --> 02:10.959
+for example, following news,
+
+02:10.959 --> 02:12.167
+all sorts of news.
+
+02:12.167 --> 02:13.680
+Telegram also has bots
+
+02:13.680 --> 02:15.840
+which can be useful by themselves.
+
+02:15.840 --> 02:17.040
+They provide value.
+
+02:17.040 --> 02:18.400
+And the chat with oneself
+
+02:18.400 --> 02:20.400
+can be used for sending links,
+
+02:20.400 --> 02:23.440
+making notes, or sending reminders.
+
+02:23.440 --> 02:24.959
+So overall, there's multiple ways
+
+02:24.959 --> 02:26.560
+in which you can use telegram.
+
+02:26.560 --> 02:28.239
+When it comes to instant messaging,
+
+02:28.239 --> 02:30.000
+many people call Telegram home.
+
+02:30.000 --> 02:31.840
+It shouldn't come as a surprise, then,
+
+02:31.840 --> 02:34.480
+that Emacs users want to
+meet
+
+02:34.480 --> 02:35.680
+on Telegram as well.
+
+02:35.680 --> 02:38.480
+And indeed, there's an Emacs community on Telegram.
+
+02:38.480 --> 02:41.519
+Here I'm listing a few super groups
+about Emacs.
+
+02:41.519 --> 02:43.040
+There are language groups,
+
+02:43.040 --> 02:45.599
+so there's Emacs English, Emacs Russian,
+
+02:45.599 --> 02:48.800
+Emacs Spanish, Emacs Mandarin, Portuguese...
+
+02:48.800 --> 02:51.440
+There are groups which are specific to starter packs.
+
+02:51.440 --> 02:53.040
+For example, there are Doom Emacs,
+
+02:53.040 --> 02:54.879
+Spacemacs, and there are groups
+
+02:54.879 --> 02:57.280
+which are specific to packages like telega
+
+02:57.280 --> 02:58.720
+which I'm going to discuss later.
+
+02:58.720 --> 03:00.159
+These are what you would expect
+
+03:00.159 --> 03:02.800
+from traditional internet chat rooms.
+
+03:02.800 --> 03:04.319
+So they're used for shared links,
+
+03:04.319 --> 03:06.959
+they're used for discussing, troubleshooting,
+
+03:06.959 --> 03:09.120
+giving each other recommendations...
+
+03:09.120 --> 03:10.879
+I think there are healthy communities
+
+03:10.879 --> 03:12.239
+with typically a hundred
+
+03:12.239 --> 03:13.519
+to a thousand members.
+
+03:13.519 --> 03:15.280
+An example of an initiative that's put forth
+
+03:15.280 --> 03:16.879
+by the Emacs community on Telegram
+
+03:16.879 --> 03:18.720
+is @emacs_stories. @emacs_stories
+
+03:18.720 --> 03:21.680
+collects links and messages and pictures
+
+03:21.680 --> 03:24.080
+that can showcase what Emacs can do.
+
+03:24.080 --> 03:25.680
+One of the goals here is
+
+03:25.680 --> 03:28.239
+to show people that are new to emacs
+
+03:28.239 --> 03:29.120
+what you can achieve
+
+03:29.120 --> 03:31.200
+if you spend time with your editor.
+
+03:31.200 --> 03:32.480
+And here, what I'm showing you
+
+03:32.480 --> 03:34.159
+is a screenshot from Telega.
+
+03:34.159 --> 03:36.080
+So let's move on to the final topic
+
+03:36.080 --> 03:37.040
+of this discussion,
+
+03:37.040 --> 03:39.200
+which is telega.el.
+
+03:39.200 --> 03:41.440
+Telega is a terrific piece of software.
+
+03:41.440 --> 03:45.280
+Telega is a interface to telegram within Emacs.
+
+03:45.280 --> 03:46.959
+It's developed by @zevlg,
+
+03:46.959 --> 03:49.680
+which is a long-time Emacs hacker,
+
+03:49.680 --> 03:51.280
+and it's very actively developed.
+
+03:51.280 --> 03:54.000
+Telegram itself is under active development,
+
+03:54.000 --> 03:55.840
+and telega has to implement
+
+03:55.840 --> 03:57.200
+all these new features
+
+03:57.200 --> 03:58.720
+that Telegram implements.
+
+03:58.720 --> 04:00.400
+Indeed, Telega implements
+
+04:00.400 --> 04:01.360
+almost all the features
+
+04:01.360 --> 04:02.319
+available in Telegram,
+
+04:02.319 --> 04:04.159
+even things like live location,
+
+04:04.159 --> 04:05.439
+except for audio/video calls
+
+04:05.439 --> 04:07.040
+but these are work in progress.
+
+04:07.040 --> 04:08.000
+Just to give you an idea
+
+04:08.000 --> 04:09.040
+of the size of this effort,
+
+04:09.040 --> 04:09.680
+we're talking about
+
+04:09.680 --> 04:11.280
+30,000 lines of code,
+
+04:11.280 --> 04:12.720
+which doesn't tell you much,
+
+04:12.720 --> 04:14.080
+but maybe you can get a sense
+
+04:14.080 --> 04:16.000
+that this is a significant project.
+
+04:16.000 --> 04:18.400
+In fact, I think Telega is a really remarkable
+
+04:18.400 --> 04:19.199
+piece of software.
+
+04:19.199 --> 04:20.639
+Not only it implements all the features
+
+04:20.639 --> 04:21.680
+available in Telegram,
+
+04:21.680 --> 04:22.960
+but implements new ones,
+
+04:22.960 --> 04:25.120
+which are only available to Emacs users.
+
+04:25.120 --> 04:26.800
+Here I'm blinking the documentation
+
+04:26.800 --> 04:28.560
+for you to read if you're interested.
+
+04:28.560 --> 04:29.759
+What I want to mention, though,
+
+04:29.759 --> 04:31.360
+is that Telega is available on MELPA,
+
+04:31.360 --> 04:34.160
+but it requires an external library, TDlib.
+
+04:34.160 --> 04:35.759
+Most distributions do not pack
+
+04:35.759 --> 04:37.360
+a recent version of TDlib.
+
+04:37.360 --> 04:39.600
+Such you have to compile yourself.
+
+04:39.600 --> 04:41.280
+if you don't want to compile TDlib,
+
+04:41.280 --> 04:43.120
+you can use the officially supported
+
+04:43.120 --> 04:44.560
+Dockerfile or guix file
+
+04:44.560 --> 04:46.080
+so that you can get everything
+
+04:46.080 --> 04:48.000
+without too much worry.
+
+04:48.000 --> 04:50.720
+Now let me tell you more about Telegram.
+
+04:50.720 --> 04:52.080
+Of course, the best way is to just
+
+04:52.080 --> 04:53.520
+experiment with it yourself.
+
+04:53.520 --> 04:54.800
+And here I just want to give you
+
+04:54.800 --> 04:56.720
+a glimpse of how Telega works.
+
+04:56.720 --> 04:57.840
+When you start Telega,
+
+04:57.840 --> 05:00.000
+what you see is a root buffer.
+
+05:00.000 --> 05:01.280
+The root buffer is essentially
+
+05:01.280 --> 05:02.960
+the list of all the chats that you have,
+
+05:02.960 --> 05:05.199
+and, by itself, is a really powerful tool.
+
+05:05.199 --> 05:06.639
+You can use it for sorting
+
+05:06.639 --> 05:07.680
+and filtering your chats,
+
+05:07.680 --> 05:10.639
+or you can create groups which are thematic.
+
+05:10.639 --> 05:12.720
+There's sophisticated search functions.
+
+05:12.720 --> 05:14.240
+For example, if you want to search only
+
+05:14.240 --> 05:16.800
+for specific type of media,
+
+05:16.800 --> 05:18.240
+you can start new chats,
+
+05:18.240 --> 05:19.680
+you can get info about the chats,
+
+05:19.680 --> 05:22.479
+and you can even change Telegram settings
+
+05:22.479 --> 05:24.720
+which are applied across the board.
+
+05:24.720 --> 05:26.479
+Here I'm showing you an example
+
+05:26.479 --> 05:27.520
+of what it looks like.
+
+05:27.520 --> 05:30.720
+As you see, we're enjoying the support for emoji
+
+05:30.720 --> 05:33.039
+that Emacs has been improving upon
+
+05:33.039 --> 05:34.320
+over the past years.
+
+05:34.320 --> 05:36.400
+Once you select one of these charts,
+
+05:36.400 --> 05:38.880
+you're brought to the chat buffer.
+
+05:38.880 --> 05:40.400
+Here I'm showing an example of
+
+05:40.400 --> 05:42.320
+what a chat buffer looks like.
+
+05:42.320 --> 05:43.360
+So this is a screenshot
+
+05:43.360 --> 05:45.520
+from the Emacs English group
+
+05:45.520 --> 05:47.840
+where people were discussing about
+
+05:47.840 --> 05:49.039
+compiling Emacs.
+
+05:49.039 --> 05:52.000
+As you can see, we see the conversation.
+
+05:52.000 --> 05:53.280
+We see the avatars.
+
+05:53.280 --> 05:54.639
+We see that there's a thread.
+
+05:54.639 --> 05:55.440
+We also see that
+
+05:55.440 --> 05:57.360
+I'm going to send a message,
+
+05:57.360 --> 05:58.240
+message with emoji,
+
+05:58.240 --> 05:59.440
+a message with formatting,
+
+05:59.440 --> 06:01.120
+and I'm attaching an object.
+
+06:01.120 --> 06:03.680
+I can format my messages
+
+06:03.680 --> 06:05.520
+using Markdown or Org Mode
+
+06:05.520 --> 06:06.720
+or whatever I prefer
+
+06:06.720 --> 06:09.199
+and I can attach any kind of attachment
+
+06:09.199 --> 06:10.560
+I like. For example...
+
+06:10.560 --> 06:11.520
+What I can also do is,
+
+06:11.520 --> 06:13.120
+if I'm editing a buffer,
+
+06:13.120 --> 06:15.680
+I can send that buffer through Telega,
+
+06:15.680 --> 06:17.199
+which I find quite useful
+
+06:17.199 --> 06:18.720
+especially when I'm sending code.
+
+06:18.720 --> 06:20.240
+And again, just to show you that
+
+06:20.240 --> 06:22.319
+Telegram is not just text messages
+
+06:22.319 --> 06:25.199
+and Telega supports all the features in Telegram,
+
+06:25.199 --> 06:27.199
+here at the bottom, I'm showing
+
+06:27.199 --> 06:29.759
+a voice note being played through Emacs,
+
+06:29.759 --> 06:31.919
+and as you see, there are some buttons
+
+06:31.919 --> 06:33.199
+which are functional.
+
+06:33.199 --> 06:36.240
+If I hit the two times button,
+
+06:36.240 --> 06:38.160
+the playback speed will be twice,
+
+06:38.160 --> 06:39.600
+which is really neat.
+
+06:39.600 --> 06:40.800
+Telega and Emacs can even
+
+06:40.800 --> 06:43.039
+reproduce videos or gifs,
+
+06:43.039 --> 06:45.280
+at least for a recent version of Emacs.
+
+06:45.280 --> 06:47.520
+Finally, I want to emphasize that Telega
+
+06:47.520 --> 06:49.280
+integrates really well with Emacs.
+
+06:49.280 --> 06:51.039
+For example, we are showing you
+
+06:51.039 --> 06:54.319
+how you can use a transient interface
+
+06:54.319 --> 06:56.720
+to Telega, or on the other side,
+
+06:56.720 --> 06:59.280
+I'm showing you how Telega integrates
+
+06:59.280 --> 07:00.080
+with dashboard,
+
+07:00.080 --> 07:01.440
+so that we have recent chats
+
+07:01.440 --> 07:03.120
+and we have the Emacs stories.
+
+07:03.120 --> 07:03.840
+Because, you know,
+
+07:03.840 --> 07:05.759
+who doesn't like Emacs with stories.
+
+07:05.759 --> 07:06.880
+On top, on the other hand,
+
+07:06.880 --> 07:08.880
+I'm showing you that we can have
+
+07:08.880 --> 07:09.919
+syntax highlighting,
+
+07:09.919 --> 07:11.759
+which is something that Telegram by itself
+
+07:11.759 --> 07:14.240
+doesn't have, this Emacs-only feature,
+
+07:14.240 --> 07:15.919
+and we can edit this
+
+07:15.919 --> 07:17.599
+in the same way we edit
+
+07:17.599 --> 07:19.759
+Org Mode source blocks,
+
+07:19.759 --> 07:20.880
+so we can edit this
+
+07:20.880 --> 07:22.800
+with the minor mode for,
+
+07:22.800 --> 07:24.080
+in this case, Emacs Lisp.
+
+07:24.080 --> 07:26.240
+So, to conclude, I wanted to show you
+
+07:26.240 --> 07:27.759
+that the Emacs community
+
+07:27.759 --> 07:29.120
+also meets on Telegram,
+
+07:29.120 --> 07:31.360
+and we're an active and healthy community,
+
+07:31.360 --> 07:32.880
+and I want to present Telega
+
+07:32.880 --> 07:35.759
+as a really amazing piece of software,
+
+07:35.759 --> 07:37.919
+one of the best clients available for
+
+07:37.919 --> 07:39.599
+Telegram with Emacs.
+
+07:39.599 --> 07:41.680
+Even if you don't use Telegram,
+
+07:41.680 --> 07:43.599
+I think you should have a look at Telega
+
+07:43.599 --> 07:46.080
+just to appreciate how amazing
+
+07:46.080 --> 07:47.280
+a piece of software it is.
+
+07:47.280 --> 07:49.680
+And with this, I thank you for your attention,
+
+07:49.680 --> 07:50.960
+and if you like Telega,
+
+07:50.960 --> 07:52.720
+please consider donating
+
+07:52.720 --> 07:54.800
+to support the development of the package.
+
+07:54.800 --> 07:57.599
+Thanks.