summaryrefslogblamecommitdiffstats
path: root/2022/info/orgvm-after.md
blob: 6e56988a3fbc1a599bbf32c1f225afc49163e190 (plain) (tree)
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
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
                                                                
 

































































































































































































































































































































































































































































































































































































































































































































































                                                                                                                                                       
                                                                                                                                                                                                                  
 
                                            
<!-- Automatically generated by emacsconf-publish-after-page -->


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

[[!template new="1" text="""And so this little application--""" start="00:00:36.000" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""well, I'll skip that and just kind of""" start="00:00:42.480" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""jump right into my thesis for those of you""" start="00:00:42.504" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that might be planning to duck out for the RMS talk,""" start="00:00:49.143" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""starting in a little bit.""" start="00:00:53.360" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So essentially, my thesis here is really that""" start="00:00:55.520" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""the Emacs toolchain can easily be combined""" start="00:00:55.546" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""with other skills and used in kind of""" start="00:00:59.379" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""a Unix paradigm of having sort of different tools""" start="00:01:08.794" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""to do different steps.""" start="00:01:13.280" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""We might actually use the same tool""" start="00:01:14.960" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""to implement a couple of steps.""" start="00:01:17.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""But with that paradigm, each step""" start="00:01:19.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""is an individual item that can be sort of""" start="00:01:22.080" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""dropped in and replaced.""" start="00:01:22.087" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So over the course of the talk,""" start="00:01:26.400" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""hopefully I'll come back to that thesis.""" start="00:01:26.421" video="mainVideo-orgvm" id="subtitle"]]
[[!template new="1" text="""But I'll now jump back and start walking through""" start="00:01:31.080" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""what is orgvm?""" start="00:01:31.087" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So this is a very simple proof of concept program.""" start="00:01:37.040" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""We'll just jump over to perhaps""" start="00:01:39.560" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""a prettier view of the source code for it.""" start="00:01:39.587" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""This is implemented-- oops.""" start="00:01:45.520" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""There's some cruft, I think, in my local.""" start="00:01:49.200" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""All right, so this config block at the top...""" start="00:01:53.160" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And we'll be jumping back and forth""" start="00:01:56.560" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""between the code and the documentation.""" start="00:01:58.120" video="mainVideo-orgvm" id="subtitle"]]
[[!template new="1" text="""So the first thing I want to point out""" start="00:02:01.880" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""is that this is written in Node.js,""" start="00:02:04.080" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""but I think you'll find it'd be pretty trivial to implement""" start="00:02:05.960" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""in any language.""" start="00:02:08.600" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Certainly, you're more than welcome to use this.""" start="00:02:10.840" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I'd be happy to accept your patches or feature requests""" start="00:02:13.960" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""and things like that.""" start="00:02:17.920" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Of course, bug reports.""" start="00:02:20.080" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""But I'd also encourage others to roll their own.""" start="00:02:21.680" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""You might well come up with a different version of this""" start="00:02:25.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that's even cooler.""" start="00:02:28.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And we can learn from each other.""" start="00:02:29.600" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""If you heard one of my talks before,""" start="00:02:32.160" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""you probably recognize a common theme.""" start="00:02:34.200" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I'm a big fan of head-first development""" start="00:02:36.200" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""as a way to get invested in both""" start="00:02:40.320" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""the tool chain and a culture.""" start="00:02:40.337" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""All right, so let's come back to orgvm.""" start="00:02:44.120" video="mainVideo-orgvm" id="subtitle"]]
[[!template new="1" text="""First of all, we'll start with""" start="00:02:49.560" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""the itch I was trying to scratch.""" start="00:02:49.587" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I wanted to be able to quickly use a web browser""" start="00:02:52.840" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""to browse my Org documents.""" start="00:02:58.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""It's particularly handy when the documents""" start="00:03:00.680" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""are full of cross links to each other.""" start="00:03:01.421" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""That meant I wanted to automatically export,""" start="00:03:05.640" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""particularly to HTML.""" start="00:03:10.080" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""But it made sense for me to include Markdown, PDF,""" start="00:03:12.280" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""or whatever format I want.""" start="00:03:17.280" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Because many times, I'm going to look at that file""" start="00:03:18.880" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""and then pop it into an email or upload it somewhere.""" start="00:03:22.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And then finally, it should be, therefore,""" start="00:03:29.480" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""pretty easy to download the document""" start="00:03:33.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""rather than view it, once I'm done.""" start="00:03:33.754" video="mainVideo-orgvm" id="subtitle"]]
[[!template new="1" text="""So let's just run a quick demo.""" start="00:03:38.320" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""You'll see I'm still a Windows user.""" start="00:03:42.200" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Yeah, I'm working on it.""" start="00:03:44.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So all right, first thing that we're going to do""" start="00:03:45.960" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""is fire up the program.""" start="00:03:52.320" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Actually, for simplicity, let's just""" start="00:03:53.320" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""admit we live in a DOS world.""" start="00:04:00.200" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And as you can see, there's not much to it""" start="00:04:01.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""to get the application running.""" start="00:04:19.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So with that done, then, I can run out to my localhost.""" start="00:04:22.680" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And we'll just start by plugging in the name of an Org file.""" start="00:04:25.960" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So I've got a little Org file that I prepared""" start="00:04:37.560" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that just kind of provides a proof of concept to this.""" start="00:04:37.587" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And you can see, as imagined, we're automatically""" start="00:04:49.040" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""turning that Org file...""" start="00:04:53.560" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Let's just take a quick look at it.""" start="00:04:54.640" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And here's that file now.""" start="00:04:56.320" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""You can see, nothing up my sleeve.""" start="00:05:10.280" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""This is a very basic Org file""" start="00:05:11.960" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that I use for testing this program.""" start="00:05:11.962" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Images work.""" start="00:05:16.560" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""We've got some nicely syntax-highlighted code blocks""" start="00:05:17.640" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""in a couple different languages,""" start="00:05:21.837" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""and not really that much going on there.""" start="00:05:25.560" video="mainVideo-orgvm" id="subtitle"]]
[[!template new="1" text="""All right, let's come back to the documentation.""" start="00:05:29.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I pretty well covered this, I think.""" start="00:05:33.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""But you'll need a relatively recent version of Emacs.""" start="00:05:36.680" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I haven't taken any pains to make this backward compatible.""" start="00:05:39.720" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""To be fair, I haven't tested it extensively.""" start="00:05:43.640" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""It may well work on Emacs 26 or older versions.""" start="00:05:46.000" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I'm personally running 27.1 and 28,""" start="00:05:50.320" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""as well as recent builds of 29.""" start="00:05:55.120" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""There's some quick start instructions here,""" start="00:05:57.080" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""which I'm going to take as read.""" start="00:06:02.560" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""You probably saw the key element of this,""" start="00:06:03.900" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""which involves starting the program.""" start="00:06:08.601" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""You do-- I will call out Yale.""" start="00:06:11.920" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""If you're trying to play with this yourself,""" start="00:06:13.520" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""don't forget to run the npm install command.""" start="00:06:15.320" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""That'll bring in express.js,""" start="00:06:20.080" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""which the JavaScript we're about to look at is built on.""" start="00:06:20.087" video="mainVideo-orgvm" id="subtitle"]]
[[!template new="1" text="""So let's just take a look at the usage patterns real quick.""" start="00:06:24.920" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""To use this, we're simply giving the document name""" start="00:06:33.480" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""without the .org extension in whatever file path--""" start="00:06:35.920" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""or I'm sorry, whatever we've configured the server""" start="00:06:42.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""to run on, in this case, port 3000.""" start="00:06:46.960" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I also want to call attention to the fact""" start="00:06:50.800" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that nothing in this program protects you""" start="00:06:52.960" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""from damaging yourself.""" start="00:06:55.880" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""This isn't meant as a production capability.""" start="00:06:57.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""This is something that's used to publish""" start="00:07:00.560" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""your own note files""" start="00:07:00.587" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""and roll them out to yourself.""" start="00:07:04.840" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""That's something I'll definitely look at adding,""" start="00:07:06.520" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""but I want people to be careful of it""" start="00:07:08.680" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""while this is in an alpha state.""" start="00:07:12.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So the default response is HTML, and we saw that here.""" start="00:07:14.720" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""But we also can modify the response format.""" start="00:07:22.960" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""We're currently supporting HTML, Markdown, and PDF.""" start="00:07:26.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And that's really enough to select a different format.""" start="00:07:29.800" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""That's really nothing more than adding type. Okay.""" start="00:07:34.280" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Not sure what's going on there.""" start="00:07:48.040" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Okay, well, there goes my demo.""" start="00:07:50.680" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Shows me for doing my talk live.""" start="00:07:57.080" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""But this, fortunately, this error message""" start="00:08:03.920" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""is a nice segue to the part of the talk""" start="00:08:06.960" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that I'd really like to focus on,""" start="00:08:08.840" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""hopefully bringing me back to that thesis.""" start="00:08:10.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template new="1" text="""So as we start to look at code, what we're looking for""" start="00:08:13.520" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""is really this Emacs Lisp that's getting generated here.""" start="00:08:17.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And you'll notice that's the stuff""" start="00:08:21.640" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I thought was important to produce as diagnostics""" start="00:08:24.000" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""for the programs running as well.""" start="00:08:27.600" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So, spoiler, this Elisp is dynamically""" start="00:08:29.840" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""generated by the program.""" start="00:08:34.000" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And that's really the core of the way""" start="00:08:35.400" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""orgvm or my orgvm works.""" start="00:08:38.160" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So this should look pretty similar to the view of the code""" start="00:08:42.680" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""we had a moment ago.""" start="00:08:47.360" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""You can see I've got some bases.""" start="00:08:48.880" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""This is all hard-coded into the program,""" start="00:08:51.840" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""nothing fancy going on here.""" start="00:08:53.680" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""The debug is simply controlling that diagnostic output""" start="00:08:56.720" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that we looked at.""" start="00:09:00.280" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""There's some other, hopefully fairly self-explanatory""" start="00:09:01.560" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""programs or properties, where to find Emacs and so forth.""" start="00:09:04.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template new="1" text="""And then finally, we come in to the meat of it,""" start="00:09:09.160" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""the variables that are used to control what Elisp""" start="00:09:16.320" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""we can generate dynamically.""" start="00:09:16.337" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So here, we're controlling the extension""" start="00:09:24.280" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that it should look for Org files.""" start="00:09:27.400" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Hopefully not too many people out there""" start="00:09:29.360" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""with a weird extension for the Org files,""" start="00:09:31.560" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""but this should support that.""" start="00:09:34.080" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I'm afraid that is something I've been known to do.""" start="00:09:37.920" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Then we define a list of additional export types.""" start="00:09:40.120" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Here's one that ought to work.""" start="00:09:49.520" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Let's take a look at type=org.""" start="00:09:50.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And, aha, it's giving us the file.""" start="00:09:54.720" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So I'm not going to open that up,""" start="00:09:59.320" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""but now we can see that that's definitely working,""" start="00:10:00.680" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""for certain versions of working.""" start="00:10:02.421" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So this list of type parameters is""" start="00:10:09.200" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""controlling the supported types.""" start="00:10:14.280" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Hopefully it should be fairly easy to add in different ones.""" start="00:10:15.720" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""The fancy footwork here is just a list""" start="00:10:18.800" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""of the types that we're going to be using.""" start="00:10:21.480" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""The fancy footwork here involves, first of all,""" start="00:10:23.480" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""there's the extension and the MIME type.""" start="00:10:29.320" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""That's, as you might guess, used to control""" start="00:10:32.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""the response content type.""" start="00:10:32.254" video="mainVideo-orgvm" id="subtitle"]]
[[!template new="1" text="""We also have this replace variable.""" start="00:10:38.720" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""This prevents-- there's an optimization""" start="00:10:40.920" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""to send an existing PDF or HTML file""" start="00:10:44.000" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""if that's already there,""" start="00:10:48.837" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""but only if the original source Org file""" start="00:10:50.464" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""hasn't been modified since.""" start="00:10:51.004" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""This `replace` effectively can turn that off.""" start="00:10:56.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""If I remove the `replace: true` attribute,""" start="00:10:59.920" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""then I'll be prevented from overwriting that.""" start="00:11:03.040" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""In other words, I'll always send a cached version.""" start="00:11:07.600" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""That might be helpful if, for example,""" start="00:11:10.320" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""you've got hand-tuned PDFs""" start="00:11:13.879" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""and you don't want to accidentally overwrite them.""" start="00:11:15.066" video="mainVideo-orgvm" id="subtitle"]]
[[!template new="1" text="""All right, let's get into the code a little bit more.""" start="00:11:19.120" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I'm going to skip past the really good stuff""" start="00:11:23.480" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""and jump into the boring parts""" start="00:11:28.280" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""so that we have them as context.""" start="00:11:28.296" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Here's the default path.""" start="00:11:34.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And it is going to send me the readme from the project--""" start="00:11:37.160" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""from the project repo if I don't specify a path.""" start="00:11:41.880" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And then we have a couple of different endpoints""" start="00:11:47.120" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that we support.""" start="00:11:51.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""We'll come back to this first one.""" start="00:11:52.480" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""For now, let's start with the more normal one,""" start="00:11:55.560" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""which is just giving us a file name.""" start="00:11:55.587" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So we can see we start by figuring out""" start="00:12:01.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""what the physical file name should be called.""" start="00:12:04.160" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And assuming that that exists--""" start="00:12:08.520" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""sorry, I've confused myself.""" start="00:12:15.600" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So this is the caching or the optimization""" start="00:12:17.080" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that I mentioned, sending the existing file.""" start="00:12:23.000" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""This file exists is where the optimization is""" start="00:12:25.640" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that regenerates the file if the source""" start="00:12:31.360" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""or document for the HTML generator has changed.""" start="00:12:38.680" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Again, this is a short talk, so I'm not""" start="00:12:45.080" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""going to go into all the nuances of this JavaScript code.""" start="00:12:46.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""It's pretty far from an Emacs-related thing.""" start="00:12:49.320" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So with that said, then, the rest of this program""" start="00:12:52.800" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""is really mostly just handling the different errors:""" start="00:12:56.040" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""&quot;I didn't understand that type.&quot;""" start="00:12:59.360" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""&quot;I don't know the document.&quot;""" start="00:13:01.000" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""&quot;I failed.&quot;""" start="00:13:02.080" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Otherwise, there's the caching.""" start="00:13:03.040" video="mainVideo-orgvm" id="subtitle"]]
[[!template new="1" text="""And here's really where things get interesting,""" start="00:13:06.480" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""where we've generated some Elisp,""" start="00:13:14.520" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""and then we're calling Emacs with that Elisp.""" start="00:13:19.200" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""If everything works, we'll send the file.""" start="00:13:22.280" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""If it doesn't, we'll send the 500.""" start="00:13:24.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And we've already seen the 500, so we know that works.""" start="00:13:27.800" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""All right, let's get to the interesting part.""" start="00:13:30.920" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Sorry, one more footnote.""" start="00:13:33.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template new="1" text="""There is a capability built in that will""" start="00:13:37.320" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""allow us to execute an Org block.""" start="00:13:39.320" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Let's see if that's working in our local.""" start="00:13:41.040" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I'll remind myself how to do it.""" start="00:13:44.800" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""It's run.""" start="00:13:47.200" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I think it's called test.""" start="00:13:49.560" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And that's returning a 500.""" start="00:13:53.320" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I'm suspecting that's running because I'm running""" start="00:13:56.360" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""in command instead of bash.""" start="00:13:58.400" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Oh, yeah, so the failure is happening""" start="00:13:59.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""after I generate the Elisp.""" start="00:14:06.040" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I'm pretty confident that is what the actual problem is.""" start="00:14:07.720" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""If we have time, I'll jump back over there""" start="00:14:10.280" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""and relaunch it in mingw bash.""" start="00:14:12.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And we can see it actually work.""" start="00:14:19.280" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""But this works pretty well for me on my work laptop.""" start="00:14:21.440" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I didn't have to make any changes to it.""" start="00:14:24.200" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So I have a fairly high amount of confidence,""" start="00:14:25.860" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""at least in trivial cases, this works pretty well.""" start="00:14:28.120" video="mainVideo-orgvm" id="subtitle"]]
[[!template new="1" text="""All right, so what I actually wanted to talk about today--""" start="00:14:32.400" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""and I'm going to be kind of hand-waving around""" start="00:14:37.800" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""this ES5 class that I've got and kind of the way that works.""" start="00:14:41.731" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Hopefully, this will be pretty familiar to you""" start="00:14:46.480" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""if you are a JavaScript programmer.""" start="00:14:49.840" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""The interesting stuff comes when we want to build some Lisp.""" start="00:14:53.440" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Here, you can see that I really don't have""" start="00:15:01.960" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""a whole lot of code around formatting LISP.""" start="00:15:01.962" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""You can see that I've special-cased""" start="00:15:11.280" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""whether the arguments that were passed""" start="00:15:14.360" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""happen to be a function.""" start="00:15:19.840" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""If they are, I'm going to call that function.""" start="00:15:20.880" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And then the result will be formatted as Lisp.""" start="00:15:25.480" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So this would be a recursive call here.""" start="00:15:31.720" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Otherwise, I'm just going to return the arguments.""" start="00:15:35.040" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Sorry, otherwise, I will slap a pair of parentheses""" start="00:15:40.960" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""around the result of walking that list if I get...""" start="00:15:48.440" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""formatting each element of the list of arguments""" start="00:15:57.879" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that this `formatLisp` process calls""" start="00:15:57.880" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""and separating them with spaces.""" start="00:16:02.600" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So in short form, this program walks through a list.""" start="00:16:04.920" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""If the list it receives is a function,""" start="00:16:10.880" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""it calls that function.""" start="00:16:14.000" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Once that's handled or otherwise,""" start="00:16:16.080" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""we simply walk the list, taking the arguments,""" start="00:16:19.320" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""concatenating them on strings, and finally,""" start="00:16:22.720" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""wrap the results in parentheses.""" start="00:16:26.000" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So what I didn't mention there but might be obvious""" start="00:16:28.560" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""is if I have a nested list, the inner list""" start="00:16:31.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""will be subjected to the same treatment.""" start="00:16:36.120" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So this is a recursive sort of algorithm.""" start="00:16:38.600" video="mainVideo-orgvm" id="subtitle"]]
[[!template new="1" text="""All right, so now when I go to export,""" start="00:16:43.000" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""actually, in the interest of time,""" start="00:16:51.520" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I'm going to avoid walking through that piece of code""" start="00:16:53.520" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""and let's focus instead on the more interesting part""" start="00:16:55.800" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""of how that Lisp gets encoded.""" start="00:16:58.840" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So coming back to the PDF is a good example here,""" start="00:17:02.360" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""because it's got a special case.""" start="00:17:07.520" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""You can see I've specified this `exportFun`""" start="00:17:10.320" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""or export function.""" start="00:17:10.337" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""That's a property none of these other types have.""" start="00:17:15.320" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And you can see it contains some Elisp telling us""" start="00:17:22.400" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""how to call the export for it.""" start="00:17:27.280" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Let's go see how that's used.""" start="00:17:29.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""At the very end of what I just skipped over,""" start="00:17:32.680" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""the detailed &quot;how the Org export process works,&quot;""" start="00:17:35.720" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""you'll see that I am ending with a step""" start="00:17:40.600" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""to call the export function.""" start="00:17:45.040" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Here, I look to see whether I have""" start="00:17:48.000" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""an export function property.""" start="00:17:48.004" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""If I do, I call that function.""" start="00:17:55.400" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And if I don't, I build this list with the default""" start="00:18:00.920" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""`org-export-to-file` function""" start="00:18:00.921" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""using the filename and an output filename.""" start="00:18:07.072" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So this, hopefully, is pretty familiar to anybody""" start="00:18:15.640" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that's manually messed around""" start="00:18:18.480" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""with calling `org-export-to-file`.""" start="00:18:18.504" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""If it isn't, you can pretty well trust me for it.""" start="00:18:23.560" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""There's nothing very special going on.""" start="00:18:25.800" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""This looks rather like...""" start="00:18:28.280" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Poor example there.""" start="00:18:30.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Let's go back to our markdown.""" start="00:18:37.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And there, we can see--""" start="00:18:46.320" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""[Leo]: I'm going to make a quick announcement.""" start="00:18:47.720" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Can you hear me?""" start="00:18:49.840" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""[Corwin]: Yes, go for it.""" start="00:18:50.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""[Leo]: OK, let me just show my face.""" start="00:18:52.480" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Oh, I'm not showing my face.""" start="00:18:54.280" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Damn it.""" start="00:18:55.400" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""OK, I'll make the announcement.""" start="00:18:55.640" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""You won't see my face quite yet.""" start="00:18:57.000" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""We are about to get started.""" start="00:18:58.600" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Well, we actually just got started on dev""" start="00:19:00.360" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""with the talk by RMS.""" start="00:19:02.440" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So if you want to hop over to watch the talk by RMS,""" start="00:19:06.040" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""feel free to do so.""" start="00:19:08.920" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Otherwise, we will be continuing on Gen with Corwin""" start="00:19:09.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""to finish his talk and have a Q&A.""" start="00:19:12.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Corwin, you can feel free to go now.""" start="00:19:12.254" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""[Corwin]: Okay, bye, everybody.""" start="00:19:16.080" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And for those sticking around,""" start="00:19:18.560" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I'm just going to keep pressing on with this.""" start="00:19:22.796" video="mainVideo-orgvm" id="subtitle"]]
[[!template new="1" text="""In fact, I'm going to dive back into the part""" start="00:19:25.040" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that I skipped here, which is the rest of how""" start="00:19:30.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""this export functionality works.""" start="00:19:35.400" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So just to make sure the dot is tied together,""" start="00:19:37.400" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""the core of how this program works""" start="00:19:41.400" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""is generating some Elisp and then passing it""" start="00:19:44.440" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""to Emacs in batch mode.""" start="00:19:49.320" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So if that wasn't perfectly clear,""" start="00:19:51.680" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that's really what's going on with this program.""" start="00:19:53.280" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""The rest of the implementation is just""" start="00:19:57.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""a way to do that or certain features that""" start="00:19:59.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""are supported in that generated Elisp, if you will.""" start="00:20:01.840" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So this is, you could say, the minimum implementation""" start="00:20:08.440" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I could come up with to create a web server""" start="00:20:11.720" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""for my local Org documents.""" start="00:20:11.754" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And I will also interrupt myself to just pull up""" start="00:20:17.320" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""the Etherpad real quick.""" start="00:20:24.440" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Actually, if somebody is listening""" start="00:20:28.040" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""and can share a link to that, I closed my browser window""" start="00:20:29.600" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""with my links in it.""" start="00:20:34.720" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""But sure, I'm happy to take questions at any point, Leo,""" start="00:20:36.400" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""if there are any questions for me.""" start="00:20:44.520" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Are you hanging out with me,""" start="00:20:48.480" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""instead of watching RMS? You can go.""" start="00:20:49.720" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I'm teasing.""" start="00:20:53.360" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""[Leo]: No, I mean, we know that some people can""" start="00:20:54.600" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""have both streams open.""" start="00:20:58.840" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""It's fine.""" start="00:21:00.000" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And right now, it's not the Q&A with RMS.""" start="00:21:01.560" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""It's just the presentation.""" start="00:21:03.320" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So feel free to hang out a little longer""" start="00:21:04.640" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""if you just want the live stuff.""" start="00:21:07.040" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Don't worry about it.""" start="00:21:09.080" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""You're fine.""" start="00:21:09.960" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""[Corwin]: Yeah, and forgive me, everybody,""" start="00:21:10.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""if you were hoping for a quick, succinct talk.""" start="00:21:13.720" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I happen to know I was going to be opposite RMS,""" start="00:21:16.280" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""so I awarded myself the liberty of rambling.""" start="00:21:18.960" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So if you do have a question, something that I alluded to""" start="00:21:23.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""and haven't come back to yet, you should, by all means,""" start="00:21:26.840" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""prompt me.""" start="00:21:29.800" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""[Leo]: Corwin, I might do--""" start="00:21:30.320" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I'm just giving you a little heads up.""" start="00:21:33.800" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I might need to go help at some point of dev.""" start="00:21:35.400" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So if I need to do so, I will let you know right now""" start="00:21:38.640" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""inside the BBB room,""" start="00:21:43.120" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""and you'll be on your own to manage the chat.""" start="00:21:44.280" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And you can just talk backstage to us""" start="00:21:46.160" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""to manage what we do with the stream, OK?""" start="00:21:47.960" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""[Corwin]: Yep, that should be no problem at all.""" start="00:21:50.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I've got my pad up now.""" start="00:21:52.160" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Thank you, ??.""" start="00:21:53.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And I'm sorry about butchering your name there.""" start="00:21:55.160" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And yep, I've got my chat open.""" start="00:21:58.040" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And I think I'm pretty well set to self-manage.""" start="00:22:03.360" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Oh, I don't have a camera on.""" start="00:22:06.400" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So you can't see me giving you the thumbs up.""" start="00:22:07.640" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""[Leo]: Okay, good.""" start="00:22:09.360" video="mainVideo-orgvm" id="subtitle"]]
[[!template new="1" text="""All right, so let's just walk through,""" start="00:22:09.860" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""because it's sort of an interesting code.""" start="00:22:16.000" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Let's just take a look real quick""" start="00:22:18.400" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""at how we generated our Elisp here,""" start="00:22:20.560" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""because it is--""" start="00:22:24.720" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""there we go.""" start="00:22:26.520" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""It is a little bit interesting.""" start="00:22:27.640" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So here is the method.""" start="00:22:29.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So I didn't get into detail on this.""" start="00:22:32.040" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""But there's an ES5 class that represents""" start="00:22:34.080" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""an Org mode document.""" start="00:22:34.087" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""It has the static debug property that,""" start="00:22:38.920" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""as you might imagine,""" start="00:22:38.921" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""can be overridden by that debug setting""" start="00:22:42.400" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""we looked at in the defaults.""" start="00:22:45.480" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""We also have a static variable that--""" start="00:22:48.440" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""a static property that does nothing more than getting""" start="00:22:51.440" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""the path to Emacs out of those defaults.""" start="00:22:57.440" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Similarly, we have a class method""" start="00:23:00.360" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""to spawn out an Emacs, as I mentioned, in batch mode,""" start="00:23:02.120" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""eval-ing some arbitrary Lisp that's passed in.""" start="00:23:09.520" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""All right, so the type--""" start="00:23:12.720" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""this is where things start to get interesting.""" start="00:23:20.480" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So this is an implementation detail,""" start="00:23:23.080" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""but-- that it's written as a static method.""" start="00:23:26.480" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""But essentially, what's going on here""" start="00:23:30.040" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""is looking up from that type list""" start="00:23:32.160" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""to try to find a type that's passed in,""" start="00:23:34.840" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""and that's returning one of these blocks.""" start="00:23:37.480" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Let's say I requested HTML, which would be the default.""" start="00:23:41.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Then I'm going to get this set of properties back.""" start="00:23:44.800" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""All right.""" start="00:23:50.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Essentially, this program generates a program""" start="00:23:51.260" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""or a little block of executable elisp.""" start="00:24:04.200" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""However, in some cases, where if the `load-path` has""" start="00:24:10.840" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""been customized in that type block,""" start="00:24:15.920" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""or I think that's the only case I supported.""" start="00:24:20.920" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""There was another complexity I removed.""" start="00:24:25.000" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So in that case, then I can simply""" start="00:24:28.960" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""replace that program with a let.""" start="00:24:32.000" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Either way, I'm going to have everything I generate""" start="00:24:33.560" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""be encapsulated in a single block.""" start="00:24:41.680" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""The-- then I'm calling that formatLisp process""" start="00:24:45.840" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that we talked about, appending to that--""" start="00:24:49.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""or inserting into, you could say, the outer scope.""" start="00:24:52.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And we start by finding the file.""" start="00:25:01.680" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""We then load any libraries that might be needed.""" start="00:25:05.000" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""In some cases, the type might not""" start="00:25:11.400" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""have any external libraries.""" start="00:25:13.520" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So we just-- so that's a no-op.""" start="00:25:15.160" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And then finally, we're going to execute""" start="00:25:18.440" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that logic I mentioned before about selecting""" start="00:25:24.120" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""either the default org-export-to-file,""" start="00:25:27.160" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""or else whatever Elisp we've staged for exporting""" start="00:25:30.160" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that particular file type.""" start="00:25:36.200" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And again, in the case of PDF, there's a special function""" start="00:25:38.160" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that's used to trigger that export.""" start="00:25:43.113" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Or you may be aware that that's a little more complicated.""" start="00:25:46.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""There's intermediate forms there.""" start="00:25:49.160" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""All right.""" start="00:25:50.840" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So just reminding myself if there's anything else""" start="00:25:56.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I have to cover on background.""" start="00:26:01.320" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And I think that pretty well covers the basics.""" start="00:26:03.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template new="1" text="""All right, let's look at that source block execute.""" start="00:26:07.440" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""This is the other use of the format list function.""" start="00:26:09.880" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So here, rather than looking at the type""" start="00:26:14.600" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""and passing that through our Org export method,""" start="00:26:16.800" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""and then that type is used to get the list""" start="00:26:24.720" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that we want to create.""" start="00:26:29.080" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""In the case of source block execute,""" start="00:26:30.840" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""we're kind of rolling it a lot more by hand.""" start="00:26:37.600" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So this gives us a good chance to sort of unwind""" start="00:26:40.520" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""how that list looks when it's staged as JavaScript data.""" start="00:26:43.920" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So here again, I wrap everything in a `progn`.""" start="00:26:49.600" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I start by preventing an interactive prompt""" start="00:26:52.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""for the Babel execution.""" start="00:26:58.480" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And then we load languages.""" start="00:27:01.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""This relates to another piece of our configuration""" start="00:27:04.960" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""where we've specified a set of languages""" start="00:27:12.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that it's OK to execute.""" start="00:27:17.600" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So if that type isn't in this list,""" start="00:27:19.920" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""then we won't be able to execute it in line""" start="00:27:24.120" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""through our trivial little web server.""" start="00:27:28.800" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""All right.""" start="00:27:32.720" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""With that done, then, loading the selected language,""" start="00:27:33.640" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""we then once again open the file.""" start="00:27:40.600" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And we're-- whoops.""" start="00:27:43.960" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Let-bind a return value, which is""" start="00:27:46.360" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""calculated by using Org source block execute [`org-sbe`]""" start="00:27:51.800" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""on the name of the block that's given.""" start="00:27:55.167" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And then we use a temp buffer to write that out""" start="00:27:58.040" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""to a temporary file.""" start="00:28:05.160" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""This is actually a little clumsy,""" start="00:28:06.640" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""but I haven't put the effort in to have this written out""" start="00:28:08.440" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""to the standard output cleanly instead of using a temp file.""" start="00:28:12.720" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So under-- this is another example of where it may not""" start="00:28:17.840" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""be production-- well, it definitely""" start="00:28:20.480" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""is not production-worthy code in that under heavy load,""" start="00:28:22.520" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""this would certainly break with collisions""" start="00:28:27.680" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""on the Babel file,""" start="00:28:30.167" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""the name of the Babel file.""" start="00:28:32.040" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""In any case, once we've staged up our Elisp, which is--""" start="00:28:34.120" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""this is basically variable interpolation,""" start="00:28:37.480" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""then we just call Emacs on that.""" start="00:28:42.560" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And if we look down to where that's called,""" start="00:28:47.680" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""you can see that the Org Babel filename calculated here.""" start="00:28:49.720" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""[Leo]: Is there a problem?""" start="00:29:12.795" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""[Corwin]: No, I'm fine.""" start="00:29:15.000" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I'm just lost in my code.""" start="00:29:15.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""[Leo]: OK, cool.""" start="00:29:18.000" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Uh-oh means, oh, I need to intervene.""" start="00:29:19.040" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""What is going on?""" start="00:29:21.160" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Carry on, please.""" start="00:29:22.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""[Corwin]: No, I'm fine, Leo.""" start="00:29:23.200" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Thank you.""" start="00:29:24.120" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""All right, so then--""" start="00:29:25.480" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""so you can see we get--""" start="00:29:27.280" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""we send the Babel file here,""" start="00:29:28.680" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""which is calculated manually.""" start="00:29:35.538" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""A bit sloppy there, since I have essentially the same--""" start="00:29:41.640" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I have two different places where""" start="00:29:45.440" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I'm calculating the Org doc file in two different ways.""" start="00:29:47.000" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Have I encouraged you to write your own yet?""" start="00:29:52.480" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Or send patches.""" start="00:29:54.720" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""All right, so that's pretty much the nuts and bolts""" start="00:29:56.440" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""of this program.""" start="00:30:01.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Let's go back to just seeing if we can't make it run.""" start="00:30:02.400" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""All right.""" start="00:30:22.120" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""All right, well, I apologize for not""" start="00:30:22.620" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""having taken the time to stage my demo this morning.""" start="00:30:45.880" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I'm going to try to make it better for you.""" start="00:30:49.560" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""But apparently, it's going to be non-trivial""" start="00:30:52.680" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""to make the program work.""" start="00:30:59.920" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Let's just-- before I completely give up,""" start="00:31:04.520" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""let's go ahead and try our Babel execute.""" start="00:31:07.160" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And that, too, is failing.""" start="00:31:13.320" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So there's something unhappy in my local world.""" start="00:31:14.800" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""There it goes.""" start="00:31:18.040" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""But in any case, let's go ahead and just take a look at""" start="00:31:19.040" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that.""" start="00:31:26.600" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Let's see.""" start="00:31:28.000" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Control Enter.""" start="00:31:30.640" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Let's take a look at that generated .el""" start="00:31:36.628" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""and compare it to-- whoa--""" start="00:31:40.200" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""and compare it to--""" start="00:31:42.840" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I'm just going to format this manually,""" start="00:31:44.000" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""because I've forgotten my key bindings to auto-format it.""" start="00:31:52.400" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""There we go.""" start="00:31:56.000" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""All right.""" start="00:32:02.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So now we can see, as promised, there's really""" start="00:32:07.960" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""nothing going on here other than the interpolation""" start="00:32:13.120" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""of the variables in.""" start="00:32:16.200" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""We're inserting-- we're using an insert and write file""" start="00:32:18.640" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""method, which is, again, rather sloppy,""" start="00:32:24.360" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""to generate the text file.""" start="00:32:27.800" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""All right.""" start="00:32:32.040" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Let's come back to our documentation""" start="00:32:32.880" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""and see if we can put a bow on the project.""" start="00:32:34.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template new="1" text="""So I hope I've convinced you that this was actually""" start="00:32:39.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""rather easy to do.""" start="00:32:43.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""The entirety of my index.js file is 262 lines,""" start="00:32:45.480" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""and that includes a good 40 of whitespace and configuration.""" start="00:32:52.440" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""It has only one dependency, the Express,""" start="00:33:03.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""which really builds the web server.""" start="00:33:06.506" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Any language you'd rather implement this in""" start="00:33:08.240" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""will have a similar capability for building""" start="00:33:11.520" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""some type of trivial web server.""" start="00:33:14.120" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And I think you may find--""" start="00:33:16.280" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I certainly found that a large portion of the code base""" start="00:33:18.400" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""is really making the errors meaningful,""" start="00:33:22.640" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""in that, in some cases, sending an appropriate HTTP status""" start="00:33:28.080" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""based on what happened.""" start="00:33:32.420" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""In other cases-- let's see if""" start="00:33:34.360" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I've got an explicit `throw` left in here--""" start="00:33:38.003" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""in other cases, just trapping different types""" start="00:33:42.640" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""of failure conditions.""" start="00:33:45.840" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I'm going to look at my pad, and I do see a question here.""" start="00:33:47.440" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So let me jump in here.""" start="00:33:54.000" video="mainVideo-orgvm" id="subtitle"]]
[[!template new="1" text="""[Leo]: Corwin, just to make sure, are you switching to Q&A?""" start="00:33:58.880" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Are you finished with your presentation?""" start="00:34:00.640" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""[Corwin]: Well, as I said, I'm happy to take Q&A throughout.""" start="00:34:02.380" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""But yes, let's say yes to that.""" start="00:34:05.260" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""[Leo]: Okay, so Corwin, what I'm going to need to do now--""" start="00:34:08.420" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""you are in charge of the room.""" start="00:34:10.900" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""We are going to open up the room so""" start="00:34:12.140" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that if people have questions watching right now on Gen,""" start="00:34:14.060" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""feel free to come in.""" start="00:34:17.220" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And there was something else I needed to say.""" start="00:34:18.700" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Yes, Corwin, if there's any problem,""" start="00:34:22.780" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""whisper to us on Mumble.""" start="00:34:24.620" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So you might want to unmute Mumble""" start="00:34:25.700" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""and be able to listen to us over there.""" start="00:34:27.500" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""[Corwin]: I can't do that, Leo.""" start="00:34:29.620" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""If I unmute, Mumble is going to bleed through.""" start="00:34:32.480" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""[Leo]: Okay, sure.""" start="00:34:36.440" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Well, if you have any problem,""" start="00:34:36.960" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""type in #emacsconf-org channel,""" start="00:34:39.417" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""and we'll be with you, OK?""" start="00:34:41.160" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""[Corwin]: Or I'll PM somebody.""" start="00:34:42.520" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""But I don't anticipate having any problems.""" start="00:34:43.520" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I'll put something in -org when I run out of steam here.""" start="00:34:45.760" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""How's that?""" start="00:34:49.040" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""[Leo]: Amazing, cool.""" start="00:34:50.400" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So I will have to leave the room, though.""" start="00:34:51.160" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I'm leaving the recording going so that we have your Q&A.""" start="00:34:53.320" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And whenever you're available--""" start="00:34:56.800" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""[Corwin]: I'll shut off the recording when I close the room.""" start="00:34:58.080" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""[Leo]: Okay, great.""" start="00:35:02.180" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Good luck, Corwin.""" start="00:35:02.980" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""[Corwin]: Thank you.""" start="00:35:04.460" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""All right, and if you're still with me, well, thanks.""" start="00:35:06.500" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I appreciate that.""" start="00:35:09.780" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I did offer to be opposite RMS.""" start="00:35:13.620" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And I'm in no way offended if people do want to jump over,""" start="00:35:16.740" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""especially as that starts to shift over to Q&A.""" start="00:35:20.060" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I'm taking Leo's leaving as a pretty good indication""" start="00:35:23.540" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that that's happening now-ish.""" start="00:35:26.980" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So I totally understand""" start="00:35:28.780" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""if folks are more excited to do that.""" start="00:35:31.386" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Meanwhile, let me just jump over to the question""" start="00:35:35.020" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that I received.""" start="00:35:37.940" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I'll show the pad here so that I save myself""" start="00:35:38.660" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""reading the question out.""" start="00:35:46.460" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""But I'll paraphrase it.""" start="00:35:47.860" video="mainVideo-orgvm" id="subtitle"]]
[[!template new="1" text="""Why am I not running the web server in Emacs?""" start="00:35:48.940" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""That would be a great way to do it.""" start="00:35:52.660" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I chose to build it in Node.js""" start="00:35:54.380" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""because that was trivially easy for me.""" start="00:35:56.341" video="mainVideo-orgvm" id="subtitle"]]
[[!template new="1" text="""And then finally, am I using org-info-js?""" start="00:36:22.140" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""No, I learned about this essentially at this conference.""" start="00:36:24.780" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So that's something I'll be learning more about.""" start="00:36:27.540" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And it could well influence this project.""" start="00:36:30.660" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""All right, and thanks for the questions.""" start="00:36:34.900" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""All right, I'm going to slow my roll just a little bit here""" start="00:36:59.020" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""because I think I kind of have all the time in the world.""" start="00:37:02.820" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I will be wrapping up within about 15 or 20 minutes""" start="00:37:06.980" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""at the latest just to avoid stressing out""" start="00:37:11.540" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""my fellow organizers, especially Leo and Sacha""" start="00:37:15.620" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that have the bulk of the heavy lifting this year,""" start="00:37:18.828" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""and Amin, and really, thanks all to everybody.""" start="00:37:22.260" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""God, the nicest part of doing my own talk""" start="00:37:26.820" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""is that I get to say that.""" start="00:37:29.540" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""It's just so much fun to contribute to EmacsConf.""" start="00:37:31.980" video="mainVideo-orgvm" id="subtitle"]]
[[!template new="1" text="""And if you're at all interested, there's""" start="00:37:35.460" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""plenty of completely backstage, behind the curtain role.""" start="00:37:38.740" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Behind the curtain roles doesn't mean""" start="00:37:43.100" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""you have to be somebody that likes""" start="00:37:45.340" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""talking or being on webcam.""" start="00:37:47.866" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Sorry that my camera isn't working this year.""" start="00:37:50.060" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I spent quite a while fussing with that""" start="00:37:52.300" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""and lost all my time to get my prerec working.""" start="00:37:53.980" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""All right, so trying to think where I can take us""" start="00:37:56.740" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""without my demo working.""" start="00:38:10.140" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I was really hoping to show the Org Babel piece.""" start="00:38:11.540" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""That's really fun.""" start="00:38:14.540" video="mainVideo-orgvm" id="subtitle"]]
[[!template new="1" text="""So let me just mention briefly how I'm using this at work.""" start="00:38:15.580" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So at work, I'll have some type of Org document.""" start="00:38:20.420" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And usually, it's a project.""" start="00:38:25.980" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So the title of the document is My Project.""" start="00:38:27.700" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And then I'll have a requirements section.""" start="00:38:32.900" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And I'll have a meeting notes section.""" start="00:38:37.820" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""That's probably the key thing.""" start="00:38:43.540" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And then as the project goes on, I'll start having--""" start="00:38:44.980" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I'm a solutions architect.""" start="00:38:49.540" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So my job is formalizing design in large part.""" start="00:38:50.740" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So then I'll have a design documents section.""" start="00:38:55.420" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And this is where I'll be doing a lot of my work.""" start="00:39:01.740" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So I'll start out saying--""" start="00:39:05.020" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And maybe Bob is a subject matter expert""" start="00:39:26.620" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""whose buy-in I need to have on how we're going""" start="00:39:29.340" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""to do the high-level design.""" start="00:39:32.460" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Maybe a lead engineer or a dev manager""" start="00:39:34.820" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""or something like that.""" start="00:39:37.297" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""All right, as my work goes on,""" start="00:39:39.460" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""then this will start getting into more detail.""" start="00:39:42.654" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And things of this nature.""" start="00:40:16.620" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""As things get further and further,""" start="00:40:18.660" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I'll actually have documentation""" start="00:40:20.180" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that I'm adding in here.""" start="00:40:21.740" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Oh, I see.""" start="00:40:22.820" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""It's a big mess.""" start="00:40:28.900" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""All right, well, we'll just reuse this.""" start="00:40:29.740" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So I can insert those all in line.""" start="00:40:32.140" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And now for the fun part,""" start="00:40:40.380" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""let's see if the most trivial case""" start="00:40:42.158" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""is working here.""" start="00:40:44.460" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""No.""" start="00:40:49.940" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""All right, completely broken.""" start="00:40:51.180" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Let me drag.""" start="00:40:52.900" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""All right, well, apologies again for the poor quality""" start="00:40:57.260" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""of my demo today.""" start="00:41:05.180" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And let me just look real quick at my Etherpad once more.""" start="00:41:06.260" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And I'll glance at BBB to see if there's anybody""" start="00:41:13.900" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""jumping in with questions.""" start="00:41:16.820" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And then I'll go back to IRC and look for questions there.""" start="00:41:18.140" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""OK, and I don't see any additional questions on the pad.""" start="00:41:23.740" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I'm just going to scan IRC real quick.""" start="00:41:33.180" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I suspect that the TreeSitter comment isn't for me.""" start="00:41:35.780" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""All right, and I'm not seeing a lot of questions there.""" start="00:41:44.900" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So I'm just going to vamp for just a minute or two.""" start="00:41:56.620" video="mainVideo-orgvm" id="subtitle"]]
[[!template new="1" text="""As I mentioned, I'm a conference volunteer.""" start="00:42:04.340" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""This is my third year volunteering""" start="00:42:07.980" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""with the conference.""" start="00:42:09.700" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And probably if you take one thing away from my talk,""" start="00:42:11.940" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""it should be I really like volunteering""" start="00:42:15.140" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""for the conference.""" start="00:42:17.740" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""It's fun.""" start="00:42:18.500" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""It makes me feel sort of close to the pulse.""" start="00:42:19.900" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And it gives me a chance to just interact with people""" start="00:42:23.500" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that have very different perspectives on Emacs,""" start="00:42:27.297" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""which is something that I really value a lot.""" start="00:42:30.107" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Emacs, like anything else sort of in the internet world,""" start="00:42:32.740" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""has a real echo chamber factor.""" start="00:42:40.220" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""If you do or don't like use-package,""" start="00:42:42.940" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""you probably interact with a lot of people""" start="00:42:46.505" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that feel the same way about that.""" start="00:42:49.136" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And so I really recommend volunteering for EmacsConf""" start="00:42:53.500" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""as a way to sort of mix it up and get""" start="00:42:57.420" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""to know people that may not use Emacs""" start="00:43:01.340" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""the same way that you do.""" start="00:43:03.859" video="mainVideo-orgvm" id="subtitle"]]
[[!template new="1" text="""Or perhaps more on topic, though,""" start="00:43:08.380" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""the log line for this talk is it's really quite easy""" start="00:43:10.420" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""to build a program that uses Emacs in a pipeline capability.""" start="00:43:14.300" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I think there's a ton of opportunity in this space.""" start="00:43:20.980" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""This particular example is just a trivial web server""" start="00:43:23.780" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""written using Node.js.""" start="00:43:27.700" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""But as was pointed out, we could have used elnode""" start="00:43:30.780" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""as a web server""" start="00:43:31.546" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""and done the entire thing within Emacs Lisp.""" start="00:43:40.060" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Or really, almost any technology""" start="00:43:44.060" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""would get us this capability.""" start="00:43:48.766" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""From an implementation standpoint,""" start="00:43:52.900" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I had a lot of fun building""" start="00:43:54.660" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""this trivial little Elisp parser,""" start="00:43:56.848" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""and I'm rather pleased with the fact""" start="00:43:59.580" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""that the entirety of that--""" start="00:44:03.220" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""the entire algorithm for turning JavaScript or JSON data,""" start="00:44:07.340" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""we could say, into Elisp is really a one-liner,""" start="00:44:14.180" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""albeit a nasty one-liner. That was pretty cool""" start="00:44:20.420" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""to discover how simple that was.""" start="00:44:25.820" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So in my mind, that opens up a lot of possibility.""" start="00:44:28.180" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""If it's this easy in JavaScript,""" start="00:44:31.220" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""I wouldn't expect it to be hard,""" start="00:44:32.890" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""any more difficult in your favorite language.""" start="00:44:34.709" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""Glance one more time to see if there""" start="00:44:36.860" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""happen to be any other questions.""" start="00:44:41.140" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""And not seeing any, I'm going to go ahead and start""" start="00:44:42.940" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""wrapping up my chat now.""" start="00:44:47.300" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""It will take me a couple of minutes to do that.""" start="00:44:49.500" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""So if you do have any other questions that you""" start="00:44:51.620" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""want to drop into the pad or any comments,""" start="00:44:54.580" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""you're more than welcome to hit me with those""" start="00:44:56.460" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""as I coordinate closing this chat, this talk,""" start="00:44:59.740" video="mainVideo-orgvm" id="subtitle"]]
[[!template text="""with the organizer team.""" start="00:45:03.820" video="mainVideo-orgvm" id="subtitle"]]

Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20orgvm%3A%20orgvm%3A%20a%20simple%20HTTP%20server%20for%20org)


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