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 :)

    2 Comments »

    There’s a bit of a demand over at the EverNote forum for a slight adjusted phone template. Now that I’ve introduced you to the EverNote Template engine, and got you started on changing labels, I’d like to address the following requests re the phone template:

    1. When the phone message is added to the tape, it should have the “To Do” and “Phone Message” categories automatically selected.
    2. The order of the fields should be: Phone, Name, Message. (The default is Name, Phone, Message.)
    3. The cursor should go to the Phone field when a new phone message is added.
    4. Tab/Shift-Tab navigable.

    The last request on the forum was to have some real logic built into the template so that you could have either clickable buttons or a drop down list with alternative outcomes to the call. Depending on which choice you picked, the status of the note would change from “To Do” to “Done” and a specific time-stamped message would be added to the message. I’ll tell you right now - that one’s too complicated to even think about ;) There was also a request for an auto-hyphenated phone number. Sorry again, I don’t believe that this is possible either. The EN template engine is just not sophisticated enough for that kind of behaviour. As I mentioned on the forum itself; we’re not talking about Microsoft Access here.

    The other points I should be able to do something about.

    Order of Fields

    Let’s do the easy one first. Similar to changing labels, it’s pretty easy to move fields around. You just have to be consistent.

    Let’s take a look at the Phone Message template in the template editor. I’ve circled some interesting parts in the figure below:

    The name label is the first cell, followed by the name field, followed by the phone label, followed by the phone field. You’ll notice that each cell in the table is represented by a <td…></td> tag. As long as you don’t mess with the contents of the tags, you can just reorder them in the same row.

    So, just cut the first two <td…></td> rows (the ones that contain Name: and echo name) and paste them directly below the other two rows.

    Before

    <td width=”15″ align=”right” valign=”bottom” bgcolor=”lavender”><IMG src=”phone.png” width=”16″ height=”16″ border=”0″> <b>Name: </b></td>
    <td width=”40%” align=”left” valign=”top” bgcolor=”white”><%echo name %></td>

    <td width=”15″ align=”right” valign=”bottom” bgcolor=”lavender”><b>Phone: </b></td>
    <td width=”40%” align=”left” valign=”top” bgcolor=”white”><%echo phone %></td>

    After

    <td width=”15″ align=”right” valign=”bottom” bgcolor=”lavender”><b>Phone: </b></td>
    <td width=”40%” align=”left” valign=”top” bgcolor=”white”><%echo phone %></td>
    <td width=”15″ align=”right” valign=”bottom” bgcolor=”lavender”><IMG src=”phone.png” width=”16″ height=”16″ border=”0″> <b>Name: </b></td>
    <td width=”40%” align=”left” valign=”top” bgcolor=”white”><%echo name %></td>

    Now, hit F5 to refresh the preview panel, and you now have:

    Automatic Categories Assigned to Note

    This one’s pretty easy. You can make autocategories in EN that are based on the template type. So, all you need is a category that automatically filters on notes whose template is “Phone Message”. Problem half-solved. For the “To Do”/”Done” category, you can do it as well with the automatic To Do/Done categories in EN. All you have to do is turn the phone message template into one that makes use of a checkbox.

    Because this is a standard template, i.e., not a fully editable one, you can’t insert a manual checkbox, say by using Ctrl+Alt+C. Instead, we’re going to have to add a checkbox field to the template.

    The easiest way to learn how to modify templates is to look at other ones to get ideas. In this case, let’s look at the “To Do List” template, since I know it uses checkbox.

    Here’s what the variable declaration part of that template looks like:

    The type “checkbox” is what you want to use. You can name it anything you want. In the To Do List, you see done[], which means that the variable name is done, and the [] means that it’s an array (because the To Do List has rows, each one of which has a checkbox). In our case, we don’t need an array, since we only want one checkbox. Let’s call it “done”. So, we need to put this declaration in the Phone Message template’s variable declaration.

    Before

    <% string name, phone, message; %>

    After

    <% string name, phone, message; checkbox done%>

    Now we need somewhere to put it in the template itself. I think the easiest part will be to simply add another cell to the first row of the table. I’m not going to bother with a field name for it (that would require another cell as well). And I think I’m going to stick it as the first column, so the first thing you see is the checkbox.

    Adding a Cell

    As I said earlier, a cell in a row is in a <td…></td> tag. To add a cell, figure out in the code where you want it to go, and just add a new <td> line (Blue shows changes).

    <tr>

    <td width=”5″ bgcolor=”lavender”><%echo done %></td>
    <td width=”15″ align=”right” valign=”bottom” bgcolor=”lavender”><b>Phone: </b></td>
    <td width=”40%” align=”left” valign=”top” bgcolor=”white”><%echo phone %></td>
    <td width=”15″ align=”right” valign=”bottom” bgcolor=”lavender”><IMG src=”phone.png” width=”16″ height=”16″ border=”0″> <b>Name: </b></td>
    <td width=”40%” align=”left” valign=”top” bgcolor=”white”><%echo name %></td>
    </tr>

    After

    The first thing you’ll notice is that the template looks hinky, like this:

    That’s because we added a cell to the first row, but not the second, so it’s lopsided. I’m going to take care of this by making the “Message” label in the second row span two columns. You do this by adding ‘colspan=”2″‘ to the <td> tag for that field, like this:

    <table cellSpacing=”collapse” border=”1″ bordercolor=”#ADB6DE” cellpadding=”2″ width=”100%”>
    <tr>
    <td width=”5″ bgcolor=”lavender”><%echo done %></td>
    <td width=”15″ align=”right” valign=”bottom” bgcolor=”lavender”><b>Phone: </b></td>
    <td width=”40%” align=”left” valign=”top” bgcolor=”white”><%echo phone %></td>
    <td width=”15″ align=”right” valign=”bottom” bgcolor=”lavender”><IMG src=”phone.png” width=”16″ height=”16″ border=”0″> <b>Name: </b></td>
    <td width=”40%” align=”left” valign=”top” bgcolor=”white”><%echo name %></td>
    </tr>
    <tr>
    <td
    colspan=”2″ align=”right” valign=”top” bgcolor=”lavender”><b>Message:</b><p><br></p></td>
    <TD width=”*” align=”left” valign=”top” colspan=3 bgcolor=”white”><p><%echo message %></p></TD></tr>
    </table>

    Now you have this:

    Not bad for a first attempt at a serious modification.

    Removing the Phone Icon

    If you want to move the phone icon, or remove it altogether, that’s also possible. If you look at the line containing the Name label:

    <td width=”15″ align=”right” valign=”bottom” bgcolor=”lavender”><IMG src=”phone.png” width=”16″ height=”16″ border=”0″> <b>Name: </b></td>

    The phone icon is everything in the <IMG…> tag. to move it, just cut that tag and place it where you want. To remove it, just delete it altogether.

    Tab Navigation

    Because we’re dealing with a standard template still, it is tab-navigable. Tab moves you through the fields in this order: Phone -> Name -> Message -> Phone. Shift-Tab goes backwards.

    Start in Phone Field

    Through some bizarre quirk in EverNote, be it in EverNote or in the underlying editor, the cursor starts in the field that was last active, the last time you were in a note of that template type. So, if you’re working in a phone message note, and the last thing you type is in the message field, then the next time you create a new phone message note, your cursor will be in the message field. Nope, I don’t know how to change that. I’m pretty sure that the template engine doesn’t have an auto-focus capability in it.

    Final Result

    Here’s what the final template looks like. (Note the phone icon is above Name because I made my EN skinny to take this screenshot.)

    Download the xml here. Import it under Tools/Templates/Import. Done.

    No Comments »

    Second last post on my Super-Duper Personalized Productivity Background series (see end of this post for a list of other posts in this series). Again, I’m talking about getting a wickedly cool productivity desktop background for your computer, using such lovely things as: Cygwin, Remind, Samurize.

    But today, we’re not focussing so much on productivity, as on keeping your TV schedule straight. Of course, you could always modify this to keep some other schedule straight - work outs, kids’ soccer games, etc. The point being is that you have some things that you want to keep track of, but not necessarily on your main calendar.

    Let’s say that I watch TV and that I have a few favourite shows, but I never remember what’s on when. So, I create a little text file with information about the regular dates and times for these shows. It looks like this:

    rem wed at 21:00 msg Criminal Minds %b
    rem sun at 21:00 msg The Apprentice %b
    rem tue at 20:00 msg NCIS %b
    rem thur at 20:00 msg Survivor: Fiji %b

    The %b tells Remind that in addition to seeing the date/time of the reminder, I’d like to know in how many days time it will happen.

    What I’d like to be able to see, on my desktop, is a list telling me when my shows are on next. I just want to know that Survivor is going to be on in less than a week, but before then, I can watch the Apprentice. This will make more sense with an example. What I want to see is output that looks like this:

    See how it tells me the date and time of the next episode of each show? And even easier for me, it says in how many days time. If the Apprentice was on today, it would say “today”, etc. And, it’s even sorted in order the next episode.

    How is this magic accomplished? More console program meter goodness in Samurize. In this case, the command line is simply

    f:\todo\bin\tv.bat

    But what is tv.bat? Well, I couldn’t get Samurize to do exactly what I wanted just from the command line (I couldn’t figure out how to pipe the output from a remding command to the sort command), so I just made a simple batch file that calls on remind to output the information, and then pipes it to sort, so that I see it in the order I want. The guts of the tv.bat file are:

    f:\todo\remind-03.00.24\src\remind.exe -n f:\todo\tv.txt | sort

    The -n argument to remind “causes Remind to print only the next occurrence of each reminder in a simple calendar format” (source: Remind man pages). The | is the pipe command (beautiful, takes the output from one command and feeds it as input to the next command), and the sort just, well, sorts it. Because each line starts with the date, it’s easy to sort it by next viewable episode.

    And that’s it. Quick and dirty little list to show you the next occurrence of your special reminders.

    Other Posts in this Series

    No Comments »

    I’d like to introduce you to another new blog, focusing on productivity through GTD, and a good life through balance.

    The Daily Saint is an extremely well-written blog, with posts that are interesting, informative, and just the right length. So far, Mike St. Pierre, has covered some of my favourite topics:

    As the name of the blog might imply, there is a certain Christian faith-based undertone to the blog, but I find that the posts are very much non-denominational. If you’re looking for another perspective on productivity, and especially Getting Things Done, check out the Daily Saint.

    1 Comment »

    When I had troubles this week trying to host the new EverNote Template Editor program on my web host, I got extremely annoyed, and decided I wasn’t taking it anymore.

    Based on word-of-mouth advertising (thank you Sigler), I immediately got myself a GoDaddy account, and even bought my own domain name, for the super-low price of $1.99.

    Now that the initial flush of irritation is over, and I’ve spent some time migrating from the old host, I can look back and examine my impulsive decision. Well, all I can say is, man, why did I not do this ages ago????

    Customer Service

    I have to say that not only is GoDaddy inexpensive (good enough for a starving student), but the service is great too. I was working away last night and the phone rang. Here is an approximation of the conversation:

    “Hello, is GTD there?” (Actually, they did use my real name ;)).

    Yeah. (Mentally, friggin telemarkers, what do they want now, grrr.)

    “Hi, this is so-and-so from GoDaddy.com. How are you?”.

    Uhhhh. Good. How are you?

    “We’ve just wanted to thank you for your business, and wanted to know if you had any questions.”

    Wow, thanks. No, I’m okay….No, wait, I do have one question. How do I figure out how much space I’m using? (I’ve looked all over the site and can’t find those stats.)

    “Oh, well that’s easy, you just….Here, I’ll tell you right now what you’re using…”

    Cool, so I just click….

    “Yes, that’s it.”

    Well thanks.

    “Is there anything else we can help you with?”

    No, no, that’s great.

    Did I ever get a phone call from the other place? Nope. When I sent the other place an email asking a question, did they give me a personalized answer? Nope, they cut and paste from an FAQ. Like I can’t read the FAQ. Did I get satisfaction from the other place? Guess.

    FTP

    And you want to know the other great thing about GoDaddy? The FTP actually WORKS! You may have noticed that I’ve played with Windows Live Writer in the past, but kept having to give it up because I couldn’t get images uploaded via FTP to my old host. I thought is was a WLW, or even Blogger, problem. Nope. It was an FTP problem. Now, I can use WLW to make wicked long posts with screenshots embedded in them. No more having to clip a screenshot, save it as an image, upload it to Blogger, paste it where I want it. I can just clip and paste, right into my editor. Sweet. This means you’ll be getting even more tutorials/walkthroughs from me, because now I have the technology!

    Summary

    All I can say is, if you’re looking for a web host, and/or your very own domain name, give GoDaddy a look-see. They offer a whack of services, even services for starting your own blog, creating web pages, etc. Most of the extras (great for newbies to publishing online) cost, but the prices don’t seem extravagant. I’ve gone with barebones service, and I’m loving it so far. I’ve got the smallest amount of space, which is still a whopping 5GB! And how much am I using for my EverNote template pages, catalogue, and recent images?

    It will take me a long time to fill that up!