Back to the schedule
Previous: Emacs Research Group, Season Zero: What we did together with Emacs in 2 hours a week for a year
Next: Using Org-Mode For Recording Continuous Professional Development

One effective CS grad student workflow

Greg Coladonato


Q&A: live Q&A
Duration: 9:28

If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at and we'll forward your question to the speaker.


00:00 Self-intro and context of the talk 00:27 Goals of the workflow 00:43 Requirements of the workflow 01:34 Package dependencies 01:42 Demo: Class notes PDFs 03:24 Pulling down arXiv papers 08:12 Small customizations 08:59 TODO



When I was an undergrad, I learned many things, most of which I forgot. In the time since then, I've discovered Org Mode, Org Roam, Org Noter, Org Ref. PDF Tools, and Anki. I would like to share my approach for capturing all the information that comes my way as a MS CS student at Georgia Tech, in the hopes that I can both get feedback on ways to improve the system I use, as well as hopefully inspire others to build workflows that make them more productive.


IRC nick: gcoladon


  • Q1: Can org-roam also be used with EPUB files? It would be nice to make notes for books as well.
    • A: Interesting question -- I've never considered doing it that way. When there is a textbook I want to take notes on, I find the PDF for the textbook and split it into one PDF file per section or chapter, and then use those PDFs just like any other PDFs. What do you like about EPUB files?
  • Q2: How does pdf-tools not being maintained as it used to affect you. Since emacs have replaced image magic library and pdf-tools is dependent on it how are you going to transition your work flow?
    • A: Hmm I have not considered this at all. Is there some time in the near future at which pdf-tools will stop working on the current version of Emacs? I was not aware of that if that's the case. Thanks for bringing that to my attention!
  • Q3: Your workflow is very impressive.  Would it be possible that you share your emacs configuration files? (via email)
    • A: Yes, I will work on collecting up the bits of elisp that make up that configuration and share it , probably via Github gist. 


  • I'm trying to develop one, but haven't spent enough time on it. (My interests are mostly related to programming language standards and history, and the PDFs are generally enormous and inscrutable.)
  • have you ever considered org-ref for references? I think you used org-capture on the talk. Sorry If I am mistaken.
    • gcoladon: I honestly don't know how one should use org-ref for references -- my references go into a bib file. And I use the org-ref convenience functions, but don't really know if I'm doing it right
    • It sounds like others do love it
  • I don't use org-roam; I'm using zetteldeft. Haven't made the leap to roam, as it seemed more of a real leap of faith that it would work and not change too much.
  • Yes IIRC the heading property points to the PDF
  • Thank you for you talk. So far, I've only used org-roam as a simple knowledge-base. I would love to replicate what you showcased. Organized notes associated with pdf docs that you then generate Anki cards with. Awesome stuff.
  • If you have further links or tips on how you arrived at your current setup. A link to your emacs config??
  • Semi-related: M-l can downcase the next word quickly.


  • gcoladon: Yes it was software called ThoughtManager which ran on my Palm Treo 680
  • a similar workflow for videos using timestamps would be quite interesting
  • this is a sweet script, surely it should be possible to write in elisp though...
  • i know there exists the anki-editor package that works pretty well
    • gcoladon: Yeah I am going to explore anki-editor sometime. It would be much better than my sed script :)
  • how to get started? this is a great workflow
    • gcoladon: not sure how to help people get started with this workflow, but I am happy to work on such a thing
  • This is a workflow I really do like. Well done!
  • interesting on the custom id approach, I stick a timestamp on nearly every heading that I create, but I never thought to make it a custom id
  • gcoladon: I haven't tried to make my config sharable yet


  • 5-10 minutes: Go through some typical workflows associated with being a grad student, using the packages mentioned in the abstract.

Personal information

  • Name pronunciation: the syllables of my last name should be easy enough to pronounce for English speakers; the accentuation is colado-NA-to
  • Preferred contact info: gmail account gcoladon


[00:00:00.000] My name is Greg Coladonato, and this is my presentation named One Effective Computer Science Grad Student Workflow. For self-introduction, I've been an Emacs user since 1989 when I was an undergrad in computer science, and I'm still an Emacs user now I'm getting a master's of science in computer science. In my day job, I work in product management in a Silicon Valley computer vision startup, and I'm proud to say I've been submitting my first PRs to open source projects this year.

[00:00:27.039] The goals of my workflow are first to make my notes easily accessible and searchable. Second goal, provide a way for me to permanently remember what I learned, and thirdly, to enable conceptual linking between related topics and entities. I'll give examples of each of these as we go along.

[00:00:43.120] The requirements of my workflow: it needs to be tightly integrated with PDFs, as most of the documents I get from grad school are in PDF form, most of my submissions of work are in PDF form, and most research papers I have access to are in PDF form as well. I want my workflow to be subscription-free. I do not want to be locked into paying a subscription just to read my own notes. It must be future proof. I have used note-taking systems in the past that I now no longer have a way to decode, so they're locked into some format that I can no longer use. I want my notes to be version-controlled, so that if I make a big mistake, I can undo and revert to a prior good version, and I want my system to use spaced repetition, which is an advanced method of learning things over time so that you don't forget them.

[00:01:34.000] The package dependencies, in brief. org-mode, org-roam, org-roam-bibtex, pdf-tools, org-noter and org-ref.

