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
- Progress: Re-starting project from scratch. PIMento is back to
being vapourware :(
- 2002-Nov-03: Recent activity, having finished the book and
having re-evaluated the project goals has made it clear that the
original work, while informative, should be abandoned in favour
of, not just a re-factor, but a complete re-start of the project.
Unfortunately, this turns PIMento from a real project back into
vapourware, but I think it's necessary.
- 2002-Nov-03: The original Exploration of PIMento has been ported
to the 0.7.19 version of the framework and turned into a
stand-alone demo that can be installed and run using Java Web
Start. See download section below.
It's pretty much junk, but at least it's something that shows
some of the potential and has some Naked Objects like
behaviour.
- 2002-Nov-02: We have a proposal to do a technical presentation
at JavaOne 2003 in San Francisco
on the Naked Objects Framework and it would be best if I had an
actual working example of PIMento to demonstrate, but the
deadline for calls for papers is 2002-Nov-08, so I have to work
fast!
- 2002-Oct-27 Although paid work is slow (Please see
my resume),
the release of the latest version of the framework, the
book and
the JavaOne proposal have motivated me, to work vigorously on
PIMento.
- 2002-Sep-10: The new 0.7.17 framework has solved some problems
that have kept PIMento from progressing. Work on PIMento should
re-commence soon
- Code Base: Exploration stage
- The original exploration attempt from back when the Naked
Objects toolkit was at version 0.3a.89 is being used as a
reference. It has a rough code base that shows most of the key
ideas, but was held back by problems due to limitations in that
older toolkit. It doesn't even attempt to be feature complete and
only has the "Contacts" portion of the application coded.
- Documentation: You're looking at it :( More is on the way.
- Download:
- PIMento is written in Java,
so you need to have a Java Runtime environment installed before
you can run the demo.
-
WebStart (JNLP): Click here to
automatically download, install and start the demo immediately.
- jar file.
- This is a jar file that can be started with the -jar
option from a command line. To run it type something like:
java -jar pimentoDemo.jar
- Some operating systems support this automatically so you
may be able to simply double click the file to execute the
demo.
- Older VM's require that you specify things more explicitly, so
you can also execute it by typing something like:
java -classpath pimentoDemo.jar:${CLASSPATH}
com/markcrocker/pim/nakedPIM/Run on a *NIX based
system. DOS-like systems require replacing
:${CLASSPATH} with ;%CLASSPATH%
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:
- PIMento Issues:
- Make relationships work both ways
- Adding an employee relationship to a company
should automatically add an employee of
reference to the employee's relationships entry.
- Split up contacts into individuals and organizations using an
interface approach similar to what was done with Connections.
- Fix titles on just about everything other than Contacts to
provide more useful information in the context of the
instance listings than what is shown in the contact title.
- Fix Categories
- Need to have a way to hide the root Category.
- Make it easier to enforce the hierarchical nature of
Categories.
- Provide a way of getting more useful listings of what
instances are in a particular Category.
- Dates need a date chooser.
- Use GUINotes for Notes
- Implement other PIM applications.
- ToDo
- Appointment
- I'm sure there's more, but I'm drawing a blank :(
- Connection classes need action methods like dial the phone or
create a message to.
- NakedObjects Framework Related Issues:
- Add the interface capabilities that Richard Pawson discusses
in his book Expressive Systems
in the Don't get bogged down with the issue of
inheritance section (page 92) so that Connections can
all implement the same interface rather than inherit from a
common class.
- Also need to fix the top level, class, window so that
interfaces can be added as well as classes. Then, when
clicking on an interface, a sub window could appear
as a sub window that contains all of the classes that
implement the interface. Dragging an interface would
create a pop-up that lets you select which implementing
class to create a new instance from.
- Add the
VLH
library as an alternative persistence engine to the framework.
- It's more reliable, smaller and faster than XML
persistence as well as supporting local
AND client-server models.
- Fix object presentation to work better on a small display such
as a PDA display (Mine is 1/4 VGA = 320x240).
- Big windows need scroll bars when bigger than the
display or at least some rendering features that keep
everything from turning into a big jumble.
- Need to be able to resize windows to make other things
visible.
- Add standard GUI behaviours that users normally expect, but
that don't work in the NakedObjects Framework:
- Cut, copy and paste.
- Keyboard navigation.
- etc...
- Use real drag-and-drop in Swing version so that text files can
be dropped on a notes field etc...
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