December 5, 2006

Winzig: A portable PIM that understands usability

Author: Nathan Willis

Winzig is a free, low-resource personal information manager (PIM) written in Python. It fits address book, calendar, to-do list, note-taking, and more into one small, fixed-sized window -- perfect for embedded devices, and if you care about your screen real estate, good for desktop systems as well.

Winzig 1.76 is distributed as a gzipped tarball; inside are executable Python scripts. The package depends only on Python, GTK+, and PyGTK, which pretty much any modern distribution supports. Once you have downloaded and unpacked the package, there is nothing to compile -- just run ./ to get started.

The grand tour

Winzig has 11 tabs across the top row -- one "about" tab and 10 functional mini-apps. Left to right, the mini-apps are an address book, calculator, note-taker, to-do list, calendar, a table of ASCII character codes, a table of X11 color values, a weather report viewer, a dictionary and translation client, and a diary client.

Contact. Click to enlarge

The PIM apps (Contact, Cal, Todo) are primarily text-driven. Contact has 22 information fields available for each entry, for instance, but personal photo is not one of them. But that does not mean Winzig is slim on features. Contact is searchable and sortable. It provides forward and back buttons when examining individual contact cards. The interface has jump-to-a-letter buttons along the top, and one-click duplication of entries. Todo allows you to set user-defined context categories, priority rankings, and completion states for each item. Cal also sports user-defined categories, as well as all-day and multi-day events, and the real kicker, repeating events.

The Note and Journal apps are useful as well, although I confess it puzzles me why we need both. Note lets you give each entry a title (which shows up in the list view) in addition to the body text, and lets you assign each entry multiple "labels" or tags, giving you a means to sort or search through your notes. Note keeps track of the changed-by date for every note, so you can sort them chronologically too.

Journal is also a text-note-taker, but it lacks the tagging and title features of Note, and associates each entry with one and only one calendar date. This seems a duplication of functionality -- you can add simple notes in Cal, and if desired you could tag entries "journal" in Note.

The remaining apps what I would call single-task, and though good, they don't lend themselves to extensive usability scrutiny. Calc is a solid infix calculator, boasting scientific and trigonometric functions, hex and octal notation, stored history of computed values, and more. Dict can look up definitions through Wordnet and translate using Google's language tools.

Weather looks up current condition data from NOAA. Ascii and Rgb are static tables. I don't find any of these three particularly useful. I can't recall ever needing ASCII codes or X11 RGB color names, and I've never seen any value in dedicated weather apps, particularly when all they do is fetch human-readable data off of a Web site, which is trivial to do manually. I do on occasion need to look up HTML character entity codes, so I understand the value of having the right reference card at your fingertips when the time comes.

Winzig keeps all of its data in a flat file database in a "Data" subdirectory, which could slow down its responsiveness for those with pathologically full calendars and address books. Another caveat is that you must change the app's options by editing a configuration file. Luckily, the default configuration file is well commented, so this is not a tricky or arduous process.

Form follows function

Now that the laundry list of features is out of the way, I can tell you why I like Winzig: the interface design. The form factor of embedded apps forces developers to think about the UI, to keep it simple and organized. Winzig does almost everything right.

Calendar. Click to enlarge

For example, all fields are click-to-edit, in every mini-app. Contacts, calendar events, journal entries -- no space wasted by an "edit this" button. Similarly, all data tables are sortable on every column (by clicking on the header). I can't tell you how frustrating it is to have unsortable columns.

Add to that the consistency between the mini-apps. Terminology is the same, unlike, for example, Gmail and Google Calendar. In Google's tools, you add a Contact, but you create a calendar event. Unless Gmail detects a potential event inside a mail message, that is, in which case you add the event.

It sounds like a minor quibble, yes, but by consistently using "New" in every mini-app, Winzig can put a New button in precisely the same place on every pane, making it easy for users to find. Similarly, search fields and forward and back buttons are the exact same size and in the exact same position in every app. Consistency in the fine details makes all the difference in usability.

Not that Winzig is beyond reproach; there are a few instances of inconsistent button placement, which I reported to developer Robert Muth.

One of those inconsistencies is in Weather. You configure a set of cities for weather checking, and they appear as a row of buttons in the Weather tab -- but at the bottom. In every other mini-app, Winzig organizes its toolbars top-down, the way it should be. The top row holds the tabs of mini-apps, and directly beneath it is the context-dependent row of buttons for the active tab. A lot of otherwise nice apps don't seem to understand the importance of visual hierarchy (that's right, I'm looking at you, Evolution).

In conclusion

No doubt some users will criticize Winzig for what it leaves out -- synchronization, import and export tools, and lack of a relational database back end. And that is fair if you need those tools. Luckily, Python makes adding support for standards like vCalendar and vCard simple enough, even if they never become high priority features for Muth.

Winzig is a relatively young, primarily one-man project. But it is a clean, working project with a good user interface, and in the UI-intensive world of PIM applications, that makes up for a lot.

Click Here!