summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.vtt118
-rw-r--r--2024/info/guile-after.md116
-rw-r--r--2024/info/guile-before.md2
3 files changed, 118 insertions, 118 deletions
diff --git a/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.vtt b/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.vtt
index 1c952084..35cf8ccd 100644
--- a/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.vtt
+++ b/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.vtt
@@ -1,13 +1,13 @@
-WEBVTT captioned by anush
+WEBVTT captioned by anush, checked by robin
00:00.000 --> 00:03.066
-Hello everyone, I'm Robin Templeton,
+Hello everyone. I'm Robin Templeton,
00:03.083 --> 00:05.750
and I'm going to talk about Emacs Beguiled
00:05.766 --> 00:13.866
-and recent progress on the Guile Emacs project.
+and recent progress on the Guile-Emacs project.
00:13.883 --> 00:16.433
First of all, if you're not familiar with Guile,
@@ -25,7 +25,7 @@ and in the same family as Emacs Lisp,
and Guile is GNU's official extension language.
00:28.166 --> 00:30.400
-The goal of the Guile Emacs project
+The goal of the Guile-Emacs project
00:30.400 --> 00:34.950
is to use Guile as the basis for Emacs's Lisp support.
@@ -85,7 +85,7 @@ than is currently feasible.
Of course, this raises the question of
01:31.133 --> 01:34.033
-why Guile is suitable for this product.
+why Guile is suitable for this project.
01:34.050 --> 01:36.666
And we chose Guile for a few reasons.
@@ -103,10 +103,10 @@ using its compiler tower.
To add support for a new language to Guile,
01:46.883 --> 01:50.066
-You only have to write a compiler
+you only have to write a compiler
01:50.083 --> 01:52.550
-from the source language to TRIAL[??],
+from the source language to Tree-IL,
01:52.566 --> 01:55.800
which is essentially a low-level,
@@ -118,7 +118,7 @@ minimal representation of Scheme.
All of Guile's compiler optimizations
02:01.800 --> 02:04.433
-occur at the TRIAL[??] layer or lower,
+occur at the Tree-IL layer or lower,
02:04.450 --> 02:06.033
so you don't need to worry
@@ -133,7 +133,7 @@ when initially implementing your language.
Guile also has some Lisp features
02:14.650 --> 02:18.316
-that are very rare in schema implementations.
+that are very rare in Scheme implementations.
02:18.333 --> 02:20.033
For example, it has a nil value
@@ -142,16 +142,16 @@ For example, it has a nil value
that counts as both false and an empty list,
02:23.933 --> 02:25.633
-just like an Elisp,
+just like in Elisp,
02:25.650 --> 02:30.466
-and it also has a version of the Common Lisp object system
+and it also has a version of the Common Lisp Object System
02:30.483 --> 02:37.200
-and its metoptic[??] protocol, which is called GOOPS.
+and its metaobject protocol, which is called GOOPS.
02:37.200 --> 02:40.150
-The idea of Guile Emacs has a pretty long history.
+The idea of Guile-Emacs has a pretty long history,
02:40.166 --> 02:43.866
going back at least three decades.
@@ -166,10 +166,10 @@ half a dozen previous implementation attempts.
But the current iteration began with
02:49.966 --> 02:52.866
-a series of six Summer of Code internships,
+a series of six Summer of Code internships:
02:52.883 --> 02:56.033
-Daniel Kraft's[??] in 2009,
+Daniel Kraft's in 2009,
02:56.050 --> 03:01.200
and then my internships from 2010 to 2014.
@@ -196,22 +196,22 @@ In Emacs, I modified the garbage collector
and the data structures for Lisp objects
03:18.600 --> 03:23.033
-to use their libgal equivalents.
+to use their libguile equivalents.
03:23.050 --> 03:26.950
I replaced Emacs' Lisp evaluator
03:26.966 --> 03:32.200
-with the one provided by guile-elisp.[??]
+with the one provided by Guile Elisp.
03:32.200 --> 03:34.033
-After a little over a year of work
+After a little over a year of work,
03:34.050 --> 03:37.950
at the end of the 2014 internship,
03:37.966 --> 03:44.316
-I ended up with a fully functional prototype of Guile Emacs.
+I ended up with a fully functional prototype of Guile-Emacs.
03:44.333 --> 03:48.916
It used Guile Elisp alone as its Lisp implementation
@@ -235,28 +235,28 @@ as well as ease of integration with the Emacs C code.
But it was nonetheless a major milestone for the project.
04:11.566 --> 04:19.600
-Let's take just a moment to look at guile-elisp.
+Let's take just a moment to look at Guile-Elisp.
04:19.600 --> 04:23.233
-For starters, we have access to guile modules.
+For starters, we have access to Guile modules.
04:23.250 --> 04:25.116
-If we call guile's version function,
+If we call Guile's <i>version</i> function,
04:25.133 --> 04:30.516
-we can see that we're running under guile 3.0,
+we can see that we're running under Guile 3.0.
04:30.533 --> 04:33.233
-have access to some of the numeric tower
+We have access to some of the numeric tower
04:33.250 --> 04:39.516
via the arithmetic functions. We also have multiple values.
04:39.533 --> 04:43.950
-We have to be careful to use Guile's values procedure here,
+We have to be careful to use Guile's <i>values</i> procedure here,
04:43.966 --> 04:46.666
-not the CL libraries,
+not the CL library's,
04:46.683 --> 04:48.833
but you can see that this works properly
@@ -271,28 +271,28 @@ Finally, we have tail call elimination.
Naturally, we're going to use factorial to demonstrate it.
05:02.883 --> 05:05.633
-If n is zero, return the answer,
+If <i>n</i> is zero, return the answer,
05:05.650 --> 05:14.266
-else recurse with n less one and n times a.
+else recurse with <i>n</i> less one and <i>n</i> times <i>a</i>.
05:14.283 --> 05:16.150
-Of course this definition works correctly,
+Of course, this definition works correctly,
05:16.166 --> 05:18.950
but it gets more interesting
05:18.966 --> 00:05:25.000
-if we communicate the answer with an error.
+if we communicate the answer with an error,
00:05:25.100 --> 05:29.633
-or to look at a backtrace.
+in order to look at a backtrace.
05:29.650 --> 05:32.350
You can see here that there are
05:32.366 --> 05:35.516
-no calls to fact visible in between
+no calls to <i>fact</i> visible in between
05:35.533 --> 05:37.833
the request to evaluate
@@ -313,7 +313,7 @@ This is essential for any kind
of serious functional programming.
00:06:00.116 --> 06:03.033
-That's a peek at guile-elisp.
+That's a peek at Guile-Elisp.
06:03.050 --> 06:08.066
In 2015, I left university to go work on web technologies,
@@ -328,13 +328,13 @@ But that's been changing recently.
During the last few months,
06:16.083 --> 06:17.633
-I've been working with Larry Valkama[??]
+I've been working with Larry Valkama
06:17.650 --> 06:20.716
-to rebase guile-emacs
+to rebase Guile-Emacs
06:20.733 --> 06:24.833
-onto the development branch of upstream emacs,
+onto the development branch of upstream Emacs,
06:24.850 --> 06:29.666
including the past decade's worth of upstream development.
@@ -358,7 +358,7 @@ where they haven't been properly adjusted
for changes in the Emacs implementation.
06:52.200 --> 06:56.833
-but we do have by now a version of Emacs 30
+But we do have by now a version of Emacs 30
06:56.850 --> 06:57.800
which boots correctly
@@ -403,10 +403,10 @@ an order of magnitude faster than ordinary Elisp,
and that's based on micro benchmarks
07:43.933 --> 00:07:46.133
-like the Gabriel[??] benchmarks.
+like the Gabriel benchmarks.
00:07:46.233 --> 00:07:50.900
-but there's clearly a lot of room
+But there's clearly a lot of room
00:07:50.900 --> 00:07:53.150
to improve our compiler's output.
@@ -415,7 +415,7 @@ to improve our compiler's output.
If you want to mark your calendars,
07:56.650 --> 08:00.150
-we're expecting to have a usable version of Guile Emacs 30
+we're expecting to have a usable version of Guile-Emacs 30
08:00.166 --> 00:08:03.016
out sometime next spring.
@@ -448,7 +448,7 @@ On the Emacs side, we'll be working initially
on abstracting away the details of the Lisp implementation
08:35.333 --> 00:08:37.433
-where they're not relevant,
+where they're not relevant.
00:08:37.533 --> 08:40.716
And that will clean up the Emacs code base a bit.
@@ -469,16 +469,16 @@ We're also going to be adding new features to Emacs Lisp.
We've seen a few of them already.
08:59.333 --> 09:02.633
-The new [??] tower, tail call optimization,
+The numeric tower, tail call optimization,
09:02.650 --> 09:04.550
-common list compatibility.
+Common Lisp compatibility.
09:04.566 --> 09:07.950
We're also going to provide access to Fibers,
09:07.966 --> 09:12.466
-which is a guide library based on ideas from concurrent ML
+which is a Guile library based on ideas from Concurrent ML
09:12.483 --> 09:15.716
that provides much more powerful facilities
@@ -490,7 +490,7 @@ for concurrent and parallel programming
than what Emacs currently offers.
00:09:24.666 --> 09:32.233
-This plan meets Guile Emacs' basic goals,
+This plan meets Guile-Emacs' basic goals,
09:32.250 --> 09:36.316
and it's work that we could maybe get integrated upstream
@@ -502,7 +502,7 @@ in a reasonable amount of time.
But it's also worth considering what more we can do,
00:09:42.600 --> 09:46.600
-and what effect Guile Emacs might have on Emacs
+and what effect Guile-Emacs might have on Emacs
09:46.600 --> 00:09:50.566
if it becomes simply Emacs.
@@ -538,7 +538,7 @@ and being written in C means
that they can't be practically redefined.
10:28.083 --> 10:34.433
-the use of C can become a barrier to extending Emacs
+The use of C can become a barrier to extending Emacs
10:34.450 --> 10:36.233
or customizing its behavior.
@@ -553,10 +553,10 @@ as much of Emacs as possible in Lisp.
One way to speed up this process
10:46.050 --> 10:49.400
-would be to provide a common Lisp implementation for Guile.
+would be to provide a Common Lisp implementation for Guile.
10:49.400 --> 10:54.833
-Note that between guile-elisp and guile-scheme,
+Note that between Guile Elisp and Guile Scheme,
10:54.850 --> 10:57.516
we have all of the essential ingredients
@@ -568,7 +568,7 @@ for a Common Lisp environment. We can also share code
with other Common Lisp implementations
11:06.016 --> 11:10.200
-such as SBCL and SICL[??].
+such as SBCL and SICL.
11:10.200 --> 11:13.800
Overall, the duration of the project
@@ -592,7 +592,7 @@ It could be a model for future improvements to Elisp,
because Elisp and CL can interact directly without problems.
11:34.883 --> 11:38.400
-and it would be very easy for Elisp
+And it would be very easy for Elisp
11:38.400 --> 11:41.466
to borrow language features from Common Lisp.
@@ -640,7 +640,7 @@ to compile Emacs to WebAssembly,
making it available perhaps in web browsers
12:33.200 --> 12:37.233
-or on systems with the WebAssembly system interface.
+or on systems with the WebAssembly System Interface.
12:37.250 --> 12:41.266
But it would also be a great victory
@@ -649,7 +649,7 @@ But it would also be a great victory
for practical software freedom.
12:43.050 --> 12:45.866
-That's the idea that freedom one,
+That's the idea that Freedom One,
12:45.883 --> 12:48.350
the freedom to study and modify programs,
@@ -661,7 +661,7 @@ should not just be legally and technically possible,
but should be actively encouraged
12:53.333 --> 12:57.066
-by our competing environments.
+by our computing environments.
12:57.083 --> 13:00.116
Emacs is really one of the archetypal examples of this,
@@ -733,7 +733,7 @@ We'll certainly be looking at the practicality
of these kinds of changes
14:20.966 --> 00:14:25.033
-as we continue developing Guile Emacs.
+as we continue developing Guile-Emacs.
00:14:25.133 --> 00:14:29.933
Finally, how can you get involved
@@ -778,10 +778,10 @@ We can always use bug reports,
and we're interested in what kind of features
15:18.883 --> 15:21.716
-people actually want to see in Guile Emacs.
+people actually want to see in Guile-Emacs.
15:21.733 --> 00:15:25.200
-Guile Emacs is also being developed
+Guile-Emacs is also being developed
00:15:25.300 --> 00:15:27.816
by a small worker cooperative,
@@ -799,10 +799,10 @@ and subscribing to our mailing lists
so that you can keep up with news on the project.
15:45.600 --> 15:47.316
-If you're watching this at Emacsconf,
+If you're watching this at EmacsConf,
15:47.333 --> 15:50.466
there will be a Q&A session immediately following this,
15:50.483 --> 15:57.066
-and thanks for watching.
+and thanks for watching!
diff --git a/2024/info/guile-after.md b/2024/info/guile-after.md
index bbe921d2..8145932f 100644
--- a/2024/info/guile-after.md
+++ b/2024/info/guile-after.md
@@ -3,15 +3,15 @@
<div class="transcript transcript-mainVideo"><a name="guile-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template text="""Hello everyone, I'm Robin Templeton,""" start="00:00:00.000" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Hello everyone. I'm Robin Templeton,""" start="00:00:00.000" video="mainVideo-guile" id="subtitle"]]
[[!template text="""and I'm going to talk about Emacs Beguiled""" start="00:00:03.083" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""and recent progress on the Guile Emacs project.""" start="00:00:05.766" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and recent progress on the Guile-Emacs project.""" start="00:00:05.766" video="mainVideo-guile" id="subtitle"]]
[[!template text="""First of all, if you're not familiar with Guile,""" start="00:00:13.883" video="mainVideo-guile" id="subtitle"]]
[[!template text="""it's an implementation of the Scheme programming language,""" start="00:00:16.450" video="mainVideo-guile" id="subtitle"]]
[[!template text="""which is a dialect of Lisp,""" start="00:00:19.733" video="mainVideo-guile" id="subtitle"]]
[[!template text="""and in the same family as Emacs Lisp,""" start="00:00:22.166" video="mainVideo-guile" id="subtitle"]]
[[!template text="""and Guile is GNU's official extension language.""" start="00:00:24.566" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""The goal of the Guile Emacs project""" start="00:00:28.166" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""The goal of the Guile-Emacs project""" start="00:00:28.166" video="mainVideo-guile" id="subtitle"]]
[[!template text="""is to use Guile as the basis for Emacs's Lisp support.""" start="00:00:30.400" video="mainVideo-guile" id="subtitle"]]
[[!template text="""It has two main components:""" start="00:00:34.966" video="mainVideo-guile" id="subtitle"]]
[[!template text="""a new Emacs Lisp compiler built on top of Guile,""" start="00:00:37.133" video="mainVideo-guile" id="subtitle"]]
@@ -31,35 +31,35 @@
[[!template text="""to implement much more of Emacs in Lisp""" start="00:01:23.200" video="mainVideo-guile" id="subtitle"]]
[[!template text="""than is currently feasible.""" start="00:01:25.683" video="mainVideo-guile" id="subtitle"]]
[[!template text="""Of course, this raises the question of""" start="00:01:29.250" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""why Guile is suitable for this product.""" start="00:01:31.133" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""why Guile is suitable for this project.""" start="00:01:31.133" video="mainVideo-guile" id="subtitle"]]
[[!template text="""And we chose Guile for a few reasons.""" start="00:01:34.050" video="mainVideo-guile" id="subtitle"]]
[[!template text="""Guile is primarily a Scheme implementation,""" start="00:01:36.683" video="mainVideo-guile" id="subtitle"]]
[[!template text="""but it also has built-in support for multiple languages""" start="00:01:39.400" video="mainVideo-guile" id="subtitle"]]
[[!template text="""using its compiler tower.""" start="00:01:42.166" video="mainVideo-guile" id="subtitle"]]
[[!template text="""To add support for a new language to Guile,""" start="00:01:43.483" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""You only have to write a compiler""" start="00:01:46.883" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""from the source language to TRIAL[??],""" start="00:01:50.083" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""you only have to write a compiler""" start="00:01:46.883" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""from the source language to Tree-IL,""" start="00:01:50.083" video="mainVideo-guile" id="subtitle"]]
[[!template text="""which is essentially a low-level,""" start="00:01:52.566" video="mainVideo-guile" id="subtitle"]]
[[!template text="""minimal representation of Scheme.""" start="00:01:55.800" video="mainVideo-guile" id="subtitle"]]
[[!template text="""All of Guile's compiler optimizations""" start="00:01:58.883" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""occur at the TRIAL[??] layer or lower,""" start="00:02:01.800" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""occur at the Tree-IL layer or lower,""" start="00:02:01.800" video="mainVideo-guile" id="subtitle"]]
[[!template text="""so you don't need to worry""" start="00:02:04.450" video="mainVideo-guile" id="subtitle"]]
[[!template text="""about the lower-level details of the compiler""" start="00:02:06.050" video="mainVideo-guile" id="subtitle"]]
[[!template text="""when initially implementing your language.""" start="00:02:09.650" video="mainVideo-guile" id="subtitle"]]
[[!template text="""Guile also has some Lisp features""" start="00:02:12.366" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""that are very rare in schema implementations.""" start="00:02:14.650" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""that are very rare in Scheme implementations.""" start="00:02:14.650" video="mainVideo-guile" id="subtitle"]]
[[!template text="""For example, it has a nil value""" start="00:02:18.333" video="mainVideo-guile" id="subtitle"]]
[[!template text="""that counts as both false and an empty list,""" start="00:02:20.050" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""just like an Elisp,""" start="00:02:23.933" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""and it also has a version of the Common Lisp object system""" start="00:02:25.650" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""and its metoptic[??] protocol, which is called GOOPS.""" start="00:02:30.483" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""The idea of Guile Emacs has a pretty long history.""" start="00:02:37.200" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""just like in Elisp,""" start="00:02:23.933" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and it also has a version of the Common Lisp Object System""" start="00:02:25.650" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and its metaobject protocol, which is called GOOPS.""" start="00:02:30.483" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""The idea of Guile-Emacs has a pretty long history,""" start="00:02:37.200" video="mainVideo-guile" id="subtitle"]]
[[!template text="""going back at least three decades.""" start="00:02:40.166" video="mainVideo-guile" id="subtitle"]]
[[!template text="""There have been about""" start="00:02:43.883" video="mainVideo-guile" id="subtitle"]]
[[!template text="""half a dozen previous implementation attempts.""" start="00:02:44.566" video="mainVideo-guile" id="subtitle"]]
[[!template text="""But the current iteration began with""" start="00:02:48.000" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""a series of six Summer of Code internships,""" start="00:02:49.966" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""Daniel Kraft's[??] in 2009,""" start="00:02:52.883" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""a series of six Summer of Code internships:""" start="00:02:49.966" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Daniel Kraft's in 2009,""" start="00:02:52.883" video="mainVideo-guile" id="subtitle"]]
[[!template text="""and then my internships from 2010 to 2014.""" start="00:02:56.050" video="mainVideo-guile" id="subtitle"]]
[[!template text="""My basic implementation strategy""" start="00:03:01.200" video="mainVideo-guile" id="subtitle"]]
[[!template text="""was pretty straightforward.""" start="00:03:03.000" video="mainVideo-guile" id="subtitle"]]
@@ -68,12 +68,12 @@
[[!template text="""outside of Emacs.""" start="00:03:10.400" video="mainVideo-guile" id="subtitle"]]
[[!template text="""In Emacs, I modified the garbage collector""" start="00:03:12.850" video="mainVideo-guile" id="subtitle"]]
[[!template text="""and the data structures for Lisp objects""" start="00:03:15.283" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""to use their libgal equivalents.""" start="00:03:18.600" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""to use their libguile equivalents.""" start="00:03:18.600" video="mainVideo-guile" id="subtitle"]]
[[!template text="""I replaced Emacs' Lisp evaluator""" start="00:03:23.050" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""with the one provided by guile-elisp.[??]""" start="00:03:26.966" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""After a little over a year of work""" start="00:03:32.200" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""with the one provided by Guile Elisp.""" start="00:03:26.966" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""After a little over a year of work,""" start="00:03:32.200" video="mainVideo-guile" id="subtitle"]]
[[!template text="""at the end of the 2014 internship,""" start="00:03:34.050" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""I ended up with a fully functional prototype of Guile Emacs.""" start="00:03:37.966" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""I ended up with a fully functional prototype of Guile-Emacs.""" start="00:03:37.966" video="mainVideo-guile" id="subtitle"]]
[[!template text="""It used Guile Elisp alone as its Lisp implementation""" start="00:03:44.333" video="mainVideo-guile" id="subtitle"]]
[[!template text="""and was completely compatible with Emacs functionality""" start="00:03:48.933" video="mainVideo-guile" id="subtitle"]]
[[!template text="""and with external extensions.""" start="00:03:53.933" video="mainVideo-guile" id="subtitle"]]
@@ -81,40 +81,40 @@
[[!template text="""because I was focused on correctness,""" start="00:03:59.450" video="mainVideo-guile" id="subtitle"]]
[[!template text="""as well as ease of integration with the Emacs C code.""" start="00:04:03.050" video="mainVideo-guile" id="subtitle"]]
[[!template text="""But it was nonetheless a major milestone for the project.""" start="00:04:07.600" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""Let's take just a moment to look at guile-elisp.""" start="00:04:11.566" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""For starters, we have access to guile modules.""" start="00:04:19.600" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""If we call guile's version function,""" start="00:04:23.250" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""we can see that we're running under guile 3.0,""" start="00:04:25.133" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""have access to some of the numeric tower""" start="00:04:30.533" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Let's take just a moment to look at Guile-Elisp.""" start="00:04:11.566" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""For starters, we have access to Guile modules.""" start="00:04:19.600" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""If we call Guile's <i>version</i> function,""" start="00:04:23.250" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""we can see that we're running under Guile 3.0.""" start="00:04:25.133" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""We have access to some of the numeric tower""" start="00:04:30.533" video="mainVideo-guile" id="subtitle"]]
[[!template text="""via the arithmetic functions. We also have multiple values.""" start="00:04:33.250" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""We have to be careful to use Guile's values procedure here,""" start="00:04:39.533" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""not the CL libraries,""" start="00:04:43.966" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""We have to be careful to use Guile's <i>values</i> procedure here,""" start="00:04:39.533" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""not the CL library's,""" start="00:04:43.966" video="mainVideo-guile" id="subtitle"]]
[[!template text="""but you can see that this works properly""" start="00:04:46.683" video="mainVideo-guile" id="subtitle"]]
[[!template text="""rather than being an emulation.""" start="00:04:48.850" video="mainVideo-guile" id="subtitle"]]
[[!template text="""Finally, we have tail call elimination.""" start="00:04:51.566" video="mainVideo-guile" id="subtitle"]]
[[!template text="""Naturally, we're going to use factorial to demonstrate it.""" start="00:04:54.050" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""If n is zero, return the answer,""" start="00:05:02.883" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""else recurse with n less one and n times a.""" start="00:05:05.650" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""Of course this definition works correctly,""" start="00:05:14.283" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""If <i>n</i> is zero, return the answer,""" start="00:05:02.883" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""else recurse with <i>n</i> less one and <i>n</i> times <i>a</i>.""" start="00:05:05.650" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Of course, this definition works correctly,""" start="00:05:14.283" video="mainVideo-guile" id="subtitle"]]
[[!template text="""but it gets more interesting""" start="00:05:16.166" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""if we communicate the answer with an error.""" start="00:05:18.966" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""or to look at a backtrace.""" start="00:05:25.100" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""if we communicate the answer with an error,""" start="00:05:18.966" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""in order to look at a backtrace.""" start="00:05:25.100" video="mainVideo-guile" id="subtitle"]]
[[!template text="""You can see here that there are""" start="00:05:29.650" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""no calls to fact visible in between""" start="00:05:32.366" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""no calls to <i>fact</i> visible in between""" start="00:05:32.366" video="mainVideo-guile" id="subtitle"]]
[[!template text="""the request to evaluate""" start="00:05:35.533" video="mainVideo-guile" id="subtitle"]]
[[!template text="""and the error communicating the answer.""" start="00:05:37.850" video="mainVideo-guile" id="subtitle"]]
[[!template text="""That's because this tail call""" start="00:05:42.200" video="mainVideo-guile" id="subtitle"]]
[[!template text="""has been optimized into effectively a goto.""" start="00:05:44.200" video="mainVideo-guile" id="subtitle"]]
[[!template text="""This is essential for any kind""" start="00:05:48.366" video="mainVideo-guile" id="subtitle"]]
[[!template text="""of serious functional programming.""" start="00:05:54.933" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""That's a peek at guile-elisp.""" start="00:06:00.116" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""That's a peek at Guile-Elisp.""" start="00:06:00.116" video="mainVideo-guile" id="subtitle"]]
[[!template text="""In 2015, I left university to go work on web technologies,""" start="00:06:03.050" video="mainVideo-guile" id="subtitle"]]
[[!template text="""and the project was dormant for a very long time.""" start="00:06:08.083" video="mainVideo-guile" id="subtitle"]]
[[!template text="""But that's been changing recently.""" start="00:06:11.333" video="mainVideo-guile" id="subtitle"]]
[[!template text="""During the last few months,""" start="00:06:13.450" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""I've been working with Larry Valkama[??]""" start="00:06:16.083" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""to rebase guile-emacs""" start="00:06:17.650" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""onto the development branch of upstream emacs,""" start="00:06:20.733" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""I've been working with Larry Valkama""" start="00:06:16.083" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""to rebase Guile-Emacs""" start="00:06:17.650" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""onto the development branch of upstream Emacs,""" start="00:06:20.733" video="mainVideo-guile" id="subtitle"]]
[[!template text="""including the past decade's worth of upstream development.""" start="00:06:24.850" video="mainVideo-guile" id="subtitle"]]
[[!template text="""What we've ended up with is a series of""" start="00:06:29.683" video="mainVideo-guile" id="subtitle"]]
[[!template text="""rebases onto different versions of Emacs.""" start="00:06:34.267" video="mainVideo-guile" id="subtitle"]]
@@ -122,7 +122,7 @@
[[!template text="""The newer ones have increasingly bad problems""" start="00:06:39.533" video="mainVideo-guile" id="subtitle"]]
[[!template text="""where they haven't been properly adjusted""" start="00:06:46.883" video="mainVideo-guile" id="subtitle"]]
[[!template text="""for changes in the Emacs implementation.""" start="00:06:49.800" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""but we do have by now a version of Emacs 30""" start="00:06:52.200" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""But we do have by now a version of Emacs 30""" start="00:06:52.200" video="mainVideo-guile" id="subtitle"]]
[[!template text="""which boots correctly""" start="00:06:56.850" video="mainVideo-guile" id="subtitle"]]
[[!template text="""and can be used for interactive debugging,""" start="00:06:57.800" video="mainVideo-guile" id="subtitle"]]
[[!template text="""as well as the ability to bisect the revisions of Emacs""" start="00:06:59.850" video="mainVideo-guile" id="subtitle"]]
@@ -137,11 +137,11 @@
[[!template text="""while Guile Scheme is quite often""" start="00:07:34.483" video="mainVideo-guile" id="subtitle"]]
[[!template text="""an order of magnitude faster than ordinary Elisp,""" start="00:07:37.850" video="mainVideo-guile" id="subtitle"]]
[[!template text="""and that's based on micro benchmarks""" start="00:07:41.350" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""like the Gabriel[??] benchmarks.""" start="00:07:43.933" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""but there's clearly a lot of room""" start="00:07:46.233" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""like the Gabriel benchmarks.""" start="00:07:43.933" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""But there's clearly a lot of room""" start="00:07:46.233" video="mainVideo-guile" id="subtitle"]]
[[!template text="""to improve our compiler's output.""" start="00:07:50.900" video="mainVideo-guile" id="subtitle"]]
[[!template text="""If you want to mark your calendars,""" start="00:07:53.350" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""we're expecting to have a usable version of Guile Emacs 30""" start="00:07:56.650" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""we're expecting to have a usable version of Guile-Emacs 30""" start="00:07:56.650" video="mainVideo-guile" id="subtitle"]]
[[!template text="""out sometime next spring.""" start="00:08:00.166" video="mainVideo-guile" id="subtitle"]]
[[!template text="""We're also going to put some effort""" start="00:08:03.116" video="mainVideo-guile" id="subtitle"]]
[[!template text="""into either extracting old work""" start="00:08:05.450" video="mainVideo-guile" id="subtitle"]]
@@ -152,25 +152,25 @@
[[!template text="""but are used all the time in traditional Lisp dialects.""" start="00:08:23.450" video="mainVideo-guile" id="subtitle"]]
[[!template text="""On the Emacs side, we'll be working initially""" start="00:08:27.850" video="mainVideo-guile" id="subtitle"]]
[[!template text="""on abstracting away the details of the Lisp implementation""" start="00:08:31.400" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""where they're not relevant,""" start="00:08:35.333" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""where they're not relevant.""" start="00:08:35.333" video="mainVideo-guile" id="subtitle"]]
[[!template text="""And that will clean up the Emacs code base a bit.""" start="00:08:37.533" video="mainVideo-guile" id="subtitle"]]
[[!template text="""It'll make it easier to integrate Emacs and Guile Elisp.""" start="00:08:40.733" video="mainVideo-guile" id="subtitle"]]
[[!template text="""It will probably be helpful for anyone""" start="00:08:45.000" video="mainVideo-guile" id="subtitle"]]
[[!template text="""who is working on ordinary Elisp on their own.""" start="00:08:47.933" video="mainVideo-guile" id="subtitle"]]
[[!template text="""We're also going to be adding new features to Emacs Lisp.""" start="00:08:51.566" video="mainVideo-guile" id="subtitle"]]
[[!template text="""We've seen a few of them already.""" start="00:08:57.200" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""The new [??] tower, tail call optimization,""" start="00:08:59.333" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""common list compatibility.""" start="00:09:02.650" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""The numeric tower, tail call optimization,""" start="00:08:59.333" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Common Lisp compatibility.""" start="00:09:02.650" video="mainVideo-guile" id="subtitle"]]
[[!template text="""We're also going to provide access to Fibers,""" start="00:09:04.566" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""which is a guide library based on ideas from concurrent ML""" start="00:09:07.966" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""which is a Guile library based on ideas from Concurrent ML""" start="00:09:07.966" video="mainVideo-guile" id="subtitle"]]
[[!template text="""that provides much more powerful facilities""" start="00:09:12.483" video="mainVideo-guile" id="subtitle"]]
[[!template text="""for concurrent and parallel programming""" start="00:09:15.733" video="mainVideo-guile" id="subtitle"]]
[[!template text="""than what Emacs currently offers.""" start="00:09:18.283" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""This plan meets Guile Emacs' basic goals,""" start="00:09:24.666" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""This plan meets Guile-Emacs' basic goals,""" start="00:09:24.666" video="mainVideo-guile" id="subtitle"]]
[[!template text="""and it's work that we could maybe get integrated upstream""" start="00:09:32.250" video="mainVideo-guile" id="subtitle"]]
[[!template text="""in a reasonable amount of time.""" start="00:09:36.333" video="mainVideo-guile" id="subtitle"]]
[[!template text="""But it's also worth considering what more we can do,""" start="00:09:38.200" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""and what effect Guile Emacs might have on Emacs""" start="00:09:42.600" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and what effect Guile-Emacs might have on Emacs""" start="00:09:42.600" video="mainVideo-guile" id="subtitle"]]
[[!template text="""if it becomes simply Emacs.""" start="00:09:46.600" video="mainVideo-guile" id="subtitle"]]
[[!template text="""For context, the amount of C code in Emacs""" start="00:09:50.666" video="mainVideo-guile" id="subtitle"]]
[[!template text="""has increased by around 50% in the last decade,""" start="00:09:54.050" video="mainVideo-guile" id="subtitle"]]
@@ -182,17 +182,17 @@
[[!template text="""as well as available to Lisp code,""" start="00:10:19.650" video="mainVideo-guile" id="subtitle"]]
[[!template text="""and being written in C means""" start="00:10:23.166" video="mainVideo-guile" id="subtitle"]]
[[!template text="""that they can't be practically redefined.""" start="00:10:25.800" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""the use of C can become a barrier to extending Emacs""" start="00:10:28.083" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""The use of C can become a barrier to extending Emacs""" start="00:10:28.083" video="mainVideo-guile" id="subtitle"]]
[[!template text="""or customizing its behavior.""" start="00:10:34.450" video="mainVideo-guile" id="subtitle"]]
[[!template text="""We might consider writing""" start="00:10:36.250" video="mainVideo-guile" id="subtitle"]]
[[!template text="""as much of Emacs as possible in Lisp.""" start="00:10:39.200" video="mainVideo-guile" id="subtitle"]]
[[!template text="""One way to speed up this process""" start="00:10:42.916" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""would be to provide a common Lisp implementation for Guile.""" start="00:10:46.050" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""Note that between guile-elisp and guile-scheme,""" start="00:10:49.400" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""would be to provide a Common Lisp implementation for Guile.""" start="00:10:46.050" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Note that between Guile Elisp and Guile Scheme,""" start="00:10:49.400" video="mainVideo-guile" id="subtitle"]]
[[!template text="""we have all of the essential ingredients""" start="00:10:54.850" video="mainVideo-guile" id="subtitle"]]
[[!template text="""for a Common Lisp environment. We can also share code""" start="00:10:57.533" video="mainVideo-guile" id="subtitle"]]
[[!template text="""with other Common Lisp implementations""" start="00:11:03.200" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""such as SBCL and SICL[??].""" start="00:11:06.016" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""such as SBCL and SICL.""" start="00:11:06.016" video="mainVideo-guile" id="subtitle"]]
[[!template text="""Overall, the duration of the project""" start="00:11:10.200" video="mainVideo-guile" id="subtitle"]]
[[!template text="""will be better measured in months rather than years,""" start="00:11:13.800" video="mainVideo-guile" id="subtitle"]]
[[!template text="""despite Common Lisp's reputation""" start="00:11:16.933" video="mainVideo-guile" id="subtitle"]]
@@ -200,7 +200,7 @@
[[!template text="""This could have multiple uses, of course.""" start="00:11:21.216" video="mainVideo-guile" id="subtitle"]]
[[!template text="""It could be a model for future improvements to Elisp,""" start="00:11:24.483" video="mainVideo-guile" id="subtitle"]]
[[!template text="""because Elisp and CL can interact directly without problems.""" start="00:11:29.650" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""and it would be very easy for Elisp""" start="00:11:34.883" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""And it would be very easy for Elisp""" start="00:11:34.883" video="mainVideo-guile" id="subtitle"]]
[[!template text="""to borrow language features from Common Lisp.""" start="00:11:38.400" video="mainVideo-guile" id="subtitle"]]
[[!template text="""But for the purpose of a C to Lisp transition,""" start="00:11:41.483" video="mainVideo-guile" id="subtitle"]]
[[!template text="""it would also provide us with instant access""" start="00:11:46.600" video="mainVideo-guile" id="subtitle"]]
@@ -216,14 +216,14 @@
[[!template text="""then we could consider using Guile Hoot""" start="00:12:24.216" video="mainVideo-guile" id="subtitle"]]
[[!template text="""to compile Emacs to WebAssembly,""" start="00:12:27.250" video="mainVideo-guile" id="subtitle"]]
[[!template text="""making it available perhaps in web browsers""" start="00:12:29.683" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""or on systems with the WebAssembly system interface.""" start="00:12:33.200" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""or on systems with the WebAssembly System Interface.""" start="00:12:33.200" video="mainVideo-guile" id="subtitle"]]
[[!template text="""But it would also be a great victory""" start="00:12:37.250" video="mainVideo-guile" id="subtitle"]]
[[!template text="""for practical software freedom.""" start="00:12:41.283" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""That's the idea that freedom one,""" start="00:12:43.050" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""That's the idea that Freedom One,""" start="00:12:43.050" video="mainVideo-guile" id="subtitle"]]
[[!template text="""the freedom to study and modify programs,""" start="00:12:45.883" video="mainVideo-guile" id="subtitle"]]
[[!template text="""should not just be legally and technically possible,""" start="00:12:48.366" video="mainVideo-guile" id="subtitle"]]
[[!template text="""but should be actively encouraged""" start="00:12:51.650" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""by our competing environments.""" start="00:12:53.333" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""by our computing environments.""" start="00:12:53.333" video="mainVideo-guile" id="subtitle"]]
[[!template text="""Emacs is really one of the archetypal examples of this,""" start="00:12:57.083" video="mainVideo-guile" id="subtitle"]]
[[!template text="""but we can and should go further.""" start="00:13:00.133" video="mainVideo-guile" id="subtitle"]]
[[!template text="""When Emacs is implemented primarily in Lisp,""" start="00:13:03.216" video="mainVideo-guile" id="subtitle"]]
@@ -247,7 +247,7 @@
[[!template text="""if Emacs were customizable at the lowest layers via Lisp.""" start="00:14:06.600" video="mainVideo-guile" id="subtitle"]]
[[!template text="""We'll certainly be looking at the practicality""" start="00:14:12.650" video="mainVideo-guile" id="subtitle"]]
[[!template text="""of these kinds of changes""" start="00:14:19.166" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""as we continue developing Guile Emacs.""" start="00:14:20.966" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""as we continue developing Guile-Emacs.""" start="00:14:20.966" video="mainVideo-guile" id="subtitle"]]
[[!template text="""Finally, how can you get involved""" start="00:14:25.133" video="mainVideo-guile" id="subtitle"]]
[[!template text="""with and support Guile Emacs?""" start="00:14:30.033" video="mainVideo-guile" id="subtitle"]]
[[!template text="""One way to help is just by trying it out""" start="00:14:32.500" video="mainVideo-guile" id="subtitle"]]
@@ -262,16 +262,16 @@
[[!template text="""or potential collaborators from other projects.""" start="00:15:06.533" video="mainVideo-guile" id="subtitle"]]
[[!template text="""We can always use bug reports,""" start="00:15:12.200" video="mainVideo-guile" id="subtitle"]]
[[!template text="""and we're interested in what kind of features""" start="00:15:16.450" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""people actually want to see in Guile Emacs.""" start="00:15:18.883" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""Guile Emacs is also being developed""" start="00:15:21.733" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""people actually want to see in Guile-Emacs.""" start="00:15:18.883" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Guile-Emacs is also being developed""" start="00:15:21.733" video="mainVideo-guile" id="subtitle"]]
[[!template text="""by a small worker cooperative,""" start="00:15:25.300" video="mainVideo-guile" id="subtitle"]]
[[!template text="""so donations are a pretty direct way to support the project.""" start="00:15:27.916" video="mainVideo-guile" id="subtitle"]]
[[!template text="""If you do nothing else, I recommend going to the website""" start="00:15:33.200" video="mainVideo-guile" id="subtitle"]]
[[!template text="""and subscribing to our mailing lists""" start="00:15:37.166" video="mainVideo-guile" id="subtitle"]]
[[!template text="""so that you can keep up with news on the project.""" start="00:15:40.733" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""If you're watching this at Emacsconf,""" start="00:15:45.600" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""If you're watching this at EmacsConf,""" start="00:15:45.600" video="mainVideo-guile" id="subtitle"]]
[[!template text="""there will be a Q&A session immediately following this,""" start="00:15:47.333" video="mainVideo-guile" id="subtitle"]]
-[[!template text="""and thanks for watching.""" start="00:15:50.483" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and thanks for watching!""" start="00:15:50.483" video="mainVideo-guile" id="subtitle"]]
</div>
diff --git a/2024/info/guile-before.md b/2024/info/guile-before.md
index 1f73e75b..8f671956 100644
--- a/2024/info/guile-before.md
+++ b/2024/info/guile-before.md
@@ -10,7 +10,7 @@ Status: TO_CAPTION_QA
# Talk
-<div class="vid"><video controls preload="none" id="guile-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 15:57 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-guile">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.webm">Download --main.webm (61MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/iizGyFwoAetXBw3Uy67vwj">View on Toobnix</a></li></ul></div></div>
+<div class="vid"><video controls preload="none" id="guile-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 15:57 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-guile">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.vtt.vtt">Download --main.vtt.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.webm">Download --main.webm (61MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/iizGyFwoAetXBw3Uy67vwj">View on Toobnix</a></li></ul></div></div>
# Q&A