summaryrefslogtreecommitdiffstats
path: root/2024/info/p-search-after.md
blob: a3126b308a04779841936e434995791b1115f280 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
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
<!-- Automatically generated by emacsconf-publish-after-page -->


<div class="transcript transcript-mainVideo"><a name="p-search-mainVideo-transcript"></a><h1>Transcript</h1>


<div class="transcript-heading">[[!template new="1" text="""Search in daily workflows""" start="00:00:00.000" video="mainVideo-p-search" id="subtitle"]]</div>[[!template text="""Hello, my name is Zachary Romero, and today I'll be going""" start="00:00:00.000" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""over p-search, a local search engine in Emacs.""" start="00:00:03.400" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""Search these days is everywhere in software, from text editors,""" start="00:00:08.116" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""to IDEs, to most online websites. These tools tend to fall""" start="00:00:12.399" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""into one of two categories. One are tools that run locally,""" start="00:00:18.360" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""and work by matching string to text. The most common""" start="00:00:25.840" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""example of this is grep. In Emacs, there are a lot of""" start="00:00:31.280" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""extensions which provide functionality on top of these""" start="00:00:35.640" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""tools, such as projectile-grep, deadgrep,""" start="00:00:38.960" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""consult-ripgrep. Most editors have some sort of""" start="00:00:42.389" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""search current project feature. Most of the time,""" start="00:00:46.850" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""some of these tools have features like regular expressions,""" start="00:00:52.692" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""or you can specify file extension,""" start="00:00:56.394" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""or a directory you want to search in,""" start="00:00:59.216" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""but features are pretty limited.""" start="00:01:01.637" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""The other kind of search we use are usually hosted online,""" start="00:01:03.958" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""and they usually search a vast corpus of data.""" start="00:01:07.920" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""These are usually proprietary""" start="00:01:12.303" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""online services such as Google, GitHub,""" start="00:01:15.640" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""SourceGraph for code.""" start="00:01:18.766" video="mainVideo-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Problems with editor search tools""" start="00:01:24.200" video="mainVideo-p-search" id="subtitle"]]</div>[[!template text="""The kind of search feature that editors""" start="00:01:24.200" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""usually have have a lot of downsides to them. For one, a lot""" start="00:01:28.840" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""of times you don't know the exact search string you're""" start="00:01:36.720" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""searching for. Some complicated term like this""" start="00:01:38.840" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""high volume demand partner, you know, do you know if...""" start="00:01:42.784" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""Are some words abbreviated, is it capitalized,""" start="00:01:46.861" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""is it in kebab case, camel case, snake case?""" start="00:01:49.709" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""You often have to search all these variations.""" start="00:01:53.090" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""Another downside is that the search results returned""" start="00:01:57.572" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""contain a lot of noise. For example,""" start="00:02:05.435" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""you may get a lot of test files.""" start="00:02:07.770" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""If the tool hits your vendor directory,""" start="00:02:10.817" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""it may get a bunch of results from libraries""" start="00:02:13.538" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""you're using, which most are not helpful. Another downside""" start="00:02:17.200" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""is that the order given is, well, there's no meaning to the""" start="00:02:22.880" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""order. It's usually just the search order that the tool""" start="00:02:26.680" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""happens to look in first.""" start="00:02:30.320" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""Another thing is, so when you're searching, you oftentimes""" start="00:02:34.640" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""have to keep the state of the searches in your head. For""" start="00:02:38.640" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""example, you try one search, you see the results, find the""" start="00:02:41.640" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""results you think are relevant, keep them in your head, run""" start="00:02:46.640" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""search number two, look through the results, kind of""" start="00:02:49.640" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""combine these different search results in your head until""" start="00:02:52.520" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""you get an idea of which ones might be relevant.""" start="00:02:56.120" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""Another thing is that the search primitives are fairly limited.""" start="00:02:59.971" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""So yeah, you can search regular expressions, but you can't""" start="00:03:04.516" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""really define complex things like, I want to search files in""" start="00:03:10.600" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""this directory, and this directory, and this directory,""" start="00:03:14.720" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""except these subdirectories, and accept test files, and I""" start="00:03:18.440" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""only want files with this file extension. Criteria like""" start="00:03:22.320" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""that are really hard to... I'm sure they're possible in tools""" start="00:03:25.560" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""like grep, but they're pretty hard to construct.""" start="00:03:28.920" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""And lastly, there's no notion of any relevance. All the""" start="00:03:34.480" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""results you get back, I mean, you don't know, is the search""" start="00:03:38.200" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""more relevant? Is it twice as relevant? Is it""" start="00:03:42.040" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""100 times more relevant? These tools usually don't provide""" start="00:03:43.096" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""such information.""" start="00:03:52.280" video="mainVideo-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Information retrieval""" start="00:03:58.233" video="mainVideo-p-search" id="subtitle"]]</div>[[!template text="""There's a field called information retrieval,""" start="00:03:58.233" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""and this deals with this exact problem.""" start="00:04:00.395" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""You have lots of data you're searching for.""" start="00:04:02.617" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""How do you construct a search query?""" start="00:04:04.719" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""How do you get results back fast? How do you""" start="00:04:09.262" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""rank which ones are most relevant? How do you evaluate""" start="00:04:09.840" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""your search system to see if it's getting better or worse?""" start="00:04:14.520" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""There's a lot of work, a lot of books written on the topic of""" start="00:04:20.080" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""information retrieval. If one wants to improve""" start="00:04:23.120" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""searching in Emacs, then drawing inspiration from this""" start="00:04:28.160" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""field is necessary.""" start="00:04:31.880" video="mainVideo-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Search engine in Emacs: the index""" start="00:04:34.296" video="mainVideo-p-search" id="subtitle"]]</div>[[!template text="""The first aspect of information retrieval is the index.""" start="00:04:34.296" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""The reverse index is what search engines use to find results really fast.""" start="00:04:41.384" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""Essentially, it's a map of search term""" start="00:04:46.609" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""to locations where that term is located.""" start="00:04:51.455" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""You'll have all the terms or maybe even parts of""" start="00:04:54.739" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""the terms, and then you'll have all the locations where""" start="00:04:57.080" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""they're located. Any query could easily look up""" start="00:04:59.160" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""where things are located, join results together, and""" start="00:05:02.120" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""that's how they get the results to be really fast. For this""" start="00:05:05.920" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""project, I decided to forgo creating an index altogether.""" start="00:05:12.880" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""An index is pretty complicated to maintain because""" start="00:05:19.160" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""it always has to be in sync. Any time you open a file and save""" start="00:05:23.760" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""it, you would have to re-index, you would have to make sure""" start="00:05:27.320" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""that file is re-indexed properly. Then you have the""" start="00:05:29.960" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""whole issue of, well, if you're searching in Emacs,""" start="00:05:32.560" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""you have all these projects, this directory,""" start="00:05:36.120" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""that directory, how do you know which? Do you always have to""" start="00:05:38.800" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""keep them in sync? It's quite a hard task to handle""" start="00:05:42.480" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""that. Then on the other end, tools like ripgrep can""" start="00:05:47.400" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""search very fast. Even though they can't search maybe on the""" start="00:05:53.080" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""order of tens of thousands of repositories, for a local""" start="00:05:59.120" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""setting, they should be plenty fast enough.""" start="00:06:03.920" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""I benchmarked. Ripgrep, for example, is""" start="00:06:06.040" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""on the order of gigabytes per second.""" start="00:06:12.240" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""Definitely, it can search a few pretty big size""" start="00:06:15.960" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""repositories.""" start="00:06:19.240" video="mainVideo-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Search engine in Emacs: Ranking""" start="00:06:21.757" video="mainVideo-p-search" id="subtitle"]]</div>[[!template text="""Next main task. We decided not to use an""" start="00:06:21.757" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""index. Next task is how do we rank search results? So there's""" start="00:06:24.800" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""two main algorithms that are used these days. The first""" start="00:06:29.960" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""one is tf-idf, which stands for term frequency, inverse""" start="00:06:33.440" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""target frequency. Then there's BM25, which is sort of a""" start="00:06:36.520" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""modified tf-idf algorithm.""" start="00:06:43.040" video="mainVideo-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""tf-idf: term-frequency x inverse-document-frequency""" start="00:06:43.553" video="mainVideo-p-search" id="subtitle"]]</div>[[!template text="""tf-idf, without going into""" start="00:06:43.553" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""too much detail, essentially multiplies two terms. One""" start="00:06:45.680" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""is the term frequency, and then you multiply it by the""" start="00:06:49.160" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""inverse document frequency. The term frequency is a""" start="00:06:51.880" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""measure of how often that search term occurs. The""" start="00:06:54.560" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""inverse document frequency is a measure of how much""" start="00:06:58.520" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""information that term provides. If the term occurs a lot,""" start="00:07:00.800" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""then it gets a higher score in the term frequency section.""" start="00:07:06.200" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""But if it's a common word that exists in a lot of documents,""" start="00:07:08.720" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""then its inverse document frequency goes down.""" start="00:07:12.400" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""It kind of scores it less. You'll find that words like the,""" start="00:07:13.901" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""in, is, these really common words, since they occur""" start="00:07:20.880" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""everywhere, their inverse document frequency is""" start="00:07:25.960" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""essentially zero. They don't really count towards a""" start="00:07:29.200" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""score. But when you have rare words that only occur in a""" start="00:07:32.480" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""few documents, they're weighted a lot more. So the more""" start="00:07:35.680" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""those rare words occur, they boost the score higher.""" start="00:07:37.680" video="mainVideo-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""BM25""" start="00:07:41.160" video="mainVideo-p-search" id="subtitle"]]</div>[[!template text="""BM25 is a modification of this. It's essentially TF, it's""" start="00:07:41.160" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""essentially the previous one, except it dampens out terms""" start="00:07:48.840" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""that occur more often. Imagine you have a bunch of""" start="00:07:53.120" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""documents. One has a term 10 times, one has a term, that same""" start="00:07:55.440" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""term a hundred times, another has a thousand times.""" start="00:07:59.360" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""You'll see the score dampens off as the number of""" start="00:08:02.440" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""occurrences increases. That prevents any one term from""" start="00:08:06.800" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""overpowering the score. This is the algorithm I ended up""" start="00:08:10.640" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""choosing for my implementation. So with a plan of using a""" start="00:08:16.560" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""command line tool like ripgrep to get term occurrences, and""" start="00:08:21.040" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""then using a scoring algorithm like BM25 to rank the terms,""" start="00:08:29.560" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""we can combine this together and create a simple search""" start="00:08:36.800" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""mechanism.""" start="00:08:40.080" video="mainVideo-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Searching with p-search""" start="00:08:41.200" video="mainVideo-p-search" id="subtitle"]]</div>[[!template text="""Here we're in the directory for the Emacs source code.""" start="00:08:41.200" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""Let's say we want to search for the display code. We""" start="00:08:47.440" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""run the p-search command, starting the search engine. It""" start="00:08:53.480" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""opens up. We notice it has three sections, the candidate""" start="00:08:58.680" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""generators, the priors, and the search results. The""" start="00:09:01.160" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""candidate generators generates the search space we're""" start="00:09:05.200" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""looking on. These are all composable and you can add as""" start="00:09:10.000" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""many as you want. So with this, it specifies that here""" start="00:09:14.720" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""we're searching on the file system and we're searching in""" start="00:09:19.720" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""this directory. We're using the ripgrep tool to search""" start="00:09:25.240" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""with, and we want to make sure that we're searching only on""" start="00:09:30.800" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""files committed to Git. Here we see the search results.""" start="00:09:33.360" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""Notice here is their final probability. Here, notice""" start="00:09:40.480" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""that they're all the same, and they're the same because we""" start="00:09:45.160" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""don't have any search criteria specified here. Suppose""" start="00:09:47.080" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""we want to search for display-related code. We add a""" start="00:09:50.720" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""query: display.""" start="00:09:55.680" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""So then it spins off the processes, gets the search term""" start="00:09:57.360" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""counts and calculates the new scores. Notice here that""" start="00:10:06.560" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""the results that come on top are just at first glance appear""" start="00:10:10.880" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""to be relevant to display. Remember, if we compare""" start="00:10:15.760" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""that to just running a ripgrep raw, notice here we're""" start="00:10:19.920" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""getting 53,000 results and it's pretty hard to go through""" start="00:10:25.080" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""these results and make sense of it.""" start="00:10:31.280" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""So that's p-search in a nutshell.""" start="00:10:34.320" video="mainVideo-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Flight AF 447""" start="00:10:41.457" video="mainVideo-p-search" id="subtitle"]]</div>[[!template text="""Next, I wanted to talk about the story of Flight 447.""" start="00:10:41.457" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""Flight 447 going from Rio de Janeiro to Paris""" start="00:10:45.983" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""crashed somewhere in the Atlantic Ocean""" start="00:10:49.327" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""on June 1st, 2009, killing everyone on board.""" start="00:10:51.510" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""Four search attempts were made to find the wreckage.""" start="00:10:54.714" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""None of them were successful, except the finding of some debris""" start="00:10:56.895" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""and a dead body. It was decided that they really wanted""" start="00:11:01.076" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""to find the wreckage to retrieve data as to why the search""" start="00:11:05.480" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""occurred. This occurred two years after the""" start="00:11:09.520" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""initial crash. With this next search attempt, they""" start="00:11:14.640" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""wanted to create a probability distribution of where the""" start="00:11:19.960" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""crash could be. The only piece of concrete data they had""" start="00:11:23.200" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""was a GPS signal from the ship at 210 containing the GPS""" start="00:11:26.760" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""location of the plane was at 2.98 degrees north, 30.59""" start="00:11:35.080" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""degrees west. That was the only data they had to go off of.""" start="00:11:40.240" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""So they drew a circle around that point""" start="00:11:44.720" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""with a radius of 40 nautical miles. They assumed that""" start="00:11:50.080" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""anything outside the circle would have been impossible for""" start="00:11:54.680" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""the ship to reach. This was the starting point for""" start="00:11:57.480" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""creating the probability distribution of where the""" start="00:12:01.240" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""wreckage occurred. Anything outside the circle, they""" start="00:12:04.800" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""assumed it was impossible to reach.""" start="00:12:08.120" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""The only other pieces of data were the four failed search""" start="00:12:09.640" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""attempts and then some of the debris found. One thing they""" start="00:12:16.480" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""did decide was to look at similar crashes where control was""" start="00:12:21.720" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""lost to analyze where the crashes landed, compared to where""" start="00:12:26.160" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""the loss of control started. This probability""" start="00:12:30.320" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""distribution, the circular normal distribution was""" start="00:12:37.400" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""decided upon. Here you can see that the center has a lot""" start="00:12:43.480" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""higher chance of finding the wreckage. As you go away""" start="00:12:47.920" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""from the center, the probability of finding the wreckage""" start="00:12:51.880" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""decreases a lot. The next thing they looked at was, well,""" start="00:12:55.400" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""they noticed they had retrieved some dead bodies from the""" start="00:13:02.320" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""wreckage. So they thought that they could calculate the""" start="00:13:05.960" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""backward drift on that particular day to find where the""" start="00:13:12.960" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""crash might've occurred. If they found bodies at a""" start="00:13:18.440" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""particular location, they can kind of work backwards from""" start="00:13:21.480" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""that in order to find where the initial crash occurred.""" start="00:13:25.120" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""So here you can see the probability distribution based off of""" start="00:13:30.666" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""the backward drift model. Here you see the darker colors""" start="00:13:34.720" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""have a higher probability of finding the location. So""" start="00:13:40.280" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""with all these pieces of data, so with that circular 40""" start="00:13:46.160" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""nautical mile uniform distribution, with that circular""" start="00:13:50.680" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""normal distribution of comparing similar crashes, as well""" start="00:13:54.960" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""as with the backward drift, they were able to combine all""" start="00:14:02.200" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""three of these pieces""" start="00:14:07.440" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""in order to come up with a final prior distribution of where""" start="00:14:08.560" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""the wreckage occurred. So this is what the final model""" start="00:14:14.600" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""they came upon. Here you can see it has that 40 nautical""" start="00:14:19.520" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""mile radius circle. It has that darker center, which""" start="00:14:24.720" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""indicates a higher probability because of the""" start="00:14:29.680" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""crash similarity. Then here you also see along this line""" start="00:14:32.040" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""has a slightly higher probability due to the backward drift""" start="00:14:38.960" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""distribution.""" start="00:14:50.800" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""So the next thing is, since they had performed searches,""" start="00:14:52.120" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""they decided to incorporate the data from those searches""" start="00:14:56.560" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""into their new distribution. Here you can see places""" start="00:15:00.560" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""where they searched initially. If you think about it,""" start="00:15:04.760" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""you can assume that, well, if you search for something,""" start="00:15:08.880" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""there's a good chance you'll find it, but not necessarily.""" start="00:15:11.400" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""Anywhere where they searched, the probability of it""" start="00:15:14.200" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""finding it there is greatly reduced. It's not zero because""" start="00:15:18.440" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""obviously you can look for something and miss it, but it kind""" start="00:15:22.840" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""of reduces the probability that we would expect to find it in""" start="00:15:26.880" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""those already searched locations. This is the""" start="00:15:31.120" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""posterior distribution or distribution after counting""" start="00:15:36.680" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""observations made.""" start="00:15:41.920" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""Here we can see kind of these cutouts of where the""" start="00:15:44.560" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""previous searches occurred. This is the final""" start="00:15:48.760" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""distribution they went off of to perform the subsequent""" start="00:15:53.960" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""search. In the end, the wreckage was found at a point close to""" start="00:15:57.000" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""the center here, thus validating this methodology.""" start="00:16:02.000" video="mainVideo-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Modifying priors""" start="00:16:06.771" video="mainVideo-p-search" id="subtitle"]]</div>[[!template text="""We can see the power of this Bayesian search methodology""" start="00:16:06.771" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""in the way that we could take information from all the sources we had.""" start="00:16:10.333" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""We could draw analogies to similar situations.""" start="00:16:14.000" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""We can quantify these, combine them into a model,""" start="00:16:19.238" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""and then also update our model according to each observation we make.""" start="00:16:22.480" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""I think there's a lot of similarities to be drawn with""" start="00:16:27.894" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""searching on a computer in the sense that when we search for""" start="00:16:30.360" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""something, there's oftentimes a story we kind of have as to""" start="00:16:35.160" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""what search terms exist, where we expect to find the file.""" start="00:16:39.400" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""For example, if you're implementing a new feature, you'll""" start="00:16:43.960" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""often have some search terms in mind that you think will be""" start="00:16:46.720" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""relevant. Some search terms, you might think they have a""" start="00:16:49.920" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""possibility of being relevant, but maybe you're not sure.""" start="00:16:54.720" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""There's some directories where you know that they're not""" start="00:16:57.600" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""relevant. There's other criteria like, well, you know that""" start="00:17:02.880" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""maybe somebody in particular worked on this code.""" start="00:17:07.760" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""What if you could incorporate that information? Like, I know""" start="00:17:11.400" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""this author, he's always working on this feature. What if""" start="00:17:16.320" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""I just give the files that this person works on a higher""" start="00:17:21.400" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""probability than ones he doesn't work on? Or maybe you think""" start="00:17:25.520" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""that this is a file that's committed too often. You think""" start="00:17:32.600" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""that maybe the amount of times of commits it receives""" start="00:17:38.600" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""should change your probability of this file being""" start="00:17:43.440" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""relevant. That's where p-search comes in.""" start="00:17:47.720" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""Its aim is to be a framework in order to incorporate all these""" start="00:17:52.840" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""sorts of different prior information into your searching""" start="00:17:57.680" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""process. You're able to say things like, I want files""" start="00:18:01.360" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""authored by this user to be given higher probability. I want""" start="00:18:06.000" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""this author to be given a lower priority. I know this author""" start="00:18:11.120" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""never works on this code. If he has a commit, then lower its""" start="00:18:13.920" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""probability, or you can specify specific paths, or you can""" start="00:18:18.760" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""specify multiple search terms, weighing different ones""" start="00:18:24.680" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""according to how you think those terms should be relevant.""" start="00:18:30.200" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""So with p-search, we're able to incorporate information""" start="00:18:38.920" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""from multiple sources. Here, for example, we have a prior""" start="00:18:42.080" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""of type git author, and we're looking for all of the files""" start="00:18:46.280" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""that are committed to by Lars. So the more commits he has,""" start="00:18:52.080" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""the higher probability is given to that file. Suppose""" start="00:18:56.720" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""there's a feature I know he worked on, but I don't know the""" start="00:19:01.400" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""file or necessarily even key terms of it. Well, with this, I""" start="00:19:04.560" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""can incorporate that information.""" start="00:19:09.160" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""So let's search again. Let's add display.""" start="00:19:12.141" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""Let's see what responses we get back here. We can add""" start="00:19:16.000" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""as many of these criteria as we want. We can even specify that""" start="00:19:22.960" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""the title of the file name should be a certain type. Let's""" start="00:19:27.200" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""say we're only concerned about C files. We add the file""" start="00:19:31.520" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""name should contain .c in it. With this, now we""" start="00:19:36.600" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""notice that all of the C files containing display authored""" start="00:19:45.400" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""by Lars should be given higher probability. We can""" start="00:19:51.320" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""continue to add these priors as we feel fit. The workflow""" start="00:19:56.280" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""that I found helps when searching is that you'll add""" start="00:20:02.720" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""criteria, you'll see some good results come up and some bad""" start="00:20:07.520" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""results come up. So you'll often find a pattern in those""" start="00:20:11.360" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""bad results, like, oh, I don't want test files, or this""" start="00:20:15.320" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""directory isn't relevant, or something like that. Then""" start="00:20:18.840" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""you can update your prior distribution, adding its""" start="00:20:22.680" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""criteria, and then rerun it, and then it will get different""" start="00:20:27.200" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""probabilities for the files. So in the end, you'll have a""" start="00:20:31.120" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""list of results that's tailor-made to the thing you're""" start="00:20:35.160" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""searching for.""" start="00:20:37.640" video="mainVideo-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Importance""" start="00:20:40.405" video="mainVideo-p-search" id="subtitle"]]</div>[[!template text="""There's a couple of other features I""" start="00:20:40.405" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""want to go through. One thing is that each of these priors,""" start="00:20:41.640" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""you can specify the importance. In other words, how""" start="00:20:49.080" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""important is this particular piece of information to your""" start="00:20:55.840" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""search? So here, everything is of importance medium. But""" start="00:21:01.120" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""let's say I really care about something having the word""" start="00:21:05.200" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""display in it. I'm going to change its importance.""" start="00:21:07.880" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""Instead of medium, I'll change its importance to high.""" start="00:21:12.680" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""What that does essentially is things that don't have""" start="00:21:18.600" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""display in it are given a much bigger penalty and things with""" start="00:21:23.280" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""the word display in it are rated much higher.""" start="00:21:28.080" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""With this, we're able to fine-tune the results that we get.""" start="00:21:28.129" video="mainVideo-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Complement or inverse""" start="00:21:38.560" video="mainVideo-p-search" id="subtitle"]]</div>[[!template text="""Another thing you can do is that you can add the complement or""" start="00:21:38.560" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""the inverse of certain queries. Let's say you want to""" start="00:21:45.640" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""search for display, but you don't want it to contain the word""" start="00:21:49.760" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""frame. With the complement option on, when we create this""" start="00:21:53.240" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""search prior, now it's going to be searching for frame, but""" start="00:21:58.040" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""instead of increasing the search score, it's going to""" start="00:22:01.840" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""decrease it if it contains the word frame.""" start="00:22:04.960" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""So here, things related to frame are kind of""" start="00:22:07.000" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""deprioritized. We can also say that we really don't want""" start="00:22:14.320" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""the search to contain the word frame by increasing its""" start="00:22:18.080" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""importance. So with all these composable pieces, we can""" start="00:22:21.600" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""create kind of a search that's tailor-made to our needs.""" start="00:22:27.200" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""That concludes this talk. There's a lot more I could talk""" start="00:22:33.413" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""about with regards to research, so definitely follow the""" start="00:22:35.760" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""project if you're interested. Thanks for watching, and I""" start="00:22:37.800" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""hope you enjoy the rest of the conference.""" start="00:22:40.640" video="mainVideo-p-search" id="subtitle"]]

</div>

Captioner: sachac

<div class="transcript transcript-qanda"><a name="p-search-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>

[[!template text="""...starting the recording here in the chat, and I see some""" start="00:00:00.000" video="qanda-p-search" id="subtitle"]]
[[!template text="""questions already coming in. So thank you so much for your""" start="00:00:03.560" video="qanda-p-search" id="subtitle"]]
[[!template text="""talk, Zac, and I'll step out of your way and let you field""" start="00:00:06.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""some of these questions.""" start="00:00:09.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""Sounds good. All right, so let's see. I'm going off of the""" start="00:00:10.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""question list.""" start="00:00:22.000" video="qanda-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Q: Do you think a reduced version of this functionality could be integrated into isearch?""" start="00:00:22.970" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""So the first one is about having reduced""" start="00:00:22.970" video="qanda-p-search" id="subtitle"]]
[[!template text="""version of the functionality integrated into iSearch. So""" start="00:00:25.840" video="qanda-p-search" id="subtitle"]]
[[!template text="""yeah, with the way things are set up, it is essentially a""" start="00:00:32.000" video="qanda-p-search" id="subtitle"]]
[[!template text="""framework. So""" start="00:00:37.920" video="qanda-p-search" id="subtitle"]]
[[!template text="""you can create a candidate. So just a review from the talk. So""" start="00:00:42.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""you have these candidate generators which generate search""" start="00:00:46.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""candidates. So you can have a file system candidate which""" start="00:00:49.920" video="qanda-p-search" id="subtitle"]]
[[!template text="""generates these file documents, which have text content in""" start="00:00:54.560" video="qanda-p-search" id="subtitle"]]
[[!template text="""them. In theory, you could have like a website candidate""" start="00:00:58.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""generator, and it could be like a web crawler. I mean, so""" start="00:01:01.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""there's a lot of different options. So one option, it's on my""" start="00:01:06.400" video="qanda-p-search" id="subtitle"]]
[[!template text="""mind, and I hope to get to this soon, is create a defun, like a""" start="00:01:10.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""defun candidate generator. So basically it takes a file,""" start="00:01:15.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""splits it up into like defunds, kind of like just like what""" start="00:01:18.600" video="qanda-p-search" id="subtitle"]]
[[!template text="""iSearch would do. and then use each of those, the body of""" start="00:01:22.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""those, as a content for the search session. So, I mean,""" start="00:01:26.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""essentially you could just, you could start up a session,""" start="00:01:30.960" video="qanda-p-search" id="subtitle"]]
[[!template text="""and there's like programmatic ways to start these up too. So""" start="00:01:35.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""you could, if such a candidate generator was created, you""" start="00:01:39.480" video="qanda-p-search" id="subtitle"]]
[[!template text="""could easily, and just like, you know, one command. Get the""" start="00:01:42.600" video="qanda-p-search" id="subtitle"]]
[[!template text="""defunds, create a search session with it, and then just go""" start="00:01:49.560" video="qanda-p-search" id="subtitle"]]
[[!template text="""straight to your query. So, definitely, something""" start="00:01:54.600" video="qanda-p-search" id="subtitle"]]
[[!template text="""just like this is in the works. And I guess another thing is""" start="00:02:01.440" video="qanda-p-search" id="subtitle"]]
[[!template text="""interface.""" start="00:02:06.920" video="qanda-p-search" id="subtitle"]]
[[!template text="""The whole dedicated buffer is helpful for searching, but""" start="00:02:08.240" video="qanda-p-search" id="subtitle"]]
[[!template text="""with this isearch case, there's currently not a way to have a""" start="00:02:17.080" video="qanda-p-search" id="subtitle"]]
[[!template text="""reduced UI, where it's just like, OK, I have these function""" start="00:02:21.920" video="qanda-p-search" id="subtitle"]]
[[!template text="""defuns for the current file. I just want them to pop up at the""" start="00:02:27.840" video="qanda-p-search" id="subtitle"]]
[[!template text="""bottom so I can quickly go through it. So currently, I don't""" start="00:02:32.240" video="qanda-p-search" id="subtitle"]]
[[!template text="""have that. But such a UI is definitely, yeah, thinking about""" start="00:02:35.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""how that could be done.""" start="00:02:41.200" video="qanda-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Q: Any idea how this would work with personal information like Zettlekastens?""" start="00:02:45.360" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""Alright, so yeah. So next question. Any idea how this""" start="00:02:45.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""will work with personal information like Zettelkasten?""" start="00:02:50.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""So this is, this is like, I mean, it's essentially usable as""" start="00:02:52.600" video="qanda-p-search" id="subtitle"]]
[[!template text="""is with Zettelkasten method. So, I mean, that I mean""" start="00:02:58.320" video="qanda-p-search" id="subtitle"]]
[[!template text="""basically what like for example org-roam, and I think other""" start="00:03:04.560" video="qanda-p-search" id="subtitle"]]
[[!template text="""ones like Denote, they put all these files in the""" start="00:03:08.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""directory, and so with the already existing file system""" start="00:03:12.160" video="qanda-p-search" id="subtitle"]]
[[!template text="""candidate generator all you'd have to do is set that to be the""" start="00:03:15.920" video="qanda-p-search" id="subtitle"]]
[[!template text="""directory of your Zettelkasten system and then it would""" start="00:03:19.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""just pick up all the files in there and""" start="00:03:23.200" video="qanda-p-search" id="subtitle"]]
[[!template text="""then add those as search candidates. So you could easily""" start="00:03:26.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""just search whatever system you have.""" start="00:03:28.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""Based off of the ways it's set up, if you had maybe your""" start="00:03:33.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""dailies you didn't want to search, it's just as easy to add a""" start="00:03:36.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""criteria saying, I don't want dailies to be searched. Like""" start="00:03:41.000" video="qanda-p-search" id="subtitle"]]
[[!template text="""give, like just eliminate the date, like the things from the""" start="00:03:44.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""daily from the sub directory. And then there you go. you have""" start="00:03:47.600" video="qanda-p-search" id="subtitle"]]
[[!template text="""your Zettelkasten search engine, and you could just copy""" start="00:03:51.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""the, you know, there's, I mean, I need, I'm working on""" start="00:03:57.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""documentation for this to kind of set this up easily, but,""" start="00:04:00.000" video="qanda-p-search" id="subtitle"]]
[[!template text="""you know, you could just create your simple command, just""" start="00:04:03.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""like, your simple command, just like, just take in a text""" start="00:04:06.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""query, run it through the system, and then just get your""" start="00:04:10.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""search results right there. So yeah, definitely that is a""" start="00:04:14.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""use case that's on top of my mind.""" start="00:04:19.600" video="qanda-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Q: How good does the search work for synonyms especially if you use different languages?""" start="00:04:22.041" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""So next one, how good does a""" start="00:04:22.041" video="qanda-p-search" id="subtitle"]]
[[!template text="""search work for synonyms, especially if you use different""" start="00:04:23.240" video="qanda-p-search" id="subtitle"]]
[[!template text="""languages? Okay, this is a good question because with the""" start="00:04:26.440" video="qanda-p-search" id="subtitle"]]
[[!template text="""way that VM25 works, it's essentially just like trying to""" start="00:04:30.720" video="qanda-p-search" id="subtitle"]]
[[!template text="""find where terms occur and just counts them up.""" start="00:04:34.720" video="qanda-p-search" id="subtitle"]]
[[!template text="""I mean, this is something I couldn't get into. There's just""" start="00:04:41.120" video="qanda-p-search" id="subtitle"]]
[[!template text="""too much on the topic of information retrieval to kind of go""" start="00:04:44.000" video="qanda-p-search" id="subtitle"]]
[[!template text="""into this, but there is a whole kind of field of just like, how""" start="00:04:46.920" video="qanda-p-search" id="subtitle"]]
[[!template text="""do you, given a search term, how do you know what you should""" start="00:04:52.880" video="qanda-p-search" id="subtitle"]]
[[!template text="""search for? So like popular kind of industrial search""" start="00:04:58.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""engines, like they have kind of this feature where you can""" start="00:05:02.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""like define synonyms, define, term replacement. So""" start="00:05:07.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""whenever you see this term, it should be this. And it even""" start="00:05:11.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""gets even further.""" start="00:05:14.080" video="qanda-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Plurals""" start="00:05:15.092" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""If someone searches for a plural string,""" start="00:05:15.092" video="qanda-p-search" id="subtitle"]]
[[!template text="""how do you get the singular from that and search for that? So""" start="00:05:19.440" video="qanda-p-search" id="subtitle"]]
[[!template text="""this is a huge topic that currently p-search doesn't""" start="00:05:22.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""address, but it's on the top of my mind as to how. So that's one""" start="00:05:27.560" video="qanda-p-search" id="subtitle"]]
[[!template text="""part.""" start="00:05:33.520" video="qanda-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Different languages""" start="00:05:33.883" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""The next part is for different languages, one thing""" start="00:05:33.883" video="qanda-p-search" id="subtitle"]]
[[!template text="""that kind of seems like it's promising is vector search,""" start="00:05:39.000" video="qanda-p-search" id="subtitle"]]
[[!template text="""which, I mean, with the way p-search is set up, you could""" start="00:05:42.840" video="qanda-p-search" id="subtitle"]]
[[!template text="""easily just create a vector search prior, plug it into the""" start="00:05:47.400" video="qanda-p-search" id="subtitle"]]
[[!template text="""system, and start using it. The only problem is that kind of""" start="00:05:51.160" video="qanda-p-search" id="subtitle"]]
[[!template text="""the vector search functions, like you have to do like cosine""" start="00:05:54.600" video="qanda-p-search" id="subtitle"]]
[[!template text="""similarity, like if you have like 10,000 documents, If""" start="00:05:58.880" video="qanda-p-search" id="subtitle"]]
[[!template text="""you're writing Elisp to calculate the cosine similarity""" start="00:06:03.640" video="qanda-p-search" id="subtitle"]]
[[!template text="""between the vectors, that's going to be very slow. And so now""" start="00:06:06.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""the whole can of worms of indexing comes up. And how do you do""" start="00:06:09.880" video="qanda-p-search" id="subtitle"]]
[[!template text="""that? And is that going to be native elisp? And so that's a""" start="00:06:14.160" video="qanda-p-search" id="subtitle"]]
[[!template text="""whole other can of worms. So yeah, vector search seems""" start="00:06:17.480" video="qanda-p-search" id="subtitle"]]
[[!template text="""promising. And then hopefully maybe other traditional""" start="00:06:21.840" video="qanda-p-search" id="subtitle"]]
[[!template text="""synonyms, stemming, that kind of stuff for alternate""" start="00:06:25.960" video="qanda-p-search" id="subtitle"]]
[[!template text="""terms, that could also be incorporated.""" start="00:06:33.440" video="qanda-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Q: When searching by author I know authors may setup a new machine and not put the exact same information. Is this doing anything to combine those into one author?""" start="00:06:40.200" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""Okay, next one. When searching by author, I know authors may""" start="00:06:40.200" video="qanda-p-search" id="subtitle"]]
[[!template text="""set up a new machine and not put the exact same information.""" start="00:06:43.720" video="qanda-p-search" id="subtitle"]]
[[!template text="""Is this doing anything to combine these two in one author?""" start="00:06:47.120" video="qanda-p-search" id="subtitle"]]
[[!template text="""Okay, so for this one, it's not. So it's like the way the get""" start="00:06:49.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""prior is currently set up is that it just does like a get""" start="00:06:54.400" video="qanda-p-search" id="subtitle"]]
[[!template text="""command to get all the get authors. You select one and then it""" start="00:06:58.120" video="qanda-p-search" id="subtitle"]]
[[!template text="""just uses that. But the thing is, is if you knew the two emails""" start="00:07:02.000" video="qanda-p-search" id="subtitle"]]
[[!template text="""that user might have used, the two usernames, you could just""" start="00:07:07.960" video="qanda-p-search" id="subtitle"]]
[[!template text="""set up the""" start="00:07:12.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""two priors. One for the old user's email, and then just add""" start="00:07:14.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""another prior for the new user's email. And then that would""" start="00:07:19.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""be a way to just get both of those set up. So that's kind of a""" start="00:07:24.080" video="qanda-p-search" id="subtitle"]]
[[!template text="""running theme throughout p-search is that It's made to be""" start="00:07:29.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""very flexible and very kind of like Lego block ish kind of""" start="00:07:32.960" video="qanda-p-search" id="subtitle"]]
[[!template text="""like you can just, you know, if you need, you know, if""" start="00:07:36.240" video="qanda-p-search" id="subtitle"]]
[[!template text="""something doesn't meet your needs, you know, it's easy to""" start="00:07:39.960" video="qanda-p-search" id="subtitle"]]
[[!template text="""put pieces in, create new components of the search""" start="00:07:41.920" video="qanda-p-search" id="subtitle"]]
[[!template text="""engine. Let's see, a cool powerful grep &quot;Rak&quot; to maybe have""" start="00:07:45.960" video="qanda-p-search" id="subtitle"]]
[[!template text="""some good ideas. I have searches record code while""" start="00:07:51.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""searching. Okay. So. Okay, that's interesting. I'll have""" start="00:07:58.840" video="qanda-p-search" id="subtitle"]]
[[!template text="""to look into this""" start="00:08:04.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""tool. I haven't seen that. I do kind of keep my eyes out for""" start="00:08:05.240" video="qanda-p-search" id="subtitle"]]
[[!template text="""these kind of things. One thing I have seen that was kind of""" start="00:08:15.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""that, I mean, looked interesting was kind of like AST, like""" start="00:08:18.200" video="qanda-p-search" id="subtitle"]]
[[!template text="""the treesitter, the treesitter grep tools. But like, you""" start="00:08:24.440" video="qanda-p-search" id="subtitle"]]
[[!template text="""can grep for a string in the language itself. So that's""" start="00:08:29.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""something I think would be cool to implement either,""" start="00:08:35.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""because I mean, there's treesitter in Emacs, so it's""" start="00:08:37.960" video="qanda-p-search" id="subtitle"]]
[[!template text="""possible to do a new list. If not, there are those kind of like""" start="00:08:41.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""treesitter. So that's, that's something that I think would""" start="00:08:44.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""be cool to incorporate.""" start="00:08:47.720" video="qanda-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Q: Have you thought about integrating results from using cosine similarity with a deep-learning based vector embedding?""" start="00:08:50.720" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""Let's see. Have you thought about integrating results from""" start="00:08:50.720" video="qanda-p-search" id="subtitle"]]
[[!template text="""using cosine similarity with a deep learning based vector""" start="00:08:58.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""embedding? Yeah, exactly. So yeah, this kind of goes back to""" start="00:09:01.000" video="qanda-p-search" id="subtitle"]]
[[!template text="""the topic before it. Definitely the whole semantic search""" start="00:09:06.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""with vector embeddings, that's something that, I mean, it""" start="00:09:09.760" video="qanda-p-search" id="subtitle"]]
[[!template text="""would be actually kind of trivial to implement that in""" start="00:09:12.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""p-search. But like I said, computing the cosine similarity""" start="00:09:15.480" video="qanda-p-search" id="subtitle"]]
[[!template text="""in elisp, it's probably too slow.""" start="00:09:20.240" video="qanda-p-search" id="subtitle"]]
[[!template text="""And then also there's a whole question of how do you get the embeddings?""" start="00:09:25.960" video="qanda-p-search" id="subtitle"]]
[[!template text="""Like, how do you get the system running locally on your""" start="00:09:34.880" video="qanda-p-search" id="subtitle"]]
[[!template text="""machine if you want to run it that or, I mean, so that's""" start="00:09:36.920" video="qanda-p-search" id="subtitle"]]
[[!template text="""actually another kind of aspect that I need to look into.""" start="00:09:41.240" video="qanda-p-search" id="subtitle"]]
[[!template text="""Okay, so let's see.""" start="00:09:48.880" video="qanda-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Q: Is it possible to save/bookmark searches or search templates so they can be used again and again?""" start="00:10:01.940" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""Okay, next question. Let's see. I'm sorry if this has been""" start="00:10:01.940" video="qanda-p-search" id="subtitle"]]
[[!template text="""covered. Is it possible to save/bookmark searches or search""" start="00:10:06.320" video="qanda-p-search" id="subtitle"]]
[[!template text="""templates so they can be used again and again? Exactly. So""" start="00:10:09.080" video="qanda-p-search" id="subtitle"]]
[[!template text="""just recently I added bookmarking capabilities. So""" start="00:10:14.560" video="qanda-p-search" id="subtitle"]]
[[!template text="""you can essentially just bookmark whatever search session you""" start="00:10:18.200" video="qanda-p-search" id="subtitle"]]
[[!template text="""have. And yeah, and it's just, it was just a bookmark. You can""" start="00:10:21.120" video="qanda-p-search" id="subtitle"]]
[[!template text="""just open and just like reopen that, rerun that search from""" start="00:10:26.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""where you left off. So there's that. And then also, I tried to""" start="00:10:29.840" video="qanda-p-search" id="subtitle"]]
[[!template text="""set this up so that there is a one-to-one mapping of a Lisp""" start="00:10:36.120" video="qanda-p-search" id="subtitle"]]
[[!template text="""object to the search session. So from every search session""" start="00:10:40.560" video="qanda-p-search" id="subtitle"]]
[[!template text="""you make, you should be able to get a, there's a command to do""" start="00:10:44.760" video="qanda-p-search" id="subtitle"]]
[[!template text="""this, to get a data representation of the search. So it would""" start="00:10:49.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""just be like some plist. All you have to do is just take that""" start="00:10:55.200" video="qanda-p-search" id="subtitle"]]
[[!template text="""plist, call this function p-search-setup-buffer with that""" start="00:11:00.080" video="qanda-p-search" id="subtitle"]]
[[!template text="""data. And then that function should set up the session as you""" start="00:11:04.480" video="qanda-p-search" id="subtitle"]]
[[!template text="""left off. So then like, you know, you could make your""" start="00:11:09.120" video="qanda-p-search" id="subtitle"]]
[[!template text="""commands easy. You can make custom search commands super""" start="00:11:12.600" video="qanda-p-search" id="subtitle"]]
[[!template text="""easy. You just get the data representation of that search,""" start="00:11:15.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""find what pieces you want the user to be able to, you know, the""" start="00:11:18.920" video="qanda-p-search" id="subtitle"]]
[[!template text="""search term, make that a parameter in the""" start="00:11:22.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""command, in the interactive code. So you'd have like""" start="00:11:26.334" video="qanda-p-search" id="subtitle"]]
[[!template text="""print on top and then there you go. You have,""" start="00:11:29.080" video="qanda-p-search" id="subtitle"]]
[[!template text="""you have a command to do the search""" start="00:11:31.907" video="qanda-p-search" id="subtitle"]]
[[!template text="""just like just right there. So, so""" start="00:11:34.328" video="qanda-p-search" id="subtitle"]]
[[!template text="""there's a lot of those things and there's a lot more that""" start="00:11:35.760" video="qanda-p-search" id="subtitle"]]
[[!template text="""could be done. Like maybe having, you know, there's kind of""" start="00:11:38.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""in the works and like thinking about having groups of groups""" start="00:11:41.000" video="qanda-p-search" id="subtitle"]]
[[!template text="""of these things, like maybe you can set up like, Oh, I always""" start="00:11:45.480" video="qanda-p-search" id="subtitle"]]
[[!template text="""add these three criteria together. So I, you know, maybe I""" start="00:11:48.960" video="qanda-p-search" id="subtitle"]]
[[!template text="""can make a preset out of these and make them easy, easily""" start="00:11:51.920" video="qanda-p-search" id="subtitle"]]
[[!template text="""addable. So yeah. A lot of things like that are, you know, I'm""" start="00:11:54.560" video="qanda-p-search" id="subtitle"]]
[[!template text="""thinking about a lot of things about that, so.""" start="00:11:58.080" video="qanda-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Q: You mentioned about candidate generators. Could you explain about to what the score is assigned to?""" start="00:12:02.800" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""Okay, so next question. You mentioned about candidate""" start="00:12:02.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""generators. Could you explain about what the score is""" start="00:12:06.080" video="qanda-p-search" id="subtitle"]]
[[!template text="""assigned to? Is this to a line or whatever the candidate""" start="00:12:08.480" video="qanda-p-search" id="subtitle"]]
[[!template text="""generates? How does it work with our junior demo? Okay,""" start="00:12:12.200" video="qanda-p-search" id="subtitle"]]
[[!template text="""yeah, so this is a, this is, so actually I had to implement, I""" start="00:12:17.080" video="qanda-p-search" id="subtitle"]]
[[!template text="""had to rewrite p-search just to get this part right. So the""" start="00:12:21.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""candidate generator generates documents. Documents have""" start="00:12:26.720" video="qanda-p-search" id="subtitle"]]
[[!template text="""properties. So the most notable property is the content""" start="00:12:31.160" video="qanda-p-search" id="subtitle"]]
[[!template text="""property. So essentially what happens is that when you""" start="00:12:36.920" video="qanda-p-search" id="subtitle"]]
[[!template text="""create a file system candidate generator and give it a""" start="00:12:40.600" video="qanda-p-search" id="subtitle"]]
[[!template text="""directory, the code goes into the directory, kind of""" start="00:12:42.880" video="qanda-p-search" id="subtitle"]]
[[!template text="""recursively goes through all the directories, and""" start="00:12:45.920" video="qanda-p-search" id="subtitle"]]
[[!template text="""generates a candidate, which is just like a simple list""" start="00:12:49.080" video="qanda-p-search" id="subtitle"]]
[[!template text="""form. It's saying, this is a file, the file path is this. So""" start="00:12:51.560" video="qanda-p-search" id="subtitle"]]
[[!template text="""that's the document ID. So this is saying, this is a file,""" start="00:12:55.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""it's a file, and its file path is this. And so from that, you""" start="00:13:00.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""get all of the different properties, the sub properties. If""" start="00:13:05.560" video="qanda-p-search" id="subtitle"]]
[[!template text="""you're given that, you know how to get the content. If you're""" start="00:13:09.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""given that, you know how to... So all these properties come""" start="00:13:11.720" video="qanda-p-search" id="subtitle"]]
[[!template text="""out. And then also the candidate generator is the thing that""" start="00:13:15.440" video="qanda-p-search" id="subtitle"]]
[[!template text="""knows how best to search for the terms. So for example, there""" start="00:13:18.840" video="qanda-p-search" id="subtitle"]]
[[!template text="""is a buffer candidate generator. What that does is it just""" start="00:13:25.440" video="qanda-p-search" id="subtitle"]]
[[!template text="""puts all your buffers as search candidates. So obviously""" start="00:13:29.160" video="qanda-p-search" id="subtitle"]]
[[!template text="""you can't, you can't run ripgrep on buffers like you can't you""" start="00:13:34.760" video="qanda-p-search" id="subtitle"]]
[[!template text="""can't do that, you can't run ripgrep on just like yeah just""" start="00:13:37.880" video="qanda-p-search" id="subtitle"]]
[[!template text="""just like buffers that don't have files attached or, for""" start="00:13:41.760" video="qanda-p-search" id="subtitle"]]
[[!template text="""example, maybe there's like an internet search candidate""" start="00:13:44.320" video="qanda-p-search" id="subtitle"]]
[[!template text="""generator, like a web crawler thing. You just imagine it""" start="00:13:47.560" video="qanda-p-search" id="subtitle"]]
[[!template text="""goes to a website, kind of crawls all the links and all that,""" start="00:13:51.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""and then just gets your web pages for the candidates.""" start="00:13:55.760" video="qanda-p-search" id="subtitle"]]
[[!template text="""Obviously, you can't use ripgrep for that either. So, every""" start="00:13:58.120" video="qanda-p-search" id="subtitle"]]
[[!template text="""candidate generator knows how best to search for the terms""" start="00:14:01.160" video="qanda-p-search" id="subtitle"]]
[[!template text="""of what candidate it's generating. So, the file system""" start="00:14:04.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""candidate generator will say, okay, I have a base""" start="00:14:08.920" video="qanda-p-search" id="subtitle"]]
[[!template text="""directory. So, if you ask me, the file system candidate""" start="00:14:12.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""generator, how to get the terms, it knows it's set up to use""" start="00:14:17.240" video="qanda-p-search" id="subtitle"]]
[[!template text="""ripgrep. And so, it runs ripgrep, and so then it goes""" start="00:14:21.240" video="qanda-p-search" id="subtitle"]]
[[!template text="""through, it runs the command, gets the counts, and then""" start="00:14:25.200" video="qanda-p-search" id="subtitle"]]
[[!template text="""store those counts. So, the lines have nothing. At this""" start="00:14:29.440" video="qanda-p-search" id="subtitle"]]
[[!template text="""point, the lines have nothing. There's no notion of lines at""" start="00:14:32.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""all. It's just document, document ID with the amount of""" start="00:14:36.000" video="qanda-p-search" id="subtitle"]]
[[!template text="""times it matched. And that's all you need to run this BM25""" start="00:14:40.560" video="qanda-p-search" id="subtitle"]]
[[!template text="""algorithm. But then when you get the top results, you""" start="00:14:43.840" video="qanda-p-search" id="subtitle"]]
[[!template text="""obviously want to see the lines that matched. And so there's""" start="00:14:47.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""another thing, another method to kind of get the exact""" start="00:14:51.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""thing, to kind of match out the particular lines. And so""" start="00:14:56.400" video="qanda-p-search" id="subtitle"]]
[[!template text="""that's a separate mechanism. And that can be done in Elist,""" start="00:15:00.560" video="qanda-p-search" id="subtitle"]]
[[!template text="""because if you're not displaying, that's kind of a design""" start="00:15:03.160" video="qanda-p-search" id="subtitle"]]
[[!template text="""decision of P-Search, is that it only displays like maybe 10""" start="00:15:05.720" video="qanda-p-search" id="subtitle"]]
[[!template text="""or 20. It doesn't display all the results. So you can have""" start="00:15:09.320" video="qanda-p-search" id="subtitle"]]
[[!template text="""Elist just go crazy with just like highlighting things,""" start="00:15:12.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""picking the best kind of pieces to show. So yeah, that's how""" start="00:15:16.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""that's set up.""" start="00:15:22.720" video="qanda-p-search" id="subtitle"]]
[[!template text="""So, here's perhaps a good moment for me to just jump in and""" start="00:15:27.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""comment that in a minute or so we will break away with the live""" start="00:15:38.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""stream to give people an hour of less content to make sure""" start="00:15:42.080" video="qanda-p-search" id="subtitle"]]
[[!template text="""everybody goes and takes their lunch and break a little bit.""" start="00:15:47.440" video="qanda-p-search" id="subtitle"]]
[[!template text="""But if you would like to keep going in here, Love to love to""" start="00:15:50.640" video="qanda-p-search" id="subtitle"]]
[[!template text="""take as many questions. And, of course, we will include""" start="00:15:55.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""that all when we publish the Q and A. Sounds good. Yeah, I'll go""" start="00:15:59.840" video="qanda-p-search" id="subtitle"]]
[[!template text="""and stick around on the stream as we cut away, as we've got a""" start="00:16:06.160" video="qanda-p-search" id="subtitle"]]
[[!template text="""little video surprise we've all prepared to play, just some""" start="00:16:12.200" video="qanda-p-search" id="subtitle"]]
[[!template text="""comments from an Emacs user dated in 2020 or something like""" start="00:16:16.000" video="qanda-p-search" id="subtitle"]]
[[!template text="""this. I forget the detail. Thank you again so much, Zac, for""" start="00:16:19.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""your fascinating talk.""" start="00:16:29.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""Yeah, so, okay.""" start="00:16:30.960" video="qanda-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Q: easy filtering with orderless - did this or something like this help or infulce the design of psearch?""" start="00:16:32.302" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""This makes me really think about the""" start="00:16:32.302" video="qanda-p-search" id="subtitle"]]
[[!template text="""emergent workflows with Denote and easy filtering with""" start="00:16:33.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""orderless.""" start="00:16:36.000" video="qanda-p-search" id="subtitle"]]
[[!template text="""Did this or something like this help influence the design of""" start="00:16:36.640" video="qanda-p-search" id="subtitle"]]
[[!template text="""p-search? Yeah, exactly. So, I mean, yeah, I mean, there's""" start="00:16:42.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""just so many different searches. Like, it's just kind of""" start="00:16:47.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""mind-boggling. Like, you could search for whatever you want""" start="00:16:49.920" video="qanda-p-search" id="subtitle"]]
[[!template text="""on your computer. Like, there's just so much, like, you""" start="00:16:52.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""can't, yeah, you can't just like, you can't just like hard""" start="00:16:54.600" video="qanda-p-search" id="subtitle"]]
[[!template text="""code any of these things. It's all malleable. Like maybe""" start="00:17:01.200" video="qanda-p-search" id="subtitle"]]
[[!template text="""somebody wants to search these directories. And so, yeah,""" start="00:17:04.160" video="qanda-p-search" id="subtitle"]]
[[!template text="""like""" start="00:17:09.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""exactly like that use case of having a directory of files""" start="00:17:10.640" video="qanda-p-search" id="subtitle"]]
[[!template text="""where""" start="00:17:18.400" video="qanda-p-search" id="subtitle"]]
[[!template text="""they contain your personal knowledge management system.""" start="00:17:18.960" video="qanda-p-search" id="subtitle"]]
[[!template text="""Yeah, that use case definitely was at the top of my mind.""" start="00:17:25.920" video="qanda-p-search" id="subtitle"]]
[[!template text="""Let's see.""" start="00:17:33.480" video="qanda-p-search" id="subtitle"]]
[[!template text="""Let's see, so Git covers the multiple names thing itself.""" start="00:17:35.880" video="qanda-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Q: Notmuch with the p-search UI""" start="00:17:56.960" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""Okay, yeah,""" start="00:17:56.960" video="qanda-p-search" id="subtitle"]]
[[!template text="""so something about notmuch with p-search UI. Actually,""" start="00:18:00.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""interestingly, I think notmuch is, I haven't used it""" start="00:18:09.600" video="qanda-p-search" id="subtitle"]]
[[!template text="""myself, but that's the, email something about yeah so i mean""" start="00:18:16.400" video="qanda-p-search" id="subtitle"]]
[[!template text="""this is like these things are just like these these kind of""" start="00:18:22.760" video="qanda-p-search" id="subtitle"]]
[[!template text="""extensions could kind of go go forever but one thing i""" start="00:18:25.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""thought about is like i use mu4e for email""" start="00:18:30.480" video="qanda-p-search" id="subtitle"]]
[[!template text="""and that uses a full-fledged index. And so having""" start="00:18:33.370" video="qanda-p-search" id="subtitle"]]
[[!template text="""some method to kind of reach into these different systems""" start="00:18:41.120" video="qanda-p-search" id="subtitle"]]
[[!template text="""and kind of be kind of like a front end for this.""" start="00:18:44.880" video="qanda-p-search" id="subtitle"]]
[[!template text="""Another thing is maybe SQL database.""" start="00:18:47.939" video="qanda-p-search" id="subtitle"]]
[[!template text="""You can create a candidate generator from a SQLite query""" start="00:18:52.001" video="qanda-p-search" id="subtitle"]]
[[!template text="""and then... yeah...""" start="00:18:55.824" video="qanda-p-search" id="subtitle"]]
[[!template text="""I've had tons of ideas of different things you could""" start="00:19:02.583" video="qanda-p-search" id="subtitle"]]
[[!template text="""incorporate into the system. Slowly,""" start="00:19:05.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""they're being implemented. Just recently, I implemented""" start="00:19:09.560" video="qanda-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Info""" start="00:19:13.600" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""an info file candidate generator. So it lists out all the""" start="00:19:13.600" video="qanda-p-search" id="subtitle"]]
[[!template text="""info files, and then it creates a candidate for each of the""" start="00:19:17.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""info nodes. So it turns out, yeah, I mean, it works pretty, I""" start="00:19:21.560" video="qanda-p-search" id="subtitle"]]
[[!template text="""mean, just as well as Google. So I'm up for my own testing.""" start="00:19:26.760" video="qanda-p-search" id="subtitle"]]
[[!template text="""Let's see, you can search a buffer using ripgrep feeding in""" start="00:19:32.560" video="qanda-p-search" id="subtitle"]]
[[!template text="""as standard in to the ripgrep process, can't you? Yep, yeah,""" start="00:19:40.000" video="qanda-p-search" id="subtitle"]]
[[!template text="""you can definitely search a buffer that way. So, yeah, I""" start="00:19:44.760" video="qanda-p-search" id="subtitle"]]
[[!template text="""mean, based off of I mean, if this, yeah, so one thing that""" start="00:19:50.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""came up is that the system wants, I mean, I wanted the system""" start="00:19:56.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""to be able to search a lot of different things. And so it came""" start="00:19:59.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""up that I had, you know, implementing,""" start="00:20:03.560" video="qanda-p-search" id="subtitle"]]
[[!template text="""doing these search things, having an Elist""" start="00:20:06.000" video="qanda-p-search" id="subtitle"]]
[[!template text="""implementation, despite it being slow, would be""" start="00:20:10.160" video="qanda-p-search" id="subtitle"]]
[[!template text="""necessary. So like anything that isn't represented as a""" start="00:20:13.080" video="qanda-p-search" id="subtitle"]]
[[!template text="""file, Elisp, there's a mechanism in p-search to search for""" start="00:20:17.400" video="qanda-p-search" id="subtitle"]]
[[!template text="""it.""" start="00:20:21.640" video="qanda-p-search" id="subtitle"]]
[[!template text="""So, yeah, so having that redundancy kind of lets you get into""" start="00:20:23.320" video="qanda-p-search" id="subtitle"]]
[[!template text="""the, you know, using kind of ripgrep for the big scale""" start="00:20:29.720" video="qanda-p-search" id="subtitle"]]
[[!template text="""things. But then when you get to the individual file, you""" start="00:20:32.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""know, just going back to Elisp to kind of get the finer""" start="00:20:37.760" video="qanda-p-search" id="subtitle"]]
[[!template text="""details seems to, you know, seems to end up working pretty""" start="00:20:41.000" video="qanda-p-search" id="subtitle"]]
[[!template text="""well.""" start="00:20:47.200" video="qanda-p-search" id="subtitle"]]
[[!template text="""Thank you all for listening. Yeah, sounds like we're about""" start="00:21:04.240" video="qanda-p-search" id="subtitle"]]
[[!template text="""out of questions. Hi, Zacc. I have a question or still a""" start="00:21:27.400" video="qanda-p-search" id="subtitle"]]
[[!template text="""question. I just want to thank everybody one more time for""" start="00:21:31.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""their participation, especially you for speaking, Zack. I""" start="00:21:34.120" video="qanda-p-search" id="subtitle"]]
[[!template text="""look forward to playing with p-search myself. Thank you.""" start="00:21:37.720" video="qanda-p-search" id="subtitle"]]
[[!template text="""Yeah, there might be one last question. Is there someone?""" start="00:21:41.240" video="qanda-p-search" id="subtitle"]]
[[!template text="""Yes, there is. I don't know if you can understand me, but""" start="00:21:44.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""thank you for making this lovely thing""" start="00:21:48.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""I feel inspired to try it out and I'm thinking about how to""" start="00:21:50.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""integrate it because it sounds modular and nicely thought""" start="00:21:57.920" video="qanda-p-search" id="subtitle"]]
[[!template text="""out. One small question. Have you thought about Project L""" start="00:22:04.200" video="qanda-p-search" id="subtitle"]]
[[!template text="""integration? And then I have a little bigger question about""" start="00:22:09.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""the interface.""" start="00:22:13.720" video="qanda-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""project.el integration""" start="00:22:14.880" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""Yeah, project.el integration, it's used in a couple of ways.""" start="00:22:14.880" video="qanda-p-search" id="subtitle"]]
[[!template text="""It's kind of used to kind of as like kind of like a default.""" start="00:22:20.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""This is the directory I want to search for the default""" start="00:22:25.720" video="qanda-p-search" id="subtitle"]]
[[!template text="""p-search command. It does, yeah, it kind of goes off of""" start="00:22:31.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""project.el. If there is a project, it kind of says, okay, this,""" start="00:22:33.640" video="qanda-p-search" id="subtitle"]]
[[!template text="""I want to search this project. And so it kind of, it used that""" start="00:22:37.120" video="qanda-p-search" id="subtitle"]]
[[!template text="""as a default. So there's that. Because I use the project-grep""" start="00:22:40.320" video="qanda-p-search" id="subtitle"]]
[[!template text="""or git-grep search a lot and maybe this is a better solution to""" start="00:22:46.120" video="qanda-p-search" id="subtitle"]]
[[!template text="""the search and the interface you have right now for the""" start="00:22:50.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""search results.""" start="00:22:55.320" video="qanda-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Q: How happy are you with the interface?""" start="00:22:56.477" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""How happy are you with it and have you""" start="00:22:56.477" video="qanda-p-search" id="subtitle"]]
[[!template text="""thought about improving or have you ideas for""" start="00:22:58.720" video="qanda-p-search" id="subtitle"]]
[[!template text="""improvements? Yeah, well actually what you see in the demo""" start="00:23:02.600" video="qanda-p-search" id="subtitle"]]
[[!template text="""in the video isn't... There's actually, there is an""" start="00:23:06.640" video="qanda-p-search" id="subtitle"]]
[[!template text="""improvement in the current code. Basically, what it""" start="00:23:09.200" video="qanda-p-search" id="subtitle"]]
[[!template text="""does is it scans there's the current default as it scans""" start="00:23:13.960" video="qanda-p-search" id="subtitle"]]
[[!template text="""the entire file for all of the searches.""" start="00:23:17.240" video="qanda-p-search" id="subtitle"]]
[[!template text="""It finds the window that that has the highest score. So it kind""" start="00:23:20.055" video="qanda-p-search" id="subtitle"]]
[[!template text="""of goes through entire file and just says... And it kind of finds""" start="00:23:25.960" video="qanda-p-search" id="subtitle"]]
[[!template text="""like the piece of the section of text that has the most""" start="00:23:29.600" video="qanda-p-search" id="subtitle"]]
[[!template text="""matches with the terms that score the best. So it's, I mean,""" start="00:23:33.480" video="qanda-p-search" id="subtitle"]]
[[!template text="""that section is pretty good. I mean, that, so yeah, that,""" start="00:23:37.920" video="qanda-p-search" id="subtitle"]]
[[!template text="""that ends up working pretty well. So I mean, in terms of other""" start="00:23:40.120" video="qanda-p-search" id="subtitle"]]
[[!template text="""UI stuff, there's, there's tons, there's tons more that""" start="00:23:44.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""could be done, like, especially like debug ability or like""" start="00:23:46.880" video="qanda-p-search" id="subtitle"]]
[[!template text="""introspection. Like, so this, this result, like, for""" start="00:23:50.160" video="qanda-p-search" id="subtitle"]]
[[!template text="""example, this result ranks really high. Maybe you don't""" start="00:23:53.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""know why though. It's like, because of this, this text query""" start="00:23:57.120" video="qanda-p-search" id="subtitle"]]
[[!template text="""arrow, was it because of this criteria? I think""" start="00:24:01.720" video="qanda-p-search" id="subtitle"]]
[[!template text="""there's some UI elements that could kind of help the user""" start="00:24:04.480" video="qanda-p-search" id="subtitle"]]
[[!template text="""understand why results are scoring high or low. So that's""" start="00:24:09.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""definitely... And that makes a lot of sense to me. You know, a""" start="00:24:12.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""lot of it is demystifying, like understanding what you're""" start="00:24:15.640" video="qanda-p-search" id="subtitle"]]
[[!template text="""learning better and not just finding the right thing. A lot""" start="00:24:19.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""of it is, you know, kind of exploring your data. I love that.""" start="00:24:22.720" video="qanda-p-search" id="subtitle"]]
[[!template text="""Thanks. Okay. I'm not trying to hurry us through either by""" start="00:24:26.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""any stretch. I would be happy to see this be a conversation.""" start="00:24:31.640" video="qanda-p-search" id="subtitle"]]
[[!template text="""I also want to be considerate of your time. And I also wanted to""" start="00:24:36.600" video="qanda-p-search" id="subtitle"]]
[[!template text="""make a quick shout out to everybody who's been updating and""" start="00:24:42.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""helping us capture the questions and the comments and the""" start="00:24:45.480" video="qanda-p-search" id="subtitle"]]
[[!template text="""etherpad. That's just a big help to the extent that people""" start="00:24:50.480" video="qanda-p-search" id="subtitle"]]
[[!template text="""are jumping in there and you know, revising and extending""" start="00:24:53.640" video="qanda-p-search" id="subtitle"]]
[[!template text="""and just doing the best job we can to capture all the""" start="00:24:57.200" video="qanda-p-search" id="subtitle"]]
[[!template text="""thoughtful remarks.""" start="00:24:59.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""Yeah, thank you, Zac. I'm not too sure what to ask anymore,""" start="00:25:00.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""but yes, would love to try it out now. Yeah, I mean,""" start="00:25:14.840" video="qanda-p-search" id="subtitle"]]
[[!template text="""definitely feel free to...""" start="00:25:20.560" video="qanda-p-search" id="subtitle"]]
[[!template text="""any feedback, here's my mail, or issues...""" start="00:25:22.077" video="qanda-p-search" id="subtitle"]]
[[!template text="""I mean I'm happy to get any any feedback. It's""" start="00:25:25.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""still in the early stages, so still kind of a lot of""" start="00:25:29.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""documentation that needs to be writing. There's a lot.""" start="00:25:31.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""There's a lot on the roadmap, but yeah, I mean, hopefully, I""" start="00:25:35.600" video="qanda-p-search" id="subtitle"]]
[[!template text="""could even publish this to ELPA and have a nice""" start="00:25:38.440" video="qanda-p-search" id="subtitle"]]
[[!template text="""manual so yeah hopefully yeah those come soon. Epic.""" start="00:25:42.760" video="qanda-p-search" id="subtitle"]]
[[!template text="""That sounds great, yes.""" start="00:25:47.728" video="qanda-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""gptel""" start="00:25:50.280" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""The ability to save your searches kind of reminds me of like""" start="00:25:50.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""the gptel package for the AI, where you can save searches,""" start="00:25:59.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""which makes it feel a lot more different. And yeah, we don't""" start="00:26:05.120" video="qanda-p-search" id="subtitle"]]
[[!template text="""have something for that with search, but yeah, that's a""" start="00:26:10.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""whole different dynamic where it's like, okay, yeah, and""" start="00:26:14.840" video="qanda-p-search" id="subtitle"]]
[[!template text="""makes it a unique tool that is, I guess would be unique to""" start="00:26:19.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""Emacs where you don't see that with like this AI package""" start="00:26:24.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""where the gptel is kind of unique because it's not just throw""" start="00:26:28.080" video="qanda-p-search" id="subtitle"]]
[[!template text="""away. It's how did I get this? How did I search for it? And be an""" start="00:26:31.120" video="qanda-p-search" id="subtitle"]]
[[!template text="""organic search, kind of like the orderless and vertico""" start="00:26:37.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""and...""" start="00:26:40.320" video="qanda-p-search" id="subtitle"]]
[[!template text="""Yeah, that's a good, I mean, that brings me to another thing""" start="00:26:43.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""in that, so,""" start="00:26:46.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""I mean, you could easily...""" start="00:26:48.240" video="qanda-p-search" id="subtitle"]]
[[!template text="""you could create bridges from p-search to these different""" start="00:26:53.200" video="qanda-p-search" id="subtitle"]]
[[!template text="""other packages, like, for example, kind of a RAG search,""" start="00:26:57.400" video="qanda-p-search" id="subtitle"]]
[[!template text="""like there's this RAG, there's this thing called a RAG""" start="00:27:01.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""workflow, which is kind of popular these days. It's like""" start="00:27:04.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""retrieval augmented generation. So, you do a search and""" start="00:27:06.880" video="qanda-p-search" id="subtitle"]]
[[!template text="""then based off the search results you get, then you pass""" start="00:27:11.640" video="qanda-p-search" id="subtitle"]]
[[!template text="""those into LLM. So, the cool thing is that like you could use""" start="00:27:14.200" video="qanda-p-search" id="subtitle"]]
[[!template text="""p-search for the retrieval. And so you could even like, I""" start="00:27:20.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""mean, you could even ask an LM to come up with the search terms""" start="00:27:25.120" video="qanda-p-search" id="subtitle"]]
[[!template text="""and then have it search. There's no""" start="00:27:28.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""programmatical interface now to do this exact workflow.""" start="00:27:32.080" video="qanda-p-search" id="subtitle"]]
[[!template text="""But I mean, there's another kind of direction I'm starting""" start="00:27:35.440" video="qanda-p-search" id="subtitle"]]
[[!template text="""to think about. So like you could have maybe""" start="00:27:39.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""a question answer kind of workflow where it does""" start="00:27:43.200" video="qanda-p-search" id="subtitle"]]
[[!template text="""like an initial search for the terms and then you get the top""" start="00:27:47.760" video="qanda-p-search" id="subtitle"]]
[[!template text="""results and then you can put that through maybe gptel or all""" start="00:27:51.640" video="qanda-p-search" id="subtitle"]]
[[!template text="""these other different systems. So that's, and that seems""" start="00:27:57.200" video="qanda-p-search" id="subtitle"]]
[[!template text="""like a promising thing. And then another thing is like,""" start="00:27:59.760" video="qanda-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Saving a search""" start="00:28:01.480" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""well, you mentioned the ability to save a search.""" start="00:28:01.480" video="qanda-p-search" id="subtitle"]]
[[!template text="""One thing I've noticed""" start="00:28:10.595" video="qanda-p-search" id="subtitle"]]
[[!template text="""kind of like with the DevOps workflows is, I'll write a""" start="00:28:11.480" video="qanda-p-search" id="subtitle"]]
[[!template text="""CLI command that I do, or like a calculator command. Then I end""" start="00:28:15.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""up in the org mode document, write what I wrote, had the""" start="00:28:20.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""results in there, and then I'll go back to that.""" start="00:28:24.000" video="qanda-p-search" id="subtitle"]]
[[!template text="""It's like, oh, this is why, this is that calculation I did""" start="00:28:26.944" video="qanda-p-search" id="subtitle"]]
[[!template text="""and this is why I did it.""" start="00:28:31.967" video="qanda-p-search" id="subtitle"]]
[[!template text="""I'll have run the same tool three different""" start="00:28:34.008" video="qanda-p-search" id="subtitle"]]
[[!template text="""times to get three different answers, if it was like a""" start="00:28:36.960" video="qanda-p-search" id="subtitle"]]
[[!template text="""calculator, for example.""" start="00:28:40.520" video="qanda-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Workflows""" start="00:28:41.800" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""But yeah, that's a very unique feature that isn't seen and""" start="00:28:41.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""will make me look at it and see about integrating it into my""" start="00:28:49.320" video="qanda-p-search" id="subtitle"]]
[[!template text="""workflow. Yeah, I think you get on some interesting, you""" start="00:28:53.960" video="qanda-p-search" id="subtitle"]]
[[!template text="""know, kind of what makes Emacs really unique there and how""" start="00:28:59.080" video="qanda-p-search" id="subtitle"]]
[[!template text="""to... interesting kind of ways to exploit""" start="00:29:03.160" video="qanda-p-search" id="subtitle"]]
[[!template text="""Emacs to learn in the problem. I'm seeing a number of""" start="00:29:07.400" video="qanda-p-search" id="subtitle"]]
[[!template text="""ways you're getting at that. For example, if I think about""" start="00:29:12.440" video="qanda-p-search" id="subtitle"]]
[[!template text="""like an automation workflow, and there's just a million""" start="00:29:15.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""we'll say, assumptions that are baked into a search""" start="00:29:19.000" video="qanda-p-search" id="subtitle"]]
[[!template text="""product, so to speak, like represented by a Google search or""" start="00:29:22.720" video="qanda-p-search" id="subtitle"]]
[[!template text="""Bing or what have you. And then as I unpack that and repack it""" start="00:29:26.720" video="qanda-p-search" id="subtitle"]]
[[!template text="""from an Emacs workflow standpoint, thinking about, well,""" start="00:29:31.640" video="qanda-p-search" id="subtitle"]]
[[!template text="""first of all, what is the yak I'm shaving? And then also, what""" start="00:29:35.160" video="qanda-p-search" id="subtitle"]]
[[!template text="""does doing it right mean? How would I reuse this? How would I""" start="00:29:39.080" video="qanda-p-search" id="subtitle"]]
[[!template text="""make the code accessible to others for their own purposes in""" start="00:29:43.760" video="qanda-p-search" id="subtitle"]]
[[!template text="""a free software world kind of way? and all of the different""" start="00:29:47.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""sort of say like orthogonal headspacey kind of things,""" start="00:29:52.440" video="qanda-p-search" id="subtitle"]]
[[!template text="""right? Emacs brings a lot to the table from a search""" start="00:29:57.480" video="qanda-p-search" id="subtitle"]]
[[!template text="""standpoint because I'm going to want to think about. I'm""" start="00:30:00.080" video="qanda-p-search" id="subtitle"]]
[[!template text="""going to want to think about where does the UI come in? Where""" start="00:30:03.720" video="qanda-p-search" id="subtitle"]]
[[!template text="""might the user want to get involved interactively? Where""" start="00:30:07.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""might the user want to get involved declaratively with""" start="00:30:11.400" video="qanda-p-search" id="subtitle"]]
[[!template text="""their configuration, perhaps based on the particular""" start="00:30:14.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""environment where this Emacs is running? And there's just a""" start="00:30:16.920" video="qanda-p-search" id="subtitle"]]
[[!template text="""lot of what Emacs users think about that really applies.""" start="00:30:21.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""I'll use the word again, orthogonally across all my many""" start="00:30:24.880" video="qanda-p-search" id="subtitle"]]
[[!template text="""workflows as an Emacs user. You know, the search is just such""" start="00:30:28.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""a big word. Yeah, that's actually, this exact point I was""" start="00:30:33.240" video="qanda-p-search" id="subtitle"]]
[[!template text="""thinking about with this. It's like, I mean, it seems kind of""" start="00:30:38.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""obvious, like just like using grep or something, just like to""" start="00:30:43.160" video="qanda-p-search" id="subtitle"]]
[[!template text="""get search counts, like, okay, you can just run the command,""" start="00:30:46.320" video="qanda-p-search" id="subtitle"]]
[[!template text="""get the term counts and you could just run it through a""" start="00:30:49.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""relatively simple algorithm. to get your search score. So""" start="00:30:51.440" video="qanda-p-search" id="subtitle"]]
[[!template text="""if it's this easy, though, why don't we see this in other... And""" start="00:30:55.960" video="qanda-p-search" id="subtitle"]]
[[!template text="""the results are actually surprisingly good. So why don't we""" start="00:31:01.760" video="qanda-p-search" id="subtitle"]]
[[!template text="""see this anywhere, really? And it occurred to me that just""" start="00:31:06.920" video="qanda-p-search" id="subtitle"]]
[[!template text="""the amount of configuration... The amount of setup you have to""" start="00:31:10.560" video="qanda-p-search" id="subtitle"]]
[[!template text="""do to get it right.""" start="00:31:16.400" video="qanda-p-search" id="subtitle"]]
[[!template text="""It's above this threshold that you need something like""" start="00:31:20.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""Emacs to kind of get pushed through that configuration.""" start="00:31:24.600" video="qanda-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Transient and configuration""" start="00:31:27.857" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""So for example, that's why I rely heavily on transient""" start="00:31:27.857" video="qanda-p-search" id="subtitle"]]
[[!template text="""to set up the system. 'Cause like, if you want to get good""" start="00:31:30.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""search results, you're going to have to configure a lot""" start="00:31:34.120" video="qanda-p-search" id="subtitle"]]
[[!template text="""of stuff. I want this directory. I want this, I don't""" start="00:31:36.080" video="qanda-p-search" id="subtitle"]]
[[!template text="""want this directory. I want these search terms, you know,""" start="00:31:38.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""there's a lot to set up. And in most programs, I mean, they""" start="00:31:41.560" video="qanda-p-search" id="subtitle"]]
[[!template text="""don't have an easy way to, I mean, they'll often try and try to""" start="00:31:48.160" video="qanda-p-search" id="subtitle"]]
[[!template text="""hide all this complexity. Like they say, okay, our users""" start="00:31:52.080" video="qanda-p-search" id="subtitle"]]
[[!template text="""too, you know, we don't want to, you know, we don't wanna, you""" start="00:31:55.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""know, make our users, we don't wanna scare our users with""" start="00:31:59.200" video="qanda-p-search" id="subtitle"]]
[[!template text="""like, complicated search engine configuration. So we're""" start="00:32:02.720" video="qanda-p-search" id="subtitle"]]
[[!template text="""just going to do it all in the background and we're just not""" start="00:32:06.880" video="qanda-p-search" id="subtitle"]]
[[!template text="""going to let the user even know that it's happening. I mean,""" start="00:32:09.080" video="qanda-p-search" id="subtitle"]]
[[!template text="""that's the third time you've made me laugh out loud. Sorry""" start="00:32:12.600" video="qanda-p-search" id="subtitle"]]
[[!template text="""for interrupting you, but yeah, you're just spot on there.""" start="00:32:15.120" video="qanda-p-search" id="subtitle"]]
[[!template text="""You're some people's users. Am I right? like, you know, and""" start="00:32:17.880" video="qanda-p-search" id="subtitle"]]
[[!template text="""also some people's workflows.""" start="00:32:23.000" video="qanda-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Problem space""" start="00:32:25.391" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""And, you know, another case""" start="00:32:25.391" video="qanda-p-search" id="subtitle"]]
[[!template text="""where just like, if you're thinking about Emacs, you either""" start="00:32:27.720" video="qanda-p-search" id="subtitle"]]
[[!template text="""have to pick a tunnel to dive into and be like, no, this is""" start="00:32:30.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""going to be right for my work, or your problem space is never""" start="00:32:33.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""ending in terms of discovering the ways other people are""" start="00:32:37.760" video="qanda-p-search" id="subtitle"]]
[[!template text="""using Emacs and how that breaks your feature. and how that""" start="00:32:40.880" video="qanda-p-search" id="subtitle"]]
[[!template text="""breaks your conceptualization of the problem space,""" start="00:32:45.840" video="qanda-p-search" id="subtitle"]]
[[!template text="""right? Or you just have to get so narrowed down that can""" start="00:32:49.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""actually be hard to find people that are quite understand""" start="00:32:53.560" video="qanda-p-search" id="subtitle"]]
[[!template text="""you, right? You get into the particular, well, it solves""" start="00:32:57.120" video="qanda-p-search" id="subtitle"]]
[[!template text="""these three problems for me. Well, what are these three""" start="00:33:00.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""problems again? And this is a month to unpack. You have Emacs""" start="00:33:03.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""and I don't know, it's like you got a lot of, they all agree is""" start="00:33:08.640" video="qanda-p-search" id="subtitle"]]
[[!template text="""like we're going to use elisp to set variables every emacs""" start="00:33:12.640" video="qanda-p-search" id="subtitle"]]
[[!template text="""package is going to do that we're going to use elisp and have a""" start="00:33:16.560" video="qanda-p-search" id="subtitle"]]
[[!template text="""search in place to put our documentation and like it does""" start="00:33:21.200" video="qanda-p-search" id="subtitle"]]
[[!template text="""also eliminate a lot of confusion and gives a lot of""" start="00:33:25.480" video="qanda-p-search" id="subtitle"]]
[[!template text="""expectations of what they want. One thing that I'm""" start="00:33:32.560" video="qanda-p-search" id="subtitle"]]
[[!template text="""surprised I haven't seen elsewhere is you have the""" start="00:33:37.720" video="qanda-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""consult-omni""" start="00:33:39.856" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""consult-omni package which allows you to search multiple websites""" start="00:33:39.856" video="qanda-p-search" id="subtitle"]]
[[!template text="""simultaneously for multiple web search engines. and put""" start="00:33:44.240" video="qanda-p-search" id="subtitle"]]
[[!template text="""them in one thing and it's like, and then you use orderless.""" start="00:33:49.800" video="qanda-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""orderless""" start="00:33:52.800" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""Why would you use orderless? Because that's what you""" start="00:33:52.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""configured and you know exactly what you wanna use and you""" start="00:33:55.160" video="qanda-p-search" id="subtitle"]]
[[!template text="""use the same font and your same mini buffer and you use all""" start="00:33:57.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""that existing configuration because, well, you're an""" start="00:34:01.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""Emacs user or like you're a command line user. You know how""" start="00:34:04.080" video="qanda-p-search" id="subtitle"]]
[[!template text="""you want these applications to go. You don't want them to be""" start="00:34:07.600" video="qanda-p-search" id="subtitle"]]
[[!template text="""reinvented the wheel 1600 times in 1,600 different ways,""" start="00:34:11.560" video="qanda-p-search" id="subtitle"]]
[[!template text="""you want it to use your mini buffer, your font, your et""" start="00:34:17.400" video="qanda-p-search" id="subtitle"]]
[[!template text="""cetera, et cetera, et cetera. But I haven't""" start="00:34:23.080" video="qanda-p-search" id="subtitle"]]
[[!template text="""seen a website where I can search multiple websites at the""" start="00:34:28.160" video="qanda-p-search" id="subtitle"]]
[[!template text="""same time in something like Emacs before. And it's like,""" start="00:34:32.480" video="qanda-p-search" id="subtitle"]]
[[!template text="""yeah, with my sorting algorithm,""" start="00:34:35.160" video="qanda-p-search" id="subtitle"]]
[[!template text="""Yeah, exactly. Yeah. Yeah. Yeah. I mean, just setting the""" start="00:34:38.320" video="qanda-p-search" id="subtitle"]]
[[!template text="""bar for configuration and set up just like, yeah, you have to""" start="00:34:49.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""have a list. Yeah. I mean, it, it does, obviously it's not,""" start="00:34:57.080" video="qanda-p-search" id="subtitle"]]
[[!template text="""it's not most beginner beginner friendly, but I mean, it,""" start="00:35:02.840" video="qanda-p-search" id="subtitle"]]
[[!template text="""yeah, it definitely widens the amount of the solution space""" start="00:35:05.840" video="qanda-p-search" id="subtitle"]]
[[!template text="""you can have to such problems. Oh my gosh, you used the word""" start="00:35:10.320" video="qanda-p-search" id="subtitle"]]
[[!template text="""solution space. I love it. But on the flip side, it's like,""" start="00:35:14.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""why does Emacs get this consult-omni package? Or let's see,""" start="00:35:18.760" video="qanda-p-search" id="subtitle"]]
[[!template text="""you have elfeed-youtube where it will put a flowing""" start="00:35:25.120" video="qanda-p-search" id="subtitle"]]
[[!template text="""transcript on a YouTube video or you got your package. Why""" start="00:35:30.720" video="qanda-p-search" id="subtitle"]]
[[!template text="""does it get all these applications? And I don't see""" start="00:35:34.480" video="qanda-p-search" id="subtitle"]]
[[!template text="""applications like this as much outside of Emacs. So there's""" start="00:35:39.880" video="qanda-p-search" id="subtitle"]]
[[!template text="""a way that it just makes it easier.""" start="00:35:45.680" video="qanda-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""User interface""" start="00:35:46.268" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""It's because user""" start="00:35:46.268" video="qanda-p-search" id="subtitle"]]
[[!template text="""interface is the, you know, it's the economy stupid of""" start="00:35:47.480" video="qanda-p-search" id="subtitle"]]
[[!template text="""technology, right? If you grab people by the UX, you can sell""" start="00:35:51.440" video="qanda-p-search" id="subtitle"]]
[[!template text="""a million of any product that solves problem that I didn't""" start="00:35:58.120" video="qanda-p-search" id="subtitle"]]
[[!template text="""think technology could solve, or that I didn't think I had""" start="00:36:01.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""the patience to use technology to solve, which is a lot of""" start="00:36:04.640" video="qanda-p-search" id="subtitle"]]
[[!template text="""times what it comes down to. And here exactly is the, you""" start="00:36:08.320" video="qanda-p-search" id="subtitle"]]
[[!template text="""know, the the Emacs sort of conundrum, right? How much time""" start="00:36:12.160" video="qanda-p-search" id="subtitle"]]
[[!template text="""should I spend today updating my Emacs so that tomorrow I can""" start="00:36:16.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""just work more, right? And, you know, I love that little""" start="00:36:20.760" video="qanda-p-search" id="subtitle"]]
[[!template text="""graph of the Emacs learning curve, right? Where it's this""" start="00:36:26.320" video="qanda-p-search" id="subtitle"]]
[[!template text="""concentric, it becomes this concentric spiral, right? The""" start="00:36:29.840" video="qanda-p-search" id="subtitle"]]
[[!template text="""Vim learning curve is like a ladder, right? Or, you know, and""" start="00:36:33.400" video="qanda-p-search" id="subtitle"]]
[[!template text="""And the nano learning curve is like just a flat plane, you""" start="00:36:38.760" video="qanda-p-search" id="subtitle"]]
[[!template text="""know, or a ladder, a vertical ladder or a horizontal ladder.""" start="00:36:44.120" video="qanda-p-search" id="subtitle"]]
[[!template text="""There we go. And the Emacs learning curve is this kind of""" start="00:36:49.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""straight up line until it curves back on itself and""" start="00:36:56.720" video="qanda-p-search" id="subtitle"]]
[[!template text="""eventually spirals. And the more you learn, the harder it is""" start="00:36:59.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""to learn the next thing. And are you really moving forward at""" start="00:37:03.080" video="qanda-p-search" id="subtitle"]]
[[!template text="""all? Like, it just works for me. What a great analogy. And""" start="00:37:05.840" video="qanda-p-search" id="subtitle"]]
[[!template text="""that's my answer, I think. Yeah. You know, it's because""" start="00:37:09.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""we... The spiral is great. Sorry. There are each of these""" start="00:37:15.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""weird little packages that some of us, you know, it solves""" start="00:37:20.200" video="qanda-p-search" id="subtitle"]]
[[!template text="""that one problem and lets us get back to work. And for others,""" start="00:37:26.640" video="qanda-p-search" id="subtitle"]]
[[!template text="""it makes us go, gosh, now that makes me rethink a whole bunch""" start="00:37:29.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""of things because there's... Like I don't even know what""" start="00:37:32.440" video="qanda-p-search" id="subtitle"]]
[[!template text="""you're talking about with some of your conceptualizations""" start="00:37:35.240" video="qanda-p-search" id="subtitle"]]
[[!template text="""of UI. Maybe it comes from Visual Studio, and I've not""" start="00:37:37.720" video="qanda-p-search" id="subtitle"]]
[[!template text="""used that or something. So for you, it's a perfectly normal UX""" start="00:37:41.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""paradigm that you kind of lean on for others. It's like you""" start="00:37:44.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""know occupying some screen space and I don't know what the""" start="00:37:48.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""gadgets do and when I open them up... They're thinking""" start="00:37:52.000" video="qanda-p-search" id="subtitle"]]
[[!template text="""about... they have... they imply their own""" start="00:37:57.760" video="qanda-p-search" id="subtitle"]]
[[!template text="""abstractions let's say logically against a programming""" start="00:38:01.000" video="qanda-p-search" id="subtitle"]]
[[!template text="""language. This would be tree sitter, right. If i'm not used to""" start="00:38:03.640" video="qanda-p-search" id="subtitle"]]
[[!template text="""thinking in terms of an abstract abstract syntax tree, some""" start="00:38:07.000" video="qanda-p-search" id="subtitle"]]
[[!template text="""of the concepts just aren't as natural for me. If i'm used to""" start="00:38:11.720" video="qanda-p-search" id="subtitle"]]
[[!template text="""like emacs at a more fundamental level is, or the old modes""" start="00:38:14.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""right, we're used to them thinking in terms of progressing""" start="00:38:19.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""forward through some text, managing a stack of markers into""" start="00:38:23.480" video="qanda-p-search" id="subtitle"]]
[[!template text="""the text, right? It's a different paradigm. The world""" start="00:38:26.960" video="qanda-p-search" id="subtitle"]]
[[!template text="""changes. Emacs kind of supports it all. That's why all the""" start="00:38:29.240" video="qanda-p-search" id="subtitle"]]
[[!template text="""apps are built there. That's why when you're talking about""" start="00:38:33.560" video="qanda-p-search" id="subtitle"]]
[[!template text="""that spiral. what that hints at is that this is really just a""" start="00:38:37.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""different algorithm that you're transferring out that""" start="00:38:40.760" video="qanda-p-search" id="subtitle"]]
[[!template text="""makes some things a lot easier and some things a lot harder.""" start="00:38:44.240" video="qanda-p-search" id="subtitle"]]
[[!template text="""That's why I was bringing in those three packages, because""" start="00:38:47.320" video="qanda-p-search" id="subtitle"]]
[[!template text="""in some way it's making these search terms with reusable...""" start="00:38:51.720" video="qanda-p-search" id="subtitle"]]
[[!template text="""Let's see... saveable buffers or interactive buffers in a way""" start="00:38:59.709" video="qanda-p-search" id="subtitle"]]
[[!template text="""that... in a way, that is bigger than what I think it should have,""" start="00:39:07.084" video="qanda-p-search" id="subtitle"]]
[[!template text="""especially in comparison to like how many people use""" start="00:39:10.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""YouTube, but I don't see very many YouTube apps that will""" start="00:39:15.480" video="qanda-p-search" id="subtitle"]]
[[!template text="""show Rolling subtitle list that you can click on to move up""" start="00:39:20.320" video="qanda-p-search" id="subtitle"]]
[[!template text="""and down the video""" start="00:39:26.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""even though YouTube's been around for years.""" start="00:39:27.316" video="qanda-p-search" id="subtitle"]]
[[!template text="""Why does Emacs have a very good implementation""" start="00:39:30.140" video="qanda-p-search" id="subtitle"]]
[[!template text="""that was duct taped together? So before I let you respond to""" start="00:39:33.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""that, Zac, let me just say we're coming up on eating up a""" start="00:39:37.160" video="qanda-p-search" id="subtitle"]]
[[!template text="""whole half hour of your lunchtime and thank you for giving us""" start="00:39:40.440" video="qanda-p-search" id="subtitle"]]
[[!template text="""that extra time. But let me just say, let's, you know, if I""" start="00:39:43.880" video="qanda-p-search" id="subtitle"]]
[[!template text="""could ask you to take like up to another five minutes and then""" start="00:39:47.880" video="qanda-p-search" id="subtitle"]]
[[!template text="""I'll try to kick us off here and make sure everybody does""" start="00:39:50.880" video="qanda-p-search" id="subtitle"]]
[[!template text="""remember to eat.""" start="00:39:53.760" video="qanda-p-search" id="subtitle"]]
[[!template text="""Yeah, so yeah, it looks like there's one other question. So""" start="00:39:55.000" video="qanda-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Q: Do you think the Emacs being kinda slow will get in the way of being able to run a lot of scoring algorithms?""" start="00:40:04.120" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""yeah, do you think Emacs being kind of slow will get in the way""" start="00:40:04.120" video="qanda-p-search" id="subtitle"]]
[[!template text="""of being able to run a lot of scoring algorithms? So this is""" start="00:40:06.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""actually a thought I had. Yeah, Emacs, because the code""" start="00:40:11.320" video="qanda-p-search" id="subtitle"]]
[[!template text="""currently kind of does, I mean, it kind of does, it's kind of""" start="00:40:15.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""dumb in a lot of places. a lot of times it just, it does just go""" start="00:40:19.920" video="qanda-p-search" id="subtitle"]]
[[!template text="""through all the files and then just compute some score for""" start="00:40:24.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""them. But I'm surprised that it's, that part actually isn't""" start="00:40:27.600" video="qanda-p-search" id="subtitle"]]
[[!template text="""that slow. Like, like it turns out like, okay, like if you""" start="00:40:30.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""take, for example, Emacs, like the Emacs directory or the""" start="00:40:34.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""Emacs Git repository, or maybe another big Git repository,""" start="00:40:40.760" video="qanda-p-search" id="subtitle"]]
[[!template text="""like you could have an Elisp function enumerate those, and""" start="00:40:44.880" video="qanda-p-search" id="subtitle"]]
[[!template text="""multiply some numbers, maybe multiply 10 numbers""" start="00:40:49.080" video="qanda-p-search" id="subtitle"]]
[[!template text="""together. And that isn't that slow. And that's the bulk of""" start="00:40:52.600" video="qanda-p-search" id="subtitle"]]
[[!template text="""what the only thing that Elisp has to do is just like multiply""" start="00:41:01.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""these numbers. Obviously, if you have to resort to Elisp to""" start="00:41:05.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""search all the files and you have like 10 or 100,000 files,""" start="00:41:11.600" video="qanda-p-search" id="subtitle"]]
[[!template text="""then yeah, Emacs will be slow""" start="00:41:15.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""to manually search, like if you're not using ripgrep or any""" start="00:41:18.760" video="qanda-p-search" id="subtitle"]]
[[!template text="""faster tool and you have, and you have millions of files and""" start="00:41:23.960" video="qanda-p-search" id="subtitle"]]
[[!template text="""yeah, it will be slow. But what I noticed though is like, for""" start="00:41:26.840" video="qanda-p-search" id="subtitle"]]
[[!template text="""example, let's say you want to search for, let's say you want""" start="00:41:30.960" video="qanda-p-search" id="subtitle"]]
[[!template text="""to search like info directory, like info files for Emacs and""" start="00:41:35.120" video="qanda-p-search" id="subtitle"]]
[[!template text="""the Emacs info file and the Elisp info file. So those are two""" start="00:41:40.200" video="qanda-p-search" id="subtitle"]]
[[!template text="""decently sized kind of books, kind of like reference""" start="00:41:46.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""material on Emacs.""" start="00:41:49.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""Relying on Elisp to search both of those together, it's""" start="00:41:50.200" video="qanda-p-search" id="subtitle"]]
[[!template text="""actually pretty, it's actually like almost instant. I""" start="00:41:56.000" video="qanda-p-search" id="subtitle"]]
[[!template text="""mean, it's not slow enough. So I think that's""" start="00:41:58.080" video="qanda-p-search" id="subtitle"]]
[[!template text="""another thing is like scale. Like I think on, on kind of like""" start="00:42:00.640" video="qanda-p-search" id="subtitle"]]
[[!template text="""individual human level scales, I think Elisp can be good""" start="00:42:03.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""enough. if you're going on the scale of like enterprise,""" start="00:42:09.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""like all the repositories, all the Git repositories of an""" start="00:42:14.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""enterprise, then yeah, that scale might, it might, it might""" start="00:42:18.400" video="qanda-p-search" id="subtitle"]]
[[!template text="""be too much. But I think on, on the scale of what most""" start="00:42:21.200" video="qanda-p-search" id="subtitle"]]
[[!template text="""individuals have to deal with on a daily basis, like for""" start="00:42:26.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""example, maybe somebody has some, yeah, I mean, I think it""" start="00:42:30.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""should, I think it hopefully should be enough. And if not,""" start="00:42:34.720" video="qanda-p-search" id="subtitle"]]
[[!template text="""there's always room for optimizations.""" start="00:42:36.960" video="qanda-p-search" id="subtitle"]]
[[!template text="""Yeah, so so I'll redirect you a little bit because based on a""" start="00:42:39.640" video="qanda-p-search" id="subtitle"]]
[[!template text="""couple of things I got into, you know, or if you want to be done""" start="00:42:56.000" video="qanda-p-search" id="subtitle"]]
[[!template text="""be like, you know, give me the hi sign by all means and we can""" start="00:43:00.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""we can shut up shop, but I'm curious, you know, what are what""" start="00:43:04.760" video="qanda-p-search" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Boundary conditions""" start="00:43:08.640" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""are your boundary conditions? What what tends to cause you""" start="00:43:08.640" video="qanda-p-search" id="subtitle"]]
[[!template text="""to to to write something more complicated and what what""" start="00:43:13.080" video="qanda-p-search" id="subtitle"]]
[[!template text="""causes you to? So to work around it with more complex""" start="00:43:16.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""workflow in Emacs terms, like where do you break out the big""" start="00:43:20.960" video="qanda-p-search" id="subtitle"]]
[[!template text="""guns? Just thinking about, like search, we talked about,""" start="00:43:23.560" video="qanda-p-search" id="subtitle"]]
[[!template text="""maybe that's too abstract a question, but just general""" start="00:43:27.920" video="qanda-p-search" id="subtitle"]]
[[!template text="""usage. Search is an example where almost all of us have""" start="00:43:31.440" video="qanda-p-search" id="subtitle"]]
[[!template text="""probably written something to go find something, right?""" start="00:43:36.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""Yeah, I mean, this is a good question. I'm actually of the""" start="00:43:39.600" video="qanda-p-search" id="subtitle"]]
[[!template text="""idea, at my work, for example, I tried to get rid of all, I""" start="00:43:43.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""mean, this is probably a typical Emacs user thing, but like,""" start="00:43:52.000" video="qanda-p-search" id="subtitle"]]
[[!template text="""I mean, I think that just like getting, just like having""" start="00:43:54.880" video="qanda-p-search" id="subtitle"]]
[[!template text="""Emacs expand to whatever it can get into and whatever it can""" start="00:43:59.320" video="qanda-p-search" id="subtitle"]]
[[!template text="""automate, like any task, any, like, just like the more you""" start="00:44:02.560" video="qanda-p-search" id="subtitle"]]
[[!template text="""can kind of get that coded, I actually find that kind of like,""" start="00:44:08.840" video="qanda-p-search" id="subtitle"]]
[[!template text="""I mean, it is kind of like a meme. Like, yeah, I have to""" start="00:44:13.720" video="qanda-p-search" id="subtitle"]]
[[!template text="""configure my Emacs until it's fun, and then I'll do it. But I""" start="00:44:20.440" video="qanda-p-search" id="subtitle"]]
[[!template text="""actually I actually think that maybe for like a normal""" start="00:44:24.200" video="qanda-p-search" id="subtitle"]]
[[!template text="""software developer, if you invest, if you invest, maybe,""" start="00:44:27.960" video="qanda-p-search" id="subtitle"]]
[[!template text="""maybe you have like some spare time after you've done all""" start="00:44:32.000" video="qanda-p-search" id="subtitle"]]
[[!template text="""your tasks, if you invest all that time in, in just like kind""" start="00:44:34.840" video="qanda-p-search" id="subtitle"]]
[[!template text="""of going through all the workflows, all the, you know, just,""" start="00:44:39.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""just getting all of that in, in Emacs, then I think that that,""" start="00:44:42.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""that acts as kind of like a, it kind of like a productivity""" start="00:44:46.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""multiplier. And so. So I found that, I mean, I found to not""" start="00:44:52.040" video="qanda-p-search" id="subtitle"]]
[[!template text="""have those boundaries. I mean, obviously there's things""" start="00:44:56.760" video="qanda-p-search" id="subtitle"]]
[[!template text="""you can't do, like web-based things. I mean, that's a hard""" start="00:44:59.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""boundary, but that's more because... Yeah, there's really""" start="00:45:04.600" video="qanda-p-search" id="subtitle"]]
[[!template text="""not much to do about that. Nobody's written a front-end""" start="00:45:10.200" video="qanda-p-search" id="subtitle"]]
[[!template text="""engine, and too much of the forebrain is occupied with""" start="00:45:13.720" video="qanda-p-search" id="subtitle"]]
[[!template text="""things that should happen on the &quot;end-users""" start="00:45:18.760" video="qanda-p-search" id="subtitle"]]
[[!template text="""infrastructure&quot;, so to speak. So with like 40 seconds left, I""" start="00:45:22.560" video="qanda-p-search" id="subtitle"]]
[[!template text="""was going to say a minute, but I guess, any final thoughts?""" start="00:45:29.840" video="qanda-p-search" id="subtitle"]]
[[!template text="""Yeah, I mean, just thank you for listening, and And thank you""" start="00:45:33.520" video="qanda-p-search" id="subtitle"]]
[[!template text="""for putting this on. It's a really nice conference to have,""" start="00:45:40.160" video="qanda-p-search" id="subtitle"]]
[[!template text="""and I'm glad things like this exist. So thank you. Yeah, it's""" start="00:45:45.560" video="qanda-p-search" id="subtitle"]]
[[!template text="""you and the other folks on this call. Thank you so much,""" start="00:45:50.680" video="qanda-p-search" id="subtitle"]]
[[!template text="""PlasmaStrike, and all the rest of you for hopping on the BBB""" start="00:45:54.640" video="qanda-p-search" id="subtitle"]]
[[!template text="""and having such an interesting discussion. Keeps it really""" start="00:45:58.640" video="qanda-p-search" id="subtitle"]]
[[!template text="""fun for us as organizers. And thanks, everybody, for being""" start="00:46:03.120" video="qanda-p-search" id="subtitle"]]
[[!template text="""here.""" start="00:46:08.240" video="qanda-p-search" id="subtitle"]]

</div>Questions or comments? Please e-mail [zacromero@posteo.com](mailto:zacromero@posteo.com?subject=Comment%20for%20EmacsConf%202023%20p-search%3A%20p-search%3A%20a%20local%20search%20engine%20in%20Emacs)


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