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, Palm III, and IPaq. 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.
- 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
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
- http://www.softwarestudio.org/mail-archives/libical/0763.html - interesting email talking about calendar protocols
- http://www.amk.ca/talks/semweb-intro/ - RDF/Semantic web intro
- 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/
- Python code to read iCal files: http://www.slac.com/~mpilone/projects/pythonplayground.phtml
- python code to write vcard files: http://soundsgoodradio.net/py4ipod/py4ipod.html
- more code (poosibly more full-featured than the others) to read/write icard and icalendar, a wrapper of evolution's code: http://pants.heddley.com/2002/03/05/2002-03-05.html
- code to read vcalendar data into DOM trees, and write it back out again: http://www.logilab.org/vcalsax/
- interesting site, perl code but lots of interesting info: http://reefknot.sourceforge.net/
- a C calendar server:
http://www.opencap.org/html/ now dead
- libical comes with Python bindings: http://softwarestudio.org/libical/
- libmcal is another vcalendar library: http://libmcal.sourceforge.net/
- excellent explanation of how calendar protocols work: http://www.softwarestudio.org/mail-archives/libical/2518.html
- xcal is the XML DTD that models ical documents: http://xml.coverpages.org/iCal.html
- gPalm is a palm pilot desktop written in Python: http://www.netrinsics.com/gPalm.html
- "XML From Your Palm" by Norman Walsh - http://wwws.sun.com/software/xml/developers/palm/
- PIMnet: XML tools for sharing Palm data - http://pimnet.sourceforge.net/
- Winzig is a small PIM written in python, similar in intent to Salamander, but (as of 2003-01) under active development http://www.muth.org/Robert/Winzig/
- Storm is yet another PIM, also written in Python, apparently unmaintained. http://storm-pim.sourceforge.net/
- JiCal is java software to translate iCal files into free/busy files that can be shared via webservers. http://jical.sourceforge.net/
- haystack is an MIT project which looks as if it accomplishes a lot of what I wanted to do here - http://haystack.lcs.mit.edu/
- Kraken is a Python program that manages "knowledge objects" which are stored in RDF: http://www.cs.ucf.edu/~lboloni/Programming/KrakenWeb/index.html
- "Leo is: 1) a programmers, outlining editor and a flexible browser, 2) a literate programming tool, 3) a data organizer and project manager. 4) fully scriptable using Python, 5) Portable." http://sourceforge.net/projects/leo/
- synce is a tool to sync wince portables to Linux: http://synce.sourceforge.net/
- Using Outlook 2003's free/busy (seems to work with Apache mod_dav): http://support.microsoft.com/?kbid=291621
- Rhizome is a wiki-like application that tries to simplify working with rdf: http://rhizome.liminalzone.org/
- a proprietary scheduling client and server
Suse has a proprietary replacement for Exchange.
sells a proprietary exchange replacement
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.
- return the contact info for person whose name is "name".
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.
Typically I'll want to query these by priority.
need to run
before you can run
sits on a socket, waits for mesages. Other programs can send
a "OP_REGISTER" message telling it which message subtypes they handle, and then wait on a socket. When
gets one of their messages it will forward it to their socket.
- 02 Jul 2002