4 Comments »

Some time ago, I discovered that I didn’t really have a projects list. So, I decided to do something about it. I did some searching to see what other people did with their projects lists, and then came up with my own solution. Basically, I kept a “list” in MindManager, divided by kind of project. Then, in the weekly review, I would make sure that every project had an NA, and every NA had a project. Or something like that. I also included EverNote, as that’s where my project support materials live.

Well, that kind of manual checking, editing, tweaking, changing, etc. lasted for exactly two weekly reviews. No go. Manually checking to make sure that every project has an NA - ugh. And for every project NA in my todo.txt file, make sure that there’s a project in the mind map, and in EN? Double ugh. There had to be a better way to do it.

Unfortunately, in my searches, I haven’t found many programs that would let me do my NAs the way I want, and keep track of my projects, the way I want. I think that something like Tracks would come closest, but even then, there are things missing, for me. What to do? Well, I’m obviously loath to give up my Perl/DOS todo.txt scripting goodness, so was there a way to make this system work with projects?

Turns out that there was. It took a few hours of coding, spread out over a few weeks, but I now have a project list management system that I’m really pleased with. It works beautifully in the weekly reviews, which is when I need it most.

Background

I keep my next actions in a text file, called todo.txt. Some of these next actions have projects assigned to them, e.g., [Blog] Blog about blah…, where [Blog] is the project name. Some of the requirements that I had for a project list management system were the following:

  • It had to be easy to add and delete projects from the list.
  • It had to allow me to have different types of projects, e.g., “now”, “later”, “deferred”, “waiting”, “someday”, and “recurring”.
  • It had to allow me to easily move a project from one category to another.
  • It had to link with my next actions, automatically. Specifically, I wanted to be able to retrieve the following information easily:
  • Which of my “now” projects didn’t have any NAs assigned?
  • Were my “waiting” projects really still waiting?
  • What were the NAs for a specific project?
  • A list of all projects, divided by category.
  • A list of all projects that had absolutely no NAs assigned?
  • Similarly, a list of NAs in my todo.txt that had projects, but the projects were missing from the project list.
  • For “deferred” or “waiting” projects, I wanted to know what the trigger was, i.e., why was a project deferred (basically - unstartable) or what was I waiting for. I had to be able to add or change these triggers easily.
  • I had to enjoy using it. I wanted to be able to do all of these things from the command line, with pretty output, and without having to go into the actual text file with an editor.
  • The System

    All I did, basically, was create a new text file, called projects.txt. Each line in this file is a project. Each line looks something like this:

    [#Reading] now

    where the term in square brackets is the project name (no spaces please) and the next term is the type of project. I also have more complicated lines, such as:

    [Aeroplan] deferred trigger(next statement)

    where the trigger() just tells me what’s causing the project to be in deferred or waiting mode. Note that I use deferred for projects that I don’t want to start yet, or that need a particular occurrence to happen first. I use waiting for projects for which I’m actually waiting for input from someone else.

    After creating the text file, I just started messing with my todo.pl Perl script, adding in subroutines to deal with the projects.txt file. Simple things like adding a new project, or even changing the type of a project were pretty easy. It got more complicated when I got into things like outputting a certain type of project, along with a count of the different kinds of next actions (e.g., doable now, not startable yet, waiting for, etc.) I really enjoyed coding all this functionality, more than I enjoyed the initial coding that gave me the todo.pl in the first place. Part of the fun was discovering Perl’s printf statement, which can be used to output text in columnar fashion - very cool, and you’ll see how I put this new knowledge to good use.

    ScreenShots

    Now to show you what my new baby can do!

    Projects Command

    The “projects” command shows me all of my projects, divided by type. I used the printf statement to get the columns so nice. I did have to set it up so that longer project names are truncated, but that’s okay - it was more important to see everything in one row. The purpose of the Unknown column is to simply keep track of any project in my list that hasn’t been assigned a proper type. I’ve also got counts of how many projects of each type.

    Showall Command

    The “showall” command shows me all of the projects, of a particular type, with counts of the different kinds of next actions for each project. An NA is considered a “now” if it is doable right now. It is a “wait” if its context is @waiting. It is a “defer” if it can’t be started before a certain date, some time in the future. Finally, it is a “someday” if it’s been marked @someday. The purpose of this output is to show me, at a glance, that all of my “now” projects have a “now” next action, i.e., each project has something that I can do, right now, to move it along. All I have to do is look for zeroes in the “now” column.

    Show Command

    Sometimes I want more detail for a specific project. The “show” command does just that for me. First it shows me a count of each kind of NA for that project, then it lists out the next actions in all their detail. You’ll notice a bit of a goof here though - my “defer” count is 1, even though two of my NAs are actually startable. Obviously I have a tiny logic error somewhere. It’s not major, but I’ll make a note to fix that bad boy later.

    Review Command

    The purpose of the “review” command is to compare the projects that I have in my official projects list, with those that are read off the next actions in my todo.txt file. It’s possible for me to add a next action, with a project assigned, but to not have that project in the official list. This often when I start off on a new tangent. It’s also possible, actually highly likely, to have projects in my official list, that don’t have any next actions assigned. For example, I might have something like “Learn to Fly” as a @someday/maybe project, but there’s not going to be anything in the NA list for it. Similarly, I have certain projects, that keep coming back over and over, but they don’t always have next actions currently. One example might be something like TweakComputer or Backup.

    So, here I can see which projects are in one list, but not the other. The goal is two-fold: (1) there should be nothing listed in the left column; (2) there should be no “now” projects listed in the right column.

    Conclusion

    I’m not going to release another general purpose exe file, like I did the first time around. I don’t think there’s any demand for it. Instead, anyone with Perl chops can email me, and I’ll send you my script. You can take what you like from it. For the rest of you, I just wanted to show you what I think a good project list management system could look like. If there are any tools (on- or off-line) that can do this kind of thing, while also keeping track of next actions, contexts, deadlines, etc., please let me know in the comments. Maybe there’s more out there to play with :)

    No Comments »

    Before I can continue with my Super-Duper Personalized Productivity Desktop background series (see intro and stack), I need to introduce you to the software required to get your text-based calendar onto your desktop background.

    First, for you folks that are living in Windows, you need to make the acquaintance of Cygwin. Cygwin is described as a UNIX-like environment for Windows, which basically means that it lets you do things in Windows that Mac users, UNIX users, and Linux users can already do.

    Then, armed with Cygwin, you can make use of the Remind application. Funnily enough, even though “remind” is a very common word, if you google “remind”, the first hit you get is what we’re actually talking about, i.e., the Remind open source product over at Roaring Penguin. Remind is “a sophisticated calendar and alarm program”. I’ve only started scratching the surface of what I can do with Remind combined with Cygwin, but it’s actually enabled me to stop using Outlook for my calendar. I don’t want to get anyone too excited though; working with Remind is not for the faint of heart. However, if you’re into geeking and into text files then you too can have your calendar showing up on your desktop with Samurize, just like in this picture.

    The Remind Calendar - Where to Find Help

    Instead of trying to explain Remind to you, I’m going to point you to the sites that I went to when I was learning about it. Suffice it to say that you start with a text file, a certain syntax to describe appointments, due dates, etc., and Cygwin to run it all on a Windows machine. These sites are great, and when I have questions, I go back to them.

    • The “purest” information about remind will come from its man pages. To get to this “manual”, at the cygwin prompt, simply type “man remind”. Or, you can look at this pretty html version, available at the Roaring Penguin.
  • Geek to Live: Keep Your Calendar in Plain Text with Remind (LifeHacker)
    • A seminal post; more enthusiasm for text files and remind, and this time from a Windows perspective. This will be the best place for Windows folks to start.
  • Guest: Mike Harris looks at “Remind” (43Folders)
    • I think this was actually where I got my first look at Remind. Anything that Merlin Mann does has got to be eminently cool and “tryable“.
  • 43Folders Remind Wiki Entry
    • Another great resource, includes script snippets, use cases, helper utilities, etc.
  • Remind: The Ultimate Personal Calendar (Linux Journal)
  • Manage your time with Remind (Linux.com)
  • These last two I include for the sake of completeness. I’ve spent quite a lot of time searching online for more information, examples, etc. for Remind. Unfortunately, there doesn’t seem to be all that much. The posts I’ve linked to above are it. If you have any other links to online Remind resources, please let me know; I’d like to update my library.

    4 Comments »

    I’ve recently come to the realization that I don’t actually have a real projects list. According to David Allen, in Getting Things Done,

    The “Projects” list is not meant to hold plans or details about your projects themselves…it’s just a comprehensive index of your open loops. You actually won’t be working off the “Projects” list…The real value…lies in the complete review it can provide (at least once a week), allowing you to ensure that you have action steps defined for all of your projects, and that nothing is slipping through the cracks.

    Now, I have created a little checklist for myself for doing my weekly review. In it, I have an entry for going through my projects list in EverNote. It turns out that I don’t have a “list” per se. Instead, I have a bunch of categories (headings, if you will), of projects that I’m working on. I can tell when a category relates to a project, because I put my project names in square brackets, e.g., [Research]. But these category headings are buried in thousands of other headings. There is no one place for me to see all of my ongoing projects, or open loops. As you can see from the snippet below, it’s a pain to actually see what projects I have on my plate.

    From the next action side, I can output a list of projects that I currently have next actions for (from my todo.txt implementation). However, this just shows where I have an NA for a project - it definitely does not show me any projects for which I have *no* NAs. And really, that’s the whole point of that part of the weekly review - making sure that you have an NA for each and every project that you’re working on. And, as you can tell from the little piece below - I don’t seem to have that many different projects in my todo.txt file - which means that I’ve obviously lost track of some/a bunch/many open loops. Ooops.

    So, I need to figure out a decent way of keeping track of my projects list. I’ve already determined that I can’t keep it in EverNote. EverNote really stores all of my project support materials, and it’s not suited to keeping one particular note open (say a project list), while you wander through the rest of the database, looking for information about what has been done, what needs to be done, etc.

    I’m going to spend some time thinking about what I need my project list to be able to do, what it should look like, where I should keep it, etc. After determining my requirements, then I will create the list. Of course, the easiest way would just be to (gasp) write everything down on a piece of paper. Maybe I’ll just start with that. Other simple options would be a plain text file, a simple Excel spreadsheet (then I could add a bit of information to the projects, such as personal/research/delegated). Part of me wonders if I can include this in my todo.txt file somehow, maybe by just adding in a line per project. Then I could do some Perl magic to tell me what projects I have, which projects are matched with NAs, which aren’t, etc. Already, I can see this as a great way of coding the weekly review - simply have the Perl script tell me which open loops I have missed. Of course, this coding will take time. Hmmmm.

    Anyway, I’m off to see what other people do with their project lists. Wish me luck, and stay tuned for “The Hunt for the Projects List”.

    7 Comments »

    The Story So Far

    So far, we’ve covered: introducing the text fetish todo.txt system, describing the format of the next action line, how to retrieve information, how to do basic editing, and how to work through the next actions. Note that this last doesn’t actually help you in the “Doing” phase of Getting Things Done - it just helps you mark next actions as done ;) As a complete sidebar, the “story so far” heading is a nod to an amazing podcast novel that I’m listening to. Just so you know.

    So, what are the mechanics of this fancy-schmancy text fetish system? The original inspiration, which can be found over at todotxt.com uses a plain text file, and a plain script file, but does require you to have Cygwin installed. Originally, I didn’t want to install cygwin, for whatever reason, so I decided to teach myself Perl while creating a Perl scripting system to do the same things. This also gave me the advantage of being able to really change the format of the output, so it worked best for me. Now, the system consists of one massive Perl script (yeah, I know, not optimized, since it needs to compile every single time I use a command) and a whack of dos batch scripts. I could just call the Perl script from the command line, but really, where’s the time savings in that? So, I created the batch scripts to make things simpler.

    I’m willing to offer up the Perl script to those who email me. Just because I want to keep track of how many people have it. And for those of you who don’t have Perl installed on your machines - don’t fear. I was able to create an executable file, with all the goodness built in. This exe can be called directly from the command line, or you can us a big-ass batch file to make things simpler for yourself :)

    Alpha Testing

    I’ve been testing the system now myself for several months, and I’m pleased with it. However, I haven’t tried to break it in a million different ways, so anyone who wants to use it, be forewarned - you are basically beta testers. I do encourage you to try it out, see if you like it, and let me know, either in the comments, or in a direct email (you can find an email link to me in the right-hand column somewhere) and I’ll see if I can’t improve it. I do make no promises though, since this is never meant to be an out-in-the-wild software system. I just want to share my way of doing GTD, and if you can take something away from what I’ve experimented with, then I’m a happy girl.

    Here’s what you get:

    1. _todo.exe - an exe file based on my big Perl script. The best way to use it, is through the batch file below
    2. todo.bat - a big-assed batch file. You can either read through the file itself to see what it does, or just run todo from the command line, and a somewhat informative help message will be produced
    3. !getall.bat - a helper batch file that the main program needs to run. (Other batch files will be provided in a later post). Update [7 Dec 06]: added this batch file. Note: The file that you’re downloading does not have the right name, it needs to be renamed to !getall.bat.

    Here’s what you need:

    1. Download the three files above.
    2. Create a new directory; stick the files in it. If you stick with the defaults, you will end up with a todo.txt and archivetodo.txt file in that same directory.
    3. Make sure to rename the put_apostrophe_here_with_no_space_getall.bat to !getall.bat.

    Warning

    There is no fancy backing up or automatic saving of your two very important data files, i.e., todo.txt or archivetodo.txt. So, if something blows up during the execution of a command, you are, in effect, screwed. For example, I once ran a command, say edit. Then, I was dicking around, trying to decide what I wanted to change the line to. At that point in time, the script had opened the todo.txt file, read stuff in, and was was rewriting stuff back to the file. Then, something else on my machine crashed. The todo.txt was not properly closed, and in fact, was missing half the information (everything that would have been written to it, as soon as I had finished editing that one line). Not a nice thing. And not the script’s fault - it’s not meant to be running any particular command for 30 minutes.

    The morale of the story - you would be wise to back up your two very important data files often. I have a system whereby a version control program on my computer takes a snapshot of these files every hour or two. Works pretty good for me. However, it would require installing additional software. Instead, LifeHacker offers an awesome tutorial on using Windows itself to create version control for you. LifeHacker rocks by the way.

    Let the Games Begin

    So, here’s wishing you much fun, and not much trouble with this. Let me know if either happens :)

    Updates

    • [7 Dec 06]: Added the !getall.batch file to this page. I’ve also cleaned out todo.bat - I didn’t realize how out of date it was; it had comands in there that no longer correponded to parts of the exe file.

    Earlier Posts in this Series:

    Categories: GTD, todo.txt