Tools I Use

Document Preparation

I make extensive use of Pandoc when I’m writing. Pandoc is a tool to convert documents from one format to another. When I write up my lecture notes, I write them in markdown and convert them to PDF (using latex in the middle) to take with me to class. Presentations, research papers, the html files underlying this website, and documents I distribute to others at a meeting are all done using Pandoc.

If you’ve ever used RMarkdown in RStudio, you’ve used Pandoc. RMarkdown is a wrapper that adds functionality to Pandoc.

Text Editing

I really never use a word processor. Sometimes the documents I fill out in my role as Director of Graduate Studies require .docx, but other than that, I try to stay far away from those things. I use three different text editors. What each does best depends on the task.

  • Emacs can do just about anything you want. The main draw for me is org-mode. I also use it when I’m in the mood to work inside a terminal. It can be a lot of fun customizing Emacs, because you have a complete Lisp inside the editor (Emacs is more accurately described as a programming language that you interact with through a text editor.) I’ve written a short description of how I use Emacs for outlining.
  • Geany is where I do most of my programming. I also use it to edit markdown documents (lecture notes, presentations, research papers). Geany is the most difficult of the three to customize. The things I do in Geany tend to be supported well out of the box.
  • Textadept has some specialized uses. I’ve create menu items, functions, and keyboard shortcuts to support those tasks. I use Textadept the least of the three text editors.

I’ve written about why I prefer text editors.

Programming Languages

I have used a lot of languages at one time or another. I use Ruby, Lua (to customize Textadept), Lisp (to customize Emacs), Perl, bash, and others for the tasks they do well. For work (research) related programming, I use three.

  • R needs no introduction. I do empirical research. R provides most of the functionality I need to publish papers.
  • SQLite is a database that I use because it’s readily available and SQL is really handy for querying data.
  • D is my favorite programming language. It’s an improved C that can be used as a replacement for languages like C++ and Fortran. Back in the old days, you had to choose between languages that were fast and languages that were fun and convenient. D is a mature language that I enjoy writing. It’s also an older language, so it’s mature. It is fully interoperable with R, so I use it to speed up bottlenecks in R. It’s also my first choice for hobby programming. I have a project that supports interoperability of R and D.

Task Management/Calendar

I don’t use a calendar. I use a task manager called Todoist instead. I pay for it, but they have pretty good academic discounts, so it’s worth it. I’m not comfortable giving all the details of my schedule to Google or Microsoft or any other large company. I have found Getting Things Done to be very helpful at getting my many projects and tasks under control.

Version Control

My preferred version control is Fossil. It’s just easier than Git, and it provides more functionality. I am genuinely puzzled that Git is the popular version control tool - it’s not a good choice for individual researchers or small research teams.

That said, I do use Git a lot. I have accounts at Github, Bitbucket, and Gitlab, and I even ran my own Git server for years before I moved my personal stuff to Fossil.

Tools I’ve Written

Over the years I’ve written a lot of my own tools. I get frustrated when the available tools waste my time or don’t do what I need. For instance, I don’t use an online notes app. It’s not that there’s anything wrong with Evernote, Notion, Workflowy, etc. I nonetheless want a notes app that I can customize and have fully under my control. So one day I decided to wrote my own notes app. It was easy to do - I wrote the first fully working version in a couple of hours.

The cost-benefit calculus weighs heavily in favor of writing your own tools for things you do all the time. I do lots of customizing of the tools I didn’t write (text editors, programming languages, and utilities for version control and Pandoc). It helps that I find programming to be good way to relieve stress.