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

[[!template id=vid vidid="mainVideo" src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--20-omg-macros--corwin-brust.webm" subtitles="/2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust.vtt"]]  
[Download compressed .webm video (24.3M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--20-omg-macros--corwin-brust--vp9-q56-video-original-audio.webm)  
[View transcript](#transcript)

Macros are a powerful tool.  In the context of Emacs Lisp programming
they can also provide us with a "foot-gun" of immense proportions.
Join the dungeon-mode project as we trip over our own macros, so to
speak, in the context of building a GPLv3+ turn-based role-playing
game engine and game design features for Emacs.

In this 20m talk I'll briefly introduce some rationales leading to
storing all game source and play state information within org-mode
documents (spoiler: it's about freedom), then go into some detail
around the "ETL" process design that currently accomplishes this.
Finally, we'll look closely at one especially problematic macro deep
within this solution, and invite people to throw fruit^11^dhelp draw
conclusions, ask questions, and discuss.

[[!inline pages="internal(2020/info/dm-notes)" raw="yes"]]

<!-- from the pad --->

- Actual start and end time (EST): Start: 2020-11-28T16.17.32; Q&A:
  2020-11-28T16.34; End: 2020-11-28T16.38.32

# Questions

## How is your background work?
See 06: Trivial Emacs Kits's Q&A: Corwin uses Wallpaper Engine.

- [Corwin] Wallpaper Engine on Steam is probably the thing that's
  grabbing attention.  I haven't tried it under GNU/Linux.  My family
  are (mostly) Windows users right now ****heavy sigh**** I don't want
  to get into my tool chain a huge amount, but I will talk about it
  some as/durning the Welcome to the Dungeon talk tomorrow.  For now I
  will say I'm using a mix of free (free and not-free but too easy to
  avoid tools on my one pretty good computer).  I would love to have
  the time to invest to use more (only) free stuff but sometimes we we
  can't afford the freedom, in terms of the learning curve.  I think
  this is the most important problem space in free software, FWIW.

## What was the key message you wanted to share with your talk?
Macros are powerful and necessary. Consider how you use them?

## Do you mind if I use your macro code as inspiration for an elisp uglifier?
Have At! It's GPLv3 and you are welcome; let me know if you have any
trouble finding fruit to throw.

<a name="transcript"></a>
# Transcript

[[!template id=subtitle video="mainVideo" start="00:00:00.480" text="Good evening again. I think"]]
[[!template id=subtitle video="mainVideo" start="00:00:02.796" text="I have a little time here"]]
[[!template id=subtitle video="mainVideo" start="00:00:04.319" text="to talk about macros."]]
[[!template id=subtitle video="mainVideo" start="00:00:06.447" text="Is there still room in our schedule for that,"]]
[[!template id=subtitle video="mainVideo" start="00:00:09.440" text="or should I just jump to some of"]]
[[!template id=subtitle video="mainVideo" start="00:00:11.440" text="my thoughts on the day?"]]
[[!template id=subtitle video="mainVideo" start="00:00:12.559" text="(Amin: Pretty sure we"]]
[[!template id=subtitle video="mainVideo" start="00:00:15.920" text="have some time.)"]]
[[!template id=subtitle video="mainVideo" start="00:00:17.039" text="Corwin: All right. Great. (Amin: Yeah, go for it.)"]]
[[!template id=subtitle video="mainVideo" start="00:00:19.039" text="Well, I'll just dive into my"]]
[[!template id=subtitle video="mainVideo" start="00:00:20.720" text="prepared thing here then."]]
[[!template id=subtitle video="mainVideo" start="00:00:22.384" text="(Amin: yeah, actually, you're right on time, so...)"]]
[[!template id=subtitle video="mainVideo" start="00:00:24.720" text="Corwin: oh what an amazing thing."]]
[[!template id=subtitle video="mainVideo" start="00:00:27.664" text="I just... You know, I have been trying to do what I..."]]
[[!template id=subtitle video="mainVideo" start="00:00:31.199" text="I've got a big thank you planned"]]
[[!template id=subtitle video="mainVideo" start="00:00:33.040" text="at the end, but let me just say,"]]
[[!template id=subtitle video="mainVideo" start="00:00:36.239" text="it's been really cool to watch the"]]
[[!template id=subtitle video="mainVideo" start="00:00:39.200" text="way that people work together."]]
[[!template id=subtitle video="mainVideo" start="00:00:42.160" text="(Amin: Absolutely. It's... This whole event today has been"]]
[[!template id=subtitle video="mainVideo" start="00:00:46.800" text="nothing but awesome, and"]]
[[!template id=subtitle video="mainVideo" start="00:00:50.879" text="no little part thanks to all of the help"]]
[[!template id=subtitle video="mainVideo" start="00:00:53.120" text="from all of you guys and everyone."]]
[[!template id=subtitle video="mainVideo" start="00:00:56.909" text="Yeah, it's awesome."]]
[[!template id=subtitle video="mainVideo" start="00:00:59.120" text="With that, I'll just shut up for now."]]
[[!template id=subtitle video="mainVideo" start="00:01:03.065" text="Take it away, Corwin.)"]]
[[!template id=subtitle video="mainVideo" start="00:01:04.891" text="Corwin: Who knows how to make"]]
[[!template id=subtitle video="mainVideo" start="00:01:06.479" text="make that the default in good old smex?"]]

[[!template id=subtitle video="mainVideo" start="00:01:09.840" text="All right. So I'm gonna try to continue"]]
[[!template id=subtitle video="mainVideo" start="00:01:12.799" text="my theme from the previous talk."]]
[[!template id=subtitle video="mainVideo" start="00:01:14.551" text="I'm a longtime Emacs user,"]]
[[!template id=subtitle video="mainVideo" start="00:01:16.393" text="but I'm a pretty new person"]]
[[!template id=subtitle video="mainVideo" start="00:01:20.240" text="to trying to really understand"]]
[[!template id=subtitle video="mainVideo" start="00:01:22.380" text="what's going on within Emacs and make"]]
[[!template id=subtitle video="mainVideo" start="00:01:24.960" text="my customizations to it--simple for"]]
[[!template id=subtitle video="mainVideo" start="00:01:28.240" text="what I tend to just think of will work."]]
[[!template id=subtitle video="mainVideo" start="00:01:30.960" text="And maybe that's a nice bow"]]
[[!template id=subtitle video="mainVideo" start="00:01:33.566" text="to put on that earlier talk."]]
[[!template id=subtitle video="mainVideo" start="00:01:40.479" text="Let's see here now. It's C-x M-i."]]
[[!template id=subtitle video="mainVideo" start="00:01:44.981" text="That's right."]]
[[!template id=subtitle video="mainVideo" start="00:01:48.159" text="And let's try that again. Okay, good."]]
[[!template id=subtitle video="mainVideo" start="00:01:52.960" text="So demoing is fun,"]]
[[!template id=subtitle video="mainVideo" start="00:01:55.240" text="but I will save most of that"]]
[[!template id=subtitle video="mainVideo" start="00:01:57.192" text="for tomorrow where my"]]
[[!template id=subtitle video="mainVideo" start="00:01:59.759" text="dear friend and co-collaborator"]]
[[!template id=subtitle video="mainVideo" start="00:02:02.750" text="in bringing you the dungeon-mode project,"]]
[[!template id=subtitle video="mainVideo" start="00:02:04.799" text="which is sort of the exciting thing"]]
[[!template id=subtitle video="mainVideo" start="00:02:07.261" text="that we hope you'll be interested in,"]]
[[!template id=subtitle video="mainVideo" start="00:02:10.800" text="gets a little more of a reveal."]]

[[!template id=subtitle video="mainVideo" start="00:02:15.680" text="Tonight, I'll just close saying"]]
[[!template id=subtitle video="mainVideo" start="00:02:19.360" text="a few things about the process of"]]
[[!template id=subtitle video="mainVideo" start="00:02:22.640" text="making it and continuing my theme of community."]]
[[!template id=subtitle video="mainVideo" start="00:02:25.680" text="First of all, a specific and upfront shout out"]]
[[!template id=subtitle video="mainVideo" start="00:02:29.760" text="to tv's wasamasa who"]]
[[!template id=subtitle video="mainVideo" start="00:02:33.120" text="absolutely shaped and guided this"]]
[[!template id=subtitle video="mainVideo" start="00:02:36.239" text="this program. I may have taken out"]]
[[!template id=subtitle video="mainVideo" start="00:02:38.582" text="a slide with your name on it,"]]
[[!template id=subtitle video="mainVideo" start="00:02:39.898" text="but thank you."]]

[[!template id=subtitle video="mainVideo" start="00:02:43.599" text="So when we think about Emacs macros"]]
[[!template id=subtitle video="mainVideo" start="00:02:46.479" text="and the power that they give us,"]]
[[!template id=subtitle video="mainVideo" start="00:02:53.280" text="I think about them as a really"]]
[[!template id=subtitle video="mainVideo" start="00:02:54.720" text="deep rabbit hole. They confuse"]]
[[!template id=subtitle video="mainVideo" start="00:02:56.400" text="people a lot. And so, to try to center"]]
[[!template id=subtitle video="mainVideo" start="00:03:00.239" text="myself on that, I remember first that"]]
[[!template id=subtitle video="mainVideo" start="00:03:03.599" text="they're going to be talking to us about code."]]
[[!template id=subtitle video="mainVideo" start="00:03:09.599" text="Excuse me, I realize I hadn't set my timer."]]
[[!template id=subtitle video="mainVideo" start="00:03:13.519" text="Here we are."]]

[[!template id=subtitle video="mainVideo" start="00:03:18.000" text="So a simple macro syntax is"]]
[[!template id=subtitle video="mainVideo" start="00:03:20.543" text="going to generate"]]
[[!template id=subtitle video="mainVideo" start="00:03:22.239" text="something that is implicitly confusing"]]
[[!template id=subtitle video="mainVideo" start="00:03:25.920" text="to somebody that knows the syntax"]]
[[!template id=subtitle video="mainVideo" start="00:03:27.657" text="of Emacs Lisp well."]]
[[!template id=subtitle video="mainVideo" start="00:03:28.988" text="We see something like this"]]
[[!template id=subtitle video="mainVideo" start="00:03:30.785" text="and a veteran eye says"]]
[[!template id=subtitle video="mainVideo" start="00:03:32.784" text="&quot;That x isn't quoted. What's going on?&quot;"]]
[[!template id=subtitle video="mainVideo" start="00:03:36.239" text="but it can be hard to miss."]]
[[!template id=subtitle video="mainVideo" start="00:03:39.840" text="A lot of the functions (as we'll talk"]]
[[!template id=subtitle video="mainVideo" start="00:03:43.040" text="about in a moment) that are built into Emacs"]]
[[!template id=subtitle video="mainVideo" start="00:03:46.640" text="really are macros, so a lot of"]]
[[!template id=subtitle video="mainVideo" start="00:03:48.572" text="Emacs features work this way."]]
[[!template id=subtitle video="mainVideo" start="00:03:50.480" text="It might be scary, but we have to look at"]]
[[!template id=subtitle video="mainVideo" start="00:03:53.040" text="it closely if we really want to get"]]
[[!template id=subtitle video="mainVideo" start="00:03:54.640" text="friendly with Emacs."]]

[[!template id=subtitle video="mainVideo" start="00:03:58.400" text="Let's just jump right into defmacro,"]]
[[!template id=subtitle video="mainVideo" start="00:04:01.439" text="which is our key entry point."]]
[[!template id=subtitle video="mainVideo" start="00:04:04.720" text="The notes from this talk"]]
[[!template id=subtitle video="mainVideo" start="00:04:05.833" text="include the link to that,"]]
[[!template id=subtitle video="mainVideo" start="00:04:09.420" text="which... Definitely"]]
[[!template id=subtitle video="mainVideo" start="00:04:12.000" text="read through a couple of times."]]
[[!template id=subtitle video="mainVideo" start="00:04:14.640" text="That may take you through"]]
[[!template id=subtitle video="mainVideo" start="00:04:16.000" text="into the cl-def macro, which adds"]]
[[!template id=subtitle video="mainVideo" start="00:04:19.440" text="the Common Lisp extensions."]]
[[!template id=subtitle video="mainVideo" start="00:04:23.440" text="Definitely challenging."]]
[[!template id=subtitle video="mainVideo" start="00:04:28.080" text="I've struggled there,"]]
[[!template id=subtitle video="mainVideo" start="00:04:30.560" text="as we'll take a look at"]]
[[!template id=subtitle video="mainVideo" start="00:04:31.759" text="in a moment."]]
[[!template id=subtitle video="mainVideo" start="00:04:34.800" text="So I haven't played too much with"]]
[[!template id=subtitle video="mainVideo" start="00:04:36.266" text="cl-maclet. Perhaps success in"]]
[[!template id=subtitle video="mainVideo" start="00:04:38.320" text="in that keyword space"]]
[[!template id=subtitle video="mainVideo" start="00:04:40.804" text="and figuring out what the right balance is there"]]
[[!template id=subtitle video="mainVideo" start="00:04:44.320" text="will give me the confidence to try"]]
[[!template id=subtitle video="mainVideo" start="00:04:46.000" text="some more lexical macros."]]

[[!template id=subtitle video="mainVideo" start="00:04:51.680" text="Let me also briefly introduce"]]
[[!template id=subtitle video="mainVideo" start="00:04:53.402" text="the comma (,) and back quote (`)."]]
[[!template id=subtitle video="mainVideo" start="00:04:55.134" text="If you have allowed your eyes"]]
[[!template id=subtitle video="mainVideo" start="00:04:57.389" text="to cross when you see these,"]]
[[!template id=subtitle video="mainVideo" start="00:04:59.321" text="that's not a shameful, shameful thing."]]
[[!template id=subtitle video="mainVideo" start="00:05:03.113" text="It's confusing, and we should be"]]
[[!template id=subtitle video="mainVideo" start="00:05:06.080" text="alerting each other"]]
[[!template id=subtitle video="mainVideo" start="00:05:07.543" text="when we stick macros in,"]]
[[!template id=subtitle video="mainVideo" start="00:05:09.520" text="often by putting them in"]]
[[!template id=subtitle video="mainVideo" start="00:05:11.199" text="different library spaces"]]
[[!template id=subtitle video="mainVideo" start="00:05:12.255" text="for complicated projects,"]]
[[!template id=subtitle video="mainVideo" start="00:05:14.160" text="or otherwise warning people"]]
[[!template id=subtitle video="mainVideo" start="00:05:17.520" text="that this is not an interactive function,"]]
[[!template id=subtitle video="mainVideo" start="00:05:19.520" text="even if you get away with using it like one."]]
[[!template id=subtitle video="mainVideo" start="00:05:22.639" text="Watch your back."]]

[[!template id=subtitle video="mainVideo" start="00:05:26.000" text="The manual itself talks about macros"]]
[[!template id=subtitle video="mainVideo" start="00:05:32.800" text="as being a way of evaluating,"]]
[[!template id=subtitle video="mainVideo" start="00:05:35.840" text="as being an evaluator that will take"]]
[[!template id=subtitle video="mainVideo" start="00:05:39.993" text="our Emacs Lisp expression"]]
[[!template id=subtitle video="mainVideo" start="00:05:42.800" text="and the set of forms that"]]
[[!template id=subtitle video="mainVideo" start="00:05:44.800" text="will feed to it our code,"]]
[[!template id=subtitle video="mainVideo" start="00:05:48.960" text="but it also provides us with"]]
[[!template id=subtitle video="mainVideo" start="00:05:50.792" text="this concept of an environment."]]
[[!template id=subtitle video="mainVideo" start="00:05:53.467" text="That's really where the power comes in."]]
[[!template id=subtitle video="mainVideo" start="00:05:57.027" text="Through that, we can have"]]
[[!template id=subtitle video="mainVideo" start="00:05:58.240" text="lexical variables and"]]
[[!template id=subtitle video="mainVideo" start="00:06:00.080" text="think about--bring in some of the"]]
[[!template id=subtitle video="mainVideo" start="00:06:03.199" text="capabilities that"]]
[[!template id=subtitle video="mainVideo" start="00:06:06.400" text="can be harder to reach with"]]
[[!template id=subtitle video="mainVideo" start="00:06:09.759" text="a pure declarative statement that"]]
[[!template id=subtitle video="mainVideo" start="00:06:13.840" text="doesn't allow for top level"]]
[[!template id=subtitle video="mainVideo" start="00:06:21.440" text="asynchronous... Asynchronicity..."]]
[[!template id=subtitle video="mainVideo" start="00:06:28.639" text="I'm gonna basically"]]
[[!template id=subtitle video="mainVideo" start="00:06:33.520" text="ignore the byte-compilation phase"]]
[[!template id=subtitle video="mainVideo" start="00:06:35.577" text="for this talk"]]
[[!template id=subtitle video="mainVideo" start="00:06:36.880" text="in order to have any prayer"]]
[[!template id=subtitle video="mainVideo" start="00:06:38.463" text="of getting through it in the"]]
[[!template id=subtitle video="mainVideo" start="00:06:39.919" text="remaining 9 or 11 minutes or whatever."]]
[[!template id=subtitle video="mainVideo" start="00:06:43.600" text="But suffice to say, that's a scary space,"]]
[[!template id=subtitle video="mainVideo" start="00:06:50.441" text="and that's really"]]
[[!template id=subtitle video="mainVideo" start="00:06:52.240" text="the thing that you want to"]]
[[!template id=subtitle video="mainVideo" start="00:06:53.800" text="start learning about"]]
[[!template id=subtitle video="mainVideo" start="00:06:55.277" text="as you think about"]]
[[!template id=subtitle video="mainVideo" start="00:06:57.199" text="taking macros on in earnest."]]

[[!template id=subtitle video="mainVideo" start="00:07:02.160" text="Coming back to the comma syntax,"]]
[[!template id=subtitle video="mainVideo" start="00:07:05.919" text="then, having given ourselves a"]]
[[!template id=subtitle video="mainVideo" start="00:07:09.759" text="working definition for the Emacs Lisp"]]
[[!template id=subtitle video="mainVideo" start="00:07:12.479" text="runtime environment, then we can say that"]]
[[!template id=subtitle video="mainVideo" start="00:07:14.479" text="macros are going to"]]
[[!template id=subtitle video="mainVideo" start="00:07:15.840" text="inject code back into that stream,"]]
[[!template id=subtitle video="mainVideo" start="00:07:21.120" text="whereas backquote (`)"]]
[[!template id=subtitle video="mainVideo" start="00:07:25.280" text="is going to give code back."]]
[[!template id=subtitle video="mainVideo" start="00:07:28.479" text="to the stream--or interject, sorry,"]]
[[!template id=subtitle video="mainVideo" start="00:07:31.919" text="it's going to interject"]]
[[!template id=subtitle video="mainVideo" start="00:07:33.632" text="back into the stream."]]
[[!template id=subtitle video="mainVideo" start="00:07:35.360" text="Sort of an exclamatory &quot;Excuse me,"]]
[[!template id=subtitle video="mainVideo" start="00:07:39.840" text="I'd like to have a value here.&quot; We can take that value"]]
[[!template id=subtitle video="mainVideo" start="00:07:46.966" text="from the environment as it exists"]]
[[!template id=subtitle video="mainVideo" start="00:07:48.639" text="when our macro is evaluated."]]
[[!template id=subtitle video="mainVideo" start="00:07:54.160" text="Backquote, on the other hand,"]]
[[!template id=subtitle video="mainVideo" start="00:07:56.003" text="takes the result from that"]]
[[!template id=subtitle video="mainVideo" start="00:08:00.560" text="and returns it back to the stream"]]
[[!template id=subtitle video="mainVideo" start="00:08:02.201" text="for evaluation at the"]]
[[!template id=subtitle video="mainVideo" start="00:08:03.467" text="processing level that invoked us."]]
[[!template id=subtitle video="mainVideo" start="00:08:05.680" text="So in other words, perhaps back up to"]]
[[!template id=subtitle video="mainVideo" start="00:08:08.720" text="a top-level eval expression where our"]]
[[!template id=subtitle video="mainVideo" start="00:08:10.960" text="macro is invoked."]]

[[!template id=subtitle video="mainVideo" start="00:08:20.080" text="I'm going to briefly bring"]]
[[!template id=subtitle video="mainVideo" start="00:08:22.560" text="you back to the game"]]
[[!template id=subtitle video="mainVideo" start="00:08:23.759" text="for just a moment."]]
[[!template id=subtitle video="mainVideo" start="00:08:30.240" text="I won't linger on this slide,"]]
[[!template id=subtitle video="mainVideo" start="00:08:32.479" text="but briefly: this is a"]]
[[!template id=subtitle video="mainVideo" start="00:08:37.039" text="role-playing, pen and pencil,"]]
[[!template id=subtitle video="mainVideo" start="00:08:41.615" text="physical dice tradition"]]
[[!template id=subtitle video="mainVideo" start="00:08:43.829" text="that dates back a long time"]]
[[!template id=subtitle video="mainVideo" start="00:08:46.320" text="from a technology perspective."]]
[[!template id=subtitle video="mainVideo" start="00:08:48.080" text="It's old in the same way"]]
[[!template id=subtitle video="mainVideo" start="00:08:50.727" text="that other tools that I like are old."]]
[[!template id=subtitle video="mainVideo" start="00:08:58.560" text="It's simple to understand."]]
[[!template id=subtitle video="mainVideo" start="00:09:00.185" text="I can communicate a lot with it"]]
[[!template id=subtitle video="mainVideo" start="00:09:01.873" text="with a simple amount of typing"]]
[[!template id=subtitle video="mainVideo" start="00:09:03.952" text="or scribbling something on a piece of paper."]]
[[!template id=subtitle video="mainVideo" start="00:09:09.120" text="It has a complicated problem space of its own."]]

[[!template id=subtitle video="mainVideo" start="00:09:13.500" text="Again, I don't want to"]]
[[!template id=subtitle video="mainVideo" start="00:09:15.519" text="get too much into the game here,"]]
[[!template id=subtitle video="mainVideo" start="00:09:18.212" text="but in this talk,"]]
[[!template id=subtitle video="mainVideo" start="00:09:20.177" text="for the last five minutes,"]]
[[!template id=subtitle video="mainVideo" start="00:09:22.590" text="I'll focus on the process"]]
[[!template id=subtitle video="mainVideo" start="00:09:24.751" text="that we took to"]]
[[!template id=subtitle video="mainVideo" start="00:09:26.640" text="automate getting data out of"]]
[[!template id=subtitle video="mainVideo" start="00:09:29.190" text="the Org Mode tables which eventually"]]
[[!template id=subtitle video="mainVideo" start="00:09:31.564" text="(as we'll talk about more tomorrow)"]]
[[!template id=subtitle video="mainVideo" start="00:09:33.855" text="are used to draw"]]
[[!template id=subtitle video="mainVideo" start="00:09:36.000" text="game maps and other things."]]
[[!template id=subtitle video="mainVideo" start="00:09:39.440" text="Here I talk about why we did that."]]
[[!template id=subtitle video="mainVideo" start="00:09:42.543" text="I'm going to skip briefly past that,"]]
[[!template id=subtitle video="mainVideo" start="00:09:45.279" text="and say instead that at a high level,"]]
[[!template id=subtitle video="mainVideo" start="00:09:49.360" text="it's symbolic informatics."]]
[[!template id=subtitle video="mainVideo" start="00:09:51.440" text="We're giving a symbolic name"]]
[[!template id=subtitle video="mainVideo" start="00:09:53.519" text="to a tile set,"]]
[[!template id=subtitle video="mainVideo" start="00:10:02.000" text="and then assigning that tile set some"]]
[[!template id=subtitle video="mainVideo" start="00:10:04.000" text="some characteristics"]]
[[!template id=subtitle video="mainVideo" start="00:10:04.840" text="like physical speeds, screen space"]]
[[!template id=subtitle video="mainVideo" start="00:10:06.820" text="(a variable that we might"]]
[[!template id=subtitle video="mainVideo" start="00:10:08.399" text="want to swap in), and so forth."]]
[[!template id=subtitle video="mainVideo" start="00:10:12.800" text="You know, our project rests heavily on"]]
[[!template id=subtitle video="mainVideo" start="00:10:15.200" text="Org Mode and its fundamental capabilities."]]
[[!template id=subtitle video="mainVideo" start="00:10:21.040" text="The code I'm going to show here"]]
[[!template id=subtitle video="mainVideo" start="00:10:28.320" text="is focused around a sticky"]]
[[!template id=subtitle video="mainVideo" start="00:10:31.360" text="problem space in"]]
[[!template id=subtitle video="mainVideo" start="00:10:32.380" text="information technology."]]
[[!template id=subtitle video="mainVideo" start="00:10:33.861" text="I'm a professional software engineer"]]
[[!template id=subtitle video="mainVideo" start="00:10:38.240" text="turned technology architect."]]
[[!template id=subtitle video="mainVideo" start="00:10:40.362" text="I support the websites for"]]
[[!template id=subtitle video="mainVideo" start="00:10:43.495" text="a recognizable financial services brand"]]
[[!template id=subtitle video="mainVideo" start="00:10:46.533" text="that I don't identify"]]
[[!template id=subtitle video="mainVideo" start="00:10:48.500" text="just so I don't accidentally end up"]]
[[!template id=subtitle video="mainVideo" start="00:10:50.720" text="inadvertently misrepresenting my firm"]]
[[!template id=subtitle video="mainVideo" start="00:10:54.399" text="in some financial perspective"]]
[[!template id=subtitle video="mainVideo" start="00:10:56.456" text="if I let some other"]]
[[!template id=subtitle video="mainVideo" start="00:10:57.760" text="companies' name slip, or my own."]]
[[!template id=subtitle video="mainVideo" start="00:11:03.300" text="It's certainly no representation"]]
[[!template id=subtitle video="mainVideo" start="00:11:07.700" text="of an opinion other than my own."]]
[[!template id=subtitle video="mainVideo" start="00:11:18.800" text="So ETL has to do with moving data around."]]
[[!template id=subtitle video="mainVideo" start="00:11:22.720" text="We have the idea of"]]
[[!template id=subtitle video="mainVideo" start="00:11:26.240" text="a pipeline where we'll be able to verify"]]
[[!template id=subtitle video="mainVideo" start="00:11:29.200" text="certain assumptions,"]]
[[!template id=subtitle video="mainVideo" start="00:11:30.560" text="nominally about data quality,"]]
[[!template id=subtitle video="mainVideo" start="00:11:32.106" text="but it could be about anything."]]
[[!template id=subtitle video="mainVideo" start="00:11:33.600" text="Before the pipeline starts, okay,"]]
[[!template id=subtitle video="mainVideo" start="00:11:35.630" text="we've got a state where we think"]]
[[!template id=subtitle video="mainVideo" start="00:11:36.886" text="it should work if we run it."]]
[[!template id=subtitle video="mainVideo" start="00:11:38.560" text="We have some extraction where we'll"]]
[[!template id=subtitle video="mainVideo" start="00:11:41.920" text="get our sources, and we may have"]]
[[!template id=subtitle video="mainVideo" start="00:11:43.973" text="the opportunity to"]]
[[!template id=subtitle video="mainVideo" start="00:11:45.040" text="make some assertions there."]]
[[!template id=subtitle video="mainVideo" start="00:11:47.327" text="In the transform stage, as well as the load,"]]
[[!template id=subtitle video="mainVideo" start="00:11:50.510" text="things get a little dicer,"]]
[[!template id=subtitle video="mainVideo" start="00:11:52.720" text="to the point where we come out of the"]]
[[!template id=subtitle video="mainVideo" start="00:11:54.079" text="load stage and we should have some"]]
[[!template id=subtitle video="mainVideo" start="00:11:55.360" text="really solid assertions again"]]
[[!template id=subtitle video="mainVideo" start="00:11:56.676" text="that we can even go back"]]
[[!template id=subtitle video="mainVideo" start="00:11:57.724" text="and compare to the extract stage."]]
[[!template id=subtitle video="mainVideo" start="00:11:59.680" text="From this, we have the rudimentaries"]]
[[!template id=subtitle video="mainVideo" start="00:12:02.639" text="of a data quality practice."]]
[[!template id=subtitle video="mainVideo" start="00:12:04.959" text="In this case, we have a number of"]]
[[!template id=subtitle video="mainVideo" start="00:12:08.120" text="Org Mode files that will all"]]
[[!template id=subtitle video="mainVideo" start="00:12:09.360" text="be distributed across a"]]
[[!template id=subtitle video="mainVideo" start="00:12:12.639" text="number of players' computers,"]]
[[!template id=subtitle video="mainVideo" start="00:12:16.720" text="so we might not want to update every"]]
[[!template id=subtitle video="mainVideo" start="00:12:18.959" text="part of every buffer."]]
[[!template id=subtitle video="mainVideo" start="00:12:20.320" text="I think it's a complicated problem space."]]
[[!template id=subtitle video="mainVideo" start="00:12:22.720" text="So we tried to take"]]
[[!template id=subtitle video="mainVideo" start="00:12:24.560" text="a long-term view of"]]
[[!template id=subtitle video="mainVideo" start="00:12:27.839" text="the solution that we needed."]]
[[!template id=subtitle video="mainVideo" start="00:12:30.321" text="So I'll go ahead"]]
[[!template id=subtitle video="mainVideo" start="00:12:32.160" text="and open up the function that..."]]
[[!template id=subtitle video="mainVideo" start="00:12:36.279" text="Let's actually start with the one"]]
[[!template id=subtitle video="mainVideo" start="00:12:39.020" text="that's pretty easy to read."]]
[[!template id=subtitle video="mainVideo" start="00:12:41.680" text="I'm gonna go ahead and just crank it up huge,"]]
[[!template id=subtitle video="mainVideo" start="00:12:46.800" text="in case anybody's watching in 480."]]

[[!template id=subtitle video="mainVideo" start="00:12:51.680" text="This program is not a work of art."]]
[[!template id=subtitle video="mainVideo" start="00:12:57.733" text="It's a simple implementation of the idea that"]]
[[!template id=subtitle video="mainVideo" start="00:13:01.120" text="an alist of functions"]]
[[!template id=subtitle video="mainVideo" start="00:13:04.000" text="that return maybe some data,"]]
[[!template id=subtitle video="mainVideo" start="00:13:06.633" text="maybe some data and an entry back into that alist,"]]
[[!template id=subtitle video="mainVideo" start="00:13:10.399" text="can be done quite extensively with"]]
[[!template id=subtitle video="mainVideo" start="00:13:13.040" text="very few lines of code."]]
[[!template id=subtitle video="mainVideo" start="00:13:15.680" text="Neither is it an especially tight"]]
[[!template id=subtitle video="mainVideo" start="00:13:17.586" text="or thrifty implementation."]]
[[!template id=subtitle video="mainVideo" start="00:13:19.600" text="It's just trying to get the job done"]]
[[!template id=subtitle video="mainVideo" start="00:13:22.000" text="with a doc statement for everything."]]
[[!template id=subtitle video="mainVideo" start="00:13:25.056" text="At the heart, we see a call to"]]
[[!template id=subtitle video="mainVideo" start="00:13:28.595" text="this macro called dm-coalesce-hash,"]]
[[!template id=subtitle video="mainVideo" start="00:13:32.067" text="and that's what I'd like to focus in on."]]
[[!template id=subtitle video="mainVideo" start="00:13:33.714" text="You can see... I think"]]
[[!template id=subtitle video="mainVideo" start="00:13:35.360" text="that something unpleasant is happening here."]]
[[!template id=subtitle video="mainVideo" start="00:13:38.800" text="I've got an eval in what is..."]]

[[!template id=subtitle video="mainVideo" start="00:13:43.991" text="I will share a fairly central function"]]
[[!template id=subtitle video="mainVideo" start="00:13:49.519" text="that those implementing this ETL pattern are"]]
[[!template id=subtitle video="mainVideo" start="00:13:52.160" text="welcome to derive from."]]
[[!template id=subtitle video="mainVideo" start="00:13:54.933" text="That is, this is a default transform"]]
[[!template id=subtitle video="mainVideo" start="00:13:57.680" text="that you can get when loading certain kinds of"]]
[[!template id=subtitle video="mainVideo" start="00:14:00.959" text="org-mode tables that have been"]]
[[!template id=subtitle video="mainVideo" start="00:14:04.560" text="properly adorned. Again, we'll get"]]
[[!template id=subtitle video="mainVideo" start="00:14:06.399" text="into that all tomorrow."]]
[[!template id=subtitle video="mainVideo" start="00:14:09.120" text="So, keeping an eye on time. Couple minutes left."]]

[[!template id=subtitle video="mainVideo" start="00:14:11.900" text="Let's look at the macro itself."]]
[[!template id=subtitle video="mainVideo" start="00:14:13.760" text="I have a slide on this,"]]
[[!template id=subtitle video="mainVideo" start="00:14:15.000" text="but let's go ahead and risk getting off page."]]
[[!template id=subtitle video="mainVideo" start="00:14:24.639" text="Oh boy. Here we go. So this is my"]]
[[!template id=subtitle video="mainVideo" start="00:14:27.199" text="utilities bucket."]]
[[!template id=subtitle video="mainVideo" start="00:14:28.959" text="It has such basic features as &quot;give me a"]]
[[!template id=subtitle video="mainVideo" start="00:14:31.920" text="hash table with some defaults, I'll think"]]
[[!template id=subtitle video="mainVideo" start="00:14:34.000" text="about that later,&quot;"]]
[[!template id=subtitle video="mainVideo" start="00:14:36.000" text="and &quot;add to list,&quot; a special version"]]
[[!template id=subtitle video="mainVideo" start="00:14:44.720" text="that enables us to be a little cavalier"]]
[[!template id=subtitle video="mainVideo" start="00:14:47.600" text="in experimenting with alist versus"]]
[[!template id=subtitle video="mainVideo" start="00:14:49.360" text="hashes versus plists."]]
[[!template id=subtitle video="mainVideo" start="00:14:50.967" text="We've made a right mess for ourselves"]]
[[!template id=subtitle video="mainVideo" start="00:14:53.178" text="in the proof of concept area,"]]
[[!template id=subtitle video="mainVideo" start="00:14:54.399" text="and it's ripe for someone to write a"]]
[[!template id=subtitle video="mainVideo" start="00:14:57.433" text="whitepaper about"]]
[[!template id=subtitle video="mainVideo" start="00:14:58.560" text="when to prefer these things."]]
[[!template id=subtitle video="mainVideo" start="00:15:04.800" text="The merge alist..."]]
[[!template id=subtitle video="mainVideo" start="00:15:08.000" text="Same work here. Let's get down to business."]]

[[!template id=subtitle video="mainVideo" start="00:15:12.959" text="This function has quite a..."]]
[[!template id=subtitle video="mainVideo" start="00:15:14.667" text="This macro has quite a doc string."]]
[[!template id=subtitle video="mainVideo" start="00:15:17.467" text="I think I mentioned earlier that I got myself into"]]
[[!template id=subtitle video="mainVideo" start="00:15:20.720" text="trouble with the keyword properties."]]
[[!template id=subtitle video="mainVideo" start="00:15:22.088" text="You can see that we have"]]
[[!template id=subtitle video="mainVideo" start="00:15:23.519" text="not only quite a number of them,"]]
[[!template id=subtitle video="mainVideo" start="00:15:27.359" text="but a lot of default values,"]]
[[!template id=subtitle video="mainVideo" start="00:15:31.155" text="many of which may be relying on"]]
[[!template id=subtitle video="mainVideo" start="00:15:35.446" text="the values that are passed in here."]]
[[!template id=subtitle video="mainVideo" start="00:15:37.264" text="This is complicated. As it turns out,"]]
[[!template id=subtitle video="mainVideo" start="00:15:40.000" text="I wasn't brave enough in most cases"]]
[[!template id=subtitle video="mainVideo" start="00:15:44.000" text="to try to write a lambda"]]
[[!template id=subtitle video="mainVideo" start="00:15:45.485" text="that could understand and"]]
[[!template id=subtitle video="mainVideo" start="00:15:47.279" text="replace its own local variable."]]
[[!template id=subtitle video="mainVideo" start="00:15:49.300" text="I just didn't..."]]
[[!template id=subtitle video="mainVideo" start="00:15:50.399" text="It didn't save me enough time. This was"]]
[[!template id=subtitle video="mainVideo" start="00:15:53.519" text="really easy to read and write and understand"]]
[[!template id=subtitle video="mainVideo" start="00:15:56.532" text="as I thought through my problem,"]]
[[!template id=subtitle video="mainVideo" start="00:15:58.240" text="but now, as I use it,"]]
[[!template id=subtitle video="mainVideo" start="00:16:00.000" text="I've lost a little ground with this."]]
[[!template id=subtitle video="mainVideo" start="00:16:02.486" text="I'm not even sure"]]
[[!template id=subtitle video="mainVideo" start="00:16:04.079" text="I like what I got from"]]
[[!template id=subtitle video="mainVideo" start="00:16:06.453" text="the many keyword properties when it..."]]
[[!template id=subtitle video="mainVideo" start="00:16:09.341" text="And we can look, perhaps if we have"]]
[[!template id=subtitle video="mainVideo" start="00:16:11.920" text="the time, at what that looks like in"]]
[[!template id=subtitle video="mainVideo" start="00:16:19.920" text="Oh, all right, I have to separately"]]
[[!template id=subtitle video="mainVideo" start="00:16:22.720" text="dismiss and restart that."]]

[[!template id=subtitle video="mainVideo" start="00:16:24.480" text="So that's just about my time."]]
[[!template id=subtitle video="mainVideo" start="00:16:27.519" text="Being respectful of that, I want"]]
[[!template id=subtitle video="mainVideo" start="00:16:29.600" text="to invite presenters to just jump in at"]]
[[!template id=subtitle video="mainVideo" start="00:16:31.920" text="any of the many large pauses I leave."]]
[[!template id=subtitle video="mainVideo" start="00:16:35.519" text="I'll just leave up the doc string"]]
[[!template id=subtitle video="mainVideo" start="00:16:38.079" text="for a moment and maybe split the screen"]]
[[!template id=subtitle video="mainVideo" start="00:16:40.160" text="and pull open an item."]]
[[!template id=subtitle video="mainVideo" start="00:16:45.199" text="(Amin: Thank you very"]]
[[!template id=subtitle video="mainVideo" start="00:16:48.720" text="much for your talk, Corwin."]]
[[!template id=subtitle video="mainVideo" start="00:16:50.720" text="I think you still have"]]
[[!template id=subtitle video="mainVideo" start="00:16:53.839" text="maybe three or four more minutes,"]]
[[!template id=subtitle video="mainVideo" start="00:16:55.027" text="if you want to quickly wrap up.)"]]
[[!template id=subtitle video="mainVideo" start="00:16:57.680" text="Corwin: Okay, so three or four more minutes"]]
[[!template id=subtitle video="mainVideo" start="00:17:00.644" text="I can easily spend on thank yous."]]
[[!template id=subtitle video="mainVideo" start="00:17:05.439" text="I might switch to that if there aren't"]]
[[!template id=subtitle video="mainVideo" start="00:17:07.280" text="questions on the pad."]]
[[!template id=subtitle video="mainVideo" start="00:17:10.160" text="(Amin: Would you like me to pull up the pad,"]]
[[!template id=subtitle video="mainVideo" start="00:17:12.559" text="or are you looking at it?)"]]
[[!template id=subtitle video="mainVideo" start="00:17:14.079" text="Corwin: I am. I bookmarked it."]]
[[!template id=subtitle video="mainVideo" start="00:17:16.777" text="I am pulling the tab and I'll bring it in."]]
[[!template id=subtitle video="mainVideo" start="00:17:30.840" text="Okay. All right. This is the wrong Etherpad."]]
[[!template id=subtitle video="mainVideo" start="00:17:38.799" text="Thanks for the link."]]
[[!template id=subtitle video="mainVideo" start="00:17:44.480" text="All right. So I think I'm looking for macros."]]

[[!template id=subtitle video="mainVideo" start="00:17:54.880" text="Okay. Key message. Sure."]]
[[!template id=subtitle video="mainVideo" start="00:17:57.630" text="So, the key message is that it's"]]
[[!template id=subtitle video="mainVideo" start="00:18:01.679" text="a jungle out there."]]
[[!template id=subtitle video="mainVideo" start="00:18:02.960" text="Macros, along with any other design,"]]
[[!template id=subtitle video="mainVideo" start="00:18:05.912" text="can leave you in a position"]]
[[!template id=subtitle video="mainVideo" start="00:18:08.559" text="where you have a nice API. I can show"]]
[[!template id=subtitle video="mainVideo" start="00:18:11.919" text="you other examples (you can find them in"]]
[[!template id=subtitle video="mainVideo" start="00:18:13.600" text="the dungeon-mode source)"]]
[[!template id=subtitle video="mainVideo" start="00:18:14.960" text="of many, many other places where I use"]]
[[!template id=subtitle video="mainVideo" start="00:18:18.480" text="this exact same formula,"]]
[[!template id=subtitle video="mainVideo" start="00:18:20.820" text="quickly sketching out how a character sheet"]]
[[!template id=subtitle video="mainVideo" start="00:18:23.840" text="or another big data set"]]
[[!template id=subtitle video="mainVideo" start="00:18:26.180" text="needs to figure out what tables are"]]
[[!template id=subtitle video="mainVideo" start="00:18:28.480" text="going to be interesting"]]
[[!template id=subtitle video="mainVideo" start="00:18:29.320" text="from the collection of files,"]]
[[!template id=subtitle video="mainVideo" start="00:18:30.720" text="and then load up the tile set,"]]
[[!template id=subtitle video="mainVideo" start="00:18:33.967" text="and the layout file from that."]]
[[!template id=subtitle video="mainVideo" start="00:18:38.880" text="And I mean, it works."]]
[[!template id=subtitle video="mainVideo" start="00:18:40.542" text="The project is moving forward with this."]]
[[!template id=subtitle video="mainVideo" start="00:18:42.677" text="I have the flexibility that I need."]]
[[!template id=subtitle video="mainVideo" start="00:18:44.799" text="But here I am evaling my own code"]]
[[!template id=subtitle video="mainVideo" start="00:18:46.559" text="to make darn sure even if I get"]]
[[!template id=subtitle video="mainVideo" start="00:18:48.640" text="byte-compiled, this macro"]]
[[!template id=subtitle video="mainVideo" start="00:18:52.400" text="does get evaluated in the user's real"]]
[[!template id=subtitle video="mainVideo" start="00:18:55.440" text="run time. Clearly a design fail."]]
[[!template id=subtitle video="mainVideo" start="00:18:57.684" text="So that would be..."]]

[[!template id=subtitle video="mainVideo" start="00:18:58.890" text="The key point of my talk is to"]]
[[!template id=subtitle video="mainVideo" start="00:19:00.880" text="present this design fail and"]]
[[!template id=subtitle video="mainVideo" start="00:19:05.600" text="thank the community, but especially"]]
[[!template id=subtitle video="mainVideo" start="00:19:08.320" text="wasamasa for some patience."]]
[[!template id=subtitle video="mainVideo" start="00:19:10.942" text="Let me add at this moment that"]]
[[!template id=subtitle video="mainVideo" start="00:19:13.280" text="he was so frustrated with me."]]
[[!template id=subtitle video="mainVideo" start="00:19:13.333" text="They were sort of frustrated with me"]]
[[!template id=subtitle video="mainVideo" start="00:19:17.115" text="(I think I didn't qualify pronouns)"]]
[[!template id=subtitle video="mainVideo" start="00:19:24.240" text="with doing this. The first..."]]
[[!template id=subtitle video="mainVideo" start="00:19:26.287" text="This was one of our first interactions,"]]
[[!template id=subtitle video="mainVideo" start="00:19:27.985" text="and the feedback was,"]]
[[!template id=subtitle video="mainVideo" start="00:19:29.919" text="&quot;Why is this a macro. Full stop.&quot;"]]
[[!template id=subtitle video="mainVideo" start="00:19:34.240" text="And that's a great message, actually."]]
[[!template id=subtitle video="mainVideo" start="00:19:36.640" text="I hope that maybe this can encourage"]]
[[!template id=subtitle video="mainVideo" start="00:19:39.520" text="further talks across the subject about,"]]
[[!template id=subtitle video="mainVideo" start="00:19:42.720" text="you know, &quot;Hey, wait a minute,"]]
[[!template id=subtitle video="mainVideo" start="00:19:43.808" text="macros are really fantastic,&quot;"]]
[[!template id=subtitle video="mainVideo" start="00:19:45.549" text="as I hope I made clear."]]
[[!template id=subtitle video="mainVideo" start="00:19:47.018" text="You can do a tremendous amount"]]
[[!template id=subtitle video="mainVideo" start="00:19:48.559" text="with them, and we rely on them"]]
[[!template id=subtitle video="mainVideo" start="00:19:51.039" text="for almost all the fun goodies,"]]
[[!template id=subtitle video="mainVideo" start="00:19:55.200" text="from defun, setq..."]]
[[!template id=subtitle video="mainVideo" start="00:20:02.159" text="I want to get to my thank yous."]]

[[!template id=subtitle video="mainVideo" start="00:20:04.639" text="Let me just peek back at the pad."]]
[[!template id=subtitle video="mainVideo" start="00:20:20.000" text="Well, that was actually a scratch buffer,"]]
[[!template id=subtitle video="mainVideo" start="00:20:22.080" text="so I'll have to read it cold off my notes."]]
[[!template id=subtitle video="mainVideo" start="00:20:27.919" text="But I'll switch to... I'll also..."]]
[[!template id=subtitle video="mainVideo" start="00:20:30.320" text="I'll say a couple of thank-yous if you"]]
[[!template id=subtitle video="mainVideo" start="00:20:31.600" text="don't mind, Amin."]]
[[!template id=subtitle video="mainVideo" start="00:20:34.320" text="In addition to the big thank you that I"]]
[[!template id=subtitle video="mainVideo" start="00:20:36.080" text="hope was implied by my shout out to wasamasa,"]]
[[!template id=subtitle video="mainVideo" start="00:20:39.360" text="I also want to thank you, Amin, for"]]
[[!template id=subtitle video="mainVideo" start="00:20:42.720" text="your kindness in extending"]]
[[!template id=subtitle video="mainVideo" start="00:20:46.640" text="to the project as well as to me, the"]]
[[!template id=subtitle video="mainVideo" start="00:20:51.360" text="the chance to present here."]]
[[!template id=subtitle video="mainVideo" start="00:20:54.320" text="You've also done a lot of great stuff"]]
[[!template id=subtitle video="mainVideo" start="00:20:56.358" text="for our project. Thank you very much for that."]]
[[!template id=subtitle video="mainVideo" start="00:20:59.360" text="Sacha Chua (I'll get there),"]]
[[!template id=subtitle video="mainVideo" start="00:21:03.400" text="thank you so much for"]]
[[!template id=subtitle video="mainVideo" start="00:21:15.919" text="the inspiration that you are to our"]]
[[!template id=subtitle video="mainVideo" start="00:21:17.200" text="whole community."]]
[[!template id=subtitle video="mainVideo" start="00:21:18.320" text="I also want to thank the presenters"]]
[[!template id=subtitle video="mainVideo" start="00:21:22.400" text="for just being so flexible and"]]
[[!template id=subtitle video="mainVideo" start="00:21:25.600" text="nagging back through the whole thing,"]]
[[!template id=subtitle video="mainVideo" start="00:21:27.600" text="and especially to Leo"]]
[[!template id=subtitle video="mainVideo" start="00:21:29.120" text="who has done so much to drive the show today."]]
[[!template id=subtitle video="mainVideo" start="00:21:32.159" text="This is a fractious tent at times,"]]
[[!template id=subtitle video="mainVideo" start="00:21:37.242" text="and sometimes it is indeed"]]
[[!template id=subtitle video="mainVideo" start="00:21:39.800" text="a little bit of a circus,"]]
[[!template id=subtitle video="mainVideo" start="00:21:41.360" text="but I am learning so much so fast."]]
[[!template id=subtitle video="mainVideo" start="00:21:44.746" text="I'm just inspired by how much"]]
[[!template id=subtitle video="mainVideo" start="00:21:46.880" text="Emacs can teach us."]]
[[!template id=subtitle video="mainVideo" start="00:21:49.333" text="(Amin: thank you, Corwin, for your kind words"]]
[[!template id=subtitle video="mainVideo" start="00:21:52.901" text="about me, of course,"]]
[[!template id=subtitle video="mainVideo" start="00:21:54.960" text="about all of us"]]
[[!template id=subtitle video="mainVideo" start="00:21:56.000" text="and the conference..."]]
[[!template id=subtitle video="mainVideo" start="00:21:58.000" text="Indeed, thanks to everyone who's helped,"]]
[[!template id=subtitle video="mainVideo" start="00:22:02.400" text="including the speakers, of course,"]]
[[!template id=subtitle video="mainVideo" start="00:22:04.159" text="without whom EmacsConf really"]]
[[!template id=subtitle video="mainVideo" start="00:22:05.840" text="wouldn't have been a EmacsConf."]]
[[!template id=subtitle video="mainVideo" start="00:22:08.960" text="It's been a pleasure"]]
[[!template id=subtitle video="mainVideo" start="00:22:10.640" text="knowing you and working with you,"]]
[[!template id=subtitle video="mainVideo" start="00:22:12.366" text="from afar for the most part"]]
[[!template id=subtitle video="mainVideo" start="00:22:15.743" text="on dungeon-mode,"]]
[[!template id=subtitle video="mainVideo" start="00:22:17.360" text="helping with small things here and there"]]
[[!template id=subtitle video="mainVideo" start="00:22:19.937" text="but yeah, it's been my pleasure,"]]
[[!template id=subtitle video="mainVideo" start="00:22:21.796" text="and it's great to have you and"]]
[[!template id=subtitle video="mainVideo" start="00:22:23.840" text="everyone else part of the community,"]]
[[!template id=subtitle video="mainVideo" start="00:22:26.582" text="and for me to be part of the community."]]
[[!template id=subtitle video="mainVideo" start="00:22:29.180" text="It's been a lot of fun."]]
[[!template id=subtitle video="mainVideo" start="00:22:30.559" text="Thank you.)"]]
[[!template id=subtitle video="mainVideo" start="00:22:33.679" text="Corwin: It's an honor."]]
[[!template id=subtitle video="mainVideo" start="00:22:35.206" text="I don't use that word an awful lot"]]
[[!template id=subtitle video="mainVideo" start="00:22:37.428" text="because I sort of smirk at it."]]
[[!template id=subtitle video="mainVideo" start="00:22:39.867" text="It gets us in a lot of trouble, honor does,"]]
[[!template id=subtitle video="mainVideo" start="00:22:43.941" text="but this will be a sure time to use it."]]
[[!template id=subtitle video="mainVideo" start="00:22:46.904" text="(Amin: Thank you.)"]]
[[!template id=subtitle video="mainVideo" start="00:22:48.840" text="Corwin: Likewise."]]