summaryrefslogblamecommitdiffstats
path: root/2023/info/repl-after.md
blob: d0a895ad71992a1d51a81c56dd55ac39b1ab24f4 (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
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142


                                                                


















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































                                                                                                                                                   
                                                                                                                                                                                                                                  


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


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


[[!template new="1" text="""Intro""" start="00:00:00.000" video="mainVideo-repl" id="subtitle"]]

[[!template text="""Hi! My name is Eduardo Ochs""" start="00:00:00.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and the title of this talk is: REPLs""" start="00:00:03.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""in strange places - Lua, LateX, LPeg, LPegRex,""" start="00:00:05.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and TikZ. I'm the author of an Emacs""" start="00:00:09.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""package called eev, and this is a talk""" start="00:00:12.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""at the EmacsConf 2023, that is happening in""" start="00:00:14.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""December 2023, at the internets.""" start="00:00:18.480" video="mainVideo-repl" id="subtitle"]]

[[!template new="1" text="""Diagrams""" start="00:00:22.520" video="mainVideo-repl" id="subtitle"]]

[[!template text="""This is one of the""" start="00:00:22.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""examples of diagrams that we are""" start="00:00:23.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""going to see - let me show how I generate""" start="00:00:24.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it... one second,""" start="00:00:27.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I have to use a smaller font here...""" start="00:00:30.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""this is a file called ParseTree2.lua...""" start="00:00:35.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""let me go back to this block of tests again...""" start="00:00:39.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and now if I run""" start="00:00:42.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""this...""" start="00:00:43.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""we get these outputs here at the""" start="00:00:47.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""right, and then in this line here it""" start="00:00:50.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""generates a PDF, and if I type f8 here it""" start="00:00:53.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""shows the PDF in the lower right window.""" start="00:00:58.120" video="mainVideo-repl" id="subtitle"]]

[[!template new="1" text="""eev""" start="00:01:03.920" video="mainVideo-repl" id="subtitle"]]

[[!template text="""Let me start by explaining""" start="00:01:03.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""briefly what is eev.""" start="00:01:06.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""First: it is something that""" start="00:01:09.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""appeared by accident in the mid-90s - I""" start="00:01:12.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""explained this story in my""" start="00:01:14.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""presentation at the EmacsConf 2019...""" start="00:01:16.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it's a package... it's an Emacs""" start="00:01:20.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""package that is part of ELPA... it has at""" start="00:01:23.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""least 10 users - those are the ones""" start="00:01:26.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that I know by name...""" start="00:01:29.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""eev means `emacs-execute-verbosely'...""" start="00:01:32.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""eev is something that treats eval-last-sexp""" start="00:01:38.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""as the central feature of Emacs...""" start="00:01:40.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""eev blurs the distinction between""" start="00:01:44.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""programmers and users, and it replaces""" start="00:01:45.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the slogan &quot;users should not be forced to""" start="00:01:48.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""see Lisp&quot;, that is something that Richard""" start="00:01:51.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Stallman told me once, by &quot;users should see""" start="00:01:53.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Lisp instead of buttons&quot; and &quot;new users""" start="00:01:57.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""should see Lisp in the first 5 minutes&quot;...""" start="00:02:00.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I'm going to show""" start="00:02:04.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""some examples of that soon.""" start="00:02:05.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Eev uses code in comments a lot,""" start="00:02:08.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and also tests in comments...""" start="00:02:11.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I changed my way of presenting it""" start="00:02:15.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and it became very REPL-centric""" start="00:02:17.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""in the last few years, in the""" start="00:02:19.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""sense that I start by explaining its""" start="00:02:22.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""main features by its support for REPLs...""" start="00:02:24.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""eev supposes""" start="00:02:28.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that we want to keep""" start="00:02:31.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""executable notes of everything - I'm also""" start="00:02:32.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""going to show examples of this in a""" start="00:02:35.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""second... eev has lots of &quot;videos for""" start="00:02:37.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""people who hate videos&quot;, and it tries to""" start="00:02:40.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""do everything with very little magic and""" start="00:02:43.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""without black boxes - I'm going to explain""" start="00:02:46.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""many of these things very soon.""" start="00:02:48.840" video="mainVideo-repl" id="subtitle"]]

[[!template new="1" text="""Another figure""" start="00:02:50.320" video="mainVideo-repl" id="subtitle"]]

[[!template text="""This is a figure that that I'm going""" start="00:02:50.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""to show in details soon, that is""" start="00:02:52.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""about something important about Lua...""" start="00:02:57.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the font is very bad now, so let me""" start="00:02:59.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""change the font... the figure is this one...""" start="00:03:03.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and...""" start="00:03:07.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""what most people do when they""" start="00:03:08.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""visit a file with something""" start="00:03:12.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""interesting on it is that they just go""" start="00:03:14.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""there and they set a bookmark there, or""" start="00:03:16.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""they put the position in a register...""" start="00:03:18.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""but I prefer to keep""" start="00:03:21.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""links to everything that is interesting""" start="00:03:26.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""as elisp hyperlinks. So, for example, this is""" start="00:03:29.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""an elisp hyperlink to a file, that goes""" start="00:03:32.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""to this anchor here, and to this string""" start="00:03:35.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""after this anchor... this is a variant""" start="00:03:37.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that opens that file in the window""" start="00:03:41.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""at the right -""" start="00:03:44.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""here... and this is""" start="00:03:45.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""a sexp that changes the font. I""" start="00:03:48.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""have a command with a very short name""" start="00:03:53.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that does that, but I""" start="00:03:56.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""prefer to keep that as a one-liner.""" start="00:03:59.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""About the videos... we can see""" start="00:04:02.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the list of first-class videos of eev""" start="00:04:06.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""by executing this, M-x find-1stclassvideos,""" start="00:04:10.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""or by running this alias here, M-x 1c...""" start="00:04:14.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and then what we see is this...""" start="00:04:18.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the first sexp here""" start="00:04:20.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""regenerates this buffer - so we can make a""" start="00:04:24.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""mess here and then run this and the""" start="00:04:26.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""original buffer is regenerated again in""" start="00:04:29.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""a clean way...""" start="00:04:33.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""each of these things here""" start="00:04:34.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""opens a buffer with information about""" start="00:04:36.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""a video... let me take a specific""" start="00:04:40.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""example here... this video here is about""" start="00:04:44.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""one of the ancestors of this talk, that""" start="00:04:49.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""is a library that I wrote""" start="00:04:51.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""for creating diagrams in LaTeX using""" start="00:04:53.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""a package called Pict2e using REPLs...""" start="00:04:58.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""anyway...""" start="00:05:03.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the thing is that if we""" start="00:05:03.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""run a sexp like this one and we don't""" start="00:05:06.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""have a local copy of the video eev""" start="00:05:11.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""will try to download to the local copy -""" start="00:05:14.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and instead of doing that by asking""" start="00:05:17.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""something like &quot;do you want me""" start="00:05:20.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""to download the local copy? Blah""" start="00:05:21.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""blah blah blah blah...&quot; it simply opens a""" start="00:05:24.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""buffer like this, I mean, if we don't""" start="00:05:28.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""have a local copy yet it will open a""" start="00:05:30.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""buffer like this one, in which these""" start="00:05:33.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""things here in comments are links to the""" start="00:05:36.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""documentation... I mean, this thing here""" start="00:05:39.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""explains the idea of local copies""" start="00:05:43.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""of files from the internet...""" start="00:05:46.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""there are more details here, and here...""" start="00:05:48.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and this is a script that we""" start="00:05:54.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""can execute line by line, so instead of""" start="00:05:57.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""this script being hidden behind the""" start="00:06:00.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""button that we just press after a""" start="00:06:02.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""question like &quot;Do you want me to do""" start="00:06:06.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""something blah blah blah? Yes or no?&quot;""" start="00:06:08.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the script is visible here and we can""" start="00:06:10.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""execute it step by step... it creates a""" start="00:06:13.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""terminal with a shell here in the""" start="00:06:17.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""right window, and when we type f8 in""" start="00:06:20.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""one of these lines here the lines are""" start="00:06:24.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""sent... (...) so this is going""" start="00:06:26.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""to download a copy of the video... the""" start="00:06:29.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""wget says that I already have a copy of""" start="00:06:31.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the video and its subtitles... and so on.""" start="00:06:36.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""And after getting a copy of the video""" start="00:06:39.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""we can run this sexp here and it displays""" start="00:06:43.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the video.""" start="00:06:48.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I said that eev has lots of""" start="00:06:49.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""&quot;videos for people who hate videos&quot;, and""" start="00:06:55.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the idea is that very few""" start="00:06:58.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""people are going to watch the videos in""" start="00:06:59.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""real time... and most of the people that""" start="00:07:02.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I know - or: most of the people that""" start="00:07:06.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""are interested in eev in some""" start="00:07:08.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""way... they are going to watch just""" start="00:07:10.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""small sections of the video, and most of""" start="00:07:13.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the time they're just going to read the""" start="00:07:16.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""subtitles of the video. So, for each""" start="00:07:17.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""one of the videos we have a page""" start="00:07:20.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""about the video... let me see if I""" start="00:07:23.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""have internet here... yes. This is a""" start="00:07:27.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""page...""" start="00:07:30.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and usually these pages have a link""" start="00:07:32.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""to another page that""" start="00:07:39.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""has all the subtitles of the""" start="00:07:40.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""video... uh, wherever... in this one""" start="00:07:43.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it's not so visible...""" start="00:07:46.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""but anyway, there are several""" start="00:07:48.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""ways of accessing the subtitles of the""" start="00:07:50.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""video, and one of the ways is by running""" start="00:07:52.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""this sexp here,""" start="00:07:56.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that opens a file in Lua that is""" start="00:07:57.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""what I use to generate the""" start="00:08:01.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""subtitles.""" start="00:08:03.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Anyway... by the way, these things... each""" start="00:08:04.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""one of these things here is a hyperlink""" start="00:08:08.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""to a position of the video, so if I type""" start="00:08:12.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""this the right way it goes to that""" start="00:08:15.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""position. Anyway, let me go back...""" start="00:08:18.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""also, the tutorials of eev... the""" start="00:08:24.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""&quot;intros&quot; of eev, that start with &quot;find-&quot; and""" start="00:08:27.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""end with &quot;-intro&quot;, they have lots of blocks""" start="00:08:31.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that say &quot;[Video links:]&quot;, like this one, and""" start="00:08:34.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""these blocks have links to positions""" start="00:08:39.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""in videos, and if we don't have a local""" start="00:08:41.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""copy of the video yet the thing shows""" start="00:08:43.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""us a script that lets us download the""" start="00:08:47.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""local copy.""" start="00:08:49.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Anyway, I said that I was going""" start="00:08:50.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""to explain what I mean by &quot;magic&quot; and""" start="00:08:54.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""&quot;black boxes&quot;.""" start="00:08:58.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""this is something that I've been""" start="00:08:59.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""trying to explain for a long time, and I""" start="00:09:03.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""think that I got a very good explanation""" start="00:09:05.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""about that in a video that I made""" start="00:09:07.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""about something called eev-wconfig, that""" start="00:09:09.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""is a tool for configuring eev on""" start="00:09:13.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Windows without &quot;magic&quot; - without buttons""" start="00:09:15.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that do things without explaining what""" start="00:09:19.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""they're doing.""" start="00:09:22.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""This is a part of the subtitles""" start="00:09:22.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""of the video, let me read that...""" start="00:09:25.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""eev-wconfig is an attempt to solve the""" start="00:09:28.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""problem of how to install these things""" start="00:09:32.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""on Windows both without magic and with""" start="00:09:35.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""very little""" start="00:09:37.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""magic. Remember this slogan: &quot;any""" start="00:09:37.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""sufficiently advanced technology is""" start="00:09:41.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""indistinguishable from""" start="00:09:44.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""magic&quot;. Here in this video I'm going to""" start="00:09:45.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""use the term magic as a shorthand""" start="00:09:49.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""for sufficiently advanced technology,""" start="00:09:52.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that is something that is complex and""" start="00:09:55.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""non-obvious and that is""" start="00:09:57.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""indistinguishable from magic in the""" start="00:10:00.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""sense of being almost impossible to""" start="00:10:02.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""understand. And I'm also going to use a""" start="00:10:04.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the term &quot;black box&quot; as a near-synonym for""" start="00:10:07.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""magic, and sometimes the term""" start="00:10:10.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""&quot;black box&quot; is more convenient even though""" start="00:10:13.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it's a bit longer - it has more""" start="00:10:16.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""letters - because when I use the term""" start="00:10:17.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""black box it invites us to use""" start="00:10:20.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""expressions like &quot;opening the black box&quot;,""" start="00:10:22.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and I'm going to use that""" start="00:10:25.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""expression a lot.""" start="00:10:26.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Now let me try to explain what is...""" start="00:10:28.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""sorry, let me change the font...""" start="00:10:37.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""what is Lua. Lua is a minimalistic""" start="00:10:41.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""language, in the sense of""" start="00:10:45.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""&quot;batteries not included&quot;... it uses""" start="00:10:50.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""associative tables for most of its data""" start="00:10:53.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""structures...""" start="00:10:56.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and it is so minimalistic""" start="00:10:56.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that its default print function, when""" start="00:11:00.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""we tell... when we create an associative""" start="00:11:04.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""table and we ask it to print...""" start="00:11:06.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""when we ask &quot;print&quot; to print an""" start="00:11:09.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""associative table it just prints the""" start="00:11:13.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""address of the table. Here are some""" start="00:11:15.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""examples... here is a table, and when we""" start="00:11:17.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""ask &quot;print&quot; to print it it just says""" start="00:11:21.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that it's the table at this address here.""" start="00:11:24.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""So, one of things that that most""" start="00:11:26.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""people do when they start using Lua is""" start="00:11:30.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that either they download a package with""" start="00:11:32.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""a pretty-printing function or they write""" start="00:11:35.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""their own pretty-printing functions. My""" start="00:11:37.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""own pretty-printing function is called""" start="00:11:39.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""PP, with upper case letters, and it works""" start="00:11:41.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""like this...""" start="00:11:46.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and it prints associative tables""" start="00:11:47.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""in a way like this. It says that for""" start="00:11:50.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the key 1 the the value associated to""" start="00:11:53.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it is 2, for the key 2 the value is""" start="00:11:57.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""3, and for the key 3 the value is 5.""" start="00:12:00.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""When I started using Lua one of my""" start="00:12:04.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""favorite languages was also a language""" start="00:12:11.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that used associative tables a lot -""" start="00:12:13.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it was called Icon...""" start="00:12:15.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and I had to write my own""" start="00:12:16.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""pretty-printing functions for Icon, so""" start="00:12:21.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I just had to port my pretty-printing""" start="00:12:23.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""functions to Lua... and my first""" start="00:12:27.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""version looked at something like this... it""" start="00:12:29.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""just had some some global functions... lots""" start="00:12:32.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""of them, actually...""" start="00:12:36.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and after a while I rewrote it, and I""" start="00:12:39.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""rewrote it again, and again, and again, and""" start="00:12:42.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""this is one of the versions of that,""" start="00:12:44.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""is not even the default at this""" start="00:12:47.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""point...""" start="00:12:49.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""&quot;Tos&quot; is for &quot;to string&quot;...""" start="00:12:51.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and this is a demo...""" start="00:12:54.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it's very modular, so it's easy to replace""" start="00:12:58.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""parts of it, or to toggle flags... and this""" start="00:13:01.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""is an example. If I try to print the""" start="00:13:05.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""table of methods for a certain""" start="00:13:08.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""class... I will need a smaller font...""" start="00:13:10.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it prints the table like this, with the""" start="00:13:14.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""names of the methods and then links to""" start="00:13:16.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the source code of the functions...""" start="00:13:20.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""these links only make sense in Emacs and""" start="00:13:21.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""in eev...""" start="00:13:25.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and when we run a link like this one...""" start="00:13:25.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it shows the source code in the""" start="00:13:30.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""window at the right. So, for some""" start="00:13:32.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""functions the source code is three lines,""" start="00:13:35.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""for other ones it's one line... and""" start="00:13:37.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""whatever. Anyway, let me go""" start="00:13:40.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""back... Lua can be used in many different""" start="00:13:44.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""styles... most people hate other people's""" start="00:13:47.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""styles... when I started using it in the""" start="00:13:50.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""year 2000 I learned most of the basic""" start="00:13:53.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""language in a single day - it was very""" start="00:13:57.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""similar to things that I was already""" start="00:13:59.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""using... and then I rewrote the the mini-""" start="00:14:02.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""language that I was using to""" start="00:14:05.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""generate the HTML for my pages""" start="00:14:10.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""in Lua... actually I had to rewrite it""" start="00:14:13.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""many times, but the first version I""" start="00:14:16.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""certainly did in my first weeks or first""" start="00:14:18.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""months using Lua...""" start="00:14:21.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""In the beginning I was just using""" start="00:14:22.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it for writing programs that either""" start="00:14:27.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""didn't take any input at all - because""" start="00:14:30.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the input was already in the source file -""" start="00:14:32.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""or that worked as Unix programs,""" start="00:14:35.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that would read files""" start="00:14:40.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and process these files in some way""" start="00:14:43.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and output something.""" start="00:14:45.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I mentioned the &quot;basic language&quot; here...""" start="00:14:49.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I only learned how to use closures,""" start="00:14:52.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""metatables, and coroutines many years later...""" start="00:14:54.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""in the beginning, when I started using Lua,""" start="00:14:58.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it didn't have a package manager...""" start="00:15:02.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it appeared later, it is called""" start="00:15:04.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Luarocks... it has had this package""" start="00:15:06.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""manager for several years, most""" start="00:15:10.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""of the rocks for Luarocks are poorly""" start="00:15:13.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""documented and hacker-unfriendly,""" start="00:15:15.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""so you can't rely just on the""" start="00:15:18.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""documentation and you can't rely just on the""" start="00:15:21.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""source code, because, I mean... if you are""" start="00:15:23.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""a genius of course you can, but for""" start="00:15:26.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""people who are either lazy, or dumb, or""" start="00:15:29.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""whatever, like me, or unfocused...""" start="00:15:31.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the source code is hard to""" start="00:15:34.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""understand and hard to tinker with.""" start="00:15:36.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Some rocks are excellent. The""" start="00:15:38.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""best rocks are well documented""" start="00:15:43.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""but they are hacker-unfriendly""" start="00:15:46.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""in a sense that I hope that""" start="00:15:48.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I'll be able to explain soon.""" start="00:15:51.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""The best rocks use local""" start="00:15:52.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""variables and metatables a lot -""" start="00:15:55.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""so if you are beginner""" start="00:15:58.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""learning Lua you're not going to""" start="00:16:02.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""understand what their source code do...""" start="00:16:03.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""they use lots of dirty tricks.""" start="00:16:06.160" video="mainVideo-repl" id="subtitle"]]

[[!template new="1" text="""Object orientation in Lua""" start="00:16:08.520" video="mainVideo-repl" id="subtitle"]]

[[!template text="""Let me talk a bit about object""" start="00:16:08.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""orientation in Lua. It can be done in""" start="00:16:12.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""many ways...""" start="00:16:14.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the main book about Lua, called""" start="00:16:15.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""&quot;Programming in Lua&quot;, by one of the authors""" start="00:16:19.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""of the language, Roberto Ierusalimschy,""" start="00:16:21.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""presents several ways of doing""" start="00:16:23.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""object orientation in Lua... I hated all""" start="00:16:26.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""of these ways - and also the ways that I""" start="00:16:29.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""tried from the rocks.""" start="00:16:33.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""And then I wrote my own way""" start="00:16:34.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""of doing object orientation in Lua... it's""" start="00:16:38.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""very minimalistic, it's in this file here,""" start="00:16:40.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""eoo.lua... the main code is just this five""" start="00:16:43.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""lines here...""" start="00:16:48.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and here's an example of how it works.""" start="00:16:49.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Here we define the class Vector,""" start="00:16:53.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""with some metamethods...""" start="00:16:58.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""this metamethod here will tell Lua""" start="00:17:02.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""what to do when the""" start="00:17:05.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""user asks to add two vectors, this one""" start="00:17:08.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""here tells Lua what to do when the user""" start="00:17:12.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""asks Lua to convert a vector to a string,""" start="00:17:15.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and... whatever, this one is""" start="00:17:18.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""something that I'm going to explain in a""" start="00:17:21.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""second. So, here we create a vector with""" start="00:17:24.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""these coordinates, 3 and 4... here we create""" start="00:17:27.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""another Vector... if we &quot;print&quot; here then Lua""" start="00:17:30.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""uses this function here, in the __tostring...""" start="00:17:33.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""if we add the two vectors it uses this""" start="00:17:36.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""function here, in the __add metamethod, and""" start="00:17:39.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""if we run the method :norm...""" start="00:17:43.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it is defined here, in the table __index.""" start="00:17:45.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Anyway...""" start="00:17:49.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Even this thing being so small I used""" start="00:17:58.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""to forget how its innards worked all""" start="00:18:02.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the time. Actually I always forget how""" start="00:18:04.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""things work and I have to remember them""" start="00:18:08.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""somehow... and I have to have""" start="00:18:09.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""tricks for remembering, and tricks for""" start="00:18:12.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""summarizing things, and diagrams, and so""" start="00:18:15.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""on. And every time that I forgot how this""" start="00:18:18.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""thing worked I went back to the""" start="00:18:22.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""source code, and then I looked at the""" start="00:18:24.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""diagrams... or, of course, in the""" start="00:18:26.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""first times I had to draw the diagrams...""" start="00:18:29.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and I run the examples, and of course in""" start="00:18:31.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""in the beginning I thought that the code""" start="00:18:35.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""was clear and my examples were very""" start="00:18:36.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""brief, and so I had to rewrite the""" start="00:18:39.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""examples many times until they became,""" start="00:18:41.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""let's say...""" start="00:18:44.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""perfect.""" start="00:18:45.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I was saying that Lua can be used in""" start="00:18:47.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""many ways, and in my way of using Lua - in""" start="00:18:52.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""my favorite way - everything can be""" start="00:18:56.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""inspected and modified from REPLs,""" start="00:18:59.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""like we can do in Emacs and in SmallTalk,""" start="00:19:02.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""or sort of. So, in my""" start="00:19:06.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""favorite way of using Lua there's no""" start="00:19:08.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""security at all, everything can be""" start="00:19:10.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""changed at all times.""" start="00:19:12.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Of course most people hate that...""" start="00:19:14.920" video="mainVideo-repl" id="subtitle"]]

[[!template new="1" text="""My init file""" start="00:19:19.120" video="mainVideo-repl" id="subtitle"]]

[[!template text="""My init file has lots of classes... by the""" start="00:19:19.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""way, instead of keeping many small files""" start="00:19:22.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""with many things I put lots of stuff""" start="00:19:26.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""in just one big init file.""" start="00:19:29.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""My init file has lots of classes,""" start="00:19:31.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and lots of global functions, and""" start="00:19:34.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""lots of cruft - and people hate that,""" start="00:19:37.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""of course. This is an example...""" start="00:19:41.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""this is the index at the top""" start="00:19:44.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""of my init file,""" start="00:19:46.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the classes start here, and then""" start="00:19:48.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""we have some functions, and""" start="00:19:53.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""then we have functions that load""" start="00:19:59.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""certain packages, and then we have... cruft.""" start="00:20:01.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Whatever.""" start="00:20:03.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Most people think that my style""" start="00:20:04.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""of using Lua is dirty, and dangerous...""" start="00:20:08.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and they wouldn't touch my Lua code""" start="00:20:10.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""with a 10 feet pole... but most of the""" start="00:20:12.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""things that I'm going to present here in""" start="00:20:15.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""this presentation are ideas that should""" start="00:20:18.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""be easy to port to other environments""" start="00:20:23.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and other languages, especially the""" start="00:20:28.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""diagrams... so the code is not so important.""" start="00:20:32.280" video="mainVideo-repl" id="subtitle"]]

[[!template new="1" text="""LaTeX and LuaLaTeX""" start="00:20:35.280" video="mainVideo-repl" id="subtitle"]]

[[!template text="""Now let me talk a bit about LuaLaTeX,""" start="00:20:35.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that is LaTeX with a Lua interpreter""" start="00:20:39.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""embedded inside, and two ways""" start="00:20:41.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""of generating pictures in LaTeX: TikZ,""" start="00:20:44.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that is very famous, and Pict2e, that is not""" start="00:20:48.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""very famous and that is very low level...""" start="00:20:54.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and I think that not many people use it.""" start="00:20:57.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I said before that when I""" start="00:21:02.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""learned Lua I realized that it was""" start="00:21:04.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""very good for writing little""" start="00:21:06.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""languages. I was doing my PhD at the""" start="00:21:09.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""time and typesetting the diagrams for""" start="00:21:14.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""my PhD thesis was very boring, so""" start="00:21:19.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""one of the things that I did was that I""" start="00:21:24.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""created a little language for typesetting""" start="00:21:29.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the diagrams for me. it was""" start="00:21:34.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""called Dednat because initially""" start="00:21:36.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it only generated diagrams for""" start="00:21:38.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Natural Deduction, and then it had""" start="00:21:41.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""several versions...""" start="00:21:43.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""these are the slides for my""" start="00:21:45.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""presentation about Dednat6... &quot;Dednat6 is""" start="00:21:46.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""an extensible semi-preprocessor for""" start="00:21:52.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""LuaLaTeX that understands diagrams in""" start="00:21:56.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""ASCII art&quot;... in the sense that when I have""" start="00:22:01.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""a .tex file that has this, and when""" start="00:22:05.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Dednat6 is loaded,""" start="00:22:11.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""when I give the right commands""" start="00:22:13.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Dednat6 interprets this block here as""" start="00:22:15.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""something that defines this""" start="00:22:19.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""diagram... oops, sorry, it interprets this""" start="00:22:22.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""diagram here, this diagram in""" start="00:22:28.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""comments here, as something that defines""" start="00:22:30.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""a diagram called foo... a deduction called""" start="00:22:34.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""foo, and it generates this code here...""" start="00:22:39.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""so that we can just invoke""" start="00:22:41.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the definition of the""" start="00:22:44.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""deduction by typing \ded{foo}.""" start="00:22:45.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""And Dednat6 also""" start="00:22:47.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""supports another language for typesetting""" start="00:22:50.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""bidimensional diagrams with""" start="00:22:57.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""arrows and stuff for category Theory and""" start="00:22:59.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""blah blah blah... the specifications of""" start="00:23:05.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""these diagrams look like this...""" start="00:23:08.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""here is a... sorry, here is a very good""" start="00:23:12.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""example, this is a huge diagram...""" start="00:23:14.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""sorry, one second...""" start="00:23:16.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""so, the source code that generates""" start="00:23:18.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""this diagram here is just this thing at""" start="00:23:20.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the left, so it's very visual... we can""" start="00:23:25.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""typeset the diagram in ASCII art here and""" start="00:23:32.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""then in this part here we tell how""" start="00:23:35.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the nodes are to be joined, which""" start="00:23:38.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""arrows have to to have annotations, and""" start="00:23:41.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""so on...""" start="00:23:43.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and this language is extensible in""" start="00:23:45.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the sense that... uh, where's that...""" start="00:23:46.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""here: comments that start with &quot;%:&quot;""" start="00:23:48.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""are interpreted as""" start="00:23:52.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""definitions for tree diagrams,""" start="00:23:54.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""lines that start with &quot;%D&quot;""" start="00:23:56.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""define 2D diagrams with arrows and""" start="00:23:58.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""stuff, and lines that start with &quot;%L&quot;""" start="00:24:00.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""contain blocks of Lua code""" start="00:24:04.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that we can use to extend the interpreter""" start="00:24:06.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""on-the-fly...""" start="00:24:09.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""anyway, here are some recent""" start="00:24:10.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""examples of diagrams that I used""" start="00:24:12.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Dednat6 to typeset... this diagram""" start="00:24:15.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""here was generated by this""" start="00:24:19.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""specification here...""" start="00:24:21.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and this diagram here with the""" start="00:24:22.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""curved arrows was generated by this""" start="00:24:27.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""specification here.""" start="00:24:30.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""So, Dednat6 was very easy to extend,""" start="00:24:32.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and at some point I started to use it""" start="00:24:39.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""to generate diagrams using Pict2e -""" start="00:24:41.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""mainly for the classes that I give""" start="00:24:44.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""at the University... I teach mathematics and""" start="00:24:47.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""whatever... in a bad place. Whatever...""" start="00:24:50.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Let me show an animation... here is a""" start="00:24:57.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""diagram that I generated with Dednat6,""" start="00:25:00.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and it is a flip book animation, like... we""" start="00:25:02.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""type PgUp and PgDn and we go""" start="00:25:06.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""to the next page of the book and to the""" start="00:25:09.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""previous page of the book...""" start="00:25:11.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and here is the source code that generates""" start="00:25:12.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that. This source code is not very visual,""" start="00:25:16.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""so it's quite clumsy to edit that""" start="00:25:19.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""diagram directly in the .tex file like""" start="00:25:22.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that...""" start="00:25:27.520" video="mainVideo-repl" id="subtitle"]]

[[!template new="1" text="""Manim""" start="00:25:28.080" video="mainVideo-repl" id="subtitle"]]

[[!template text="""These diagrams were inspired""" start="00:25:28.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""by something called my Manim, that...""" start="00:25:30.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I forgot the name of the guy, but""" start="00:25:33.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it's a guy that makes many videos about""" start="00:25:37.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Mathematics, and he created this library""" start="00:25:41.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""called Manim for generating his""" start="00:25:44.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""animations, and other people adapted""" start="00:25:48.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""his library to make it more accessible...""" start="00:25:51.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I tried to learn it, but""" start="00:25:55.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""each animation, even an animation""" start="00:25:59.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that has very few frames... each""" start="00:26:01.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""animation took ages to render, so it""" start="00:26:03.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""wasn't fun... and animations in PDFs can""" start="00:26:07.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""be rendered in seconds. So these""" start="00:26:11.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""things were fun for me, because my laptop""" start="00:26:13.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""is very very slow, and my Manim was not fun.""" start="00:26:18.680" video="mainVideo-repl" id="subtitle"]]

[[!template new="1" text="""Generating diagrams from REPLs""" start="00:26:24.360" video="mainVideo-repl" id="subtitle"]]

[[!template text="""Anyway, writing code like this""" start="00:26:24.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""inside a .tex file was not very""" start="00:26:27.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""fun because it was hard to""" start="00:26:32.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""debug... so in 2022 I started to play""" start="00:26:35.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""with ways of generating these""" start="00:26:38.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""diagrams from REPLs, and I found a""" start="00:26:41.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""way for Pict2e and a way for TikZ...""" start="00:26:43.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""each one of these ways became a video...""" start="00:26:47.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""if you go to the list of first-class""" start="00:26:50.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""videos of eev you're going to see""" start="00:26:53.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that there's a video about Pict2e here""" start="00:26:57.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""here and a video about TikZ...""" start="00:26:59.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""here you have some some information""" start="00:27:03.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""like length, an explanation, etc...""" start="00:27:05.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and here are the pages for these videos.""" start="00:27:09.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""My page about the video about Pict2e""" start="00:27:11.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""looks like this, it has some diagrams...""" start="00:27:16.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""whatever... and this one is much""" start="00:27:20.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""nicer, and a lot of people""" start="00:27:23.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""watched that video... I mean, I think""" start="00:27:26.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that 250 people watched it - for me that's""" start="00:27:30.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""a million of people...""" start="00:27:33.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and this video is about how to""" start="00:27:35.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""extract diagrams from the manual... from""" start="00:27:39.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the TikZ manual and how to run those""" start="00:27:44.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""examples in a REPL and modify""" start="00:27:46.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""them bit by bit... this is a a""" start="00:27:49.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""screenshot... but let me go back.""" start="00:27:53.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""At that point these things were just""" start="00:27:57.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""prototypes, the code was not very nice...""" start="00:28:00.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and in this year I wrote... I was able""" start="00:28:03.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""to unify those two ways of generating PDFs,""" start="00:28:07.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the one for TikZ and the one for Pict2e,""" start="00:28:12.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and I unified them with many other""" start="00:28:16.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""things that generated diagrams.""" start="00:28:18.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""The basis of these things is""" start="00:28:20.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""something called Show2.lua... I'm not going""" start="00:28:24.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""to show its details now, but its""" start="00:28:29.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""extension that generates TikZ code""" start="00:28:35.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""is just this, so we can specify a""" start="00:28:39.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""diagram with just a block like this,""" start="00:28:43.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and then uh if we""" start="00:28:45.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""run :show00() it returns a string""" start="00:28:49.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that is just the body... the inner""" start="00:28:54.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""body of the .tex file, if we run this we""" start="00:28:56.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""see the whole .tex file, and if we run""" start="00:29:00.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""this we save the .tex file and we""" start="00:29:03.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""compile the .tex file to generate a PDF...""" start="00:29:05.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and if we run this we show the PDF in""" start="00:29:08.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the lower right window.""" start="00:29:10.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""And that's the same thing for all""" start="00:29:14.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""my recent programs that generate""" start="00:29:17.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""PDFs - they are all""" start="00:29:20.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""integrated... here is the one that...""" start="00:29:22.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the basis for all my modules that generate""" start="00:29:26.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""diagrams with Pict2e...""" start="00:29:29.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""its demos are not very interesting,""" start="00:29:30.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""so let me show some demos of""" start="00:29:34.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""extensions that do interesting things...""" start="00:29:36.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""so, this is a diagram that I created""" start="00:29:39.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""by editing it in a REPL...""" start="00:29:45.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I create several Pict objects here...""" start="00:29:47.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and if I execute this it""" start="00:29:51.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""compiles an object, generates a PDF, and""" start="00:29:54.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""if I tap this... here is the PDF.""" start="00:29:59.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""And if I just ask Lua to""" start="00:30:04.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""display what is &quot;pux&quot;, here,""" start="00:30:07.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it shows the source code in Pict2e""" start="00:30:10.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""of the diagram... and the""" start="00:30:15.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""nice thing is that it is indented, so""" start="00:30:18.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it's easy to debug the Pict2e code.""" start="00:30:20.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""If anyone is interested the""" start="00:30:23.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""module that does the tricks for""" start="00:30:25.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""indentation is very easy to understand...""" start="00:30:28.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it has lots of tests and test blocks,""" start="00:30:31.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and I think that its data""" start="00:30:35.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""structures are easy to understand.""" start="00:30:38.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Anyway... here is another""" start="00:30:42.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""example. The :show() is""" start="00:30:44.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""here... it generates a 3D diagram.""" start="00:30:51.360" video="mainVideo-repl" id="subtitle"]]

[[!template new="1" text="""Parsers""" start="00:30:56.440" video="mainVideo-repl" id="subtitle"]]

[[!template text="""Now let me talk about parsers and""" start="00:30:56.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""REPLs in VERY strange places... I mean,""" start="00:31:06.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""using REPLs to build parsers step by step""" start="00:31:09.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and&quot; replacing parts by more complex""" start="00:31:13.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""parts. So, I said that Lua is very""" start="00:31:17.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""minimalistic, and everybody knows that""" start="00:31:23.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""implementations of regular expressions""" start="00:31:28.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""are big and complex..""" start="00:31:30.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""so, instead of coming with""" start="00:31:32.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""full regular expressions Lua comes with""" start="00:31:34.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""something called &quot;patterns&quot; and a""" start="00:31:37.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""library function called &quot;string.match&quot;.""" start="00:31:39.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Here is""" start="00:31:43.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""a copy of the part of the manual that""" start="00:31:44.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""explains the syntax... a part of the""" start="00:31:50.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""syntax of of patterns... here's how""" start="00:31:53.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""string.match is described in the""" start="00:31:57.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""manual - it's just this... &quot;looks for""" start="00:31:59.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the first match of pattern in the string""" start="00:32:03.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""as blah blah blah&quot;... and then we have to""" start="00:32:05.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""go to the other section of the menual""" start="00:32:08.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that explains patterns.""" start="00:32:10.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Lua patterns are so simple,""" start="00:32:11.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""so limited, that they don't even""" start="00:32:20.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""have the the alternation operator...""" start="00:32:23.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""here is how it is described in the""" start="00:32:26.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""elisp manual -""" start="00:32:29.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""backslash-pipe specifies""" start="00:32:31.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""an alternative, blah blah blah.""" start="00:32:36.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""When we want to to build more""" start="00:32:40.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""complex... regular expressions,""" start="00:32:42.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""patterns, grammars, etc... we have to use""" start="00:32:45.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""an external library for that... no,""" start="00:32:49.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""sorry, a library that is external""" start="00:32:52.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""but that was written by one of the""" start="00:32:56.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""authors of Lua itself. This library""" start="00:32:58.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""is called Lpeg, and its manual says...""" start="00:33:00.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""&quot;Lpeg is a new pattern matching library for""" start="00:33:05.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Lua based on Parsing Expression Grammars""" start="00:33:09.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""(PEGs)&quot;. The manual is very terse, I""" start="00:33:12.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""found it incredibly hard to read... it""" start="00:33:18.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""doesn't have any diagrams - it has some""" start="00:33:21.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""examples, though... and the Lua Wiki""" start="00:33:25.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""has a big page called Lpeg Tutorial""" start="00:33:29.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""with lots of examples...""" start="00:33:33.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""but it it also doesn't have""" start="00:33:35.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""diagrams and I found some things""" start="00:33:38.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""incredibly hard to understand.""" start="00:33:41.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""For example, this is something that is in""" start="00:33:42.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the the manual of Lpeg that I saw and I""" start="00:33:45.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""thought: &quot;Wow, great! This makes all sense""" start="00:33:48.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and is going to be very useful!&quot;...""" start="00:33:51.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it's a way to to build""" start="00:33:53.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""grammars that can be recursive,""" start="00:33:54.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and they sort of can encode BNF""" start="00:33:57.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""grammars... we just have to translate the""" start="00:34:01.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""BNF a bit to get rid of some""" start="00:34:03.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""recursions and to translate them to""" start="00:34:06.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""something else.""" start="00:34:08.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""And the manual also has some things""" start="00:34:09.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that I thought: &quot;Oh, no! I don't have any""" start="00:34:11.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""idea of what this thing does&quot;... and in fact""" start="00:34:15.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I saw these things for the first""" start="00:34:18.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""time more than 10 years ago and they""" start="00:34:20.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""only started to make sense one year ago.""" start="00:34:22.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""One example is group captures.""" start="00:34:26.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Lpeg also comes with a""" start="00:34:30.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""module called the Re module... let me""" start="00:34:36.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""pronounce as it in Portuguese - the Re""" start="00:34:38.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""module... its manual says: &quot;The Re""" start="00:34:41.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""module (provided by the file re.lua in the""" start="00:34:45.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""distribution) supports a somewhat conventional""" start="00:34:48.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""regular expression syntax for pattern usage""" start="00:34:51.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""within lpeg&quot;... and""" start="00:34:56.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""this is a quick reference... this""" start="00:34:58.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""thing is very brief, it has some nice""" start="00:35:03.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""examples but it's hard to understand anyway...""" start="00:35:06.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and here are some comments about""" start="00:35:08.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""my attempts to learn Re.lua. This is""" start="00:35:13.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""a class... in this case it's a very small""" start="00:35:17.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""class... this file implements a :pm()""" start="00:35:20.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""method - I'm going to show examples of""" start="00:35:24.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""other :pm() methods very soon - so, this is""" start="00:35:28.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""a :pm() method for Re.lua that lets us""" start="00:35:32.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""compare the syntax of Lua patterns, Lpeg,""" start="00:35:35.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and Re... let's see this example here... so,""" start="00:35:38.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""if we run this it loads my version of""" start="00:35:44.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""lpeg... no, sorry, my version of lpegrex...""" start="00:35:47.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and it shows that when we apply""" start="00:35:52.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the :pm() method to this Lua pattern, this""" start="00:35:57.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""lpeg pattern, and this Re pattern""" start="00:36:01.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""they all give the same results. So we can""" start="00:36:04.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""use this thing... this kind of thing here""" start="00:36:08.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""to show how to translate from Lua""" start="00:36:10.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""patterns, that are familiar because""" start="00:36:14.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""they're similar to regular expressions,""" start="00:36:16.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""only weaker...""" start="00:36:18.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""to lpeg, that is super weird""" start="00:36:20.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and to Re, that is not so weird.""" start="00:36:24.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Anyway, the comment says that in 2012""" start="00:36:27.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I had a project that needed a""" start="00:36:35.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""precedence passer that could parse""" start="00:36:37.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""arithmetical expressions with the right""" start="00:36:40.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""precedences... and at that point I was""" start="00:36:43.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""still struggling with pure lpeg, and I""" start="00:36:46.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""couldn't do much with it, so I tried to""" start="00:36:49.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""learn Re.lua instead, and I wrote this old""" start="00:36:52.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""class here...""" start="00:36:55.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that allowed me to use a preprocessor""" start="00:36:56.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""on patterns for Lua. And the thing is that""" start="00:37:01.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""with this preprocessor I could""" start="00:37:03.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""specify precedence grammars using this""" start="00:37:04.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""thing here, that worked, but was super""" start="00:37:07.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""clumsy... and I gave up after a few attempts.""" start="00:37:11.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and in 2022 I heard about something""" start="00:37:16.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""called lpegrex,""" start="00:37:21.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that was a... a kind of extension or Re,""" start="00:37:23.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and it was much more powerful than re.lua,""" start="00:37:29.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""but after a while I realized that it""" start="00:37:32.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""had the same defects as re.lua...""" start="00:37:34.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and let me explain that, because""" start="00:37:37.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it has all to do with the things about""" start="00:37:40.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""black boxes and magic that I told in the""" start="00:37:44.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""beginning. Both... I mean, sorry, neither""" start="00:37:48.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""re.lua or lpegrex had some features that""" start="00:37:52.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I needed... they didn't let us explore...""" start="00:37:57.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""sorry, they received a pattern that was""" start="00:38:00.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""specified as a string, and it converted""" start="00:38:03.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that into an lpeg pattern, but it didn't""" start="00:38:06.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""let us explore the the lpeg patterns""" start="00:38:09.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that it generated...""" start="00:38:12.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""their code was written in a way""" start="00:38:15.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that was REPL-unfriendly - I""" start="00:38:18.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""couldn't modify parts of the code""" start="00:38:21.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""bit by bit in a REPL and try to change""" start="00:38:24.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the code without changing the""" start="00:38:28.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""original file... the code was very""" start="00:38:31.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""hard to explore, to hack, and to extend -""" start="00:38:34.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""in my opinion... the documentation was not""" start="00:38:36.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""very clear... and I sent one or two messages""" start="00:38:39.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""to the the developer of lpegrex and...""" start="00:38:43.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""he was too busy to help me. He""" start="00:38:47.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""answered it very briefly, and, uh, to be""" start="00:38:50.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""honest I felt... rejected. I felt that I""" start="00:38:53.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""wasn't doing anything interesting...""" start="00:38:56.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""whatever, whatever...""" start="00:38:58.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""So, in 2022 I was trying to learn lpegrex""" start="00:39:03.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""because I was thinking that it would""" start="00:39:09.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""solve my problems - but it didn't...""" start="00:39:11.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it didn't have the features that I needed,""" start="00:39:13.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it was hard to extend, hard to explore,""" start="00:39:16.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and hard to debug, and I""" start="00:39:20.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""decided to rewrite it in a more""" start="00:39:23.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""hacker-friendly way - in the sense that...""" start="00:39:25.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""was modular, and I could replace any""" start="00:39:30.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""part of the module from a REPL...""" start="00:39:33.760" video="mainVideo-repl" id="subtitle"]]

[[!template new="1" text="""ELpeg1.lua""" start="00:39:35.400" video="mainVideo-repl" id="subtitle"]]

[[!template text="""My version of it was called ELpeg1.lua...""" start="00:39:35.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and I decided that in my version I""" start="00:39:43.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""wouldn't have the part that""" start="00:39:47.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""receives a grammar specified as a string""" start="00:39:49.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and converts that to lpeg... I would""" start="00:39:54.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""just have the backend part, that are the""" start="00:39:57.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""functions in lpeg that let us specify""" start="00:40:00.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""powerful grammars.""" start="00:40:04.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Let me go back. Let me explain a""" start="00:40:05.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""bit about lpeg... Lua has""" start="00:40:11.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""coercions: the + expects to receive""" start="00:40:15.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""true numbers, and if one of its arguments,""" start="00:40:21.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""or both of them, are strings, it converts""" start="00:40:24.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the string... the strings to numbers so in""" start="00:40:27.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""this case here, 2+&quot;3&quot;,""" start="00:40:29.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it returns the number 5,""" start="00:40:33.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and this is the concatenation""" start="00:40:36.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""operator... it expects to receive""" start="00:40:39.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""strings, so in this case it will""" start="00:40:42.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""convert the number 2 to the string &quot;2&quot;,""" start="00:40:45.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and the concatenation of thes two""" start="00:40:47.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""things will be 23... oops, sorry, &quot;23&quot;""" start="00:40:50.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""as a string.""" start="00:40:54.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Lpeg also has some coercions.""" start="00:40:56.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I usually set these""" start="00:40:58.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""globals to let me write my grammars""" start="00:41:01.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""in a very compact way, so instead""" start="00:41:05.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""of lpeg.B, lpeg.C, etc I use these globals,""" start="00:41:09.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""like uppercase B, uppercase C, and so on...""" start="00:41:14.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and with these globals I can write""" start="00:41:18.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""things like this: C(1)*&quot;_&quot;...""" start="00:41:21.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and lpeg knows that lpeg.C...""" start="00:41:26.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it sort of expands this to lpeg.C,""" start="00:41:33.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""but lpeg.C expects to receive""" start="00:41:38.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""an lpeg pattern, and 1 is not yet an""" start="00:41:42.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""lpeg pattern, so it is coerced into an""" start="00:41:44.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""lpeg pattern by calling lpeg.P,""" start="00:41:47.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""so this short thing here becomes""" start="00:41:51.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""equivalent to lpeg.C(lpeg.P(1)), and the""" start="00:41:55.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""multiplication, when at least one of its""" start="00:42:03.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""arguments is an lpeg pattern... it expects""" start="00:42:07.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""to receive two lpeg patterns, and in""" start="00:42:10.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""this case the one at the right is""" start="00:42:13.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""just a string, so it is coerced to an lpeg""" start="00:42:15.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""pattern by using lpeg.P.""" start="00:42:18.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""With this idea we can sort of""" start="00:42:20.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""understand the comparison here. I mean,""" start="00:42:25.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""let me run it again... this first part is""" start="00:42:28.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""very similar to a regular expression""" start="00:42:31.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""here at the left...""" start="00:42:34.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and when we apply this... Lua pattern""" start="00:42:35.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""to this subject here the result""" start="00:42:39.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""is this thing here, this thing, this""" start="00:42:43.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""thing and this thing... I'm going to""" start="00:42:47.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""call each one of these results""" start="00:42:54.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""&quot;captures&quot;, so each of these things""" start="00:42:56.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""between parentheses &quot;captures&quot; a substring""" start="00:42:59.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""of the original string and these""" start="00:43:03.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""captured substrings are returned in a""" start="00:43:06.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""certain order. Here is how to express the""" start="00:43:08.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""same thing in lpeg...""" start="00:43:11.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it's very cryptic but it's a""" start="00:43:12.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""good way to understand the some basic""" start="00:43:15.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""operators of lpeg, I mean we can look at""" start="00:43:20.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the manual and understand and""" start="00:43:23.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""what C, S and R do, and also""" start="00:43:26.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""exponentiation... and this strange thing""" start="00:43:30.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""here receives this string here, runs""" start="00:43:37.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""a function that I have defined, that""" start="00:43:41.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""converts it to an object of a certain""" start="00:43:43.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""class, and that class""" start="00:43:46.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""represents Re patterns, so this thing""" start="00:43:47.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""is treated as a pattern for re.lua,""" start="00:43:52.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and it is matched against the string,""" start="00:43:54.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and it returns the same thing as the""" start="00:43:56.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""other one.""" start="00:43:59.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Also, this thing here also has a""" start="00:44:02.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""comparison with lpegrex, but these""" start="00:44:05.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""patterns are very trivial, they""" start="00:44:08.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""don't do anything very strange...""" start="00:44:11.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""so let's go back and see what""" start="00:44:13.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""kinds of very strange things there are.""" start="00:44:15.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Here is the page of lpegrex at github,""" start="00:44:18.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""here's the documentation...""" start="00:44:26.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it's relatively brief,""" start="00:44:29.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it explains lpegrex as being an""" start="00:44:32.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""extension of Re.lua, so it explains""" start="00:44:35.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""mainly the additional features... here is a""" start="00:44:39.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""quick reference that explains only the""" start="00:44:42.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""additional features...""" start="00:44:45.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""some of the these things""" start="00:44:46.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I was able to understand""" start="00:44:49.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""by struggling a lot, and some I wasn't""" start="00:44:50.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""able to even by spending several evenings""" start="00:44:57.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""try to to build examples...""" start="00:45:02.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and this is something very nice. Lpegrex""" start="00:45:04.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""comes with some example parsers... and""" start="00:45:12.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""here is a parser that parses the Lua""" start="00:45:15.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""grammar - I mean, this is the the grammar""" start="00:45:18.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""for Lua 5.4 at the end of the""" start="00:45:22.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""reference manual... it's just this... this""" start="00:45:25.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""is in a kind of BNF, and this is the BNF""" start="00:45:31.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""translated""" start="00:45:34.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""to the language of lpegrex, so this""" start="00:45:35.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""thing uses many constructions that are""" start="00:45:39.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""in re.lua and some extra constructions that""" start="00:45:43.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""are described here... and with these""" start="00:45:48.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""examples I was able to to understand""" start="00:45:50.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""some of the...""" start="00:45:54.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""of these things here that are""" start="00:45:55.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""described here in the quick""" start="00:45:58.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""reference - but not all.""" start="00:46:00.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""So, I wasn't able to use lpegrex""" start="00:46:04.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""by itself, because some things didn't""" start="00:46:11.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""make much sense, and I decided to""" start="00:46:14.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""reimplement it in my own style,""" start="00:46:16.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""because that would be a way to map...""" start="00:46:18.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""to at the very least map what I had""" start="00:46:23.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""understood and what I didn't, learn""" start="00:46:26.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""one feature at a time, do comparisons, and""" start="00:46:29.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""so on.""" start="00:46:33.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Here I pointed to two features of lpeg...""" start="00:46:35.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""in one I said &quot;Oh, great! This thing can""" start="00:46:38.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""be used to to define grammars, even""" start="00:46:41.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""recursive grammars&quot;, and so on...""" start="00:46:44.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and this is an &quot;Oh, no!&quot; feature - one""" start="00:46:45.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""thing that didn't make any sense at all...""" start="00:46:49.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""group captures. One thing that I did to""" start="00:46:51.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""understand group captures was to""" start="00:46:56.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""represent them as diagrams. Of course in""" start="00:46:59.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the beginning I was drawing these""" start="00:47:02.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""diagrams by hand, but then I realized""" start="00:47:05.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that I could use the bits of lpeg""" start="00:47:08.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that I already knew to build a grammar""" start="00:47:11.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that would parse a little language and""" start="00:47:14.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""generate these diagrams in LaTeX, and I was""" start="00:47:17.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""able to make this.""" start="00:47:21.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""In this diagram here""" start="00:47:21.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""this thing above the arrow is Lua code...""" start="00:47:25.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""a piece of Lua code that""" start="00:47:30.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""specifies an lpeg pattern... this""" start="00:47:33.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""thing here at the top is the string that""" start="00:47:37.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""is being matched, and the things below""" start="00:47:39.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the underbraces are the captures that""" start="00:47:43.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""each thing... sorry, that each thing""" start="00:47:46.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""captures.""" start="00:47:50.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""For example, this underbrace here""" start="00:47:51.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""corresponds to this pattern here,""" start="00:47:58.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that parses a single character but""" start="00:48:00.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""doesn't return any captures, this thing""" start="00:48:02.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""here parses a single &quot;b&quot; and doesn't""" start="00:48:05.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""return any captures, this thing here""" start="00:48:08.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""parses a single character and captures""" start="00:48:11.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it, and this thing here parses the""" start="00:48:14.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""character &quot;d&quot; and captures it... and this""" start="00:48:16.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""other thing here transforms this""" start="00:48:21.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""pattern into another pattern...""" start="00:48:24.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""returns first a capture with all""" start="00:48:27.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the string that was parsed by this""" start="00:48:33.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""pattern here, and then all the captures""" start="00:48:35.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""returned by this thing here before""" start="00:48:37.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the &quot;:&quot;.""" start="00:48:41.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""So, this was a way to build""" start="00:48:42.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""concrete examples for things that the""" start="00:48:45.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""lpag manual was explaining in a very terse""" start="00:48:48.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""way, and it worked for me - some things""" start="00:48:52.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that were very""" start="00:48:55.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""mysterious started to make sense, and I""" start="00:48:57.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""started to have intelligent questions""" start="00:48:59.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""to ask in the mailing list.""" start="00:49:03.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""And with that I was able to""" start="00:49:06.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""understand what are group captures,""" start="00:49:10.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and group captures that receive a name...""" start="00:49:12.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Well, let me explain what this does.""" start="00:49:17.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""This thing here captures... sorry, parses""" start="00:49:22.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the empty string and returns this as a""" start="00:49:27.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""constant... so, this is something that""" start="00:49:29.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""doesn't exist in regular expressions...""" start="00:49:32.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it parses nothing and""" start="00:49:35.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""returns this as a capture... then this""" start="00:49:38.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""thing here returns these two""" start="00:49:41.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""constants here, and parses the empty""" start="00:49:44.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""string, and this thing here converts""" start="00:49:47.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the results of this thing here into a""" start="00:49:51.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""group capture, and stores it in the label""" start="00:49:54.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""&quot;d&quot;... and then here's another constant""" start="00:49:57.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""capture.""" start="00:50:03.280" video="mainVideo-repl" id="subtitle"]]

[[!template new="1" text="""Building lists""" start="00:50:03.720" video="mainVideo-repl" id="subtitle"]]

[[!template text="""And I realized that these things""" start="00:50:03.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""here were similar to how Lua""" start="00:50:05.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""specifies building lists...""" start="00:50:08.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""when we build... sorry, tables. When""" start="00:50:09.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""we build a table, and we say that the""" start="00:50:16.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""first element of the table is here, this""" start="00:50:18.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""element is put at the end of the table...""" start="00:50:21.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""when after the that would say d=42...""" start="00:50:23.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""we are putting the 42""" start="00:50:29.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""in the the slot whose key is &quot;d&quot;.""" start="00:50:31.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""This was happening with lpeg captures,""" start="00:50:34.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""but there was something very strange...""" start="00:50:39.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""these group captures could hold""" start="00:50:43.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""more than one capture - more than one""" start="00:50:46.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""value... so there was something between""" start="00:50:49.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""lists and tables. I started to use this""" start="00:50:51.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""notation to...""" start="00:50:58.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""explain in my notation what they""" start="00:51:00.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""were doing... many things started""" start="00:51:04.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""to make sense, many mysterious""" start="00:51:08.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""sentences in the manual started to""" start="00:51:10.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""make sense... but some didn't...""" start="00:51:12.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""but at least I was able to send""" start="00:51:14.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""some intelligent questions to the""" start="00:51:19.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""mailing lis,t and the author of Lua and""" start="00:51:22.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""lpeg answered some of them...""" start="00:51:25.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""he was not very happy about my""" start="00:51:27.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""questions - he... told me that those""" start="00:51:31.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""diagrams were a waste of time, the""" start="00:51:34.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""manual was perfectly clear, and so on...""" start="00:51:37.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""whatever - but I was able to...""" start="00:51:40.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""so, it was weird, but I was able to""" start="00:51:44.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""understand lots of things from his""" start="00:51:48.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""answers. This is a copy of one of""" start="00:51:51.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""my messages, then there's another one,""" start="00:51:56.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""another one, some of them had diagrams...""" start="00:51:58.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""then he complained about these diagrams,""" start="00:52:01.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""he said that these things here, that look""" start="00:52:04.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""like table constructors, &quot;do not exist&quot;...""" start="00:52:08.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""whatever... anyway, once I understood""" start="00:52:11.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""group captures many features""" start="00:52:17.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""were very easy to understand""" start="00:52:20.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and I started to be able to use lpeg to""" start="00:52:23.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""to build some very interesting things...""" start="00:52:26.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I was able to reproduce some""" start="00:52:28.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""of the features that I saw in lpegrex -""" start="00:52:33.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""remember that this... where is that?""" start="00:52:36.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""this is the syntax of Lua... here -""" start="00:52:41.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I was able to understand""" start="00:52:46.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""how these things here were translated to""" start="00:52:48.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""lpeg code... to lpeg patterns""" start="00:52:52.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""by using group captures in a certain""" start="00:52:55.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""way... I was able to implement them""" start="00:52:58.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""in ELpeg1.lua...""" start="00:53:03.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and after some time I was able to use""" start="00:53:04.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""ELpeg1.lua to build grammars that""" start="00:53:08.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""were able to parse""" start="00:53:12.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""arithmetical expressions with the""" start="00:53:14.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""right precedence... and here's an example""" start="00:53:18.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""in which I built the grammar step by step...""" start="00:53:20.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and I test the current grammar, and I""" start="00:53:23.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""replace a bit, and then I test the new""" start="00:53:29.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""grammar and so on...""" start="00:53:35.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and you can see that the result is""" start="00:53:36.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""always a tree that is drawn in a""" start="00:53:39.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""nice two dimensional way...""" start="00:53:43.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""At this point these powers here""" start="00:53:44.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""are returned as a list,""" start="00:53:48.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""as an operation &quot;pow&quot;""" start="00:53:50.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""with several arguments, here... and then""" start="00:53:53.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I apply a kind of parsing combinator,""" start="00:53:57.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""here... that transforms these trees into""" start="00:54:00.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""other trees and with these combinators""" start="00:54:03.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""here I can specify that the &quot;^&quot; is""" start="00:54:08.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""associative in a certain direction...""" start="00:54:12.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that the &quot;/&quot; is associative in""" start="00:54:14.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""another direction... the &quot;-&quot; uses""" start="00:54:17.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the same direction as a the &quot;/&quot;,""" start="00:54:20.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and so on... and they have the""" start="00:54:23.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""right precedences.""" start="00:54:26.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""So, here are the tests...""" start="00:54:29.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""here is my file ELpeg1.lua... it has""" start="00:54:34.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""several classes, each class has tests""" start="00:54:38.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""after it...""" start="00:54:41.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I was able to implement something""" start="00:54:42.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that lpegrex has, that is called""" start="00:54:46.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""&quot;keywords&quot;, that is very useful for parsing""" start="00:54:50.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""programs in programming languages...""" start="00:54:53.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I was able to implement something""" start="00:54:56.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""similar to the debugger... to the""" start="00:54:59.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""lpeg debugger lpeg uses... I was""" start="00:55:02.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""frustrated by some limitations of""" start="00:55:08.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the lpeg debugger, and I implemented""" start="00:55:11.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""my own that is, uh... much better!...""" start="00:55:16.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Let me show something else... I was""" start="00:55:23.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""able to translate a good part of the""" start="00:55:24.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Lua parser, here, to ELpeg1.lua... I haven't""" start="00:55:27.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""finished yet, but I have most of the""" start="00:55:33.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the translation here...""" start="00:55:38.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and after having all that I was able to""" start="00:55:39.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""build other grammars very quickly...""" start="00:55:47.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""writing new parsers finally became fun.""" start="00:55:50.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""And here's one example that I showed in the""" start="00:55:55.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""beginning.""" start="00:55:58.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""If I remember correctly...""" start="00:56:00.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I took a figure from the Wikipedia...""" start="00:56:05.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I don't have its link now...""" start="00:56:10.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""but I specified a grammar that parses""" start="00:56:12.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""exactly the example that appears""" start="00:56:17.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""in the Wikipedia...""" start="00:56:20.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""so, with my grammar, considering that""" start="00:56:20.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the top level entry is &quot;Stmt&quot;, when I""" start="00:56:24.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""parse this string here""" start="00:56:28.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the result is this tree...""" start="00:56:30.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and I can do some operations on that,""" start="00:56:36.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I can define how this thing is to be""" start="00:56:41.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""converted into LaTeX,""" start="00:56:44.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I can define other operations""" start="00:56:45.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that convert trees into other trees, and""" start="00:56:49.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""here are some tests of these operations...""" start="00:56:53.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""This is what I showed in the beginning...""" start="00:56:54.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I'm not going to explain all the details""" start="00:57:00.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""of this thing now...""" start="00:57:02.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""this :show() converts this thing""" start="00:57:04.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""into LaTeX in the way specified by these""" start="00:57:09.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""instructions here, that says that...""" start="00:57:11.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""well, whatever...""" start="00:57:16.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and here's the result - the LaTeXed result...""" start="00:57:25.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and these diagrams here are generated by""" start="00:57:32.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""this file here, that defines a simple""" start="00:57:41.760" video="mainVideo-repl" id="subtitle"]]
[[!template text="""grammar that parses this thing here,""" start="00:57:46.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and then LaTeXes it in a certain way, and""" start="00:57:48.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and also tests to check if this code here...""" start="00:57:52.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""this Lua code that generates an lpeg grammar...""" start="00:57:56.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""parses this subject here and""" start="00:58:02.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""returns the expected result...""" start="00:58:05.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""So: this is the code that I""" start="00:58:08.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""wanted to show. I wanted to show many""" start="00:58:12.240" video="mainVideo-repl" id="subtitle"]]
[[!template text="""more things but I wasn't able to prepare""" start="00:58:16.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""them before the conference... and I hope""" start="00:58:19.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that soon - for some value of &quot;soon&quot; -""" start="00:58:23.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I'll be able to create REPL-based""" start="00:58:27.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""tutorials for lpeg, Re, and ELpeg1.lua...""" start="00:58:30.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""where lpeg is something very famous,""" start="00:58:33.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Re is a module of lpeg...""" start="00:58:36.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I could also do something like this""" start="00:58:39.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""for lpegrex... and ELpeg1.lua is""" start="00:58:42.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the thing that I wrote, the one that""" start="00:58:47.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""has test in comments, and the tests""" start="00:58:51.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""usually generate trees, and sometimes""" start="00:58:56.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""they generate TeX code.""" start="00:58:59.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Yeah, so that's it! I wanted to""" start="00:59:00.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""present much more but I wasn't able to""" start="00:59:04.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""prepare it... so: sorry, thanks, bye! =)""" start="00:59:07.160" video="mainVideo-repl" id="subtitle"]]

Questions or comments? Please e-mail [eduardoochs@gmail.com](mailto:eduardoochs@gmail.com?subject=Comment%20for%20EmacsConf%202023%20repl%3A%20REPLs%20in%20strange%20places%3A%20Lua%2C%20LaTeX%2C%20LPeg%2C%20LPegRex%2C%20TikZ)


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