I mentioned a little while back that I'm using Tinderbox as a kind of daybook to record thoughts, ideas, notes and activities throughout the day. I'm really enjoying using it, and the experience of gradually adapting the structure of my Tinderbox document has been interesting and fun. I also posted a request a while ago for suggestions for simple software that would allow me to log my time at work. People responded with some great suggestions, and I've since found a few more. For example, I love RedBook: it's a commandline task logger written in Ruby, which has a simple method of storing the data (as YAML-format files) and can export and display the data in a number of formats.
However, in the end -- good though they were -- these applications felt like adding another layer of complexity on to something that I wanted to be transparent and effortless. Then it hit me that I was already jotting down what I was doing in Tinderbox, so if I could store start and stop times as attributes of those notes, I'd be half way to logging my time. What follows is probably only interesting for fellow Tinderbox nerds or serious geeks. You have been warned :-)
So I created a new prototype called 'timecard' which has key
attributes of startTime, stopTime, intDuration (calculated in seconds
from the start and stop times) and duration (which is nicely formatted
in text as hh:mm:ss). I create a note as usual, using the title of the
note to describe the activity, then drag it to an adornment, which has
OnAdd rules to set the tag attribute to 'timed', and set
startTime to the time now. When I'm finished with that activity, I drag
the note to another adornment which sets the end time to now and
calculates the duration in seconds by passing the start and end time to
a little Ruby script I wrote, helped a lot by a
on the Tinderbox forums. The notes can sit on that adornment until I've
got time to take stock, or the end of the day, whichever comes sooner!
Then I drag them to another adornment, which just shoots them back into
a Timecards container. I've set the adornments up to be a kind of
electronic version of one of those time card punch machines you see in
factories, and that's the way I think of it.
I've also set up a variety of ways to view the information that this
system collects. In the first screenshot, you can see that I've set up
DisplayExpression for the agent which collects today's timecards to
show me the total amount of time I've worked so far today. In the
second, I've used the spiffy new
bargraph() function to set the
Pattern attribute of an agent collecting the past week's worth of
timecards to show the total time for each day in a kind of sparkline
graph. When I've accumulated enough data, I'll probably do the same
for the past few months as well. Finally, I've created an HTML export
template for the timecards, which formats the task descriptions and
times for an agent (usually today's times) as a pretty HTML table, so I
have a summary record for each day.
Since I don't have to collect precise hours for invoicing or anything like that, the absolute values are not particularly important. I only time tasks when I'm properly focussed, not when I'm being interrupted by calls, conversations with colleagues and so on, so it's quite a good relative measure of how much solid, productive work I'm able to accomplish. It has been really interesting to track it from day to day. I'm actually using it as a sort of game to motivate myself to devote uninterrupted time to important tasks, just so that I can watch the bars climb for each day!