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
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
|
<!-- Automatically generated by emacsconf-publish-after-page -->
<a name="mcclim-mainVideo-transcript"></a>
# Transcript
[[!template new="1" text="""Introduction""" start="00:00:01.750" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Welcome everyone to my EmacsConf presentation,""" start="00:00:01.750" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""where we're going to look at Lisp's vdemo[??] app from 1978,""" start="00:00:15.370" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""but done in modern Elisp.""" start="00:00:22.139" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Then we're going to look at getting inferior-lisp working,""" start="00:00:28.460" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""my dear Common Lisp.""" start="00:00:33.390" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Then we're going to use the Common Lisp interface manager,""" start="00:00:37.003" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""the open source child of the Common Lisp interface manager,""" start="00:00:42.159" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""McCLIM, from inferior-lisp in Superior Lisp,""" start="00:00:47.813" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""which is the opposite order that I initially thought""" start="00:00:55.710" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""we were going to do things in,""" start="00:00:58.375" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""but this is how it's kind of turned out.""" start="00:00:59.326" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So it's this article,""" start="00:01:00.829" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""I thought, from 1978, was interesting to us today.""" start="00:01:01.845" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""“Programming in an Interactive Environment:""" start="00:01:05.999" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""the ‘Lisp’ Experience.”""" start="00:01:08.752" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Explaining what all these LISP programmers were doing to""" start="00:01:12.005" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""people unfamiliar with LISP programming.""" start="00:01:19.478" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""“LISP systems have been used for""" start="00:01:22.566" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""highly interactive programming for more than a decade.”""" start="00:01:24.451" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""This was from 1978.""" start="00:01:27.604" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And we're just going to go and,""" start="00:01:29.990" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""almost verbatim, port the demo application for LISP""" start="00:01:34.109" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""out of 1978 Interlisp and into Emacs Lisp.""" start="00:01:40.017" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And we're going to do it without Org Mode,""" start="00:01:49.720" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""because I think everyone is finding out""" start="00:01:51.478" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""how great Org Mode is already.""" start="00:01:54.281" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""For inferior Lisp, I thought instead of org-mode,""" start="00:01:58.100" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""we'll theme it around slime-mode and then it turned out""" start="00:02:00.837" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""most of this presentation happens in Emacs Lisp,""" start="00:02:02.873" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""because this is an Emacs Lisp conference.""" start="00:02:06.109" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""But I found out that there's ielm-mode,""" start="00:02:09.379" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""which is pretty similar to slime-mode,""" start="00:02:12.849" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""but in our hearts, we can imagine that this is""" start="00:02:19.054" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""an Emacs example, homed around slime-mode,""" start="00:02:23.660" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Superior Lisp Interaction Mode for Emacs, instead of org-mode.""" start="00:02:27.498" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Though, you know, I do secretly use org-mode as well,""" start="00:02:33.403" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""not very secretly.""" start="00:02:36.440" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""But that means we're kind of improvising,""" start="00:02:37.958" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""improvising a presentation mode.""" start="00:02:46.790" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So we have this big buffer of Elisp, and let's just...""" start="00:02:49.986" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""This is me, not Sandewall, out of interest,""" start="00:02:56.726" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""let's make a keyboard macro,""" start="00:03:00.614" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""go get the S-expression wherever the cursor is,""" start="00:03:04.216" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""move it to the next S-expression, paste it in here,""" start="00:03:10.290" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""and the keyboard macro, alright.""" start="00:03:13.661" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""What was basically happening...""" start="00:03:20.190" video="mainVideo-mcclim" id="subtitle"]]
[[!template new="1" text="""Calendar""" start="00:03:21.702" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So the demo application in this case is""" start="00:03:21.702" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""a scheduling application.""" start="00:03:25.356" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And so you can imagine improvising a calendar like this""" start="00:03:28.792" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""if you weren't existingly using an""" start="00:03:34.731" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""org-mode integrated calendar.""" start="00:03:36.683" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So, you know, just have a list and maybe""" start="00:03:39.252" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""each list is of sublists, where the first element,""" start="00:03:43.989" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""the car of the sublist, I guess,""" start="00:03:49.579" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""is a sensible-sounding date format, like sat dec 7,""" start="00:03:51.931" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""this is clearly the first day of EmacsConf.""" start="00:03:56.119" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Then after that, a list of basically from and to times,""" start="00:03:59.939" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""and then a quick written description of whatever event""" start="00:04:06.280" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""was at that time.""" start="00:04:18.642" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So similar to what we were seeing recently""" start="00:04:19.876" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""as of me recording this in our Structure and""" start="00:04:23.180" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Interpretation of Computer Programs study group,""" start="00:04:25.499" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""you have all these little methods, sorry, defuns.""" start="00:04:29.902" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So hours of a time is actually just car of the time,""" start="00:04:35.759" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""minutes of the time, cadr of time.""" start="00:04:40.763" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And so we all know these kind of little,""" start="00:04:43.216" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""basically turning car and cadr,""" start="00:04:46.720" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""which we do use into descriptive names like from and to.""" start="00:04:50.223" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""You can see how this lines up with the appointments.""" start="00:04:53.143" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So for "reproducibly building emacs" described event,""" start="00:04:56.379" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""I guess from would be 16 25.""" start="00:05:01.751" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Let's just grab that and literally use those,""" start="00:05:05.680" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""because we're in interactive programming, right?""" start="00:05:07.708" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So we have this quoted form and then""" start="00:05:11.711" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""let's do from of that. Great.""" start="00:05:18.266" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And let's do minutes.""" start="00:05:22.290" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So from 16 25, 16 45 reproducibly building Emacs,""" start="00:05:25.308" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""so when I do from to that I get 16 25""" start="00:05:31.548" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""when I do minutes to 16 25, I get 25""" start="00:05:34.851" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""and a description of this number in octal and hexadecimal,""" start="00:05:42.057" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""out of interest.""" start="00:05:45.590" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""What was up next? Okay, getting nextday from a date.""" start="00:05:48.047" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And so, what was it? Saturday, December 27th.""" start="00:05:53.553" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So what happens? So this function,""" start="00:05:57.073" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""I guess this was part of Sandewall's personal exploration of""" start="00:06:01.345" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""atoms using symbols with property lists,""" start="00:06:06.032" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""with an attached property list to every symbol.""" start="00:06:12.238" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And so you can kind of see how this works.""" start="00:06:15.942" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""I get whatever was keyed by the symbol nextweekday out of""" start="00:06:21.510" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""the day symbol, so I guess we would do...""" start="00:06:32.800" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""so if we had Sat December 6, I guess we get Sat""" start="00:06:36.579" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Oh, it destructures that itself somehow, get nextweekday.""" start="00:06:48.140" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Sorry, nextday.""" start="00:06:58.429" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""set December 6th""" start="00:07:02.280" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""But of course these weren't defined yet,""" start="00:07:10.270" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""so what if we (setf (get 'sat 'nextweekday) 'sun)""" start="00:07:12.782" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""and it's going to be sun right""" start="00:07:23.793" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And then if we (nextday '(sat dec 6)),""" start="00:07:28.990" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Sunday, December 7th.""" start="00:07:36.720" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Yeah, so that kind of makes sense in an intuitive way.""" start="00:07:38.942" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And you can see cond is being used.""" start="00:07:41.778" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So if you're not a Lisp person, cond evaluates a condition.""" start="00:07:43.850" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""If the condition returns non-nil,""" start="00:07:51.588" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""it executes the code attached to that condition.""" start="00:07:54.758" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""It evaluates each of these conditions in terms""" start="00:07:57.210" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""and then stops when one returns non-nil,""" start="00:08:00.297" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""as you might expect as a Lisp programmer.""" start="00:08:04.901" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Let's keep marching along.""" start="00:08:07.670" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Okay, so we have to populate this.""" start="00:08:09.672" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And this was an interesting one.""" start="00:08:11.741" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""As you can see, this was my attempt.""" start="00:08:13.543" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""let days mon tue wed, so forth.""" start="00:08:15.612" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Then I used cl-loop from Emacs Lisp, you know,""" start="00:08:19.249" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""for day in days, for nex in cdr days, setf nextweekday.""" start="00:08:23.453" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""This I thought was surprisingly deep, was that""" start="00:08:32.610" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Lisp programmers, Sandewall thought,""" start="00:08:36.432" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""are basically constantly trying to break new ground and they""" start="00:08:38.485" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""lose interest very quickly when""" start="00:08:43.723" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""that's not what they're doing.""" start="00:08:45.425" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And he was making the point that breaking new ground""" start="00:08:46.843" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""involves solving a problem exactly once.""" start="00:08:50.229" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And so you kind of should do it""" start="00:08:54.232" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""in the most expedient way possible""" start="00:08:56.003" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""to solve it kind of for the first time.""" start="00:08:58.672" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And after that, it's not breaking new ground anymore.""" start="00:09:00.992" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And so I thought that was a kind of fun point""" start="00:09:07.663" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""from Sandewall's paper that we could kind of chew on.""" start="00:09:10.400" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Do something similar for months and month lengths.""" start="00:09:15.121" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""But as we can see, if I get Feb,""" start="00:09:21.059" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""nrdr days I think that characters in 1978,""" start="00:09:32.120" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""characters and symbols in 1978 were more precious""" start="00:09:42.082" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""which is why Sandewall was writing in this abbreviated way.""" start="00:09:45.468" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""We might write more verbosely these days.""" start="00:09:47.871" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""We get 28th but it is in fact a leap year,""" start="00:09:51.391" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""so let's just set that to be 29. Now, it's fine.""" start="00:09:54.277" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Then I guess if we do, we were doing nextday.""" start="00:09:59.048" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Sure, nextday. I don't know what day it was.""" start="00:10:06.038" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""let's assume it was Sunday Feb 28""" start="00:10:10.994" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""some kind of typo crept in there, but we can deal with it.""" start="00:10:22.716" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Let's just setf get sun nextweekday month.""" start="00:10:26.230" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So once we've solved it once, we should be fine, right?""" start="00:10:43.944" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Okay, I think I have to speed up a bit.""" start="00:10:48.698" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Yeah, there we go, Monday February 29th and then""" start="00:10:52.000" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""what if we nextday... Tuesday March 1st.""" start="00:10:55.605" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Okay, it basically seems to be working.""" start="00:11:01.244" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And I'd argue it's actually fun that""" start="00:11:03.750" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""we kind of had to do that.""" start="00:11:06.448" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Then, just imagining you're kind of functioning with""" start="00:11:08.585" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""other people: day begins at 900, ends at 1700,""" start="00:11:13.523" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""so kind of a 9:00 to 5:00, imagining... though perhaps,""" start="00:11:18.361" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""shorter is more appropriate,""" start="00:11:23.915" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""but let's not quibble about that.""" start="00:11:25.368" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""What was happening next in this app?""" start="00:11:27.420" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""holesin. Oh, yeah, so get me the free slots""" start="00:11:29.839" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""in from start time, list of appointments,""" start="00:11:35.712" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""remembering characters, I guess, were more precious""" start="00:11:40.110" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""is my theory.""" start="00:11:45.288" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And then an end time, so if I go holesin and then from 900""" start="00:11:46.906" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""to where I've written 9 space 0 0""" start="00:11:59.050" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""and what are my appointments?""" start="00:12:03.389" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So I have a list of appointments that""" start="00:12:07.459" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""need to have start times and finish times.""" start="00:12:09.980" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So let's go 12 59 to 13 01.""" start="00:12:12.132" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""The description, I guess, can be test.""" start="00:12:23.580" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And then let's finish that at 1700,""" start="00:12:25.429" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""like we kind of thought.""" start="00:12:29.115" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Oops, some of these were meant to be arguments.""" start="00:12:37.830" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Okay, there we go.""" start="00:12:54.800" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And so the available times between nine and five,""" start="00:12:56.042" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""if there's one appointment from 12:59 to 1:01,""" start="00:13:01.397" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""are from 9 to 1259 and from 1 past 1 to 5,""" start="00:13:05.580" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""which is kind of what we were expecting.""" start="00:13:13.792" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And so our appointment app is kind of coming along.""" start="00:13:15.728" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Then we have commonholes,""" start="00:13:18.931" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""kind of works in a sensible way.""" start="00:13:23.430" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Do we have, what are some common holes from""" start="00:13:33.890" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""two lists of appointments, I guess? commonholes.""" start="00:13:36.249" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""I guess, let's have one person have an appointment""" start="00:13:50.903" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""from 9 to 10.""" start="00:13:53.850" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""That's going to be their only appointment.""" start="00:13:59.569" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And let's have another person have an appointment""" start="00:14:02.558" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""from 9.30 to 10.30.""" start="00:14:05.996" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Oh, we didn't do beforetime yet.""" start="00:14:14.450" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""This is the order Sandewall implemented things in there.""" start="00:14:18.441" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Ok, there.""" start="00:14:22.345" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So the commonholes are from 9.30 to 10.""" start="00:14:25.515" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""That's actually the overlapping time.""" start="00:14:34.272" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""I'll re-record this""" start="00:14:42.232" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""if some kind of gremlin has crept into my things.""" start="00:14:43.900" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And then, what did we first start by doing?""" start="00:15:04.150" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Emacsconf track 1 and Emacsconf track 2,""" start="00:15:07.389" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""and we'll do it on Saturday, December 7.""" start="00:15:11.494" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""commontime, and I'm being prompted, of course.""" start="00:15:21.140" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""emacsconf-track-1,""" start="00:15:23.806" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""emacsconf-track-2,""" start="00:15:29.676" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""the date that we grabbed.""" start="00:15:33.370" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Let's say we want five minutes.""" start="00:15:36.585" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And, as always, I'm forgetting to quote things.""" start="00:15:49.120" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And so my opportunities for common times""" start="00:15:52.468" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""between emacsconf-track-1 to emacsconf-track-2""" start="00:15:56.739" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""on the first day of the conference,""" start="00:16:01.376" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Saturday, December 7th, for five minutes.""" start="00:16:02.869" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""I have an opportunity between 9:20 and 9:40,""" start="00:16:05.864" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""11:40 and 13:00, 13:10, 13:25,""" start="00:16:08.984" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""13:45, 13:55, and 16:15 to 16:25.""" start="00:16:14.489" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So I think that's all working.""" start="00:16:19.662" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And it was done with almost exactly the same code,""" start="00:16:23.881" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""except for my loopy populating symbol plist bits earlier,""" start="00:16:31.355" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""in Interlisp in 1978 as Emacs Lisp in 2024.""" start="00:16:39.015" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""I thought that was pretty interesting that""" start="00:16:46.539" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""you could do that.""" start="00:16:48.675" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""I think setf get was put prop""" start="00:16:49.542" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""was the biggest difference in 1978 Interlisp and""" start="00:16:57.099" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""modern Emacs Lisp.""" start="00:17:02.787" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And obviously modern Emacs Lisp has Common Lisp loop in it,""" start="00:17:04.740" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""kind of. It's another big difference.""" start="00:17:09.228" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""How are we doing for time? 17 minutes?""" start="00:17:11.914" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Great, because now let's get a bit closer to what""" start="00:17:16.450" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""my talk title has promised.""" start="00:17:19.805" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""We're going to use Common Lisp from Emacs Lisp""" start="00:17:21.991" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""and we're going to use Common Lisp Interface Manager,""" start="00:17:25.211" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""the open source implementation of""" start="00:17:28.130" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Common Lisp Interface Manager from""" start="00:17:30.166" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Inferior Lisp from Emacs Lisp.""" start="00:17:33.836" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And what we just went over in Sandewall's paper...""" start="00:17:37.300" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""This was the starting point, and Sandewall says,""" start="00:17:45.550" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""well, if you just kind of jammed these ideas using lists""" start="00:17:47.783" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""you just kind of made hour a synonym for car and""" start="00:17:51.587" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""minute a synonym for cadr and so forth,""" start="00:17:55.391" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""you can then make a whole bunch of improvements.""" start="00:17:59.795" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Can we actually get a glimpse of the …""" start="00:18:04.166" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""No, I didn't really write this.""" start="00:18:09.239" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Yeah, so you can see I basically just ported out of""" start="00:18:10.473" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""the Interlisp code in the text of this paper.""" start="00:18:14.294" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Yeah, you see from lambda of appointment,""" start="00:18:17.580" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""car appointment, and that's defineq.""" start="00:18:21.350" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""I guess Interlisp in 1978 used defineq,""" start="00:18:24.954" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""whereas we used defun in Elisp,""" start="00:18:27.907" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""but I'd encourage you to explore that yourselves.""" start="00:18:33.361" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""But the extension that I wanted to develop today is,""" start="00:18:35.314" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""since Common Lisp interface manager is just Lisp,""" start="00:18:38.601" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""and Inferior Lisp is just Lisp,""" start="00:18:41.237" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""and Emacs Lisp is just Lisp,""" start="00:18:43.472" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""and Interlisp in 1978 is just Lisp,""" start="00:18:45.341" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""we could kind of use them all together""" start="00:18:48.928" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""in a kind of funky way.""" start="00:18:50.162" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""But a complaint you often hear, or a statement of confusion""" start="00:18:51.480" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""that you often hear as a Lisp person,""" start="00:18:57.086" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""people from other languages often can't kind of figure out""" start="00:19:00.423" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""how to get started with Lisp.""" start="00:19:06.762" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So I'm just going to try and do everything here and now.""" start="00:19:09.765" video="mainVideo-mcclim" id="subtitle"]]
[[!template new="1" text="""Inferior Lisp and McCLIM""" start="00:19:12.802" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And this is the second piece of my three pieces,""" start="00:19:12.802" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""so let's just get inferior lisp and McCLIM happening.""" start="00:19:18.407" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""We normally use slime Superior Lisp Interaction Mode""" start="00:19:22.928" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""for Emacs, which we could get from Emacs's package manager.""" start="00:19:29.318" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""If I go package-list-packages and then we wait""" start="00:19:41.897" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""for however fast my network is,""" start="00:19:48.954" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""we're going to see how long it's been""" start="00:19:54.270" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""since I updated something.""" start="00:19:55.361" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Yeah, but you see it's in MELPA, right?""" start="00:19:58.629" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""It's got to be somewhere here.""" start="00:20:15.750" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Yeah, all right.""" start="00:20:18.082" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So there's one slime available in non-GNU,""" start="00:20:18.551" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""one possibly more recent one available in""" start="00:20:21.470" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""the MELPA package repositories.""" start="00:20:26.758" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""I don't know about you,""" start="00:20:30.278" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""but I can sympathize with people who feel confused by this""" start="00:20:31.013" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""because I think if you look online,""" start="00:20:33.666" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""if you found a search engine result,""" start="00:20:36.519" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""it doesn't customize these like I customize them.""" start="00:20:38.687" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So let's just do this.""" start="00:20:44.160" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""customize-variable.""" start="00:20:45.995" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""package-archives.""" start="00:20:48.197" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Yeah and you can see here I've ins-ed gnu, non-gnu, and melpa.""" start="00:20:54.518" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""It's melpa, not melpa stable.""" start="00:21:00.542" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Saved and set.""" start="00:21:03.478" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So that's how I do that.""" start="00:21:06.810" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""We're just kind of totally get an inferior lisp working.""" start="00:21:08.384" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And then, like we saw before,""" start="00:21:17.130" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""this might occur, buffer is still open.""" start="00:21:20.949" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""No. occur. slime.""" start="00:21:23.148" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So we could install and execute that.""" start="00:21:35.330" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""I cloned slime since Common Lisp people""" start="00:21:38.681" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""might use slime and swank, like McCLIM does outside of Emacs.""" start="00:21:41.784" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""I think we can secretly see""" start="00:21:48.924" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""I've got it here already in my ~/.emacs.d/slime,""" start="00:21:51.093" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""but you could install it like that. The hotkey is I,""" start="00:21:56.064" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""and then execute the install.""" start="00:22:00.169" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""I realize you all already know this,""" start="00:22:02.071" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""but many of you might not yet be Common Lisp programmers,""" start="00:22:04.039" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""and you can use both Superior and Inferior Lisp.""" start="00:22:06.809" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Instead of package archives in Emacs,""" start="00:22:10.370" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""in Inferior Lisp, and with great controversy,""" start="00:22:14.783" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""we often use QuickLisp.""" start="00:22:19.755" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""People sometimes complain QuickLisp releases""" start="00:22:22.758" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""get out of date quite quickly.""" start="00:22:25.828" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""But there was one recently, so they're pretty in date.""" start="00:22:28.630" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And so there should be a …""" start="00:22:32.167" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Yeah, so basically you download quicklisp.lisp,""" start="00:22:35.371" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""you check its SHA-256 sum.""" start="00:22:39.158" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So I guess in, ooh, over here, if I press D,""" start="00:22:44.910" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""~screwtape/downloads/quicklisp.lisp.""" start="00:22:51.229" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Great. If we open a shell, we realize that""" start="00:22:53.756" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""this is just riveting for all of our experts there.""" start="00:22:57.426" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""sha256 ~/Downloads/quicklisp.lisp""" start="00:23:06.450" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Your SHA-256 might be different to mine.""" start="00:23:19.720" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Somebody please tell me during the actual conference,""" start="00:23:22.601" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""the right Emacs idiom to do this.""" start="00:23:25.621" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""I guess it will be tools decrypt something.""" start="00:23:29.225" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""But then once you have QuickLisp,""" start="00:23:33.930" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""let's go back to our shell.""" start="00:23:36.214" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""I'm on OpenBSD or a BSD, so I type pkg_add ecl""" start="00:23:41.810" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""to get embeddable Common Lisp.""" start="00:23:46.675" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""However, I think I already have it.""" start="00:23:53.590" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And then, let's start ecl [embeddable Common Lisp].""" start="00:23:58.540" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Quicklisp inserts itself already,""" start="00:24:04.670" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""but just loading that quicklisp.lisp file""" start="00:24:11.290" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""kind of would get you here anyway.""" start="00:24:14.970" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Now let's (ql:quickload :mcclim)""" start="00:24:17.039" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""I'm actually following my plan.""" start="00:24:27.140" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""McCLIM is kind of like Emacs in that""" start="00:24:33.269" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""it handles all sorts of graphical stuff""" start="00:24:38.344" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""like if you have GTK Emacs,""" start="00:24:41.013" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""you know, it can do really a lot of stuff.""" start="00:24:42.798" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""That's the reason why compiling and loading""" start="00:24:44.383" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""the McCLIM package takes a while""" start="00:24:50.504" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""and I do use my old computer laptop,""" start="00:24:53.175" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""my old computer challenge laptop all the time,""" start="00:24:57.012" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""so when you do this, your computer will be""" start="00:25:00.349" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""substantially faster or you will be feeling""" start="00:25:02.735" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""smug about how slow you're running your computer,""" start="00:25:06.404" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""and so there's no problem.""" start="00:25:12.759" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Next, we're going to start Swank""" start="00:25:15.531" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""which is the Lisp part of Emacs's slime-mode.""" start="00:25:17.366" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""If I remember, we looked at this before""" start="00:25:27.649" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""in my .emacs.d,""" start="00:25:32.348" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""and then there should be slime/start-swank.lisp.""" start="00:25:35.050" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Let's just grab that and load it.""" start="00:25:41.699" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""You don't have to type #p.""" start="00:25:46.293" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""The string will work as well as the path name,""" start="00:25:48.870" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""but it's kind of fun to do so.""" start="00:25:51.200" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Now, slime-connect.""" start="00:25:52.668" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""You installed slime earlier.""" start="00:25:55.437" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Default values.""" start="00:25:57.559" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Oh, the reason we had to do this""" start="00:25:59.074" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""and not use Slime, start Slime normally was that""" start="00:26:01.844" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""CLIM, Common Lisp Interface Manager,""" start="00:26:07.214" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""McCLIM, implementation of the""" start="00:26:10.786" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Common Lisp Interface Manager spec, also uses Swank""" start="00:26:12.254" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""and McCLIM really wants to be in the driver's seat.""" start="00:26:16.675" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""We can have our Emacs connect""" start="00:26:20.162" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""to the Swank that McCLIM was already running.""" start="00:26:23.332" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So (in-package :clim-user)...""" start="00:26:28.553" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""I don't know if this is an Emacs Lisp idiom,""" start="00:26:30.873" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""so you normally have user packages to absorb user code""" start="00:26:33.625" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""just for fooling around.""" start="00:26:37.162" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Then let's just use clim at all.""" start="00:26:42.110" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And so clim does lots of things around presentations""" start="00:26:47.606" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""but one thing it does is automatically, to a large extent,""" start="00:26:53.094" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""generate graphical user interfaces.""" start="00:26:58.367" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So there's a lot to it that's not about graphics,""" start="00:27:04.006" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""kind of richer interfaces than""" start="00:27:09.444" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""ANSI Common Lisp's character streams.""" start="00:27:14.082" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""But let's use it to grab a graphical pop-up""" start="00:27:19.389" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""that returns a value.""" start="00:27:23.258" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So we have this accepting-values tool.""" start="00:27:24.743" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""t is just choose whatever you think the default stream is.""" start="00:27:28.013" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""We're going to want our own window, t as well,""" start="00:27:32.150" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""so just a keyword argument.""" start="00:27:36.688" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""After that, we can just write things like (accept 'string).""" start="00:27:38.640" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And I'm just doing this in, for people only listening,""" start="00:27:44.978" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""I've just done this in my ECL Slime REPL.""" start="00:27:47.933" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Enter a string: foo bar baz.""" start="00:27:50.986" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Alt-Enter, I think, is the shortcut to return that.""" start="00:27:56.530" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""As you can see, its first return was "foo bar baz",""" start="00:27:59.150" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""and it had second and third returns,""" start="00:28:02.298" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""string being the type, presentation type that it got,""" start="00:28:04.366" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""and t, I think, to indicate that it exited successfully.""" start="00:28:10.155" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""We can also do expression, might be more interesting.""" start="00:28:16.189" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""There are a whole bunch of these.""" start="00:28:20.966" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""clim's examples folder is pretty good.""" start="00:28:26.140" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And the documentation, everybody's documentation,""" start="00:28:29.358" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""McCLIM's documentation, you know,""" start="00:28:32.344" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""lispworks and franz's documentation will tell you about""" start="00:28:35.413" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""the different default presentation types you can accept.""" start="00:28:39.385" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And they're pretty intuitive and""" start="00:28:47.969" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""they're kind of very Lisp compatible,""" start="00:28:49.912" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""which everything kind of is.""" start="00:28:53.264" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""We could accept an expression. foo bar baz.""" start="00:28:54.316" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""return "foo bar baz 123" because that's what I wrote.""" start="00:29:05.350" video="mainVideo-mcclim" id="subtitle"]]
[[!template new="1" text="""Putting things together""" start="00:29:10.964" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And now the kind of pièce de résistance""" start="00:29:10.964" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""of putting those things together.""" start="00:29:14.820" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Let's just run over to our scratch buffer.""" start="00:29:17.555" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Oh, or our ielm thing, right?""" start="00:29:22.226" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""That's what we're actually doing.""" start="00:29:24.246" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So now, I think we're going to do, hang on,""" start="00:29:25.964" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""M-:.""" start="00:29:30.251" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""I think it's going to be slime-eval-save,""" start="00:29:32.921" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""because it'll eval asynchronously.""" start="00:29:41.663" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""There's a question of how to get the value out of""" start="00:29:45.849" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""the asynchronous slime evaluation.""" start="00:29:49.171" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And so an obvious way is to yank it.""" start="00:29:52.524" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""I'm looking forward to learning from kickingvegas.""" start="00:29:59.661" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""He finally makes it stick in my brain how to...""" start="00:30:02.284" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Options other than just starting to write a command""" start="00:30:07.138" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""in the minibuffer and then mashing Tab""" start="00:30:10.959" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""and looking at what the likely sounding results are.""" start="00:30:14.063" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""That's what I will be learning this conference, if anything.""" start="00:30:16.765" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""slime-eval-save and then, what was happening over here?""" start="00:30:22.070" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""(accepting-values (t :own-window t) (accept 'expression)).""" start="00:30:26.958" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Kind of confusingly, slime-eval-save takes a string,""" start="00:30:33.369" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""but it works really well, I'd argue.""" start="00:30:39.169" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""I think it's about to work really well.""" start="00:30:41.940" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Ok, this is great.""" start="00:30:45.825" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So you can see I've used... Oh, please enter an expression.""" start="00:30:46.762" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So we're doing an expression.""" start="00:30:50.882" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And so let's write like (3 4/2 5/6).""" start="00:30:52.167" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""That's an expression, right?""" start="00:30:59.357" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And now I've yanked it.""" start="00:31:03.609" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""I should have really been in *scratch*,""" start="00:31:05.847" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""because I just want to dump. Sorry, *scratch*.""" start="00:31:07.429" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Dump whatever that did.""" start="00:31:13.770" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Oh, yeah, and see, it kind of simplified that""" start="00:31:16.540" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""while it was reading it.""" start="00:31:19.530" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""So running in Elisp, (slime-eval-save "(accepting-values""" start="00:31:20.762" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""(t :own-window t), accept 'expression))").""" start="00:31:27.536" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And I got the three returns all the way""" start="00:31:33.157" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""from McCLIM to inferior-lisp to Elisp.""" start="00:31:36.378" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""3, 2, 5/6.""" start="00:31:43.885" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Second return, it was a presentation type of expression,""" start="00:31:46.521" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""returned successfully, key.""" start="00:31:50.625" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Yeah, so that's pretty cool. How out of time are we?""" start="00:31:53.561" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Oh, we did this in basically half an hour.""" start="00:31:58.530" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Maybe we could stop and assume there will be a bit under""" start="00:32:04.009" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""half an hour of interactive discussion.""" start="00:32:07.259" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And when I also watch this and also receive suggestions,""" start="00:32:11.646" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""there will be additions and changes to make, I think.""" start="00:32:16.934" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""But can we quickly defun accept-date?""" start="00:32:21.671" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Let's not take any arguments.""" start="00:32:34.667" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Let's do this.""" start="00:32:40.239" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""accept-date.""" start="00:32:48.409" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Saturday, December 7th.""" start="00:32:55.519" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Oh, it doesn't return it.""" start="00:33:02.649" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""But it gets pretty close to returning it.""" start="00:33:04.215" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""I guess it yanks it.""" start="00:33:05.568" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""I would have to call … I'm going to say it's slime-sync,""" start="00:33:07.818" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""at which point it will resolve the slime-eval-async.""" start="00:33:21.160" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""And then I could get the first value out of""" start="00:33:25.670" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""my kill-ring pop, right?""" start="00:33:28.807" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Does kill ring pop what I want?""" start="00:33:33.629" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""You know, you tell me in the interactive feedback,""" start="00:33:36.646" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""which should be happening in LambdaMOO.""" start="00:33:39.968" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Well, I'll record another draft of this later""" start="00:33:43.020" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""after getting some feedback.""" start="00:33:45.609" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Or worse to worse, this is just what you'll hear.""" start="00:33:48.609" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Hopefully we have some questions and constructive comments.""" start="00:33:52.180" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""All right, see everybody later.""" start="00:33:59.303" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Thank you so much for being here.""" start="00:34:00.305" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Please do drop in to my live show""" start="00:34:04.470" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""if you're so inclined on Wednesdays""" start="00:34:08.663" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""where you're not busy with cool Emacs conferences.""" start="00:34:11.316" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""The list be go for climate.""" start="00:34:14.936" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Thank you to everyone who helped.""" start="00:34:16.219" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""Thank you to Sacha""" start="00:34:17.772" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""for really getting me into this conference""" start="00:34:18.690" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""and kind of getting me going and""" start="00:34:21.710" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""submitting this prerecorded talk.""" start="00:34:23.678" video="mainVideo-mcclim" id="subtitle"]]
[[!template text="""See everybody later.""" start="00:34:27.981" video="mainVideo-mcclim" id="subtitle"]]
Captioner: rodrigo
Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20mcclim%3A%20Elisp%20and%20McCLIM)
<!-- End of emacsconf-publish-after-page -->
|