In Defense of Text-Based GTD Methods

Okay, so the title of this post is not fair to Robert Talbert, who talked about why he is going away from a text-based approach to Getting Things Done and went back to using ToDoist. However, this is a post I have been meaning to write for a week, and it fits in perfectly with what Talbert wrote.

Basically, Talbert wrote that he is moving away from a text-based approach to organizing his life (Todo.txt) and back to the ToDoist app. He explicitly said that this is a personal decision, and he is just reporting what works for him. I am going to describe a way that I solved one of the issues he describes in his post.

Background: I organize my word by having a plain text file on my work computer with all of the things I need to do (in part so that I can use with it, which I love). I do not use the Todo.txt method, and I think that I have probably evolved far enough away from Getting Things Done that I should not be referring to my process as GTD at all. However, I evolved from GTD, so there will still be a lot of overlap.

In addition to my text-based ToDo file, I use

  1. I ssh into my work computer to write down things I need to do if I am on a computer.
  2. A hipster PDA to capture ideas when I am away from a computer.
  3. I use a tickler file to capture items that I do not need to work on now.

Talbert’s main problem with Todo.txt involved syncing, and it sounds like a real problem. However, I never expected my hipster PDA to sync, so this is not an issue for me.

Talbert also mentioned that there is no easy way to do recurring tasks in Todo.txt. He talked about looking into cron jobs to take care of this for him, and he decided that he would rather have an app that just works (as Todoist does—you just click a button or two to make it the task keep reappearing regularly).

I opted for the cron job approach, which I explain below.

First, I will describe the old way. I have lists of recurring tasks I need to do every day. For instance, here is a list of tasks that I need to remind myself to do every Monday/Wednesday/Friday, the days that I teach (the details are not important, although it is worth telling you that I teach Math 124 and Math 343 this fall):

Check Canvas for pre-class work at 10 am
Change Dailywork in Canvas
Update Actual Plan
Grade (Daily Homework for sure, maybe other things)0 1 * * 1,3,5 /usr/bin/python Dropbox/HodgePodge/

Look at next class’s materials

Collect Daily HW in class, give to TA
Change Dailywork in Canvas
Update Actual Plan
Look at next class’s materials

These are things I need to think about every day I teach. The old way was to print out this list at the beginning of the semester, put it in my tickler for the next MWF, read it, type all of the above items into my text-based ToDo list, put the paper list back into the tickler file corresponding to the next MWF, and then delete the items as I do them.

It occurred to me, though, that I could just have the computer write these tasks to my text-based ToDo list. So I wrote a Python script (called that does it and set a cron job to schedule the Python script (cron is a scheduler for Linux machines).

First, here is my cron job code. I just typed “crontab -e” in a command line and added the following line of code:

0 1 * * 1,3,5 /usr/bin/python Dropbox/HodgePodge/

The initial “0 1” means to do “0 minutes after 1 am.” Then next “* *” means do any day of the month (1–31) and any month of the year. The final “1,3,5” means do the first, third, and fifth days of the week (MWF). So “0 1 * * 1,3,5” just means “do something at 1 am every MWF.” What should be done is to run Python (located at /usr/bin/python) on the file at “Dropbox/HodgePodge/

That is it—the computer now runs that Python script every Monday, Wednesday, and Friday. The Python script is below:

with open(“Dropbox/ToDo”, “r+”) as f:
old = # read everything in the file # rewind
f.write( “343:\nCheck Canvas for pre-class work at 10 am\nChange Dailywork in Canvas\nUpdate Actual Plan\nGrade (Daily Homework for sure, maybe other things)\nLook at next class’s materials\n\n124:\nCollect Daily HW in class, give to Joe\nChange Dailywork in Canvas\nUpdate Actual Plan\nLook at next class’s materials\n\n” + old) # write the new line before

Basically, this code (which I stole from someone—probably someone from Stack Overflow) just copies what was already in the ToDo file, prepends my new items for Math 124 and Math 343, and overwrites the old file with both the new information and the old (so it effectively just adds some stuff to the beginning).

This has worked well—my to-do list is ready for me immediately when I get to work, saving me a couple of minutes. In addition to, I also have,,, and, which all have their own cron job. Notice that both and both run on Wednesdays—to be safe, I just schedule the at a different time (12:30 am, which is

30 0 * * 1,3,5 /usr/bin/python Dropbox/HodgePodge/

in crontab, where “12 am” corresponds to the first 0).

I agree with Talbert that this is all personal preference. However, I like my system, I just did this a week before Talbert posted, and this seems to have a nice harmony with what Talbert wrote.

Tags: , ,

2 Responses to “In Defense of Text-Based GTD Methods”

  1. Time-Blocking Again | Solvable by Radicals Says:

    […] I failed. I love working in my to-do list, which is a text file that I can easily edit via vim and python scripts, and I don’t like working in Google Calendar (I like working in Outlook Calendar even less). […]

  2. Electronic Tickler File | Solvable by Radicals Says:

    […] The solution: use Python to create an electronic tickler file! I use a text file for my ToDo list, and that allows me to update my ToDo list with a combination of Python scripts and cron jobs. […]

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: