summaryrefslogtreecommitdiffstats
path: root/2024/info/gypsum-after.md
blob: 8cec71beb31a89798505781570e633be505559eb (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
<!-- Automatically generated by emacsconf-publish-after-page -->


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

[[!template text="""Hi, my name is Ramin Honary,""" start="00:00:00.000" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and I'm here to talk to you today""" start="00:00:02.781" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""about my clone of Emacs and Emacs Lisp that I've written in""" start="00:00:04.481" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Scheme so far.""" start="00:00:08.941" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So I am an Emacs enthusiast since 2017,""" start="00:00:12.981" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""currently employed as a full stack developer,""" start="00:00:19.103" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""mostly working with Python and JavaScript,""" start="00:00:22.665" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""although my true love is functional""" start="00:00:25.226" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""programming, especially Haskell, and Scheme. I started""" start="00:00:27.080" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""learning Scheme about two years ago. And for the past year,""" start="00:00:30.560" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I've been working on a project that I'm tentatively calling""" start="00:00:33.680" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Gypsum. Naming things is hard. It's not a great name.""" start="00:00:36.280" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I'm open to suggestions.""" start="00:00:40.795" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""But yes, this is the project in which""" start="00:00:43.377" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I am trying to write an Emacs Lisp interpreter in Scheme.""" start="00:00:45.898" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""There are many clones already of Emacs. You've probably""" start="00:00:53.320" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""heard of Edwin, Jed, Jedit, Jove, Lem, MG, Yi, Zile. Edwin""" start="00:00:58.200" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""itself is also written in Scheme--MIT Scheme. These only""" start="00:01:04.800" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""clone the key bindings of Emacs and not Emacs Lisp itself.""" start="00:01:10.520" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""The only alternative to GNU Emacs that I'm aware of is""" start="00:01:16.160" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""XEmacs, which is a fork of GNU Emacs.""" start="00:01:21.200" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Most people don't use Emacs for the key bindings. I mean,""" start="00:01:26.680" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""this is anecdotally speaking, but the people who I've""" start="00:01:30.360" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""talked to, I would say don't use Emacs for the key bindings.""" start="00:01:34.040" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""They use it really more because of the power of Emacs Lisp.""" start="00:01:39.520" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Emacs is as powerful as any system shell, perhaps even more""" start="00:01:42.680" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""powerful than system shells like Bash.""" start="00:01:48.440" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""The reason why it's so powerful is because""" start="00:01:53.106" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""there's a good programming language""" start="00:01:55.208" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""which you can use to control everything on your system. You""" start="00:01:56.960" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""can control processes. You can load and save files.""" start="00:02:00.040" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""You can create files. You can configure things.""" start="00:02:01.733" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""You can capture the output of processes in buffers.""" start="00:02:06.417" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""You can filter text through buffers.""" start="00:02:10.220" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And a good programming language is what""" start="00:02:13.422" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""you need in order to do all of this. So one big goal of this""" start="00:02:17.840" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""project is to try to stick as closely as possible to the R7RS""" start="00:02:23.480" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""standard Scheme definition. That is the latest Scheme""" start="00:02:29.240" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""standard: R7. And this is just because I want my project to""" start="00:02:33.860" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""work on many scheme implementations, not just Guile.""" start="00:02:38.920" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Although Guile certainly is the reference""" start="00:02:43.520" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""implementation.""" start="00:02:45.500" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So another goal is to be able to run any &quot;init.el&quot;.""" start="00:02:50.240" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So you can take your existing &quot;init.el&quot;""" start="00:02:56.460" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and run it in my program without""" start="00:02:59.741" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""significant changes. That's one of my goals in the end.""" start="00:03:01.721" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I should be able to do that.""" start="00:03:05.341" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""A lot of people invest significant""" start="00:03:07.316" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""time in their configs, and it's kind of disruptive""" start="00:03:09.120" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""if you want to change editors,""" start="00:03:12.718" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""not be able to use your Emacs Lisp""" start="00:03:14.301" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""config. And so I think a useful Emacs clone""" start="00:03:16.501" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""would be able to clone Emacs Lisp well enough""" start="00:03:21.647" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""that you can run your &quot;init.el&quot;.""" start="00:03:25.128" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And so overall, why am I doing this? It's just because I like""" start="00:03:29.800" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""the Scheme programming language. I love its simplicity and""" start="00:03:33.880" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""its power. It's an extremely well thought-out language.""" start="00:03:38.000" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""It's one of those languages where you can understand the""" start="00:03:42.440" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""entire language from top to bottom. You can read the entire""" start="00:03:46.160" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""specification and understand it yourself.""" start="00:03:48.740" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""It's like the computers I grew up with when I was a kid.""" start="00:03:52.880" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""They were all very simple computers""" start="00:03:57.240" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""in the late 80s, early 90s. And back then,""" start="00:03:59.320" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""theoretically, an engineer could understand the entire""" start="00:04:02.560" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""system at the software level all the way down to the circuit""" start="00:04:05.580" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""level. You can't do that nowadays. And so nowadays, my""" start="00:04:07.960" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""computer is not really a physical computer anymore. It's""" start="00:04:12.160" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""the Scheme language standard itself. That is the core of""" start="00:04:16.860" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""computation, of all of computation for me. And I would like""" start="00:04:21.080" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""to use it as more than just an academic curiosity. It was""" start="00:04:25.600" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""originally designed for teaching at MIT, but it's found use""" start="00:04:30.580" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""in industry. And the R7RS standard is still""" start="00:04:36.360" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""relatively new. It's over 10 years old at this point,""" start="00:04:41.400" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""but hasn't, I mean, the""" start="00:04:44.271" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Scheme ecosystem itself is already fairly small.""" start="00:04:48.000" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""There still, I don't think,""" start="00:04:52.981" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""has been a whole lot of adoption of R7RS""" start="00:04:54.342" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""quite yet. Kind of a shame.""" start="00:04:56.360" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So I'd like a project like this, a""" start="00:04:58.786" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""very large scale, kind of a killer-app-like project""" start="00:05:01.120" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""where you're developing a text editor""" start="00:05:04.010" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and perhaps even an integrated development environment""" start="00:05:05.921" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""in Scheme, I think would be very useful""" start="00:05:09.061" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""just even as a study of, you know, what""" start="00:05:11.921" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""can this language do? And just overall,""" start="00:05:13.800" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""there seems to be a lot of interest in""" start="00:05:18.462" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Guile-based Emacs and well, maybe a""" start="00:05:21.221" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Scheme-based Emacs, but Guile in particular.""" start="00:05:24.321" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""There has been talk of""" start="00:05:27.164" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""changing Emacs Lisp or the core of the Emacs Lisp over to""" start="00:05:28.221" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Guile for about 30 years or so,""" start="00:05:33.661" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""talks originally in the early""" start="00:05:38.470" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""mid 90s. There were discussions between Richard Stallman,""" start="00:05:41.200" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Tom Lord, and Aubrey Jaffer. They considered""" start="00:05:44.800" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""actually replacing Emacs Lisp with Scheme.""" start="00:05:49.920" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""In 1999, and going for about 10 years,""" start="00:05:53.220" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""someone named Ken Raeburn actually started""" start="00:05:56.828" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""a project where he started writing Emacs in Guile.""" start="00:06:01.080" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""My project is very similar to this.""" start="00:06:07.241" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Here's a quote from his webpage, which is still up, even""" start="00:06:11.860" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""though it hasn't been updated in 15 years.""" start="00:06:15.121" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""This project that I have started""" start="00:06:18.400" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""is for converting GNU Emacs to Guile""" start="00:06:20.520" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""as its programming language.""" start="00:06:23.102" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Support for Emacs Lisp will continue to exist,""" start="00:06:24.122" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""of course, but it may be through""" start="00:06:26.083" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""translation and/or interpretation.""" start="00:06:27.761" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""The Lisp engine itself""" start="00:06:29.245" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""may no longer be the core of the program.""" start="00:06:30.340" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And this is my goal as well. In 2010,""" start="00:06:32.907" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Andy Wingo and Ludovic Courtes""" start="00:06:38.539" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""took maintainership of the Guile project.""" start="00:06:41.880" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""From 2009, so while Andy... 2009""" start="00:06:46.403" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""to 2011, the first Emacs Lisp interpreter was already being""" start="00:06:52.720" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""implemented in Guile. And even to this day,""" start="00:06:59.400" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""this Emacs Lisp interpreter ships with Guile.""" start="00:07:02.090" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And so this was happening""" start="00:07:05.652" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""while Andy Wingo took control of the project.""" start="00:07:06.600" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""In 2011, so shortly after Andy Wingo""" start="00:07:10.113" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""took control of the project,""" start="00:07:13.834" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Guile 2.0 was released. And also in 2011, in the summertime,""" start="00:07:15.120" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""someone named Robin Templeton, I believe it was a Google""" start="00:07:22.280" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Summer of Code project, started actually trying to""" start="00:07:27.280" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""incorporate libguile, that's the guile interpreter, as a""" start="00:07:33.520" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""linkable or loadable library, linking it to the Emacs""" start="00:07:38.720" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""executable, and then providing some built-in functions in""" start="00:07:45.200" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Emacs that allows you to call the scheme""" start="00:07:49.180" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""interpreter, the Guile Scheme interpreter, from Emacs.""" start="00:07:54.760" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And so it's not like a wrapper around the REPL like Geiser or""" start="00:07:58.740" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""SLIME. It's actually the whole Scheme interpreter loaded""" start="00:08:02.240" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""into your Emacs process. And that means your Emacs will have""" start="00:08:08.960" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""the ability to actually load compiled Scheme programs and""" start="00:08:13.940" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""actually run them and share memory with Emacs Lisp""" start="00:08:20.080" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""processes. And, well, Robin Templeton will explain all of""" start="00:08:25.880" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""this. They're presenting today, and I'm very excited to""" start="00:08:29.800" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""actually see their presentation. They'll explain""" start="00:08:33.040" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""everything.""" start="00:08:37.080" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So, let's see. Moving on. 2020, someone named Vasilij""" start="00:08:40.180" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Schneidermann, I'm not sure how you pronounce that, published""" start="00:08:45.680" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""an overview called The State of Emacs Lisp on Guile. Let's see""" start="00:08:49.040" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""if I have that here. Yep, it's this page right here. He goes""" start="00:08:53.640" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""into detail about who has done what so far, and what can you do""" start="00:08:58.400" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""in Guile with Emacs Lisp so far, and so on. Like, what is the""" start="00:09:04.880" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""state of the project overall?""" start="00:09:09.760" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And so (speak of the devil)""" start="00:09:12.718" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""(Andy Wingo on social media).""" start="00:09:15.900" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So, 2020 to present. Guile Emacs""" start="00:09:20.961" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""is dead? So there's GCC Emacs now.""" start="00:09:24.340" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Emacs Lisp now has its own JIT compiler.""" start="00:09:32.072" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And it seems like over the past few years,""" start="00:09:35.753" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Emacs Lisp has kind of moved off into the direction of""" start="00:09:39.260" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""becoming its own programming language in its own right,""" start="00:09:44.320" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and it is decidedly Common Lisp-flavored. It is""" start="00:09:48.440" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""very similar to Common Lisp,""" start="00:09:51.840" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and that seems to be the direction""" start="00:09:54.167" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""that it's headed now, and I don't know if there's really any""" start="00:09:56.520" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""interest anymore amongst the Emacs maintainers of""" start="00:10:00.720" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""continuing with a Guile-based Emacs.""" start="00:10:05.560" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""But as far as I know, there's still a lot of interest in the""" start="00:10:09.800" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""community amongst Scheme and Lisp and Emacs users who are""" start="00:10:13.320" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""interested in maybe continuing to try to get Guile to become""" start="00:10:19.600" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""the core of Emacs, or if not, you know, what Robin Templeton""" start="00:10:24.780" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""has been doing, at least trying to get Guile a""" start="00:10:28.080" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""language, a first class supported language in Emacs. So""" start="00:10:31.640" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""that's enough talking. Let me just show you what I have so""" start="00:10:37.280" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""far. The GUI is barely working, because I have very little""" start="00:10:40.000" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""experience with GTK or GObject Introspection. It's very""" start="00:10:45.240" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""difficult to debug, so it's very slow to develop. Any crash""" start="00:10:50.040" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""at C level produces no stack traces. So far, most of the""" start="00:10:53.640" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""crashes that I've experienced are due to simple mistakes""" start="00:10:58.200" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""like passing the wrong data type. So, so far, no, not a whole""" start="00:11:03.200" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""lot of need for GDB or rebuilding all GTK, glib,""" start="00:11:09.400" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and so on with the debugging symbols.""" start="00:11:14.175" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""But yes, still development's been""" start="00:11:17.878" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""very slow. I'm learning as I go. I've chosen to use Guile GI as""" start="00:11:19.320" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""the foundation for the GUI. Let me just load it up quick here.""" start="00:11:25.500" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""&quot;load main-guile.scm&quot;. And this will launch the GUI. I also""" start="00:11:30.600" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""happen to have a REPL that runs in a separate thread and""" start="00:11:39.900" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""submits any form that you type to be evaluated inside of the""" start="00:11:44.200" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""running GUI environment. But you can just type stuff. So""" start="00:11:49.760" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""&quot;hello world.&quot; And of course there is...""" start="00:11:57.080" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""as you can see, it's not quite rendering correctly.""" start="00:12:02.904" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""This &quot;*Messages*&quot; thing here,""" start="00:12:08.060" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""that should be over here, obviously. I haven't been able to""" start="00:12:11.091" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""figure out how to get those little details down. But yeah,""" start="00:12:13.761" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""you can do M-:, and you get your eval,""" start="00:12:17.821" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and you can just evaluate, like (what's an emacs,)""" start="00:12:23.216" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""(or what's a Scheme-specific thing?)""" start="00:12:26.638" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Like &quot;(import (srfi 1))&quot;, and""" start="00:12:29.281" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""let's see, do &quot;(iota 20)&quot;, for example.""" start="00:12:37.680" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And so that is the procedure""" start="00:12:44.889" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""that iterates and produces some 20 elements of a""" start="00:12:46.781" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""list. Or you can do something like, let's see,""" start="00:12:52.901" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""string-append &quot;hello&quot; with space &quot;world&quot;.""" start="00:12:58.420" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And you get the result and so on. And,""" start="00:13:08.115" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""you know, scheme allows you to return multiple values. So""" start="00:13:10.260" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""what I have done here is just""" start="00:13:13.040" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""every value is captured in a list""" start="00:13:14.999" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and it prints all of the return values in the list.""" start="00:13:17.980" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So if a procedure returns no values,""" start="00:13:21.002" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""you get an empty list.""" start="00:13:23.463" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And that's that. It's still quite buggy.""" start="00:13:26.145" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So like, here's a bug""" start="00:13:29.406" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""that I can reproduce fairly consistently.""" start="00:13:31.520" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I can, yeah, if you do...""" start="00:13:37.320" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""there seems to be a problem with a""" start="00:13:41.408" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""widget being freed too soon, so it will crash. I'm going to""" start="00:13:46.200" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""try and solve that, hopefully, before this presentation""" start="00:13:49.720" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""goes live. Let's see here.""" start="00:13:53.320" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""The Emacs Lisp parser is based on""" start="00:13:57.110" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Guile Emacs Lisp. So the Guile Emacs Lisp interpreter that""" start="00:13:59.840" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""ships with Guile, that is what I am using. I've actually""" start="00:14:04.400" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""copied and pasted the source code from the Guile source base""" start="00:14:09.040" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""into my own project so that I can iterate on it more quickly.""" start="00:14:15.720" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And I've already had to make some modifications to the""" start="00:14:20.640" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Emacs Lisp interpreter in Guile. So here's the evaluator.""" start="00:14:25.800" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I've actually already modified the parser and the lexer a""" start="00:14:29.900" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""little bit. And it's at least able to parse""" start="00:14:33.080" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""all of the &quot;subr.el&quot; program, the Emacs Lisp program.""" start="00:14:37.859" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""It can actually load that, but not""" start="00:14:43.150" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""evaluate it, or parse it, but not evaluate it...""" start="00:14:44.600" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Read, not eval.""" start="00:14:47.571" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""By the time this goes live, I will have submitted a patch""" start="00:14:51.720" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""upstream. And that's another goal of this project,""" start="00:14:53.960" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""incidentally, is that anything that we can contribute to""" start="00:14:57.560" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Guile and any built-in functions that we can implement""" start="00:15:01.200" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I would like to, for this project, I would like to try and""" start="00:15:08.360" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""contribute upstream to Guile. The Emacs Lisp interpreter""" start="00:15:11.000" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""is not working well, unfortunately. So this copy, this is""" start="00:15:15.680" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""the copy of the code base (from this commit in particular)""" start="00:15:21.360" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and well, I can't get it working. I can't actually get the""" start="00:15:29.480" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""non-copy, the actual built-in version of""" start="00:15:34.980" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""the Emacs Lisp interpreter to work properly quite yet.""" start="00:15:37.760" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So let me quick go to, (what is this here?)""" start="00:15:41.212" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Guile Elisp. So suppose you have this""" start="00:15:47.034" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""&quot;eval-elisp&quot; procedure here and it takes""" start="00:15:51.880" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""an Elisp environment and then it evaluates an expression in that""" start="00:15:56.000" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""environment. And evaluates to a value. So this""" start="00:16:00.640" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""is the standard way of doing it in Guile.""" start="00:16:03.600" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""If you can see here,""" start="00:16:05.085" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""you've got this expression, &quot;compile&quot; expression.""" start="00:16:06.040" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""This is like &quot;eval&quot;. And so actually trying to load this.""" start="00:16:09.947" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So let's do &quot;load gypsum&quot;. (Let's see here. This is, no),""" start="00:16:16.860" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I wanted to &quot;import gypsum backend guile Elisp&quot;.""" start="00:16:24.673" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And if I actually want to do this... So elisp eval, first of all,""" start="00:16:35.760" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""it says it failed because there's an unbound variable""" start="00:16:39.040" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""&quot;elisp-eval&quot;. Don't know what it's talking about.""" start="00:16:42.880" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""There's no such variable in any of my programs.""" start="00:16:45.349" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I have no idea what's going on here.""" start="00:16:48.230" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""You can try to run eval elisp on some simple form like""" start="00:16:51.152" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""(+ 1 2). And it gives you this exception. This works.""" start="00:16:59.280" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""This is the same issue that I have with all of the,""" start="00:17:04.760" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""every version of the Emacs Lisp Interpreter in Guile.""" start="00:17:09.580" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I can get it to work with this big &quot;,L&quot; mode.""" start="00:17:13.201" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So I can actually do (+ 1 2) here.""" start="00:17:18.752" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I can do &quot;princ&quot; like here.""" start="00:17:21.594" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""That all works fine. It gives me, for some reason,""" start="00:17:26.817" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""a stack trace here.""" start="00:17:30.120" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And yeah, so it's a bit, it's not well-documented.""" start="00:17:34.941" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""The code base is fairly old.""" start="00:17:43.927" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""As I said, it was developed around 2011,""" start="00:17:45.888" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and it's fairly opaque, and I have not been able to figure out""" start="00:17:50.400" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""how to get Emacs Lisp in Guile working smoothly. So I have""" start="00:17:53.240" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""started writing my own Emacs Lisp interpreter. And, uh,""" start="00:17:57.960" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""&quot;gypsum/elisp/eval-tests.scm&quot;.""" start="00:18:04.540" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""It's, uh, not entirely ready.""" start="00:18:13.400" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I can show you some of the tests at least.""" start="00:18:18.270" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Here is a simple Emacs Lisp program""" start="00:18:21.696" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""that you can evaluate.""" start="00:18:25.037" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""You got &quot;progn&quot;, &quot;setq&quot; a to 3, &quot;setq&quot; b to 5,""" start="00:18:25.857" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""&quot;setq&quot; c to the sum of a and b, return c.""" start="00:18:31.140" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And this at least works correctly.""" start="00:18:35.840" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""As you can see here, the result is eight. Um, but""" start="00:18:39.060" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""the &quot;let*&quot; semantics are not completed yet.""" start="00:18:43.280" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Lots of work left to do there.""" start="00:18:46.521" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So in the time I have left, I guess I can just,""" start="00:18:51.104" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""talk a little bit about what my plans""" start="00:18:54.465" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""are for the future.""" start="00:18:56.760" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I would like to begin by evaluating or""" start="00:18:59.388" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""actually loading the &quot;subr.el&quot; into my Emacs Lisp""" start="00:19:02.600" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""interpreter. I actually have tests set up for that as well,""" start="00:19:06.760" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""so I can actually select any form I want from &quot;subr.el&quot;.""" start="00:19:09.640" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I can just run this through my interpreter""" start="00:19:15.910" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and test to see if everything is working""" start="00:19:18.833" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""once I get that far.""" start="00:19:21.594" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And yeah, let me just say that this is my formal appeal to the""" start="00:19:28.780" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""community for help on this project. Emacs Lisp has""" start="00:19:33.240" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""1,393 built-in functions.""" start="00:19:37.800" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I could never implement that many functions on my own, so if""" start="00:19:41.180" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""this project is going to be useful to anybody in any""" start="00:19:45.040" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""reasonable amount of time, I'm going to need help.""" start="00:19:47.600" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And I know that there are people out there""" start="00:19:51.115" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""who are very interested in a Guile-based Emacs,""" start="00:19:53.477" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and so if you're watching this,""" start="00:19:56.399" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""please feel free to contact me""" start="00:19:59.000" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""on social media or over e-mail.""" start="00:20:00.522" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""My job, the way I see it, is if there's enough interest,""" start="00:20:05.700" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and I do get a lot of people interested in""" start="00:20:09.648" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""starting to contribute,""" start="00:20:12.065" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""my job will be to document the building and testing process""" start="00:20:13.200" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and make sure that it is as easy as possible to contribute""" start="00:20:17.920" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""code to this project. I want to document the system""" start="00:20:21.040" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""architecture. I'll write blog posts. I'll do videos on""" start="00:20:24.080" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""PeerTube explaining how everything works. And I will""" start="00:20:27.600" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""prioritize which built-in functions""" start="00:20:31.880" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I think are probably going to be the most necessary,""" start="00:20:34.200" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""the most essential to get the interpreter running,""" start="00:20:36.463" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and then find low-hanging fruit,""" start="00:20:40.879" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""functions that are easy for people to implement""" start="00:20:42.560" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""as a good introduction to getting them started""" start="00:20:46.520" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""on contributing to the project.""" start="00:20:50.846" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And then, of course, I will take""" start="00:20:53.948" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""responsibility myself of making sure that we can""" start="00:20:56.680" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""get the Elisp interpreter to the point""" start="00:21:01.720" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""where it can run the Emacs regression tests.""" start="00:21:03.775" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""These are the test suites that are used""" start="00:21:09.080" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""to test Emacs Lisp itself in the GNU Emacs code base. And so""" start="00:21:13.334" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""ERT is itself written in Emacs Lisp. And so""" start="00:21:20.360" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I think if we implement enough of the built-in functions""" start="00:21:24.560" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""to be able to run ERT,""" start="00:21:27.034" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""then we can actually start""" start="00:21:29.934" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""using the GNU Emacs regression tests""" start="00:21:31.196" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""to test our own interpreter, our own Emacs clone.""" start="00:21:33.618" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And of course, I'll make sure that there's at least""" start="00:21:39.249" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""one usable GUI. I'm currently working on Guile GI""" start="00:21:41.200" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and GTK. It would be great to have an...""" start="00:21:45.834" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""ANSI terminal based...""" start="00:21:51.397" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""something that works in your terminal emulator.""" start="00:21:53.880" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And yeah, it would be great if someday soon,""" start="00:21:58.220" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""hopefully, we get enough done""" start="00:22:00.284" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""that you can actually contribute a patch to this project""" start="00:22:03.160" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""from within the Gypsum editor itself.""" start="00:22:06.095" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I was going to do an overview,""" start="00:22:11.779" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""but that would be for more of an hour-long presentation.""" start="00:22:13.381" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So I'm out of time. I guess the last thing""" start="00:22:19.680" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I should quickly say is there's no""" start="00:22:22.928" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""meta object protocol in this""" start="00:22:25.450" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""project. I think that's a little bit too difficult""" start="00:22:27.160" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""to port to various scheme implementations.""" start="00:22:29.002" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So I've created a substitute, which I'm""" start="00:22:30.963" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""calling &quot;functional lenses&quot;, which is inspired by the""" start="00:22:33.740" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Haskell project of the same name.""" start="00:22:36.960" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Everything in this project is based on functional lenses.""" start="00:22:42.060" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Yeah, also a lot a work went into the keymaps data structure.""" start="00:22:47.512" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""The point being that I think I have""" start="00:22:52.604" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""a pretty good foundation here upon which we can build,""" start="00:22:55.207" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""even though there isn't an actual, there isn't""" start="00:22:58.590" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""a lot done in the actual prototype itself, not yet anyway,""" start="00:23:00.840" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""but I made sure to get the fundamentals down""" start="00:23:04.700" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""from the beginning. And so I think we have something""" start="00:23:08.420" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""like a solid foundation on which to build.""" start="00:23:11.081" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So, I'm going to conclude it there.""" start="00:23:16.309" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And here's my contact details. Like I said,""" start="00:23:21.231" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""this is a project, I'm appealing to the community of all""" start="00:23:24.600" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""people who are interested in Guile and Emacs to help""" start="00:23:29.320" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""contribute to this project. I see myself as just getting the""" start="00:23:31.900" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""ball rolling. Again, taking-off from the work""" start="00:23:35.840" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""that Ken Raeburn left behind, with my own""" start="00:23:40.601" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""from-the-ground-up implementation. So yeah,""" start="00:23:46.279" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""contact me: e-mail, you can take a look at my blog""" start="00:23:50.638" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""where I talk about what I have done.""" start="00:23:53.859" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""My source code, the code for this project, is up on""" start="00:23:57.420" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Codeberg... The presentation... this""" start="00:24:00.760" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""presentation, the home page for this presentation, you""" start="00:24:06.140" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""can find more details there. Oh, I'm on""" start="00:24:09.380" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""ActivityPub as well, so my handle is""" start="00:24:15.560" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""@ramin_hal9001@fe.disroot.org, and I'm on everyday.""" start="00:24:19.140" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So yeah, please feel free to contact me if you're interested,""" start="00:24:27.120" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and thank you for your attention.""" start="00:24:30.940" video="mainVideo-gypsum" id="subtitle"]]



Captioner: ramin

Questions or comments? Please e-mail [ramin.honary@gmail.com](mailto:ramin.honary@gmail.com?subject=Comment%20for%20EmacsConf%202023%20gypsum%3A%20Gypsum%3A%20my%20clone%20of%20Emacs%20and%20ELisp%20written%20in%20Scheme)


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