Jan 2005 15

The road to Tracks 1.1

It’s funny, but there’s nothing quite like actually using your own application day-in, day-out to give you ideas for improvements and new features. I installed Tracks on a server (at TextDrive), and I’ve been using it every day as my only ‘to do’ list. This experience has been surprisingly positive, but it has certainly highlighted the things which are missing or not done quite right. Other users have also been coming up with some great feature ideas and suggestions, so I thought I’d bring these together and discuss where I see Tracks going over the months ahead. This isn’t an exhaustive list by any means… h4. The big picture

I had two original reasons for developing Tracks. The first was that I wanted to learn Ruby and Rails, and I’ve always found it easier to learn programming with real-world examples. In many ways, I think it’s like learning any foreign language; you can read all the books you like, but you really start learning when your scooter breaks down on the way to Luca and you have to explain—in Italian—to the person who stops to help that you think the spark plugs are gunked up.

The second reason was that I had just read David Allen’s Getting Things Done, and I was keen to put the theory into practice. I tried a number of todo-style applications, as well as hand-rolled text files and scripts, but nothing quite hit the spot for me. So when I started designing Tracks, I had the GTD method firmly in mind. That doesn’t mean that I’m slavishly attached to one way of doing things (in fact, GTD itself is quite flexible in this respect), but I do think that ease of use and speed are vital. If it takes more than a few clicks to add a next action, that’s too much effort. I can see that some improvements could be made here, but my experience so far is that it’s not bad. I keep the ‘home page’ for tracks (todo/list) open in a tab in OmniWeb all the time, and when I want to add something, I just need to switch to the tab, type in a brief phrase for the description, choose a context from the list and hit return (few of my NAs have due dates). As a sidenote for other Quicksilver users, I’ve also taken to pasting the URL of any associated files into the notes field, using Redcloth to make it into a link—you just need to find the file in Quicksilver then type ‘GU’ to select the action ‘Get file URL’, and you can then drag the link onto the notes field to form an URL. This makes it easy to locate files when you come to actually process the action.

I’ve got lots of ideas for new features, but I don’t want to bloat the application or clutter the interface. That’s why I’m planning that any substantial new bits of functionality—particularly if they require a new chunk of user interface—can be enabled and disabled in the settings file. If you don’t need that feature, you don’t have to see it.

The boring bits

This will probably brand me forever as a ‘not a real programmer’, but I find writing error checking routines and bits of validation code boring. I know they are necessary, but I’m always wistfully thinking about all the new, exciting and shiny things I could be coding instead. Still—like eating spinach—it has to be done. So a big priority is going to be to do a lot more validation of the data that users enter, automatic checking of what database format they are using and so on, so that Tracks ‘just works’ transparently. When a problem can’t be fixed automatically, I need to generate more informative error messages. A good example of this would be the settings.yml file. YAML (the language) is rather fussy about the format of the file. Arnaud ran into this problem, and it was tricky to diagnose. A method which automatically checked the format of the file before trying to load it and generated an message that there was a problem with the format of the file would save a lot of time.

More flexibility

There needs to be more flexibility in the way that data is displayed. I had a request to be able to sort the display of contexts. Currently, they are just sorted in the order in which you added them (for me, this happens to be alphabetical order!). I think it would be nice to be able to sort them in an arbitrary order, perhaps with the context you use most frequently at the top. So I’m planning to provide a ‘move up/move down’ button to each item on context/list to allow arbitrary sorting, which will also be reflected on the main page. While I’m at it, I might as well do something similar for projects.

I’d also like to prevent some contexts from being shown on the front page. For example, I’d like to have a ‘wish list’ context, in which I could jot down books, CDs, DVDs or gifts I’d like to buy for other people. But I don’t want that cluttering up the main page; if I could add those items quickly on the main page, and then view them later using a bookmark, that would be perfect. I could do this with another field for each item which indicates whether or not you want to see it on the main page.

Dealing with the future

