Introduction
I'd like to write a tool to manage my personal data about contacts, appointments, recurring events, notes, etc. Years ago I used a very slick "PIM" program called PackRat on the PC. It was very easy to use and yet very powerful (and this was back in the Win3.1 days). Unfortunately the company that wrote it
really messed up - they released a new version which was wildly different from the old version, with buggy conversion utilitites. I never got the upgrade to work correctly and so ended up bailing out into paper. Polaris Software went out of business (but they may have
come back).
The paper approach actually worked well for me (I used a system called Time/Design) for a while and then I went through a series of gadgets including the Sony Magic Link, Psion Series 5, and Palm III. Each had its strengths and weaknesses but all locked the data up in wierd proprietary formats which makes it hard to extend the functionality of the device in user-specific ways.
I was laid off from my job in the spring of 2002 so I had some time to think about this issue. I decided to write a set of tools to manage personal information and release them as Free Software.
Requirements
- based only on free (or open-source) tools. Should be able to build and run using only packages in Debian's "main" package set.
- web user interface - easy to use, and network transparent
- data storage in as standard a format as possible. I learned this from Packrat which used a very strange proprietary database format which ultimately even they weren't able to convert from one product version to another.
- command-line interface - easy to use in shell scripts, or for quick reference while working in the shell
Notes
Since the project has no code yet, here are some notes on how I'd like things to work.
- written in Python. I've wanted to learn Python for a while now. It seems to have a cool combination of novelty and wide support.
- URL's matter. I want to pay special attention to designing the URL's so that they are easy to use by REST systems.
- the Web UI will be XML-based, since I'd like to play around with feeding XML to modern browsers.
- The standard technique for personal data interchange is called vCard which appears to be modelled on the old, unsuccessful X.500 directory standard. It's pretty grubby, but since MS Outlook supports it we should too, at least for external interface. The w3c has written a paper that describes how to model vCards in RDF, which should make the data easier to work with. Also, here's some code from HP for working with RDF (and the examples work with RDF vCard's: http://www.hpl.hp.com/semweb/ . It looks interesting - I should play around with it and learn how it works. The query language looks especially cool.
- how should the vCards be stored? One big document with lots of cards (easy to do, might bog down with many cards), or one file per card (what should the files be named?)?
- the standard for scheduling data interchange is called vCalendar, which appears to be also called iCalendar. Some notes from Tim Berners-Lee about representing iCalendar in RDF.
- Python XML HOWTO
- the w3c's RDF validator (also contains a link to many RDF test cases).
- IETF's calendar working group: calsch
- RDF calendar task force
- Project Salamander was a project to build a PIM application for handheld computers. It's written in Python and looks like a possible starting point: http://cvs.handhelds.org/cgi-bin/viewcvs.cgi/salamander/ , http://www.xfree86.org/~keithp/xconf2001/salamander.pdf . The project looks dead now (replaced with another project called GPE, written in C) but the code might be better than starting from scratch.
- ToDo Manager looks like another good baseline. It's written in Python, and unlike Salamander it seems to be under active development. http://todo-manager.sourceforge.net/
Design
URL's
URL's are important, so I'd like to put some effort into designing a flexible URL naming scheme. The goal is to make it easy to reference specific objects or the groups of objects that I'm most likely to want to query.
Contacts
/name/
- return the contact info for person whose name is "name".
Appointments
It seems as if the most likely way that I'll want to look at this data is by a specific time frame, i.e. by day, week or month.
Todo Items
Typically I'll want to query these by priority.
Salamander Notes
Need to:
mkdir ~/.salamander
touch ~/.salamander/dispatch-sock
need to run
src/dispatch
and
src/pos
before you can run
src/mingle
.
dispatch
sits on a socket, waits for mesages. Other programs can send
dispatch
a "OP_REGISTER" message telling it which message subtypes they handle. Then when
dispatch
gets one of their messages it will call them with it.
--
TobyCabot - 02 Jul 2002