PIMento.png PIMento - A Naked Personal Information Manager

PIMento is nowhere near ready for release, but since I blabbed about it on the Naked Objects Developers Mailing List and received several responses asking about it, I figured I'd better put up or shut up:). Also, I am lobbying for a Naked Objects presentation at JavaOne 2003 San Francisco and have started to get really serious about making PIMento presentable.

General PIMento Info

PIMento is a PIM based on the Naked Objects framework.

Goals

PIMento is intended to thrive in the "edge cases" of the PIM space where others fail miserably.

There are lots of PIMs out there. Most are junk. Even the very best PIMs out there are severely limited in what they can do and have all sorts of problems with special cases and unanticipated situations (edge cases). These PIMs do silly things like assume that most items can be represented as fill forms or that 5 minute granularity is good enough or that meetings won't cross the midnight boundary or timezones (think cross country flight meetings).

In the long term, PIMento also aspires to work on PDAs, desktops, servers and J2ME devices. In order to be really usable, PIMs need to be portable, data needs to be archived, but still accessible and alternative access methods are required.

Implementation

To meet the challenge of the main goal, PIMento uses a radically different approach to PIM design that is inspired by the Naked Objects Framework... it uses a dynamic object based architecture. There are no relational databases or flat files here. Even XML formatted records are too stifling for PIMento (though they are used for object serialization at the moment).

To be more specific, most items in PIMento are collections of object reference collections. A concrete example might be a contact address. The address field is a collection of references to address objects. The objects can be shared, so it makes sense that if two people in your contact database both work at the same place, then they would have one address in common. The trick is that in PIMento, they would have a reference to the same address object. If the company address changes, change it in one place and all of that company's employees automatically get the same change because they all have address references to the same address object. But wait, there's more! From an address object, you can ask for a list of all of the people, organizations, companies or whatever that have a reference to that address and get links to those things. It's even easy to have multiple addresses, which most other PIMs can't deal with.

PIMento also makes extensive use of interfaces (not really because the Naked Object framework doesn't allow this yet) so that it is easy to extend PIMento to be able to work with new types of items. Extensibility adds a lot of power to work with those edge cases. So, if phone, cell, email, web and IRC aren't enough types of connections for you, then feel free to add the smoke signal class, which implements the Connection interface and you'll be able to easily add smoke signal connections to your contact items. Since all Connection objects are independent, they can have their own functionality. A phone number can dial itself, an email can open an email application and a smoke signal... well, smoke and computers gets me nervous because they tend to stop working once you let the smoke out ;)

All of these implementation details are actually fairly easy to do because they are simple by-products of using the Naked Objects framework. Another key project that adds to the capabilities is the GUINotes object, which is used to provide extremely rich content to the notes objects that most items in PIMento will include. GUINotes does this by creating notes as a collection of GUI objects that represent the data stored in them. So notes can have plain text, images, check lists, drawings and all sorts of other things all mixed together in a nice cross-platform format.

PIMento Project Status

Plans

At the moment, PIMento is back at square one. However, here's a short list of what I had intend to do with the earlier work on PIMento:

Why name it PIMento?

PIMento was originally called "NakedPIM" and you can still see that in the classpath. However, I thought that calling it NakedPIM would scare people away and there's no reason the end user really needs to know about the involvement of the Naked Objects Framework, though they can easily find out.

PIMento was chosen because it's a punny name with an icon that even I can draw, has the word PIM right in it and also has an inference that it's just a small part of something larger. That last point is because the pimento is just a little red thing inside a much larger olive thing. I wanted to point out that a PIM is not really an independent isolated thing, but rather a part of a larger information system. PIMento seeks to open itself up by allowing additional modules to be added and by using the GUINotes objects, which are very clothed, inside of PIMento.

Related Links

Valid HTML 4.01!