WEBVTT captioned by bhavin192, checked by sachac

NOTE Introduction

00:00:00.000 --> 00:00:04.940
Hello, this is Christopher Howard,

00:00:04.940 --> 00:00:06.520
and welcome to my talk,

00:00:06.520 --> 00:00:08.800
"Informal Reference Tracking."

00:00:08.800 --> 00:00:10.574
This is a workflow talk,

00:00:10.574 --> 00:00:12.240
so I need to explain a little bit about

00:00:12.240 --> 00:00:14.840
what my needs were.

00:00:14.840 --> 00:00:18.760
I am not a professional scholar or academic,

00:00:18.760 --> 00:00:20.200
but there are a number of subjects

00:00:20.200 --> 00:00:21.607
that I'm interested in,

00:00:21.607 --> 00:00:23.240
and I occasionally like to write

00:00:23.240 --> 00:00:25.600
gemlog posts about them.

00:00:25.600 --> 00:00:28.680
So I needed some way to keep track of references.

00:00:28.680 --> 00:00:32.960
References to webpage articles, references to books,

00:00:32.960 --> 00:00:37.280
pages in books, and notes about them.

00:00:37.280 --> 00:00:39.480
Something that was searchable,

00:00:39.480 --> 00:00:42.440
but also something that was quick and easy to use,

00:00:42.440 --> 00:00:45.200
and something that I could set up quickly.

00:00:45.200 --> 00:00:47.360
And the approach I took, it only took me

00:00:47.360 --> 00:00:49.520
about an hour or two to figure out

00:00:49.520 --> 00:00:52.160
how to put it together.

00:00:52.160 --> 00:00:53.840
I do want to emphasize

00:00:53.840 --> 00:00:56.520
that there are better ways to do this.

00:00:56.520 --> 00:00:58.960
I'm not recommending you use my code

00:00:58.960 --> 00:01:02.120
or follow my exact approach.

00:01:02.120 --> 00:01:05.940
In particular, what I'm doing was meant to be done

00:01:05.940 --> 00:01:09.240
with Org's built-in capture

00:01:09.240 --> 00:01:11.800
and templates functionality,

00:01:11.800 --> 00:01:14.907
so that's something that's more flexible,

00:01:14.907 --> 00:01:21.440
programmable, and there's also a lot of add-ins

00:01:21.440 --> 00:01:23.960
that can be tied into that.

00:01:23.960 --> 00:01:31.320
For example, tools that allow you to search for,

00:01:31.320 --> 00:01:34.480
you know, feed in a URL, and it automatically

00:01:34.480 --> 00:01:38.240
pulls all the reference data for you.

00:01:38.240 --> 00:01:39.760
And there's tools out there

00:01:39.760 --> 00:01:43.120
that are really meant for scientific writing,

00:01:43.120 --> 00:01:46.760
so if you do this professionally,

00:01:46.760 --> 00:01:49.960
you may need to keep track of dozens of details

00:01:49.960 --> 00:01:51.080
for each reference

00:01:51.080 --> 00:01:55.320
and then have some fancy system to generate that

00:01:55.320 --> 00:02:00.800
into your, or output that into your paper.

00:02:00.800 --> 00:02:02.440
So there are better systems,

00:02:02.440 --> 00:02:06.040
but this is what worked for me and what was easy.

NOTE Tip about completion frameworks

00:02:06.040 --> 00:02:11.320
I do want to emphasize that if you haven't,

00:02:11.320 --> 00:02:14.640
you really want to learn how to use helm-mode

00:02:14.640 --> 00:02:20.440
H-E-L-M, or one of the similar systems in Emacs

00:02:20.440 --> 00:02:26.440
that does fuzzy search on Emacs commands.

00:02:26.440 --> 00:02:29.340
For example, in Helm here,

00:02:29.340 --> 00:02:39.007
I input one keychord, and then I just have to remember

00:02:39.007 --> 00:02:40.720
a few characters of some command,

00:02:40.720 --> 00:02:43.479
and they don't even have to be right next to each other,

00:02:43.480 --> 00:02:47.640
like H-O-C will bring up `helm-occur`.

00:02:47.640 --> 00:02:51.360
That's based on its algorithms

00:02:51.360 --> 00:02:53.000
of what I most likely meant

