Friday, January 18, 2008

iGTD

Today I started using iGTD, a Mac OS X application for todo-management. This application helps you to get yourself organized, registering all things you need to do in a single database on your own machine.

Overall iGTD v1.4.5.6 seems to be a well-designed application that is very usable for it's core functionality. It works very stable on Mac OS X 10.4 (Tiger). I have not tried running it on 10.5 (Leopard).

Wish list
While working with iGTD for a couple of hours, here's a list of things I'd recommend for improvement:
  1. Search everything – when searching, you currently have to choose from "Search by task name or note" and few other options, but "Search everything" is not an option. I'd like a single operation to search project names, task names, tags, etc.
  2. Dates – Although iGTD displays dates in a friendly format such as "Today" or "Tuesday", it's not possible to enter dates that way. It would be nice to just type "tue" and get iGTD to recognize that as "this coming Tuesday".
  3. Resize window – When increasing the size of the main iGTD application window, the last column in the task list becomes wider. By default, that's the "Due date" column, which doesn't need that much space, normally. Instead, the "Name" column should be widened, which contains both the task name (left-aligned) and the tag names (right-aligned).
  4. Effort colors – The effort column in the task list allows 4 values, ranging from low to high (see the image). The values are represented by a bar that is shorter (for low effort) or longer. Each bar length has it's own color, these are (from low effort to high): dark grey, green, brown and red. It would be nice if the colors would be more intuitive, such as: green, orange, red and black.
  5. Defaults – It would be nice if the configuration would allow that tasks entered without details (e.g. via "Quick type", hotkey F8) are explicitly be assigned some defaults, such as a default project.
  6. Dock icon – iGTD offers the option of putting the number of open tasks in your Inbox in the dock icon. That's very nice indeed. It would, however, by even nicer if it could show the combined number of open tasks from all contexts, or even show multiple numbers, for different contexts, similar to what DockStar (see image) does for the Apple Mail application.
  7. Resize panes – The main application window is divided in 3 main panes: the list of contexts or projects, the list of tasks and task details. It would be nice if these panes could be resized, for example to allow more room for the task list.
  8. Task dependencies – It seems there is no way to make tasks dependent on eachother. I tried looking at the various task properties, I tried right-clicking a task and I tried dragging a task onto another using various modifier keys (Cmd, Cmd-Alt, Shift, etc.) If iGTD offers this functionality, it seems well-hidden...
  9. Multi-client – I am one of the (probably many) people that do work in multiple locations, from different computers, but want to have the same personal information in all these places. To accomplish this, you can use a combination of .Mac (for your address book, certificates, etc.), del.ico.us (for your bookmarks).
    What I could not find out yet, is whether iGTD also supports working from different computers in an easy-to-setup manner.
In my opinion, iGTD is a great application that is very usable. And the iGTD 2 alpha looks very promising!

Tuesday, January 8, 2008

XINS: Splitting out Logdoc?

Talking to Anthony Goubard yesterday (of JLearnIt and AntCommander fame), I realized that adding features like SMTP- and SMS-support to a Web Services framework like XINS can hardly be considered good separation of concerns. So I definitely need to revise my XINS 3.0 wishlist.

Instead, it may be a much better idea to make XINS focus more on the Web Services functionality and split some technologies out. The main candidates seem to be Logdoc and the ServiceCaller framework:
In the picture the arrows indicate dependencies. So XINS would depend on Logdoc and the ServiceCaller framework and the latter would also depend on Logdoc.

Logdoc: What is it?
In this post I will focus on Logdoc.

So what is Logdoc and why would we want to separate that out from XINS? Is it useful for other projects as well?

IMHO the answer is "yes". Logdoc is a logging system based on the infamous Apache Log4J library that offers some features over Log4J:
  • registered logging categories: there is an explicit list of all logging categories, with documentation;
  • unique log messages: each log message is in a specific category and gets a specific number; this allows system administrators to enable or disable individual messages;
  • multi-locale: it is straight-forward to add a new language for log messages;
  • separation of concerns: the code does not bother with log levels, translations and categories, instead it just deals with a single log message (identified by ID) and it's parameters.
Logdoc code example
Here is an example of a piece of Java code that uses Logdoc, from the HTTPServiceCaller class (javadoc/source):
// Unknown host
if (exception instanceof UnknownHostException) {
Log.log_1102(url, params, duration);
Notice that there is no category, no creation of objects and no language-specific stuff.

Logdoc definitions
The key to the Logdoc system is the definition of categories and entries in XML. Every entry is within a single category. Translations can be specified in separate files, one per language/locale. So for example, for the XINS/Java Server Framework, the following files define all logdoc entries and their translations:

  • src/logdoc/server/log.xml - defines all categories and contained entries; each entry has a unique number, it specified a log level and optionally some parameters;
  • src/logdoc/server/translation-bundle-en_US.xml - defines all U.S. English translations for the log messages defined in the log.xml file;
  • src/logdoc/server/translation-bundle-fr_FR.xml - defines all French (France) translations;
Adding a new set of translations is as easy as adding one line to the log.xml and one translation-bundle-xx_XX.xml file, where xx is the ISO language code and XX is the ISO country code.

Now from these specifications, both code and documentation is automatically generated, XINS-style. Here is an example of generated Logdoc documentation:
Notice that there are 2 ways to find log entries: by category and by ID (see the Logdoc entry list link at the top).

More information
For more information on Logdoc, check out the section titled "Managing logs" in the XINS User Guide.