Pedro made a comment about sorting by due date that I found quite interesting. He said that he would like to be able to sort by due date, because he often enters NAs which have due dates months ahead and he doesn’t want to see them first on his list. At first, I resisted the idea because I feel strongly that due dates should only be one aspect of the importance of an item. I only use them myself when there would be no point at all in doing that action after that date. For example, if I’m going to give a talk at a conference on a certain date, then there’s no point in writing my talk after that date.

However, when I thought about it more, I realised that he had a good point. One of the strengths of the GTD approach is that you can capture everything you have on your mind in a safe place, and thus stop sub-consciously worrying about it. Some of those things—whether they have a due date or not—might not come into play until some time later. You don’t really want them cluttering up your list now, but you do want to be reminded about them at the appropriate time. That made me think about the idea of a ‘tickler file’, in which you can put things to be reminded about in the future. You could add an action and ask to be reminded about it on 1st March 2005. The action would then be held in a ‘Tickler’ context (not shown on the main page) until 1st March, at which point it would turn up in the appropriate context on the main page (and perhaps highlighted somehow, so that you notice its arrival).

Reporting

I find the growing list of completed items very satisfying. But it would be nice to be able to generate some kind of report—perhaps on a weekly basis—of what was completed, and what is still to do. From my own experience, I know that if the report also listed how long uncompleted actions had been sitting around unattended, it would be quite informative (or perhaps ‘shocking’ is a better word), and might help give me the kick I sometimes need to move forward. If nothing else, identifying items which have been hanging arond gathering dust often tells you that you haven’t really identified what the very next action is. In the long term, I’d like to produce fancy graphs of performance, and archive monthly or yearly reports of activity, but this would be a nice first step.

Shiny new features

One thing I’m missing a lot at the moment is a view of my appointments today. I use iCal, and I can easily switch to see it, but it would be much slicker to be able to see the ‘hard landscape’ of my appointments in a simple list on the main page. iCal (and some other calendar applications) use the text-based VCARD format, so it should be possible to suck that information in. If you could also add appointments, that would be super-cool, but I don’t want to get too carried away. I read an article about Webbin’ up by Reid, and was inspired by the idea of having todos, email, calendar and notes all on (or linked to on) one page. Keeping it simple, fast and uncluttered would be the trick, though.

I hope that gives you some idea of the directions I’m thinking about. As ever, if you’ve got any ideas or suggestions, feel free to comment here, on the wiki or by email (butshesagirl at this domain).

32 Comments

This might help as far as calendaring. I’m not a Mac guru, but I believe that you can setup iCal to export your calendar to a WebDav server, as TextDrive provides.  Then you could read the iCal file using the Ruby ICal module.  O’Reilly Mac DevCenter article below.

http://www.macdevcenter.com/pub/a/mac/2003/09/03/rubycocoa.html

Haven’t read it all but for the quick silver tip you can

In tracks, go to the notes field

pop up QS

select the file

choose Get URL

press TAB

choose paste into current application

Just one request, I love the fact that tracks is simple. Keep that in lind and don’t overbloat it smile)

that said some of the features make a lot of sense smile

ps: meant as a gentle nudge tongue laugh