00:02:53.000 --> 00:02:55.160
and the ones that I've used in the past.

00:02:55.160 --> 00:02:57.920
So it usually brings up the command that I want,

00:02:57.920 --> 00:02:59.579
or the one that I want

00:02:59.580 --> 00:03:03.080
is one or two spots away in the entry.

00:03:03.080 --> 00:03:05.074
That just saves me a lot of time

00:03:05.074 --> 00:03:06.960
[and] a lot of memorization.

00:03:06.960 --> 00:03:09.120
So if you haven't learned Helm

00:03:09.120 --> 00:03:14.919
or a similar system for Emacs, you really want to.

NOTE References file overview

00:03:14.920 --> 00:03:18.240
So what is my approach?

00:03:18.240 --> 00:03:24.880
Well, basically, what it comes down to is really

00:03:24.880 --> 00:03:27.307
fundamentally nothing more than just a list

00:03:27.307 --> 00:03:30.640
of Org entries in a file.

00:03:30.640 --> 00:03:35.579
And there's one entry per reference.

00:03:35.580 --> 00:03:37.207
Fundamentally, that's all it is.

00:03:37.207 --> 00:03:39.207
But I'll go over the parts.

00:03:39.207 --> 00:03:43.080
You can see there's the title for the entry,

00:03:43.080 --> 00:03:44.800
and that's not necessarily

00:03:44.800 --> 00:03:47.400
the title of the book or the article,

00:03:47.400 --> 00:03:50.840
but that's my perspective on it,

00:03:50.840 --> 00:03:52.720
that's what I want to remember about it,

00:03:52.720 --> 00:03:54.560
and what I'll be looking for later

00:03:54.560 --> 00:03:56.560
when I do a search on my references.

00:03:56.560 --> 00:04:06.659
There's also in here the use of Org's tags

00:04:06.660 --> 00:04:08.274
here to the right of the title,

00:04:08.274 --> 00:04:12.040
very handy for searching for entries later.

00:04:12.040 --> 00:04:18.160
I use some Org properties attached to each entry.

00:04:18.160 --> 00:04:21.740
I automatically add in here an ID

00:04:21.740 --> 00:04:24.074
that can be useful if you want to

00:04:24.074 --> 00:04:27.800
link entries together later.

00:04:27.800 --> 00:04:30.400
I automatically add in here the date

00:04:30.400 --> 00:04:31.840
that the entry was created,

00:04:31.840 --> 00:04:35.699
which can be useful to me if things

00:04:35.700 --> 00:04:38.360
got sorted in a different order at some point,

00:04:38.360 --> 00:04:39.940
I could still look through

00:04:39.940 --> 00:04:42.507
the most recent entries that I had made

00:04:42.507 --> 00:04:45.040
if I wanted to do that for some reason.

00:04:45.040 --> 00:04:48.640
And sometimes I add in this publication year field

00:04:48.640 --> 00:04:52.720
with the idea that one day I might want to do

00:04:52.720 --> 00:04:55.840
a search for entries based on the publication year

00:04:55.840 --> 00:04:57.360
of the book or the article,

00:04:57.360 --> 00:05:00.774
say, only to use recent references

00:05:00.774 --> 00:05:03.080
or something like that.

00:05:03.080 --> 00:05:05.360
And then down here below the properties

00:05:05.360 --> 00:05:10.080
is where I paste in the URL to the webpage, or

00:05:10.080 --> 00:05:13.007
type in the title and author of the book

00:05:13.007 --> 00:05:16.959
on the pages, maybe the pages that were relevant,

00:05:16.960 --> 00:05:21.640
the pages of the periodical, or something like that.

00:05:21.640 --> 00:05:23.920
And I could put anything that I want down here,

00:05:23.920 --> 00:05:25.840
some other notes about what's important

00:05:25.840 --> 00:05:29.939
about this article to me.

00:05:29.940 --> 00:05:32.200
So fundamentally, that's all it is.

00:05:32.200 --> 00:05:35.240
Of course, I've added in a bit of convenience code

00:05:35.240 --> 00:05:37.080
to make this go a lot faster

00:05:37.080 --> 00:05:39.320
rather than typing all this out.

NOTE The Emacs Lisp code

