summaryrefslogtreecommitdiffstats
path: root/2023/info/emacsen-after.md
blob: 8992f28d3e46005f938c595bf345967211cb6754 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
<!-- Automatically generated by emacsconf-publish-after-page -->


<a name="emacsen-mainVideo-transcript"></a>
# Transcript


Introduction

[[!template new="1" text="""Hello, my name is Fermin.""" start="00:00:00.000" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Today, I'm going to talk about the Emacsen family,""" start="00:00:03.200" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""the design of an Emacs, and the importance of Lisp.""" start="00:00:06.960" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So we're going to talk about Lisp.""" start="00:00:11.160" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""I want to start from the end.""" start="00:00:13.520" video="mainVideo-emacsen" id="subtitle"]]

Why Lisp matters

[[!template new="1" text="""The first question I want to ask is""" start="00:00:17.000" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""why I think Lisp matters.""" start="00:00:19.040" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""When I'm talking about Lisp here,""" start="00:00:21.400" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""I'm talking about the idea of Lisp,""" start="00:00:22.880" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""so the family of languages that are Lisp.""" start="00:00:27.560" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""But given that there's no formal specification of Lisp,""" start="00:00:30.120" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""so the opinion might vary. I will expect that Lisp,""" start="00:00:34.720" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""most of the Lisp have these kind of features.""" start="00:00:40.600" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""The first one is homoiconic:""" start="00:00:44.440" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""the code is data, basically.""" start="00:00:46.240" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""They also have a REPL: read-eval-print loop.""" start="00:00:49.800" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""That is very powerful and can help in development.""" start="00:00:52.560" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Also, I think a good Lisp""" start="00:00:57.760" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""should have a powerful macro system.""" start="00:01:00.360" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""I'm good with compile-time macros,""" start="00:01:03.320" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""but read-time is also interesting.""" start="00:01:05.760" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""There's a lot of Lisp that you can choose.""" start="00:01:07.600" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""There's the main three ones, of course,""" start="00:01:10.280" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""with Scheme, Common Lisp, and Clojure.""" start="00:01:12.000" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Scheme by Guile, Common Lisp by Common Lisp,""" start="00:01:13.840" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and Clojure by Clojure or ClojureScript.""" start="00:01:19.675" video="mainVideo-emacsen" id="subtitle"]]

Why Emacs Lisp was chosen

[[!template new="1" text="""So let's talk about Emacs Lisp.""" start="00:01:26.640" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""I didn't mention Emacs Lisp.""" start="00:01:28.080" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""I'm going to talk about why Emacs Lisp""" start="00:01:29.680" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""was chosen for an Emacs editor.""" start="00:01:32.520" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""We're going to explore this kind of design of the Emacs.""" start="00:01:35.600" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""And Emacs Lisp is the main language of it. Why?""" start="00:01:39.160" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Given that there were a few alternatives at the time,""" start="00:01:42.280" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""why Emacs Lisp was chosen?""" start="00:01:44.960" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So RMS, Richard Stallman, needed a Lisp,""" start="00:01:48.160" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and there wasn't one available at the time.""" start="00:01:51.920" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Keep in mind, this was the early 80s.""" start="00:01:54.280" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Stallman was writing at that point the GCC, I think,""" start="00:01:57.040" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and he was writing the core components""" start="00:02:03.241" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""of what is going to become GNU.""" start="00:02:07.975" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""He needed an editor. He wanted Lisp. He wanted Emacs.""" start="00:02:10.441" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So he wrote Emacs Lisp. So at that time,""" start="00:02:15.500" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""the functionality was more important than &quot;perfection.&quot;""" start="00:02:20.281" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""What I mean [by] &quot;perfection&quot; is: we programmers""" start="00:02:24.600" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""sometimes like to make everything good""" start="00:02:26.640" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""or very, very good when sometimes, indeed,""" start="00:02:33.360" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""it's more important that it works""" start="00:02:36.480" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""to do the task that it should.""" start="00:02:39.120" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""And it's not a bad language.""" start="00:02:42.920" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""It's not that bad. At that time, it was mostly nice.""" start="00:02:44.200" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Today, it's good enough, I think.""" start="00:02:50.240" video="mainVideo-emacsen" id="subtitle"]]

Other "Emacsen"

[[!template new="1" text="""He wasn't the first one, the GNU Emacs,""" start="00:02:54.841" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""nor the only one, of course.""" start="00:02:59.461" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""There were others: Hemlock, Zmacs, and Climacs...""" start="00:03:02.541" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Two of them, I think, were written in Common Lisp,""" start="00:03:06.440" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and Zmacs was written in a Lisp from a Lisp machine,""" start="00:03:08.981" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""so it was an implementation of Emacs.""" start="00:03:14.480" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Not GNU Emacs, but the original idea""" start="00:03:16.640" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""of Emacs for a Lisp machine.""" start="00:03:19.040" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So Hemlock was written in Common Lisp,""" start="00:03:22.080" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""but it's no longer used and no longer developed,""" start="00:03:23.760" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""as far as I know. And Climacs, it was developed,""" start="00:03:26.080" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""but it was abandoned, I think.""" start="00:03:29.000" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So three of them failed for different reasons.""" start="00:03:31.520" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Zmacs was because of the Lisp machine market crash,""" start="00:03:33.640" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and yeah, it also failed.""" start="00:03:37.880" video="mainVideo-emacsen" id="subtitle"]]

Why not Common Lisp?

[[!template new="1" text="""So Emacs got alone. And in the 90s, interesting to explore,""" start="00:03:38.581" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""some people suggest that why""" start="00:03:44.040" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""now that we have a standard Lisp, right,""" start="00:03:46.480" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""because Common Lisp was standardized in '94,""" start="00:03:49.680" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""why don't we change Emacs Lisp to Common Lisp?""" start="00:03:52.560" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""These are the other reasons I think are important,""" start="00:03:56.720" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""because that's why Stallman didn't choose Common Lisp.""" start="00:03:59.000" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""But I think the main one""" start="00:04:01.160" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""that I didn't write here""" start="00:04:02.040" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""is that Stallman wasn't a big fan of Common Lisp,""" start="00:04:03.760" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and he was at the time the main developer""" start="00:04:09.040" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and maintainer, of course, for Emacs.""" start="00:04:12.680" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So he chose not to move to Common Lisp.""" start="00:04:14.041" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""But other reasons may be why...""" start="00:04:16.440" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Because he had a late and painful standardization.""" start="00:04:18.480" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Keep in mind, the first book that Guy Steele wrote""" start="00:04:22.920" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""was in 1984. The standardization finished in 19--""" start="00:04:28.040" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""sorry, in 1984 was the first book""" start="00:04:32.240" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and the standardization finished in 1994.""" start="00:04:38.280" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So, like, 10 years of difference from one to the other.""" start="00:04:44.421" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""10 years of a lot of talk, a lot of money,""" start="00:04:48.120" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and a lot of pain probably.""" start="00:04:51.880" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""The Lisp usage declined in the 90s""" start="00:04:56.400" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""due to the AI winter.""" start="00:04:59.200" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""We all know about the Lisp machine market crash.""" start="00:05:00.960" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""And the failure of commercial Lisp machine was""" start="00:05:03.360" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""inevitable at that point.""" start="00:05:08.840" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So all the potential Emacs friends died.""" start="00:05:12.240" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""And also a lot of Emacs Lisp was already available.""" start="00:05:17.161" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Emacs was already an amateur utility.""" start="00:05:21.280" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Unix won the war of the operating system, as we know,""" start="00:05:24.560" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and Emacs Lisp was available in Unix,""" start="00:05:29.960" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""or in GNU/Linux, as we know,""" start="00:05:33.840" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""which is the most successful implementation of Unix.""" start="00:05:36.920" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Sorry, BSD. Okay.""" start="00:05:40.480" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So Emacs won by being the &quot;better&quot; alternative.""" start="00:05:44.208" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""I'm quoting &quot;better&quot; here because""" start="00:05:48.400" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""I think Emacs does have a better design""" start="00:05:50.000" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and, well, it was the one that survived, right?""" start="00:05:53.700" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Which is the more important thing for a software or,""" start="00:05:56.960" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""you know... So Emacs won by being free,""" start="00:06:00.040" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""also in price, which I think the Lisp machine wasn't.""" start="00:06:05.160" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So that was also very good. It was included.""" start="00:06:08.400" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""It had, and it still has, of course,""" start="00:06:11.520" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""a nice collection of packages""" start="00:06:14.560" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""that improve the standard functionality.""" start="00:06:15.880" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""It was easy to extend because of the nature of Lisp.""" start="00:06:20.680" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""And it has a very good integration with GNU/Linux,""" start="00:06:23.480" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""of course. It was created to write it.""" start="00:06:26.040" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""It makes sense that it's very good""" start="00:06:29.400" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""for a system administration perspective.""" start="00:06:31.080" video="mainVideo-emacsen" id="subtitle"]]

Common Lisp is still not dead or is always dead

[[!template new="1" text="""But I think Common Lisp is not dead yet.""" start="00:06:39.120" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Or some people say that it's always dead,""" start="00:06:43.320" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""so you cannot kill the something that is always dead.""" start="00:06:45.720" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So I don't always code in C,""" start="00:06:48.400" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""but when I do, it's Lisp. I'm not a big fan of C""" start="00:06:50.720" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""for a lot of things, but yeah.""" start="00:06:54.200" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Why I think Common Lisp is still relevant""" start="00:06:58.600" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and can be used for all kind of application,""" start="00:07:02.440" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""both commercially and non-commercially.""" start="00:07:05.400" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""The first one is the main implementation""" start="00:07:09.280" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""of Common Lisp, which is called SBCL, which is awesome.""" start="00:07:11.840" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""It's fast. It's a very good extension.""" start="00:07:16.800" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Basically, it's the reference one today.""" start="00:07:19.400" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""The namespaces of common Lisp,""" start="00:07:21.640" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""I really like the implementation.""" start="00:07:25.560" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Some people don't like it. It's a matter of taste.""" start="00:07:26.880" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""But I think it's really good.""" start="00:07:28.720" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""I have a timeless standard. So it was standardized""" start="00:07:29.640" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""in the 90s, as I said.""" start="00:07:32.920" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""And it doesn't really need a new standard.""" start="00:07:35.980" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Some people say it does need, but I don't think so.""" start="00:07:38.881" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Also it does have macro readers,""" start="00:07:44.120" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""which I think is a very nice feature of Common Lisp""" start="00:07:46.000" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""that other Lisp doesn't seem to have,""" start="00:07:49.160" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""or a lot of them don't: in my mind, Emacs Lisp and Clojure.""" start="00:07:51.240" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Also, it's image-based development,""" start="00:07:56.720" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""which is also quite unique to Common Lisp.""" start="00:07:58.200" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""I don't know all the Lisp that does have this.""" start="00:08:00.400" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Basically, you develop a REPL""" start="00:08:04.360" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and then you dump the entire REPL into an image.""" start="00:08:05.360" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Java would be like a core dump.""" start="00:08:10.160" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""And you create an executable.""" start="00:08:12.080" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Which at the time, I guess in the 90s,""" start="00:08:14.160" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""was a huge one, right?""" start="00:08:17.160" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Because you have the entire language, and the REPL,""" start="00:08:18.200" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and the code. But today are like 20 MB,""" start="00:08:20.680" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""which in today's standard is nothing.""" start="00:08:23.800" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""There's pictures in your phone larger than 20 MB.""" start="00:08:26.600" video="mainVideo-emacsen" id="subtitle"]]

Lem is a nice Emacsen implementation

[[!template new="1" text="""So there's a new Emacs in town--well, Emacs, not Emacs,""" start="00:08:30.080" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Which is Lem. I think it's a very good Emacs implementation.""" start="00:08:39.240" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""What I mean by &quot;Emacs&quot; here is not a clone of GNU Emacs,""" start="00:08:43.440" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""but an Emacs-inspired editor with similar characteristics,""" start="00:08:46.680" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and written in a Lisp,""" start="00:08:51.560" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""which is why I said that Lisp was very important.""" start="00:08:53.520" video="mainVideo-emacsen" id="subtitle"]]

Why not just use GNU Emacs?

[[!template new="1" text="""So first, I'm going to address the elephant in the room,""" start="00:08:58.260" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and the question that maybe most""" start="00:09:01.560" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""of you are now thinking.""" start="00:09:05.040" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Why not just use GNU Emacs? It's the project.""" start="00:09:06.160" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""It's the main one, right? Why choose another one?""" start="00:09:12.920" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So Lem is relatively new, 2018.""" start="00:09:15.760" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""And it can explore different ideas.""" start="00:09:18.200" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""It was developed by Sasaki-san.""" start="00:09:20.200" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Basically, it was mostly a one-month project,""" start="00:09:21.680" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""but we are getting there. I'm not the maintainer.""" start="00:09:26.720" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""I'm a developer of Lem. So given that it's""" start="00:09:31.941" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""relatively new, it can explore different ideas.""" start="00:09:36.960" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""You're not bound to a community or backwards compatibility.""" start="00:09:39.240" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""You can explore different ideas,""" start="00:09:43.520" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and I think that's always nice.""" start="00:09:45.440" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Having multiple options creates competition,""" start="00:09:46.200" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""which benefits the community. So Emacs and Vim,""" start="00:09:49.840" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""the competition between the two""" start="00:09:52.640" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""always create nice packages like evil or, you know...""" start="00:09:54.840" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""It's really good to have some kind of a competition,""" start="00:09:59.120" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""healthy competition.""" start="00:10:03.720" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""And it doesn't share any code base with GNU Emacs.""" start="00:10:06.160" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""I want to clarify this because some people think that""" start="00:10:08.200" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Lem is kind of a, you know, Spacemacs or Doom.""" start="00:10:12.880" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""No, it doesn't share any code.""" start="00:10:16.120" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""It has zero Emacs. So that's it.""" start="00:10:19.960" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Getting this out of the way.""" start="00:10:27.760" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Why I think Lem is interesting.""" start="00:10:29.200" video="mainVideo-emacsen" id="subtitle"]]

Why Lem

[[!template new="1" text="""I'm going to show why Lem.""" start="00:10:31.080" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Why? You can try Lem, and maybe you like it.""" start="00:10:32.360" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""First thing, these are the features""" start="00:10:37.760" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""that I really like from it.""" start="00:10:41.320" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Can be different from person to person,""" start="00:10:42.800" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""but I think these are the main ideas""" start="00:10:45.575" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""it brings to the table and are really interesting.""" start="00:10:48.280" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""I want to say that Lem is not a research project.""" start="00:10:50.000" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""It's not like some people did that""" start="00:10:53.120" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and it's still in development. No, no.""" start="00:10:55.720" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""This is a usable product that can be used""" start="00:10:57.240" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""to [do] day-to-day programming""" start="00:11:00.040" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""in a very good experience.""" start="00:11:02.040" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""This is not like--I want to clarify this""" start="00:11:04.560" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""because some people bring some exploratory projects.""" start="00:11:06.280" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""This is not that one. This is finished.""" start="00:11:08.720" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Well, finished in the way that you can use it.""" start="00:11:10.800" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""It's not, you know, have everything in place.""" start="00:11:14.720" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So let's continue.""" start="00:11:17.800" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""It's written 100% in Common Lisp.""" start="00:11:20.640" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""I say this because Emacs is not""" start="00:11:22.160" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""100% in Emacs Lisp.""" start="00:11:23.840" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""You have to modify the C code,""" start="00:11:26.280" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""I think, well, if you... You don't have to,""" start="00:11:28.360" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""but if you want to change the internals, you do.""" start="00:11:31.840" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""I think that given that Lem does not care""" start="00:11:34.000" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""about the implementation of the language itself--""" start="00:11:38.880" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""so for example, Lem doesn't have to deal with""" start="00:11:41.200" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""how Common Lisp works, it just used the language, right?""" start="00:11:44.040" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""It's on top of the language.""" start="00:11:48.200" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""You can say that. Emacs Lisp is Emacs and Emacs Lisp,""" start="00:11:50.800" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""so you have to, you have both in the same place,""" start="00:11:53.880" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""which is, well, it's a double-edged sword, right?""" start="00:11:56.080" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Then you have the both--similar to Emacs--""" start="00:12:00.320" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""you have ncurses and SDL2 frontends.""" start="00:12:03.320" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""One is terminal-based and the other is graphical""" start="00:12:05.640" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""using the SDL2 library,""" start="00:12:08.720" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""which you can do a lot of crazy things.""" start="00:12:10.400" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Of course, it's meant to program games and stuff,""" start="00:12:13.760" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""but Lem uses, and it works fairly well.""" start="00:12:16.160" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""You can program games if you want.""" start="00:12:19.680" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Not that you need to or anything, but we have Tetris.""" start="00:12:21.880" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So there's that.""" start="00:12:27.560" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Also, separate front-end interface.""" start="00:12:29.000" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So like I said, you have two, but you can create more.""" start="00:12:31.720" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""In the past, had an electron one,""" start="00:12:34.160" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""but it got abandoned for obvious reasons, I think. Sorry.""" start="00:12:36.440" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""This idea is taken from Neovim that had a lot of frontends.""" start="00:12:41.320" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""In fact, we don't have that many,""" start="00:12:45.840" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""but not that many people we have two.""" start="00:12:48.120" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""That works fairly well.""" start="00:12:49.640" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""We have superb development experience thanks to SLIME.""" start="00:12:51.675" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So we have Micro,""" start="00:12:56.680" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""which is a SLIME version for Lem, basically.""" start="00:13:01.320" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""SLIME is awesome and Micro is also awesome.""" start="00:13:04.040" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""We have a very strong development experience""" start="00:13:09.000" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""that we don't have for a Lisp,""" start="00:13:12.320" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""which I think is very important.""" start="00:13:15.400" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""If you want someone to develop packages or to use your tool,""" start="00:13:17.400" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""your Emacs at least,""" start="00:13:20.320" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""you need to have a very good development experience,""" start="00:13:22.720" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""which enhance the extensions for the editor.""" start="00:13:28.760" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So we have also Vim-like integration.""" start="00:13:34.040" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""This for me was mostly mandatory""" start="00:13:36.720" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""because I'm an evil-mode user, and I think it's really good.""" start="00:13:39.400" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Because evil-mode is very good and the VMode,""" start="00:13:44.440" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""which it's called, even though it's more like Vim mode,""" start="00:13:49.480" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""it's called VMode. It's written by""" start="00:13:51.720" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Fukamachi-san and it's really good.""" start="00:13:54.160" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So yeah, that's the thing that I think Lem brings to""" start="00:13:59.160" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""the table and that's really interesting.""" start="00:14:01.960" video="mainVideo-emacsen" id="subtitle"]]

Similarities and differences

[[!template new="1" text="""So I'm going to do a small demo of Lem, a Emacs example.""" start="00:14:03.080" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""First, the similarities,""" start="00:14:10.520" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""the nomenclature is very similar: modes, buffers,""" start="00:14:11.680" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""commands... The commands are very similar in nature.""" start="00:14:14.120" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""It was written with GNU Emacs in mind""" start="00:14:17.440" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""to mimic a lot of things.""" start="00:14:20.040" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""I think GNU Emacs is the best Emacs implementation""" start="00:14:24.360" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""in that way. So why not just take what is working, right?""" start="00:14:29.080" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""I have similar command,""" start="00:14:33.720" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""but flexible to add other default ones.""" start="00:14:35.600" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""It's not like Emacs that you have Emacs commands.""" start="00:14:39.400" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Lem has Emacs command by default,""" start="00:14:42.400" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""but you can easily change that""" start="00:14:45.160" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""with other default ones, right?""" start="00:14:47.760" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""It's like, you can think of it like a major mode, right?""" start="00:14:49.920" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Well, more like a global mode,""" start="00:14:52.160" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""sorry. That's a global mode of Emacs commands,""" start="00:14:54.440" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""or something like that.""" start="00:14:57.961" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""In general, the feeling is really close.""" start="00:14:59.361" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So you will tell that it's really close to how both work,""" start="00:15:01.520" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""similar commands, and that shows.""" start="00:15:05.920" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Differences, Common Lisp is not Emacs Lisp,""" start="00:15:07.840" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""it's similar in the surface.""" start="00:15:12.360" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So it uses `defun`, you know, have parentheses""" start="00:15:13.920" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and yada, yada, but it's not the same language, really,""" start="00:15:16.280" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and sometimes you will find""" start="00:15:18.720" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""that the differences are substantial.""" start="00:15:20.840" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""The internals are completely different,""" start="00:15:23.260" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""of course, nothing, well, completely.""" start="00:15:24.860" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""They have a buffer implementation and other things,""" start="00:15:27.480" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""but in general, yeah, aside from that,""" start="00:15:29.720" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""it's completely different.""" start="00:15:32.360" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""And it's true that GNU Emacs""" start="00:15:34.080" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""has a better documentation tutorial.""" start="00:15:36.200" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So GNU Emacs for me, I think it's""" start="00:15:37.480" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""one of the best-documented software ever.""" start="00:15:39.720" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""We're trying to go there, but we're still not there.""" start="00:15:41.760" video="mainVideo-emacsen" id="subtitle"]]

Demo

[[!template new="1" text="""Let's do the demo. So to open Lem, you compile it,""" start="00:15:49.600" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and then you have it available,""" start="00:15:54.080" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and you open Lem. As you can see,""" start="00:15:55.760" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""we have the temporary buffer. On the top left is the mode--""" start="00:15:57.720" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""not mode,""" start="00:16:00.840" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""the beam, insert, normal, visual. This is the V mode, right?""" start="00:16:03.280" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""In the top right corner, we have fundamental,""" start="00:16:07.240" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""which is the major mode, then paredit,""" start="00:16:10.280" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""which is like the minor mode, but you know,""" start="00:16:11.600" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""this is like the paredit for Emacs.""" start="00:16:15.080" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""In the top left buffer,""" start="00:16:16.080" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""you have the current buffer.""" start="00:16:19.200" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So let's open the... Emacs, we all know how to do this.""" start="00:16:22.480" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""This is a command, like explore this command,""" start="00:16:26.480" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""like `open-init-file`. This opens the init file,""" start="00:16:29.320" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""which is in this directory, in `~/.lem/init.lisp`.""" start="00:16:31.480" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""As you can see, this is very similar, right?""" start="00:16:34.320" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""You define a command, which is not interactive,""" start="00:16:38.240" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and then you get the buffer, right?""" start="00:16:40.280" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""This is a... So my personal command...""" start="00:16:42.960" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Let's go to the one that I just opened. Init file, right?""" start="00:16:44.920" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So this is a command that I did,""" start="00:16:48.880" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""which is `find-file`.""" start="00:16:52.160" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""This is very similar to [??], but just `find-file`.""" start="00:16:53.440" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""As you can see, very similar.""" start="00:16:56.600" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""This is the way that you program in Lem.""" start="00:16:58.400" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""This is the major mode, which is Lisp,""" start="00:17:01.760" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""that we're seeing at the top, right?""" start="00:17:04.840" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""And we can connect if we `slime-self-connect`.""" start="00:17:06.960" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""This is the prompt. This is the REPL.""" start="00:17:10.480" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So if we... Keep in mind that this is Common Lisp,""" start="00:17:14.120" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""so this has different things.""" start="00:17:17.960" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So we have to go to the Lem package,""" start="00:17:20.440" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""which is very important. This has namespaces, right?""" start="00:17:22.720" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""It's not the same. And we can say, okay,""" start="00:17:26.200" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""`current-buffer`. We get the buffer.""" start="00:17:29.040" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""We can explore everything that is in it, right?""" start="00:17:32.320" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""We have all this stuff. This is... If you're familiar""" start="00:17:35.200" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""with SLIME or Sly, this is it.""" start="00:17:38.560" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""It's just that we can say, buffer, I think it's `buffer-name`.""" start="00:17:41.160" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Yes. And we can take this,""" start="00:17:46.280" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and then we'll give you the name.""" start="00:17:49.160" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So as you can see, the development experience""" start="00:17:50.800" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""is really powerful. We can also `lisp-scratch`,""" start="00:17:54.360" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""which transform... basically apply""" start="00:17:57.640" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""the major mode of Lisp to the temporary buffer.""" start="00:18:00.680" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""This is very similar to Emacs.""" start="00:18:02.640" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Let's go back to the theme. I think that's it.""" start="00:18:06.720" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Thank you all very much for listening to me.""" start="00:18:12.000" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""I think I point out""" start="00:18:13.880" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""the Emacsen family is really interesting.""" start="00:18:15.240" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Lisp is really good, and GNU Emacs is really good,""" start="00:18:17.000" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and I think Lem is also pretty awesome.""" start="00:18:19.280" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So thank you all very much.""" start="00:18:21.200" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""I'll be answering the question now. And happy hacking.""" start="00:18:23.120" video="mainVideo-emacsen" id="subtitle"]]



Captioner: sachac

Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20emacsen%3A%20The%20Emacsen%20family%2C%20the%20design%20of%20an%20Emacs%20and%20the%20importance%20of%20Lisp)


<!-- End of emacsconf-publish-after-page -->