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.