00:05:39.320 --> 00:05:45.879
For that, I'll switch back to my init.el file.

00:05:45.880 --> 00:05:49.480
There's really just five functions.

00:05:49.480 --> 00:05:52.840
The first two here are ones

00:05:52.840 --> 00:05:54.560
that I've adapted off the Internet.

00:05:54.560 --> 00:05:56.160
Honestly, I can't remember

00:05:56.160 --> 00:05:58.239
exactly where that I got them from,

00:05:58.240 --> 00:06:00.240
but basically, they're just some functions

00:06:00.240 --> 00:06:04.240
for making a block of text writable or readable.

00:06:04.240 --> 00:06:09.299
Writable or not writable, I should say.

00:06:09.300 --> 00:06:12.200
The idea there is that

00:06:12.200 --> 00:06:13.480
when I'm creating a new entry,

00:06:13.480 --> 00:06:16.307
I don't want to accidentally delete

00:06:16.307 --> 00:06:18.960
or write over some earlier entries that I've made.

00:06:18.960 --> 00:06:24.880
So I use a little bit of Emacs functionality for that.

00:06:24.880 --> 00:06:29.440
And then here are the three reference functions

00:06:29.440 --> 00:06:32.440
that I've actually written.

00:06:32.440 --> 00:06:35.040
Really trivial, basic stuff here.

00:06:35.040 --> 00:06:41.800
The core of it is the `new-reference` function.

00:06:41.800 --> 00:06:44.840
Basically, what that does is

00:06:44.840 --> 00:06:47.560
it opens up the references file,

00:06:47.560 --> 00:06:52.040
jumps to the end of the reference file,

00:06:52.040 --> 00:06:57.440
starts a new entry, inserts the asterisk.

00:06:57.440 --> 00:07:01.520
It jumps back to the previous text,

00:07:01.520 --> 00:07:03.474
and whatever previous text there is,

00:07:03.474 --> 00:07:04.880
it makes that read-only.

00:07:04.880 --> 00:07:08.120
Again, so that I don't accidentally delete that,

00:07:08.120 --> 00:07:10.800
or cut, or type over it, or something

00:07:10.800 --> 00:07:14.579
when I'm making a new reference.

00:07:14.580 --> 00:07:17.680
Then it goes back to the new reference,

00:07:17.680 --> 00:07:21.339
automatically adds in a unique ID for that,

00:07:21.340 --> 00:07:25.360
and then automatically stamps it with

00:07:25.360 --> 00:07:28.999
the date the entry was created — today's date.

00:07:29.000 --> 00:07:32.760
Now, I've got two other functions here.

00:07:32.760 --> 00:07:34.540
One is `view-references`,

00:07:34.540 --> 00:07:37.807
which does nothing but open up the reference file

00:07:37.807 --> 00:07:39.400
and switch to that buffer

00:07:39.400 --> 00:07:42.539
if you're not already on it.

00:07:42.540 --> 00:07:45.880
And then there's one other here, `edit-references`,

00:07:45.880 --> 00:07:50.159
which does the exact same thing except for

00:07:50.160 --> 00:07:53.560
it also goes over all the text in the buffer

00:07:53.560 --> 00:07:55.040
and makes it writable.

00:07:55.040 --> 00:07:58.120
So if I really do want to edit those other references,

00:07:58.120 --> 00:08:02.719
I've got a function to quickly make that possible.

NOTE Example reference to Elfeed article

00:08:02.720 --> 00:08:07.499
Let me give an example of this.

00:08:07.500 --> 00:08:13.979
I type in here, new reference.

00:08:13.980 --> 00:08:16.440
Now I've jumped to the end of my references file.

00:08:16.440 --> 00:08:19.080
See, it's ready to take the title.

00:08:19.080 --> 00:08:21.720
Well, I guess I need to have something,

00:08:21.720 --> 00:08:23.659
some content, to put in here.

00:08:23.660 --> 00:08:28.879
Let's say I was looking through Elfeed,

00:08:28.880 --> 00:08:31.600
and let's say I found this interesting article

00:08:31.600 --> 00:08:38.219
about Mars earthquakes.

00:08:38.220 --> 00:08:40.007
Let's say I open it up [and]

00:08:40.007 --> 00:08:41.159
I read through the article.