[00:01:42.720] And now let's get on to some demos. Here in my browser window here is a lecture in the course I'm currently taking on deep learning. It's very nice that the professor provides slides. So this is the 54-page PDF file of the slides for the lecture. The problem is, it's hard to take notes on them. It's impossible to take notes on them here in this browser, as far as I know. So what I've done is I've incorporated these slides as a PDF in org-roam, which... I will now visit this file and you can bring it up alongside the PDF I was just looking at here. So what i like about this system is, as I'm going through and reading watching the video of the lecture, I'm following along in the PDF notes here, and I'm taking my notes alongside them. So here's the first part of that lecture. You can't see at the bottom right now, but this is one of the earlier pages. I go to the second section here and you see that my notes for this part of the lecture, here, my notes here... I love how the notes for different parts of the lecture are coordinated with the different parts of the PDF that go along with the lecture. Now let's go back to the top of this and you'll see... First, you'll see my notes down here. I'll go into these a little bit more shortly, but one of the things that goes along with a lecture in a grad school class is these days in computer science citations for research papers that were expected to read. So here's one entitled MixMatch. I haven't downloaded this paper yet, so let's go. Take a look at that.

[00:03:24.239] So I use a keystroke to select the title of the paper and another keybinding to search for that paper on a website called arXiv. arXiv, if you're not familiar-- and here's a match-- arXiv, if you're not familiar, is an open research server where researchers publish papers before they're published in journals or conferences, and they are copyright-free and open to anyone to read. So here is the paper I was looking for. I copy this link into an Org mode link, and I come back to Emacs, and now another keystroke will revisit that website, pull down the PDF, and pull down all the information in the bibliography and put it into a bibliography here, inside my local bibliography. So here's the paper I was just looking at. Another great thing about a lot of PDFs is that they have an embedded outline that you can extract via the pdf-tools package. So now you see on the right here: introduction, related work, MixMatch, experiments. I can go right to that section, and this outline knows exactly which part of the PDF corresponds to each of the parts of this outline in the paper. So then, when I go take notes in here, just like in my other notes, it'll be coordinated with the PDF that goes along with it. So let's quit out of here. So now that I've captured that... Uh oh, this is the same paper. So now here I am back in my notes. now that I've captured this paper. What I'm going to do is make it a link, so the org-roam node that I just took will be here at the top. MixMatch. There's a little difference. You'll see here, this m is a different case than this m, and that's one of my to-do list. I'd like to make it so that this search is a little less case-sensitive. So now I've linked this link to this paper into these notes, and now these are... you'll see a little bit later how these links can be graphed and followed and so forth. While I'm in this document, I'd like to show you that when I'm learning something and I learn a new fact, I write down what I learned in the form of a question and an answer. So you can see here, there's a question that begins with who, what, where. It begins with a w word, or how, or if or is, and it ends in a question mark, and then following that is another string that ends in a period. So I have a... I'd like to do this in Emacs as well, but I haven't worked that out yet. I have a script that will... Let's find a-n-k-i-f. Okay, I have a script that will go through all the notes in my org-roam directory and find all the questions. Now let's pull up the most... No, don't edit the buffer. Save that. Come back to here. So now you can see that all the questions that I've written in my notes have now been ANKIFIED. Now what's that mean? Anki is this program here which is a flashcard system based on the idea... No, let's not download that right now. This is a system that enables the easy creation of flash cards that show you the front, show you the back, and then you decide if you knew that question or not. So I don't want to spend much time on this, but everything I'm learning in a class, I write into my notes as a question that I load into this flashcard system that then I can review on a walk, or on a bus ride, or whatever, and stay on top of indefinitely. As long as I can continue to keep reviewing that, I will keep that information fresh in my mind. So now let's come out of these files back to here. So I've demoed class note PDFs, grabbing papers from arXiv, autogenerating the skeletons and the flashcards, and now let's see what it looks like. Let's visualize the connections between these nodes. So here is a graph for the file I'm reading right now: One Effective Grad Student Workflow. Here is the node I have a link to in my Org mode document on spaced repetition. We can open that and come right back to Emacs, and I just love that. For the more complicated topics, you can see connections between things that you maybe didn't realize you had, and some of the notes you've taken. And so I'm getting near the end.

[00:08:12.639] I just want to show some small customizations. I save my org mode files that are in org-roam with a year year month month date prefix, so that I can tell when the node was created I also truncate them at 30 characters, so that when I do an ls, they don't word wrap. Maybe that's OCD. I also use an ID format that is year month day hour month hour minute second rather than the full UUID format because that number up there, that ID makes sense to me and it gives me an idea of when that node-- which you can, by the way, you can have--even one of these subheadings can be a node in org-roam. So now that you can see that was created right now.

[00:08:59.440] Some of the TODOs I still have in this system... We don't have to go too much into them, but I mentioned case insensitivity, and I'd like to make some improvements to org-noter. At this point, I'd just like to... I have a list of people I'd like to thank. I'm not gonna read the whole list out, but they're a bunch of software engineers that created great free software that's very useful to me and I use every day, so thank you to them, and thank you all for listening to my talk. captions by sachac

Back to the schedule
Previous: Emacs Research Group, Season Zero: What we did together with Emacs in 2 hours a week for a year
Next: Using Org-Mode For Recording Continuous Professional Development