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
|
WEBVTT
00:00.000 --> 00:00:01.520
My name is Greg Coladonato,
00:00:01.520 --> 00:00:03.199
and this is my presentation named
00:00:03.199 --> 00:00:04.560
One Effective Computer Science
00:00:04.560 --> 00:00:06.480
Grad Student Workflow.
00:06.480 --> 00:00:07.680
For self-introduction,
00:00:07.680 --> 00:00:09.599
I've been an Emacs user since 1989
00:00:09.599 --> 00:00:11.599
when I was an undergrad in computer science,
00:00:11.599 --> 00:00:13.040
and I'm still an Emacs user
00:00:13.040 --> 00:00:15.280
now I'm getting a master's of science
00:00:15.280 --> 00:00:16.880
in computer science.
00:16.880 --> 00:00:17.760
In my day job,
00:00:17.760 --> 00:00:19.199
I work in product management
00:00:19.199 --> 00:00:20.640
in a Silicon Valley
00:00:20.640 --> 00:00:21.840
computer vision startup,
00:00:21.840 --> 00:00:22.880
and I'm proud to say
00:00:22.880 --> 00:00:25.039
I've been submitting my first PRs
00:00:25.039 --> 00:00:27.038
to open source projects this year.
00:27.039 --> 00:00:29.199
The goals of my workflow are first
00:00:29.199 --> 00:00:30.800
to make my notes easily accessible
00:00:30.800 --> 00:00:33.280
and searchable.
00:33.280 --> 00:00:34.800
Second goal, provide a way for me
00:00:34.800 --> 00:00:36.480
to permanently remember what I learned,
00:00:36.480 --> 00:00:38.879
and thirdly, to enable conceptual linking
00:38.879 --> 00:00:40.480
between related topics and entities.
00:00:40.480 --> 00:00:41.920
I'll give examples of each of these
00:00:41.920 --> 00:00:43.119
as we go along.
00:00:43.120 --> 00:00:45.120
The requirements of my workflow:
00:45.120 --> 00:00:47.920
it needs to be tightly integrated with PDFs,
00:00:47.920 --> 00:00:50.399
as most of the documents I get from grad school
00:00:50.399 --> 00:00:51.440
are in PDF form,
00:00:51.440 --> 00:00:53.760
most of my submissions of work
00:00:53.760 --> 00:00:54.719
are in PDF form,
00:00:54.719 --> 00:00:56.640
and most research papers I have access to
00:00:56.640 --> 00:00:58.399
are in PDF form as well.
00:58.399 --> 00:01:00.320
I want my workflow to be subscription-free.
00:01:00.320 --> 00:01:01.840
I do not want to be locked into
01:01.840 --> 00:01:03.120
paying a subscription
00:01:03.120 --> 00:01:04.799
just to read my own notes.
00:01:04.799 --> 00:01:06.720
It must be future proof.
00:01:06.720 --> 00:01:09.600
I have used note-taking systems in the past
01:09.600 --> 00:01:12.960
that I now no longer have a way to decode,
00:01:12.960 --> 00:01:14.640
so they're locked into some format
00:01:14.640 --> 00:01:17.200
that I can no longer use.
01:17.200 --> 00:01:19.119
I want my notes to be version-controlled,
01:19.119 --> 00:01:20.479
so that if I make a big mistake,
00:01:20.479 --> 00:01:22.080
I can undo and revert
00:01:22.080 --> 00:01:23.840
to a prior good version,
01:23.840 --> 00:01:27.680
and I want my system to use spaced repetition,
00:01:27.680 --> 00:01:29.520
which is an advanced method
00:01:29.520 --> 00:01:31.840
of learning things over time
00:01:31.840 --> 00:01:33.999
so that you don't forget them.
01:34.000 --> 00:01:36.799
The package dependencies, in brief.
00:01:36.799 --> 00:01:38.960
org-mode, org-roam, org-roam-bibtex,
00:01:38.960 --> 00:01:42.719
pdf-tools, org-noter and org-ref.
01:42.720 --> 00:01:45.119
And now let's get on to some demos.
01:45.119 --> 00:01:47.520
Here in my browser window here
00:01:47.520 --> 00:01:49.680
is a lecture in the course
00:01:49.680 --> 00:01:51.840
I'm currently taking on deep learning.
01:51.840 --> 00:01:54.240
It's very nice that the professor
01:54.240 --> 00:01:55.759
provides slides. So this is
00:01:55.759 --> 00:02:00.000
the 54-page PDF file of the slides
00:02:00.000 --> 00:02:02.079
for the lecture. The problem is,
00:02:02.079 --> 00:02:03.200
it's hard to take notes on them.
00:02:03.200 --> 00:02:04.560
It's impossible to take notes on them
00:02:04.560 --> 00:02:05.840
here in this browser,
00:02:05.840 --> 00:02:07.840
as far as I know. So what I've done is
00:02:07.840 --> 00:02:11.440
I've incorporated these slides as a PDF
02:11.440 --> 00:02:12.959
in org-roam, which...
00:02:12.959 --> 00:02:16.640
I will now visit this file
00:02:16.640 --> 00:02:19.120
and you can bring it up alongside the PDF
00:02:19.120 --> 00:02:20.560
I was just looking at here.
00:02:20.560 --> 00:02:23.200
So what i like about this system is,
02:23.200 --> 00:02:24.800
as I'm going through and reading
02:24.800 --> 00:02:26.720
watching the video of the lecture,
00:02:26.720 --> 00:02:29.599
I'm following along in the PDF notes here,
02:29.599 --> 00:02:31.680
and I'm taking my notes alongside them.
02:31.680 --> 00:02:34.400
So here's the first part of that lecture.
02:34.400 --> 00:02:36.319
You can't see at the bottom right now,
00:02:36.319 --> 00:02:38.800
but this is one of the earlier pages.
00:02:38.800 --> 00:02:42.400
I go to the second section here
00:02:42.400 --> 00:02:45.040
and you see that my notes
00:02:45.040 --> 00:02:46.640
for this part of the lecture,
02:46.640 --> 00:02:48.480
here, my notes here...
00:02:48.480 --> 00:02:49.599
I love how the notes
00:02:49.599 --> 00:02:50.959
for different parts of the lecture
00:02:50.959 --> 00:02:52.560
are coordinated with the different parts
02:52.560 --> 00:02:55.200
of the PDF that go along with the lecture.
02:55.200 --> 00:02:57.519
Now let's go back to the top of this
02:57.519 --> 00:03:01.840
and you'll see... First, you'll see my notes
03:01.840 --> 00:03:03.920
down here. I'll go into these
00:03:03.920 --> 00:03:06.319
a little bit more shortly,
00:03:06.319 --> 00:03:07.200
but one of the things
00:03:07.200 --> 00:03:08.959
that goes along with a lecture
00:03:08.959 --> 00:03:11.519
in a grad school class is these days
00:03:11.519 --> 00:03:13.680
in computer science citations
00:03:13.680 --> 00:03:14.640
for research papers
00:03:14.640 --> 00:03:16.480
that were expected to read.
03:16.480 --> 00:03:20.080
So here's one entitled MixMatch.
03:20.080 --> 00:03:22.319
I haven't downloaded this paper yet,
03:22.319 --> 00:03:24.238
so let's go. Take a look at that.
00:03:24.239 --> 00:03:26.319
So I use a keystroke to select
00:03:26.319 --> 00:03:28.480
the title of the paper
00:03:28.480 --> 00:03:30.239
and another keybinding
00:03:30.239 --> 00:03:31.440
to search for that paper
00:03:31.440 --> 00:03:33.519
on a website called arXiv.
03:33.519 --> 00:03:35.280
arXiv, if you're not familiar--
00:03:35.280 --> 00:03:36.400
and here's a match--
00:03:36.400 --> 00:03:37.680
arXiv, if you're not familiar,
00:03:37.680 --> 00:03:42.000
is an open research server
03:42.000 --> 00:03:43.760
where researchers publish papers
00:03:43.760 --> 00:03:45.040
before they're published in journals
00:03:45.040 --> 00:03:47.920
or conferences, and they are copyright-free
03:47.920 --> 00:03:50.159
and open to anyone to read.
00:03:50.159 --> 00:03:52.799
So here is the paper I was looking for.
03:52.799 --> 00:03:58.560
I copy this link into an Org mode link,
00:03:58.560 --> 00:03:59.840
and I come back to Emacs,
00:03:59.840 --> 00:04:02.400
and now another keystroke
04:02.400 --> 00:04:04.879
will revisit that website,
00:04:04.879 --> 00:04:06.400
pull down the PDF, and pull down
00:04:06.400 --> 00:04:08.400
all the information in the bibliography
00:04:08.400 --> 00:04:11.040
and put it into a bibliography here,
04:11.040 --> 00:04:13.599
inside my local bibliography.
00:04:13.599 --> 00:04:15.840
So here's the paper I was just looking at.
04:15.840 --> 00:04:17.840
Another great thing about a lot of PDFs
04:17.840 --> 00:04:20.320
is that they have an embedded outline
00:04:20.320 --> 00:04:24.160
that you can extract via the pdf-tools package.
04:24.160 --> 00:04:25.680
So now you see on the right here:
04:25.680 --> 00:04:27.360
introduction, related work, MixMatch,
04:27.360 --> 00:04:30.479
experiments. I can go right to that section,
04:30.479 --> 00:04:32.639
and this outline knows exactly
00:04:32.639 --> 00:04:33.759
which part of the PDF
00:04:33.759 --> 00:04:35.919
corresponds to each of the parts
00:04:35.919 --> 00:04:37.680
of this outline in the paper.
04:37.680 --> 00:04:40.240
So then, when I go take notes in here,
04:40.240 --> 00:04:41.280
just like in my other notes,
00:04:41.280 --> 00:04:43.040
it'll be coordinated with the PDF
00:04:43.040 --> 00:04:44.639
that goes along with it.
04:44.639 --> 00:04:48.080
So let's quit out of here.
00:04:48.080 --> 00:04:50.160
So now that I've captured that...
00:04:50.160 --> 00:04:53.199
Uh oh, this is the same paper.
04:53.199 --> 00:04:56.000
So now here I am back in my notes.
00:04:56.000 --> 00:04:58.000
now that I've captured this paper.
04:58.000 --> 00:05:02.400
What I'm going to do is make it a link,
05:02.400 --> 00:05:07.520
so the org-roam node that I just took
00:05:07.520 --> 00:05:09.600
will be here at the top. MixMatch.
05:09.600 --> 00:05:10.639
There's a little difference.
00:05:10.639 --> 00:05:13.120
You'll see here, this m is a different case
00:05:13.120 --> 00:05:16.240
than this m, and that's one of my to-do list.
00:05:16.240 --> 00:05:18.720
I'd like to make it so that this search
00:05:18.720 --> 00:05:20.320
is a little less case-sensitive.
00:05:20.320 --> 00:05:23.520
So now I've linked this link to this paper
00:05:23.520 --> 00:05:25.680
into these notes, and now these are...
00:05:25.680 --> 00:05:26.639
you'll see a little bit later
00:05:26.639 --> 00:05:29.360
how these links can be graphed and followed
00:05:29.360 --> 00:05:32.960
and so forth. While I'm in this document,
00:05:32.960 --> 00:05:33.680
I'd like to show you
00:05:33.680 --> 00:05:36.639
that when I'm learning something
05:36.639 --> 00:05:38.400
and I learn a new fact,
05:38.400 --> 00:05:40.320
I write down what I learned
00:05:40.320 --> 00:05:42.400
in the form of a question and an answer.
00:05:42.400 --> 00:05:45.039
So you can see here, there's a question
00:05:45.039 --> 00:05:46.800
that begins with who, what, where.
00:05:46.800 --> 00:05:49.360
It begins with a w word, or how,
05:49.360 --> 00:05:53.039
or if or is, and it ends in a question mark,
00:05:53.039 --> 00:05:54.960
and then following that is another string
00:05:54.960 --> 00:05:56.560
that ends in a period.
05:56.560 --> 00:05:58.240
So I have a... I'd like to do this
00:05:58.240 --> 00:05:59.280
in Emacs as well, but I haven't
00:05:59.280 --> 00:06:00.319
worked that out yet.
00:06:00.319 --> 00:06:04.639
I have a script that will...
06:04.639 --> 00:06:07.680
Let's find a-n-k-i-f.
06:07.680 --> 00:06:09.680
Okay, I have a script that will go through
00:06:09.680 --> 00:06:13.680
all the notes in my org-roam directory
06:13.680 --> 00:06:16.880
and find all the questions.
00:06:16.880 --> 00:06:20.720
Now let's pull up the most...
00:06:20.720 --> 00:06:24.319
No, don't edit the buffer.
06:24.319 --> 00:06:29.039
Save that. Come back to here.
06:29.039 --> 00:06:31.680
So now you can see that all the questions
00:06:31.680 --> 00:06:32.560
that I've written in my notes
06:32.560 --> 00:06:33.759
have now been ANKIFIED.
00:06:33.759 --> 00:06:34.880
Now what's that mean?
00:06:34.880 --> 00:06:40.960
Anki is this program here
06:40.960 --> 00:06:43.199
which is a flashcard system
00:06:43.199 --> 00:06:44.560
based on the idea...
00:06:44.560 --> 00:06:48.000
No, let's not download that right now.
00:06:48.000 --> 00:06:50.720
This is a system that enables
00:06:50.720 --> 00:06:53.120
the easy creation of flash cards
06:53.120 --> 00:06:54.479
that show you the front,
00:06:54.479 --> 00:06:55.360
show you the back,
00:06:55.360 --> 00:06:56.160
and then you decide
00:06:56.160 --> 00:07:00.000
if you knew that question or not.
07:00.000 --> 00:07:02.639
So I don't want to spend much time on this,
00:07:02.639 --> 00:07:04.639
but everything I'm learning in a class,
00:07:04.639 --> 00:07:06.800
I write into my notes as a question
00:07:06.800 --> 00:07:08.800
that I load into this flashcard system
00:07:08.800 --> 00:07:10.880
that then I can review on a walk,
00:07:10.880 --> 00:07:13.680
or on a bus ride, or whatever,
07:13.680 --> 00:07:16.400
and stay on top of indefinitely.
00:07:16.400 --> 00:07:17.440
As long as I can continue
07:17.440 --> 00:07:18.400
to keep reviewing that,
00:07:18.400 --> 00:07:20.639
I will keep that information
00:07:20.639 --> 00:07:22.319
fresh in my mind.
07:22.319 --> 00:07:24.479
So now let's come out of these files
07:24.479 --> 00:07:25.039
back to here.
00:07:25.039 --> 00:07:27.440
So I've demoed class note PDFs,
00:07:27.440 --> 00:07:29.440
grabbing papers from arXiv,
07:29.440 --> 00:07:31.199
autogenerating the skeletons
00:07:31.199 --> 00:07:32.720
and the flashcards,
00:07:32.720 --> 00:07:35.280
and now let's see what it looks like.
07:35.280 --> 00:07:40.160
Let's visualize the connections
07:40.160 --> 00:07:42.000
between these nodes.
07:42.000 --> 00:07:45.199
So here is a graph for the file
00:07:45.199 --> 00:07:46.319
I'm reading right now:
00:07:46.319 --> 00:07:49.520
One Effective Grad Student Workflow.
07:49.520 --> 00:07:53.599
Here is the node I have a link to
00:07:53.599 --> 00:07:54.639
in my Org mode document
07:54.639 --> 00:07:57.199
on spaced repetition. We can open that
00:07:57.199 --> 00:07:59.280
and come right back to Emacs,
07:59.280 --> 00:08:01.680
and I just love that.
08:01.680 --> 00:08:03.919
For the more complicated topics,
00:08:03.919 --> 00:08:05.520
you can see connections between things
00:08:05.520 --> 00:08:07.520
that you maybe didn't realize you had,
00:08:07.520 --> 00:08:10.240
and some of the notes you've taken.
00:08:10.240 --> 00:08:12.638
And so I'm getting near the end.
00:08:12.639 --> 00:08:15.120
I just want to show some small customizations.
08:15.120 --> 00:08:17.120
I save my org mode files
00:08:17.120 --> 00:08:18.479
that are in org-roam
00:08:18.479 --> 00:08:21.520
with a year year month month date prefix,
00:08:21.520 --> 00:08:24.639
so that I can tell when the node was created
00:08:24.639 --> 00:08:26.560
I also truncate them at 30 characters,
00:08:26.560 --> 00:08:27.919
so that when I do an ls,
00:08:27.919 --> 00:08:29.280
they don't word wrap.
00:08:29.280 --> 00:08:32.800
Maybe that's OCD.
08:32.800 --> 00:08:38.159
I also use an ID format that is year month
00:08:38.159 --> 00:08:40.479
day hour month hour minute second
08:40.479 --> 00:08:43.279
rather than the full UUID format
00:08:43.279 --> 00:08:44.720
because that number up there,
00:08:44.720 --> 00:08:46.160
that ID makes sense to me
00:08:46.160 --> 00:08:50.160
and it gives me an idea of when that node--
08:50.160 --> 00:08:51.040
which you can, by the way,
00:08:51.040 --> 00:08:55.040
you can have--even one of these subheadings
00:08:55.040 --> 00:08:56.240
can be a node in org-roam.
00:08:56.240 --> 00:08:57.120
So now that you can see
08:57.120 --> 00:08:59.439
that was created right now.
08:59.440 --> 00:09:00.640
Some of the TODOs I still have
00:09:00.640 --> 00:09:02.720
in this system... We don't have to go
00:09:02.720 --> 00:09:04.000
too much into them, but I mentioned
00:09:04.000 --> 00:09:07.600
case insensitivity, and I'd like
00:09:07.600 --> 00:09:10.080
to make some improvements to org-noter.
00:09:10.080 --> 00:09:12.240
At this point, I'd just like to...
09:12.240 --> 00:09:14.959
I have a list of people I'd like to thank.
00:09:14.959 --> 00:09:16.240
I'm not gonna read the whole list out,
00:09:16.240 --> 00:09:17.680
but they're a bunch of software engineers
00:09:17.680 --> 00:09:20.399
that created great free software
00:09:20.399 --> 00:09:21.519
that's very useful to me
00:09:21.519 --> 00:09:23.839
and I use every day, so thank you to them,
00:09:23.839 --> 00:09:27.080
and thank you all for listening to my talk.
00:09:27.080 --> 00:09:28.080
[captions by sachac]
|