Some people know Michael J. Hammel as the Graphics Muse. He has written books on the GIMP and articles for publications such as Linux Journal and Linux Format. Hammel is also a developer, and one of his projects is the simple personal information manager XNotesNG, which gives Linux desktop users sticky notes, a calendar, and to-do lists. But Hammel’s approach to the project is a bit different from that of many developers. “XNotesNG is fully functional as a PIM, but I use it as an experimental platform for development.”
Hammel says XNotesNG is not as full-featured as some similar applications, “but to be honest I don’t really compare against them. My purpose for creating the program is less about how it solves a desktop problem than about learning new concepts, practices, languages, and tools.”
That doesn’t mean the application isn’t perfectly usable. It’s available in RPM and .deb packages for most popular distros, both 32- and 64-bit, and of course the source code is also available. XNotesNG requires Sun’s Java 6.
The entire application is plugin-based. “A core system provides common functionality like plugin management, error dialogs, and event (alarm) management,” Hammel says. “Then there are application plugins. All features are implemented as plugins: notes, to-do lists, calendars, and categories.
“One of the advantages to using a plugin design is that plugins can interact with each other, using each others features. So lists can use notes. So can calendar events. And notes and to-dos can be associated with categories.”
The application has a long history. “XNotesNG is the next generation of XNotesPlus, which was a successor to XPostitPlus, which began life as xpostit. Except for xpostit, I designed and wrote all of those. The first version of XPostitPlus, XNotesNG oldest ancestor, was written sometime around 1989-1990. I started the design of the current version in late 2008/early 2009, and started coding in April 2009.
“This version was motivated by a project I worked on called .Crunch, a grid system based on Java, JPF, and JBoss, which I’m in the process of trying to open source. I spent a lot of effort doing architecture for that project and I wanted to use the same techniques on another project. I also wanted to generalize the plugin design for a smaller open source project that others could base future work on.
“XNotesNG was a complete rewrite from C and GTK+ to Java and SWT. I chose Java because it’s a modern object-oriented language suited to desktop applications. JVMs are fast enough now not to be a detriment to Java apps, though access to native features is still a pain through JNI.
“I chose the Standard Widget Toolkit because I wanted a Java application that had the native look and feel of the desktop it runs on. SWT lets users drop in a JAR file to match their environment. While the current release only has the GTK+based SWT, it isn’t a big deal to add other platform versions.
“I also used the Java Plugin Framework. I’ve been around the GIMP project since its birth and wanted to add my own dynamically extensible feature set via a plugin interface into an application. JPF is the way to do it for Java.
“One thing I don’t use is an IDE – no Eclipse or NetBeans. I’m an old-time C developer, and vi and cscope are my development tools of choice.
“I changed to the MIT license with this release to make the software as open as possible without being outright public domain. I hosted it on SourceForge because it provides issue tracking and forums ready to run in a location that users and developers are already familiar with. I’m hoping this will encourage additional developers to join in, because it would be fun to have someone to talk with about this.
“XNotesNG is a PIM, but it’s also extensible, with no limits to what it could do. I’ve thought about adding things like games (obvious), a VNC client (meaningful), and extending the API to remote management data sharing. I have a lot ideas, some of which came from discussions about similar tools on a local Linux user group mailing list (Boulder LUG). Most of these are on the Wishlist page of the wiki. I have two features I really want personally: P2P sharing of data, so at work I can see my data at home, and vice versa; and switching the standard menu interface to an iPhone/Android-styled navigation system. The former is functionally useful, even desirable, for end users. The latter is just fun fluff that lets me learn more about the Java 2D API or even OpenGL.”