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]