My New Paperless To Do List Management System

While I was on my Internet Vacation, I spent some of the time I would normally burn on social networking sites looking for a To Do list system that would actually work for me. Over the years, I’ve tried many, but most are too complex, or too cumbersome when it comes to paperless devices. After reading LifeHacker’s “How I Work” post on Gina Tripani, I believe I have discovered a system that works for me. At least, it has worked very well for the 10 or so days that I have been using it. I made some modifications to allow for some automation in the system. In order to give you the full picture of how my system works, let me first explain what I was doing before this system. Then I’ll list my requirements for a new system. After that I’ll describe the new system, and how I’ve customized it to allow for some automation that saves me time. For the automation piece, I had to write some code. As I write code for a living at my day job, this wasn’t a big deal for me. Your mileage may vary.

My previous To Do list system

Actually, I wrote about it in general terms in my post on Paperless List Management Using Evernote, but I’ll try to be more succinct and explicit here.

  1. Each To Do item on my list consisted of one note in Evernote.
  2. Each To Do note was tagged with the term “inbox” so that I could easily find it regardless of what notebook it went into.
  3. I used a Saved Search to look for all Notes tagged as “Inbox”
  4. When I completed a task, I removed the Inbox tag and replaced it with a Completed tag.
  5. If additional information about the task was required, I kept it in the note with the task.
  6. My wife could add items to my To Do list by sending a message to my Evernote email address with “#inbox” included in the subject line.

This worked okay for me for quite a while, but over time, I noticed problems:

  1. It could be cumbersome to add a note via iPhone or iPad. I wanted a method that would be at least as fast as using pen and paper.
  2. Glancing at my To Do list required pulling up the Saved Search. Easy on the desktop applications, but a bit more difficult on the iPhone and iPad.
  3. Completing a task required too many steps. I wanted something faster.

On the flip side:

  1. I liked having this information captured in Evernote
  2. I liked the ability to add things to my To Do list via email.
  3. I liked the discrete notes because it left room for future automation.

My requirements for a To Do list system

Given my past experiences, I had some pretty specific requirements that had to be met by any new system. They included:

  1. System had to be paperless.
  2. System had to be simple to use. My criteria for “simple to use”:  I should be able to add/remove to-do items to/from my list at least as quickly as I could if I was using pen and paper.
  3. System had to be flexible and support many to-do methodologies (e.g. GTD, etc.)
  4. Lists had to be in a format that would allow me to interact with them from outside the core system–preferably plain text files
  5. System had to be able to sync across all my computers and devices without effort on my part
  6. System had to allow adding To Do items via email
  7. System had to be able to integrate with Evernote

The core of my new system

After reading that Lifehacker post I mentioned above, I learned of Gina Tripani’s project, Todo.txt, a simple, but powerful text-based to-do list manager. You can read all of the details on the tool,but the system is so simple, it doesn’t require a lot of reading. The system centers around 2 text files, todo.txt and done.txt. There are command-line clients for Windows, MacOS and other platforms. All these clients do is allow you easier interaction and manipulation of the 2 text files. There are also some formatting rules you can follow to get more out of the system. (For instance, beginning any line with an (A) or (B), etc. assigns a priority to a task. You can include the date you added the task and the date it was completed (the command line tools can do this automatically). You can use +Project to indicate a project name and @context to indicate a context name. There are colorization files that allow the To Do list to be highlighted in color in your command line screen. Here is what my To Do list look like on my Windows machine at work:

ToDo1.PNG

You can see how the highlighting and sorting works. You can also see that I’ve aliased some of the command line tools. To see my To Do list, all I have to do is type “t” at the command line. To add an item, all I did was type:

t add "(B) Create process maps for apps SDLC"

and hit enter. I can do this faster than I can scratch this out on paper. With the command line tools I can do things like filter by project or context. I can search for words. I can change the priority, etc. When I am read to complete one or more tasks, all I have to do is type:

t do 4, 6

This marks tasks 4 and 6 as done. It puts an X at the front of those lines, adds the date that I complete the task, removes the lines from my todo.txt file and moves them to my done.txt file. That way I have a running record of all of the tasks I’ve done.

The command line interface looks identical on my Mac at home. But how do the two stay in sync?

Remember, the “lists” are nothing but text files. So I keep both text files, todo.txt and done.txt in a folder in Dropbox. My Windows and Mac command line tools are configured to point to the local Dropbox folders on the respective computers to see the lists. Dropbox manages the syncing of files. I don’t have to think about it. If I update something at work, my list are instantly updated on Dropbox, which means they are updated at home as well.

And the todo.txt system provides mobile clients. I have a very simple app for my iPhone and iPad, both of which point directly to the files on Dropbox. Here is what the iPhone app looks like for my current To Do list:

photo.PNG

The iPad version looks similar. Completing a task is as simple as swiping the task and touching the “Complete” button. Since the underlying files reside on Dropbox, everything syncs up. Adding tasks are very easy, too, and there are quick buttons for setting priority, context, and project.

So far, this is the simplest system I’ve found. If you run through my first five requirements, it meets them all to my satisfaction.

The power of automation

The last two requirements center around automation and making it easier for me to manage my lists. Once again, because this system centers around 2 plain text files stored in Dropbox, automation becomes a piece of cake. In fact, requirement #6–adding To Do items by email–required no coding at all. Here is how I did it:

  1. Set up a new email address in my domain specifically for To-Do items.
  2. Automatically forwarded this email address to my Gmail account.
  3. Set up a filter in Gmail that labels any email that is sent to the address created in step 1 with the “To Do” label
  4. Used IFTTT to create a recipe that takes any new Gmail messages labeled “To Do” and appends the subject line of the message to a file in Dropbox–namely the todo.txt file.

So now, if I sent an email to my To Do email address, within a few seconds, it shows up on my To Do list. Of course, I need to format the subject line the same way I would in the command line tool.  In the sample I used above, the subject line of the email would look as follows:

Subject: (B) Create process maps for apps SDLC

No message body is required, and indeed, the message body is ignored. But the item gets on my To Do list. This provides a convenient way of allowing my wife to add things to my list.

All that leaves is requirement #7: system has to be able to integrate with Evernote. I did this integration in a couple of places, but most of it did require some coding and the use of at least one additional service. The benefit is that I’ve automated several things and saved a ton of time in the long run. Here is what has been automated:

  1. Any note in Evernote that contains an unchecked checkbox and has the text “@todo” in the same line of the checkbox is automatically added to my to-do list.
  2. Any item in my to-do list that contains “@en” in the text is added to Evernote as it’s own note.
  3. Once each day, any items in my done.txt file that were completed that day are compiled together in a single summary note in Evernote with a Note title: “Items completed on mm/dd/yyyy”

To create to-do items out of unchecked items in Evernote marked @todo, I made use of GeekNote, a command-line client for Evernote which was a runner-up in the Dev Cup finalists this year. I wrote a perl script that uses GeekNote commands to find any notes created TODAY that have unchecked boxes. I then parse the text of the note looking for lines that contain “@todo.” These lines are then appended to the todo.txt file, which syncs up to Dropbox. This script currently runs once a day at around 6pm, after work, because I generally only use those checkboxes in my work meeting notes and phone calls.

I also use GeekNote and a perl script to read through my todo.txt file and identify any To Do items marked “@en”. For each one it finds on a given day, it creates a new note in Evernote using the To Do item as the title for the note. This also runs just once a day. I use this for to-do items that I think I need to capture information about beyond the basic action in the future. It’s nice to have a single note for the To Do item in these cases, and this provides an automated way of creating them.

Finally, once each night, I have a perl script that finds all items completed in my done.txt file for the day and uses GeekNote to create a single note listing all of the items I completed. This note is given a title of something like “5 items complete on 08/22/2012.” It provides a kind of automated diary function so that I can easily see inside Evernote the items I completed on any given day.


This system has worked incredibly well for me in the 10 days or so that I’ve been using it. I spent a lot less time futzing with apps and complicated list managers and more time actually do the things on my list. The automation has been a huge win for me as well, and the simplicity of the system behind the scenes makes it easy to manage and integrate with other systems, like Evernote.

13 comments

  1. Sounds good for you…too complicated for me and I think for most
    other less sophisticated users. Fix this so we can just download, and actually use it…not paste text,etc. But good for you…wish my todo list worked so well…

  2. Very neat! I love the simplicity of the system. Can you please post the perl script you use to copy the items from done.txt to Evernote each day?

    1. Sabrina, sure. I’ve put my code below. Keep in mind this requires having Geeknote installed on your local system. Assuming it is installed, here is how I do it:

      #!/usr/bin/perl

      # Grabs all completed items from done.txt and sends them to a single note
      # in Evernote using Geeknote command-line tools

      use POSIX qw/strftime/;

      my $PYTHON_PATH = "python";
      my $GEEKNOTE_PATH = "[INSERT PATH TO geeknote.py ON YOUR LOCAL SYSTEM]";
      my $DONE = "[INSERT PATH TO done.txt ON YOUR LOCAL SYSTEM]";

      my $today = strftime('%Y-%m-%d', localtime);
      my $count = 0;
      my $body = "";

      open DONE, "<$DONE" or die $!;
      while ()
      {
      chomp;
      $_ =~ /(\d{4}\-\d{2}\-\d{2})(.*)/;
      if ($1 eq $today)
      {
      # ASSERT: the item was completed today
      $match = $2;
      $match =~ s/^\s//;
      $body .= "$match\n";;
      $count++;
      }
      }

      close DONE;

      $title = "$count tasks completed on $today";

      # Create note via Geeknote
      `$PYTHON_PATH $GEEKNOTE_PATH create --title "$title" --content "$body" --notebook "Timeline"`;

      Running the perl script (or scheduling it to run) results in a single note being created in Evernote. The title contains the total number of items completed on the date specified and the body contains a listing of all the items completed.

      One thing to keep in mind: geeknote communicates with Evernote's servers, instead of your local machine, so if you run the script and don't see the note show up right away, try forcing your Evernote client to sync with the server. (You can do this programmatically via Geeknote as well, but I don't bother.)

      1. I am not an IT person, but I do love technology. So, I figured out how to get Geeknote installed on my computer and get it running. Then I tried to type in the code that you wrote, and it gave me the error: ‘#!’ is not recognized as an internal or external command, operable program or batch file.

        I’m still trying to learn because I really love this functionality. If you have any quidance for me, I would greatly appreciate it.

        Thanks!
        Angie

        1. Angie, you also need to make sure you have perl installed on your machine. I realize that I didn’t explicitly state this in the post, but I figured it was implied by the perl script in the comment. If you are on a Mac, perl should be there already. If you are on Windows, you can download a version of perl from ActiveState.

          1. Thank you!! I’m getting closer. Now if I can just figure out how to make sure it’s running the script. I have downloaded so many things today, I’m not sure what needs what. 🙂

  3. I really wish that the “Clear” iOS app would tie into something like this for it’s backend!
    app store page: http://itunes.apple.com/us/app/clear/id493136154?mt=8
    demo video:

    I love how this mobile app provides an almost gamification type reward (sounds and fun UI) but it really needs some back-end infrastructure to close on some huge integration gaps to be a viable player in my daily task-list handling…

  4. This is flipping awesome! I’ve been working on something like this for a while but could never quite pull it off. These tools make it so easy. One issue I had though was that gmail would bypass the inbox on emails that I originated. So they would never be seen by ifttt. This was true even if they were forwarded from a separate account on my domain as you instructed. I worked around this by having my “virtual assistant” account re-route to a brand new gmail address. And then used an brand new ifttt account that monitors that new gmail address (because an ifttt account can only monitor one gmail at a time) and posts to my original dropbox. Thanks!

  5. Thanx! I didn’t know Geeknote, after reading your post I installed in a LXC Linux container and played with it. Great tool! It will help me to automate one more part in my workflow.

    Keep on writing this kind of postings, they are really inspiring 🙂

  6. I love this, I just set it up for me and it works great. I’m new to Perl scripting and wondered if you could also list the code for the “perl script that uses GeekNote commands to find any notes created TODAY that have unchecked boxes. I then parse the text of the note looking for lines that contain “@todo” and the “@en” etc”.

    Thanks again for the great post

  7. Fantastic Blog! I use todo.txt on iOS and was looking for some kind of integration with Evernote. Had never heard about GeekNote.

    I see you posted one of your Perl scripts above. Any chance you could post all of them … perhaps to your “Shared Templates Notebook” ? The one that extracts unchecked items is EXACTLY what I was looking for (I take notes in Evernote and was missing items on my todo list)

    Thanks again.

  8. Hi Jamie,

    thanks a lot for sharing your experience and explaining your system!
    Did you ever consider org mode (http://orgmode.org/) for your todo lists?

    It is also based on plain text files, but also has a lot of features built in for tagging and sorting.

    Kind regards

    M@rtin

Leave a Reply to Matto FransenCancel reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.