If you want to follow my progress developing the FOAF-a-Matic Mark 2 then this is my change log...
Er, where did the year go? Easily distracted that's me. Basically the code is much cleaner, it now uses Jena 2 and I've created a simple Java Bean abstraction layer between the RDF data and the GUI. Whether this is a good idea or not remains to be seen. It hides the RDF details for ordinary Java developers, but at the expense of not exposing all that data.
Considering applying code generation techniques to automatically generate this bean layer to limit potential 'drift' between the API and the RDF vocabulary...
Aiming for beta-2, which will wow nobody, before end of September...
Todays mutterings on my new blog.
In code terms I've now got the friends data export working through Jena, so I'm basically on a par with beta-1 again (yawn), but with a better model and a good idea of how to add all the remaining functionality I want to have in for beta-2 (yay!).
Following the mention in the Guardian there have been a few downloads of beta-1. I've added a note next to the download link warning folk of the bug in the foaf:mbox property serialization. Imperative I get the next release out quickly so I don't befoul the FOAF waters with dodgy RDF.
I've set up a yahoo groups mailing list for reporting new releases of the software, reporting bugs, etc.
Back to hacking...
Have thrown away custom internal model in favour of using Jena, which I probably should have looked at to start with. Quite pleased that the basics only took a couple of hours (although I've broken a chunk of functionality). Makes me think that the code refactoring I've done as I've gone along is a Good Thing.
- com.ldodds.foaf.thinlet.model package now largely redundant apart from a few helpers. Have extended the Jena Model interface to provide a few helpers, and have extended the in-memory implementation to support these.
- Basic FOAF generation (i.e. personal info) now works entirely off of an in-memory Jena model, Friend data is currently thrown away.
- N3 export now works (comes free with Jena)
- Loading of data from file also basically works, again this is provided by Jena. Grabbing from URLs, etc should be similarly easy. Grabbing data from a Friends FOAF file will involve just creating a model for their data, and grabbing the requisite statements...
- Deactivated HTTP interface until finished Jena-related refactoring.
- Planning beta-2 for sometime early January...
- Final note to self: check out this proposal. I was planning on adding an "export" feature to the FOAF-a-Matic which would generate Dublin Core descriptions for embedding in web pages. This could be an alternative option if it takes off (and similarly is another location to grab FOAF data for the FOAF Autodiscovery feature).
- Further final note to self (and the LazyWeb): someone ought to make an 'Autodiscovery Bookmarklet Generator' application. It would take the details of the tag (e.g. LINK/META), info on appropriate attributes, and the end-point of look-up service, and generate a bookmarklet. Would ensure people are following 'the rules' of how to link to/embed extra content in (X)HTML...A meta-tool basically.
- Grabbed some sample FOAF data, ranging in complexity, for testing.
- Added a simple HTTP server. First step in providing "FOAF Autodiscovery" feature. The latter is awaiting the FOAF loading code (just started this), but there is a feature to dump your FOAF data into the browser.
- Corrected stupid bug in which mbox property was being created as a literal not a resource. mbox_sha1sum works correctly
- Also added a clear button to allow friend entry fields to be reset
- Corrected bug reported by Libby Miller, friend entry fields weren't being cleared after entering a new Friend
- Made the FOAFPropertyBuilder aware of the "hide email addresses" preference.
- Altered code to export friend data.
- Added support for entering/updating friend information
- Improved table handling code with extra utility methods
- Think I might use the Attribution license for licensing the FOAF-a-Matic. It'll be open source, I'd just like acknowledgement for having written it in the first place.
- Now that I'm happy with the infrastructure I can finally add the support for foaf:knows.
- Added helper class for working with the Thinlet table component.
- Added a Services class for mediating access to useful components (e.g. UI, preferences, etc). This paves the way for scripted plugins as I can register this object (and hence its contents) with the Bean Scripting Framework.
- Aiming for first beta this week. Need to add ant scripts, etc.
- Decided to add support for importing LDIF format (seems to be what Mozilla use for address books). Fairly simple format.
- This heuristic evaluation might be worth a look.
- Added empty implementation for N3 exporter.
- Added Tables class for dynamically adding/removing rows in a table
- Abstracted the main Thinlet API (plus some helpers) into a separate interface: should help manage API changes, as that API is still changing
- Divided processing for saving data into generation and export. The later deals with actually turning the model into RDF (and later N3) and stuffing it into a stream. The generation aspect wraps this to ensure the model is valid and then orchestrate the export so the data goes to the right place (e.g. file, clipboard, screen).
- More package and class level refactorings. This might seem like wheel spinning but the code design is improving quite a bit. Ended up losing helper package as the new classes got split up and distributed elsewhere.
- Uploaded new screenshots
- Stole another of Ians FOAF graphics. Note to self: create CREDITS.txt and LICENSES.txt
- Added helper package, and created a number of helpers by refactoring code out of the main Thinlet class. These include a DialogManager and an ExportCoordinater. Might well be able to spin out some Thinlet based utility classes along the way.
- Prototyped code to add/remove friends from table on Friends tabs. Working with multiple, non-contiguous selections. Note to self: could we end up with a lot of data here?
- More re-organisation of the packages
- Reworked package structure to make things a bit clearer.
- Altered screen generation code to use a new pop-up window.
- Added new face icons for fields. Yellow for ordinary fields, green for required, and red as a validation cues.
- Moved icons and XML files for GUI into separate packages
- Added new menu items (Load, Save, Help, Tools) for forthcoming features, and rejigged display of tabs. Must update screenshots.
- Added dialog management code to FOAFThinlet making it easier to show/close dialogs. Some of this could probably be factored out into a base class and/or utility classes.