6.7.2010 23:36, pesco
tags: haskell code watnu gtd
In case anyone hasn't noticed:
I have a thing for simple solutions.
So here is the third iteration of my personal to-do tracker.
Previous versions held
each task in a separate file,
possibly along with a verbose description and
several metadata fields.
This one is a return to simplicity.
As a special note, I am particularly proud of defaulting to the venerable
.plan
file to hold the task list.
I've always wished I had a proper use for it!
From the
README:
basic operation
- keep a list of tasks in ~/.plan, one per line. example:
do something
do something else
- annotate them with due dates as appropriate
12.7.2010! do something
do something else
- arrange roughly in order of priority
- group tasks by context, i.e. what could be done together
do laundry
scrub floor
visit parents
do something on way to parents house
do something at parents' house
- mark current tasks /
next actions
> laundromat
scrub floor
> read chapter on poly types
- stall tasks until a certain date
2010-08-20> bday present for dad
2010-08-25> bday present for sis
- use hashtags to name projects
code up first prototype of new #watnu
blog about #watnu on #khjk
- watnu will warn when a project has no tasks active or scheduled.
- use generic tasks to keep projects
on plan
:
keep blogging on #khjk
keep coding: #watnu #bitlbeeotr #noooo
#home #friends #school
- multiple date formats allowed. examples (all 1st of may):
2010-05-01! iso date
1.5.2010! german
5/1/2010! us
1.5.! german w/o year
5/1! us w/o year
- delegate tasks to other people, schedule activation as reminder
10.7.> [mom] do laundry
[timmy] scrub floor
- call watnu to get your current todo list.
order and grouping will be preserved from input.
- set PLAN environment variable to use a different input file
- set PLAN="-" to read from stdin
The concepts are my take on ideas from David Allen's
GTD
.
These are some data points on the design:
- Contexts never really worked out for me.
Instead of ordering tasks by priority,
GTD advocates grouping them by what can be done together.
While I agree with that,
trying a priori to name a good set of contexts
was annoyingly cumbersome.
- It was hard to keep an overview when tasks were scattered around their
separate files. This made the weekly review unpleasant.
- Long task descriptions are superfluous.
Sometimes there would be a note,
e.g. opening hours of a store,
but the vast majority of tasks are one-liners.
Tack-on notes can be added as a separate feature later.
- Only some things have hard due dates.
In general, it is more important when I plan to start something
rather than until when I must have completed it.
- Tasks of the
someday/maybe
category need not be tracked.
Keep them in a different file.
- There are always tasks that are definately
to do
but should not appear
on my radar, yet.
They might be scheduled for later or simply buried by
more pressing matters.
The program is just short of 180 lines of Haskell code.
See the
README file for build instructions.
NB.
I have found it
a surprisingly nice routine
to print a fresh todo list on a
PocketMod each morning,
so I'm throwing in a dirty shell script as a free bonus.
Get it here:
http://code.khjk.org/watnu/