Jim: Yes, I’ve had a look at the ICal module, but as yet I haven’t been able to make it work :-(. I’ll keep plugging away, because I’m obviously missing something. I think it’s probably the most promising direction.

Arnaud: Yes, you’re quite right. With Quicksilver, TMTOWTDI (cf. Perl’s motto).

bsag: hehe.

I just thought about something. I use Tracks on my powerbook so I run a mysql instance along with ruby. The thing is I don’t always carry it around but having an online version as well would be good to have. I mean there are sometimes when one is not online smile

The issue I would run into is synchronizing. Now, i haven’t given the idea much thought but I wonder if having a file based Tracks would make sense over a full-fledge database, I mean SQLite could even be a great choice.

Having it file based would make it easier to synchronize since I would just need to copy the file over to the server or the other way around (and for that simple scp command would do).

I don’t know ruby all that much (yet) but I assume it should be possible.

bsag:  I found this today:

http://vpim.rubyforge.org/

It may work better than the other ical lib.

further to arnaud’s file/db note:

i’ve done a lot of this sort of multi-access system coding in the dim distant past.  as a suggestion that gives bestofbothworlds: think about changing your code so that all Data accessing/modifying goes thru your own custom functions/objects/whatever. 

have those functions auto-export to flatfiles. thrown as asynch since it’s just export. simple tabledump in tab-separated quote-delimited format—depending on your db libs this may or may not be built in (the SQL syntax is “export TABLENAME as FILENAME tab-separated”, but very very few “r”dbms’s support full SQL DML)

on Reading, those objects can, if they fail to get the expected tables from the db, look for the flatfiles, then use them to either rebuild the db locally, or if no db at all, run with their contents in read-only mode.

just a thought.  no idea if this fits your code structure or your appetite for lowlevel universality faff

Arnaud and Saltation: Both are interesting ideas. I think something like this (at least as an option, or in one kind of Tracks) would be a nice idea, because true portability would be really sweet. I don’t really know anything about how ‘light’ DBs like SQLite or flat files compare to mySQL performance-wise, or how they well they scale with big databases. Anyway, I’m going to put the idea on hold until Rails 1.0 comes out. There’s a plan to make it possible/easy to generate self-contained *.exe or *.app versions of Rails apps, like Instiki, so I don’t want to forge ahead until I see whether that would be usable or not. This is partly because I’m lazy, but also because I would rather do things in a ‘standard’ Rails way if possible. But thanks for the ideas—I’m keeping notes on all the great ideas people are having, and I’ll come back to them when the time is right.

Jim: I’ve downloaded it and I’m having a bit of a play. So far, I’ve got further than I did with ICal, but it seems to be borking on the date-parsing methods. I’ll keep trying, but perhaps the great code-god is trying to tell me to stop fiddling with iCal wink

In response to Arnaud’s comment… I’m currently using a self-contained instance of Tracks on a USB memory key.  I used the Windows install instructions (see the Wiki) to set up a SQLite database file that lives with the app and is used instead of MySQL.

Now the cool thing about this is that any machine with Ruby, SQLite, and the ruby-sqlite gem installed can run my instance of Tracks. And so I can use Tracks all day on my work WinXP machine, and the same instance of Tracks on my Mac when I get home in the evening.

It’s (almost) revolutionised my working habits.

Alan: thanks for the info. I didn’t check in much depth so I didn’t notice it would be possible to use sqlite instead if mysql. Getting rid of the mysql instance would free up resources.

I’ll have the same setup, work on windows and home with the mac. I’ll have a go at it.

I should have a thought about that smile

IMHO the answer would be to open up the application to other forms of I/O… email, IM, SMS, XHTML-MP, rather than try to package it into something portable that still depends on specific hardware and/or a full blown notebook/workstation.

maxprophet: yes, but irequires a lot more work grin

Alan: Yes, I noticed your explanation on the wiki—very cool!

MaxProphet: Those kinds of hooks to manipulate the data would also be nice, but I want to stabilise the application itself and add some more core functionality before I think about that kind of thing.

I have a slightly different angle on this myself because I’m lucky enough to work on only one platform (Mac) and on one machine (PowerBook, which take to work and back), and I have an internet connection almost everywhere. So, with Tracks on a server, I can get to my data almost anywhere, and everything is automatically synced. In fact, I tried connecting with my Treo 600 today over GPRS—it worked pretty well! The CSS needs a lot of work to make it more usable on a small screen, but I could login, browse actions and check things off. So unless I’m in a train tunnel, I can get to my next actions anywhere. wink

You’re on the right path.

For those of you suggesting a major deviation from this path. Get cracking yourself or change your attitude.

There is nothing worse than listening to USERS complain to DEVELOPERS when said DEVELOPERS are GIVING AWAY their hard work and have provided the means for you to CONTRIBUTE to the project with actual CODE suggestions instead of BLATHERING on about how it doesn’t suit YOUR particular needs just right.

Installation of Ruby and Rails is well documented. If you don’t know how to program…well, neither did we until we decided to learn how.

No excuses.
-----

joker: Wow. Have you been having trouble with USERS, by any chance wink I have no problem about people suggesting ideas, and I’ve already got a lot of great ideas from users’ suggestions. It’s true that I don’t promise to do anything—after all, it’s my app, and I’ll do what I think is best in the end. If it doesn’t fit people’s needs, they don’t have to use it. However, I’m very happy for people to contribute in any way they can. For some people, that’s contributions of code, but for others it might be ideas. That’s fine.

Dear BSAG,
I am so very impressed with what you have accomplished! I am not technically astute but want to use your program to make better use of GTD. The installation routine seems to me to be much more complicated than I am capable of handling. Is there a Windows XP installation method which would be easy and straightforward for someone like me? Also, I have a 19th century slow as can be dial-up connection which is not always reliable. The only connection I could get. Can I run your program off line? I do have access to a a mid-range (ISDN)line for download purposes. I would be so very grateful for your response. Thank you. Pastor John W. Walter

I have been using Tracks for a couple of weeks and love it. I am slowly working my way through GTD and the tracks program on my Mac has been a wonderful experience. I like the items that are possibly being worked on for the 1.1 version and think they would be helpful.

One function that I would find very useful would be a quick collection form where the items that I know I have to do can be put in until I am ready to move them into contexts, projects and actions. Right now I add them to the actions but I would like to separate the collecting from the actions and introduce a collecting, thinking, assigning process to the system. Basically it feels like this system is jumping into step 2 and does not really have step 1.

Still love it though!

The tickler idea is very good too!

Rev. John W. Walter: Jim Strupp has packaged up an “all in one”:http://www.rousette.org.uk/projects/articles/comments/all-in-one-installation-for-windows/ installation, which would be the easiest way for you to install on Windows. Using that, you’d be working offline, from your own computer.

Michael: Thanks! I’ll bear the collection idea in mind (submit a feature request on the Trac, if you like). I accomplish a similar thing using a context set up for the purpose (’Inbox’), which sorts to the top of the page. I dump actions in there if I’m in a hurry, and sort it out later.

bsag, that ‘Inbox’ contex is a good work-around and I will try that. I’d still prefer a more worked-out solution, but this could work for me until (if) then.

Thanks!

It would be nice if I could tell tracks about all my actions for a project and be able to define the ‘Next’ Next Action, such that the others don’t show up on the homepage.
I, and I’m pretty sure lots of other people, like to plan out their projects in advance.

Sohum: It’s a popular request. With the tagging in the trunk version, you can add a ‘nextaction’ tag to your next actions, and see them all in one place, which should help. And I’m still thinking about defining dependencies in projects (where there may be more than one next action).

Any word on a new stable version coming out? I am on 1.043 and think that it is great. But there does not seem to be much activity that I can see that is driving this product forward (or more importantly driving its awareness to people in order to increase its use).

Michael: It’s on it’s way. There’s actually nearly daily activity going on, which you can see on the development site timeline, and you can see the items for the next milestone (1.050) on the milestones page.

There’s not so much activity here (entirely my fault) because when I’m limited for time (which is pretty much always wink), I have to make a choice between posting here, posting on my blog or working on Tracks. I’m sure that you would rather I prioritised the latter. grin

If only I could have it all…

Tracks on the road all synced up deliciously with kinkless GTD at home on the mac.

Is there a cunning method for doing this that I might have missed ?

(I hope kinkless isn’t a dirty word here...) wink

idrise: Not a dirty word at all, but I don’t know the answer to your question. I suspect that currently it would require quite a bit of work. But the next release has a really spiffy API for getting things in and out, and also much better importing and exporting of data, so it might be do-able then. I don’t use kinkless, so I’m not quite sure what’s involved.

Name:

Email (not shown on page):

Location (optional):

URL:

Remember my personal information

Notify me of follow-up comments?

Please enter the word you see in the image below:


Support Tracks!

Sign up for Joyent online team collaboration software, TextDrive web hosting, Strongspace secure backups or Bingo! online storage and help support Tracks.

Syndication

Resources

CC-GNU GPL