Why another todo list tool?

I forget a lot of things, or, more often, do not think of them at the right moment. Since most people have the same problem, eventually someone came up with the idea of todo list software that reminds you what to do. I tried a few of those applications but most of them suck.

There are appliccations that seem pretty nice on the first glance, ThinkingRock for example, or some other GTD applications (there are a lot of MacOS-only GTD apps, probably Apple fanboys have even more memory problems than I do). But all those are pretty useless for me, since they only work on one system. So I can't use the same database from my home and office computer. But that's where I need the todo stuff the most: I think about something in the office that I need to do when I get home - so I need to be able to write it down at my office pc and I need to get reminded when I am at home.

Some of them are web-based, which makes them usable from multiple computers (I have at least three different computers from which I need access to my todo list). But all those are either closed source and hosted by a third party (RememberTheMilk, hiveminder, etc.) or they are painfully slow (Tracks). Also I couldn't really develop the habit of polling them regularly, which made them quite useless.

So the ideal todo-list-application for me would be:
  • Distributed so that I can access it from multiple workstations
  • Fast and simple, add/list/delete task are the only things I really need
  • Somehow integrated, I don't want to have to start and look at another application all the time

The solution

Most of the time I am using a computer I have a Jabber client running. So why not a Todo list, implemented as a jabber bot? That way I can use it from any computer I want, I don't even have to install anything on all computers, I just need one host where the bot is running on. Since TGTD is capable of handling multiple users it is also possible to run exactly one instance of the bot for a whole group of people.

The bot automatically detects when I become available or connect with a client that has been offline before and sends me my todo list - so I do not have to poll anything all the time.

Adding a new task is simple: Just write a chat message to the bot saying: "add bla blubb" and "bla blubb" will be added as a new task To list all task a chat message saying "list" will display a numbered task list. Deleting tasks can be done with "del N" where N is the number of the task to be deleted.


You can get the sources here

Installation and Usage

At first you need to register a jabber account for yourself and another one for the tgtd-bot. Let's assume your account is you@jabber.org and the bots account is bot@jabber.org for the rest of this document.

To be able to compile and run the tgtd bot you will need the gloox jabber library, sqlite3, the boost regex library, the log4cxx library and gengetopt. On a recent Debian system a simple
sudo apt-get install sqlite3 libsqlite3-dev libboost-regex-dev libgloox-dev liblog4cxx10-dev
will do the job.

Download and compile the source tarball:
wget ...
tar xzvf ...
cd tgtd

Now you need to initialize the database where tgtd will keep all tasks and the list of allowed users:
Edit initdb.sql, replace timos@perlplexity.org with you@jabber.org. If you want to set up tgtd for multiple users, just add a line like
INSERT INTO authorized_users (jid) VALUES ("user2@jabber.org");
for every user.

Now you can run the tgtd bot:
./tgtd -u bot -s jabber.org -p thebotspassword
There are a couple of other options, ./tgtd --help will tell you about them.