00:08:41.160 --> 00:08:43.840
First, I'd figure out what it is

00:08:43.840 --> 00:08:47.259
that I find interesting about this, what it is that

00:08:47.260 --> 00:08:51.579
I'm going to want to remember and look up later.

00:08:51.580 --> 00:08:57.479
So I come up with a quick title based on that.

00:08:57.480 --> 00:09:01.899
Let's go back to the references with `view-reference`.

00:09:01.900 --> 00:09:05.674
And, let's just call it

00:09:05.674 --> 00:09:13.879
"Study of Mars Earthquake."

00:09:13.880 --> 00:09:18.199
Now I'm going to also want to put in some tags.

00:09:18.200 --> 00:09:21.107
On my system, that's done with

00:09:21.107 --> 00:09:23.639
Control C, Control Q (`C-c C-q`).

00:09:23.640 --> 00:09:25.520
And I can put in some tags.

00:09:25.520 --> 00:09:29.160
I like to go ahead and insert the colons.

00:09:29.160 --> 00:09:30.799
You can leave those out,

00:09:30.800 --> 00:09:32.560
but they're going to get added anyway,

00:09:32.560 --> 00:09:36.779
so I'm in the habit of using them.

00:09:36.780 --> 00:09:41.120
Let's say we'll call this 'Astronomy' as one tag,

00:09:41.120 --> 00:09:47.059
and the next tag could be 'Planets'.

00:09:47.060 --> 00:09:48.400
If I wanted to use a tag

00:09:48.400 --> 00:09:50.400
that was more than one word in the tag,

00:09:50.400 --> 00:09:53.540
I'd need to use underscores or something like that.

00:09:53.540 --> 00:10:00.499
If I wanted a tag that was 'Mars Earthquakes',

00:10:00.500 --> 00:10:05.059
I could do it like that, but that's kind of silly.

00:10:05.060 --> 00:10:08.659
Now I try not to be too clever with the tags.

00:10:08.660 --> 00:10:10.600
I don't spend a lot of time thinking about them.

00:10:10.600 --> 00:10:13.107
I just come up with some general buckets

00:10:13.107 --> 00:10:15.019
to throw things in.

00:10:15.020 --> 00:10:16.880
You can see the tags were added there,

00:10:16.880 --> 00:10:19.379
to the right of the title.

00:10:19.380 --> 00:10:23.399
Now you can see down here under PROPERTIES,

00:10:23.400 --> 00:10:25.320
the ID has already been added,

00:10:25.320 --> 00:10:27.040
the Date_Created has been added.

00:10:27.040 --> 00:10:30.200
Sometimes, I'll like to put in the publication year,

00:10:30.200 --> 00:10:38.139
and for that, I use the `org-set-property` command.

00:10:38.140 --> 00:10:43.439
Publication_Year, this year in this case.

00:10:43.440 --> 00:10:46.679
And then I just need to paste in the URL.

00:10:46.680 --> 00:10:48.080
I do that manually.

00:10:48.080 --> 00:10:53.480
I use Org's bracket format for that.

00:10:53.480 --> 00:10:57.639
So I start that, go back to the article,

00:10:57.640 --> 00:11:02.099
copy the URL, paste that in.

00:11:02.100 --> 00:11:04.480
If I want, I can add it in the title

00:11:04.480 --> 00:11:07.459
with the second pair of brackets here.

00:11:07.460 --> 00:11:14.200
Don't have to, but often like to.

00:11:14.200 --> 00:11:18.560
Close that off, and there it is.

00:11:18.560 --> 00:11:20.879
That was really it.

00:11:20.880 --> 00:11:22.120
I add a return on the end here,

00:11:22.120 --> 00:11:26.619
just so the next entry comes out with the right spacing.

00:11:26.620 --> 00:11:28.307
But really, that's it,

00:11:28.307 --> 00:11:31.000
and typically, when I'm not explaining it,

00:11:31.000 --> 00:11:37.499
that only takes 20 seconds or so, or 30 seconds.

00:11:37.500 --> 00:11:41.539
Pretty quick. Pretty easy.

NOTE Searching the references

00:11:41.540 --> 00:11:45.539
What about searching later?

00:11:45.540 --> 00:11:50.474
Well, often the easiest thing is just do a simple,

