Thursday, April 19, 2012

PhD - Bound

Today I picked up the final, bound copy of my PhD thesis (having done all the corrections requested by my examiners) and delivered it to my University. It'll now be shelved in the University Library. There's also a digital copy that can be downloaded online.
PhD Thesis
Next stop: conferment!

Friday, March 30, 2012

PhD - Completed!

This post bookends the post that started this entire blog four and a half years ago. Today I received the result for my PhD in Software Engineering! My thesis, Derivation of a General Purpose Architecture for Automatic User Interface Generation was highly praised by the examiners:

"In summary, a very satisfying, inspiring, carefully laid out, meticulously planned and executed thesis. I unhesitatingly recommend that the candidate be admitted to the degree of PhD"

I would like to acknowledge and thank a number of people for their support, advice and encouragement.

My supervisor, John Leaney, was instrumental in opening me up to the world of academic rigour. I would like to thank him for challenging me to think about epistemologies and research methodologies, interview techniques, reflection, VVT and GQM, and a host of other disciplines. His support and enthusiasm for my work never faltered. Most of all I would like to thank him for being able to readily understand my goal, and bridge the divide between the commercial world I knew and the research community I aspired to join.

I would like to thank those people who posted forum messages, blogged, tweeted, wrote magazine articles, and published papers regarding my work. I would like to thank my interviewees and adoption study participants for their time and feedback. Given the Action Research methodology of my thesis, their observations were critical to my progress. I would like to thank Dan Haywood of the Naked Objects team, who was always friendly and supportive, and very professional considering the sometimes conflicting nature of our projects! I would also like to thank Dan Allen, for his help shepherding my research within Red Hat.

Finally I would like to thank and apologise to my family who lived with my long absences throughout – both physical absences during the weeks, and mental absences during the weekends when I couldn't drag my head out of the work.

Monday, March 19, 2012

UI Generator: Metawidget v2.1

Version 2.1 of Metawidget, the UI Generator is now available!

This release was focused on:
  • Static HTML 5 Metawidget (ready for JBoss AeroGear)
  • Improvements to static Metawidgets for JSP, Spring and JSF
  • Swing GridBagLayout now supports 0 columns
  • Bug fixes, documentation and unit tests
Special thanks to Ryan Bradley for his help with this release!

As always, the best place to start is the Reference Documentation:

http://metawidget.org/doc/reference/en/pdf/metawidget.pdf


Your continued feedback is invaluable to us. Please download it and let us know what you think.

Thursday, March 15, 2012

How Much Does Data Recovery Cost?

I've often wondered how much it costs to have a hard drive repaired by one of those 'clean room' data recovery companies. I've never had a need for such a service myself, because I keep lots of backups. And this pricing information is hard to come by because these companies tend to keep their pricing quiet.

But a friend was recently unfortunate enough to drop her laptop, and didn't have backups of some critical data, so I got to experience how the process works. I won't name the data recovery company involved, but I imagine this is typical (at least in Australia):

  • They charge $500 upfront just to look at the drive
  • They charge an additional $500 if the hard drive has previously been 'tampered with' (so that's $1,000 upfront)
  • They charge an additional $2,500 if (and only if) the data can be recovered (so that's $3,500 in total)
  • It takes 2-4 weeks
  • They'll need another hard disk to transfer the recovered files onto. The price of this is not included in the $3,500
  • The faulty drive will be destroyed
I hope someone finds this information useful, and a warning not to spare any expense implementing a good backup policy!

Thursday, March 1, 2012

Metawidget @ JavaOne 2011: Parleys Presentation

Parleys have posted videos from sessions at JavaOne 2011. This includes our talk on DRY UIs: Let the metadata do the work:


This is the same talk we gave at the JBoss Booth, but with a 10 minute Question and Answer session at the end. Please try the Full Screen mode if you find the coding examples difficult to read.

My thanks to all those who attended, and to my co-speaker Dan Allen.

Friday, February 24, 2012

Metawidget and AeroGear

Recently I've been working with the JBoss AeroGear team. AeroGear is a new JBoss initiative focussed on providing examples, tutorials, and techniques to help developers get going with all kinds of mobile development.

We've been creating a 'proof of concept' integration between JBoss Forge and Metawidget for scaffolding mobile apps. Like the Forge/Metawidget/JSF scaffold, it uses static generation and doesn't require Metawidget at runtime. Unlike the JSF scaffold, however, the AeroGear scaffold generates a POH5/JQuery app. It's heavily based on Jay Balunas' excellent AeroGear Maven archetype - thanks Jay!

The Story So Far

An update on our progress. The plugin is hosted at https://github.com/forge/scaffold-aerogear. First download the latest version of JBoss Forge and run it. Then install the plugin:

$ forge git-plugin git://github.com/forge/scaffold-aerogear.git

Setup your project:

$ new-project --named test --topLevelPackage com.test --type war
$ persistence setup
? [provider=ARG (of type org.jboss.forge.spec.javaee.jpa.api.JPAProvider)]: HIBERNATE
? [container=ARG (of type org.jboss.forge.spec.javaee.jpa.api.JPAContainer)]: JBOSS_AS7
$ scaffold setup --scaffoldType aerogear
$ entity --named Company
$ field string --named name
$ field boolean --named publiclyListed
$ field custom --named color
? [type=The qualified Class to be used as this field's type (of type java.lang.String)]: java.awt.Color
$ entity --named Employee
$ field string --named firstName
$ field string --named lastName
$ field custom --named dateOfBirth
? [type=The qualified Class to be used as this field's type (of type java.lang.String)]: java.util.Date
$ field int --named salary
$ field manyToOne --named company --fieldType com.test.model.Company
$ scaffold from-entity com.test.model.* --scaffoldType aerogear

This will generate a complete app, ready to import into your favourite IDE and deploy. To save time, you can download the generated app here (click the link, then use File > Download to download the ZIP).

Kick The Tyres

Deploy the app (I tested on JBoss AS 7.0.2.Final, please try this exact version) and open it in an HTML5-compliant browser or mobile device (I tested on Chrome):


The opening screen displays a menu generated from the entities in your domain model. Here we're developing a little employee database. Click on Company:


This screen allows you to search for existing companies. But we need to create some first! Click on Create:


Fill out the fields as shown above. Things to note:
  • All the form fields and labels have been generated by Metawidget
  • This includes a custom PlaceholderWidgetProcessor for HTML5 placeholders such as 'Your Color'
  • It also includes correct HTML5 controls, such as checkbox and the new color input. Unfortunately Chrome doesn't seem to recognize this yet
Click Save to return to the search screen:


Things to note:
  • The company has been saved to the database and redisplayed in the search results, using JQuery, JSON and JPA
  • Metawidget has generated the 'name' field as an HTML5 search control
  • Metawidget has generated appropriate columns for the search results table
  • Search fields work as expected. If you click 'publicly listed' and hit Search, you'll only see companies where 'publicly listed' has been set to true. This uses JQuery, JSON, JPA and the Criteria API
Click on a row in the table to view and edit it:


Things to note:
  • Metawidget has generated a read-only view of the entity
  • This includes using HTML5 output controls
Next, click back to the Home screen, click on Employee and click Create:


Things to note:
  • Metawidget has generated HTML5 date and number controls where appropriate. Again, Chrome's support is limited
  • There is a many-to-one relation between an employee and their company. This is presented as a dropdown. Possible values are populated using JQuery, JSON and JPA
  • The values in the dropdown use the toString of the company object. This uses a custom ObjectMapperProvider
Click Save and create some more employees:


Searching on a many-to-one relation also works:


Things to note:
  • The 'Company' column in the table uses the toString of the company object
The Road Ahead

That's it so far! We hope this gives a compelling proof of concept for generating mobile applications using AeroGear, JBoss Forge and Metawidget. But there's lots more to do, so please join the community and start contributing!

Wednesday, February 1, 2012

Metawidget v2.0: Runtime and Static Form Generator

Version 2.0 of Metawidget is now available! We bumped the version number to reflect the fact we've broken binary compatibilty: this release no longer supports JDK 1.4. It also represents a significant maturing of the static form generation code:
  • Drop support for JDK 1.4 (was causing a number of issues with frameworks that scan the classpath)
  • Implement long-standing refactorings (taking the opportunity now that we've broken binary compatibility)
  • Static Metawidget improvements (ready for Forge CR1)
  • Bug fixes, documentation and unit tests
Existing code should not be impacted too much. Breaking refactorings were:

  • There is no longer a separate Java5Inspector: it has been rolled into PropertyTypeInspector
  • FacesInspector has been renamed FacesAnnotationInspector
All existing examples have been migrated as a point of reference.

As always, the best place to start is the Reference Documentation:

http://metawidget.org/doc/reference/en/pdf/metawidget.pdf


Your continued feedback is invaluable to us. Please download it and let us know what you think.