00:11:50.474 --> 00:11:54.639
boring incremental search.

00:11:54.640 --> 00:11:55.880
I usually know roughly

00:11:55.880 --> 00:11:58.499
what it is that I'm looking for already.

00:11:58.500 --> 00:12:02.379
If I was looking for that wildflower article,

00:12:02.380 --> 00:12:06.000
I could just do an incremental search for wildflowers

00:12:06.000 --> 00:12:07.920
and jump through that. It's pretty simple.

00:12:07.920 --> 00:12:13.200
Not very impressive, but honestly, most of the time

00:12:13.200 --> 00:12:16.439
that gets me there pretty quick.

00:12:16.440 --> 00:12:20.360
Sometimes I find it useful to do an Occur search,

00:12:20.360 --> 00:12:23.240
more specifically a Helm Occur search.

00:12:23.240 --> 00:12:31.259
If I use the `helm-occur` command,

00:12:31.260 --> 00:12:34.680
then I like to use this to search by tag.

00:12:34.680 --> 00:12:36.760
That's where it really becomes handy.

00:12:36.760 --> 00:12:39.207
Let's say I want to narrow it down

00:12:39.207 --> 00:12:42.640
to all my astronomy references

00:12:42.640 --> 00:12:50.039
and then narrow it down a little bit more to planets.

00:12:50.040 --> 00:12:54.119
I can put spaces in between and it still works.

00:12:54.120 --> 00:12:57.199
You can see here in one window,

00:12:57.200 --> 00:13:00.239
it gives me the bottom window there.

00:13:00.240 --> 00:13:03.479
It's giving…, just because of the way

00:13:03.480 --> 00:13:06.440
the tags are formatted with the title, it gives me

00:13:06.440 --> 00:13:09.519
a list of all the titles that have those tags.

00:13:09.520 --> 00:13:11.520
And I usually find what I want pretty quick

00:13:11.520 --> 00:13:13.400
by just tapping through here.

00:13:13.400 --> 00:13:16.499
Once I find the one that I think I want,

00:13:16.500 --> 00:13:24.139
I press enter, and now I'm focused on just that entry.

00:13:24.140 --> 00:13:26.960
There is some advanced functionality, I believe,

00:13:26.960 --> 00:13:29.960
that I used in the past where you could search

00:13:29.960 --> 00:13:33.119
based on the property fields.

00:13:33.120 --> 00:13:37.880
So do something like search for publication —

00:13:37.880 --> 00:13:42.439
the most recent publications in the last 10 years.

00:13:42.440 --> 00:13:46.200
There's some kind of advanced syntax for that,

00:13:46.200 --> 00:13:48.219
which I used once or twice.

00:13:48.220 --> 00:13:51.400
Honestly, I use that so infrequently

00:13:51.400 --> 00:13:54.840
that I have to go back to the Emacs manual

00:13:54.840 --> 00:13:57.739
and figure it out each time, and figure out again

00:13:57.740 --> 00:13:59.880
how I did that the last time.

00:13:59.880 --> 00:14:02.000
But since I do it only once

00:14:02.000 --> 00:14:06.679
every three or four months, it's not a problem.

00:14:06.680 --> 00:14:11.519
So I'm not going to go over that today.

00:14:11.520 --> 00:14:16.479
That's pretty much it in a nutshell.

00:14:16.480 --> 00:14:19.974
Again, the code that I wrote, this specific approach

00:14:19.974 --> 00:14:24.279
is not really what I'm recommending.

00:14:24.280 --> 00:14:31.160
But here it is if you really do want to use it.

00:14:31.160 --> 00:14:36.239
Maybe I can make a link to the URL

00:14:36.240 --> 00:14:40.059
and share that in the chat room or something.

00:14:40.060 --> 00:14:46.759
But I consider this to be trivial code.

00:14:46.760 --> 00:14:49.799
So just use that if you want to use it.

00:14:49.800 --> 00:14:53.440
I should be signing off here now.

00:14:53.440 --> 00:14:58.259
I should be in the chat room, in the IRC chat room,

00:14:58.260 --> 00:15:01.920
or you can reach out to me by email if you'd like.

00:15:01.920 --> 00:15:04.320
Thank you very much.