Friday 29 October 2010

RSS Feed now available

After a record amount of feedback (2 emails, even though it was from the same person I will count it twice), I havefinally gotten around to setting up RSS feeds for this blog.

Sometime soon I should be posting about my experiences of using JAX-RS to expose some existing SOAP web services in a not REST-ish manner.

My recent quiet period coincides with starting a new job.

Wednesday 6 October 2010

It's a small world

Today I had an interview for a role contracting at an e-commerce organisation near London.

After completing the multi-choice "technical test", and blitzing through the practical task, I had the face to face aspect of the interview.

The first of the two interviewers had a familiar accent, then I recognised the face as well - "Hey, I think you were in my class at uni"...

Eleven years later and about 19,000 kilometres from where we met - I think this proves that it is a small small world.

Tuesday 5 October 2010

Dabblings in open source software projects

Sorry to bore you with yet another post designed to remind myself about what I should be mentioning in job interviews.

This post is a breakdown of some of the various participation that I have had in open source projects in the last few years.

  • Grails - postings on public newsgroup with gotchas of an upgrade to version 1.1.1 with maven versioning

  • Tomcat - following and posting responses to Tomcat users newsgroup; attending presentations by Mark Thomas

  • Linux-HA - participation in newsgroup during set up of cluster for Airways project.

  • Spring - postings on forums; downloaded source for 3.0 to check use of LinkedHashMap as default type for Map in bean properties.

  • Hibernate - postings on forums.

  • JBoss 4.2 - checked out source code from subversion repository to apply patch for ajp issue.

Monday 4 October 2010

Perspectives on deploying to production

One of the things that I really appreciate about attending job interviews is the opportunity to learn what people from other organisations and industries consider to be challenges.

Take deployment as an example, some organisations are very particular about changing as little as possible on their production environments, whereas other organisations regard a complete replacement of the entire application server as the preferred approach to deploying updates.

From my recent experience disk space was quite limited and not much consideration had been given to externalising logfiles etc, so having a parallel version of the entire servlet container and activating the update by shutting down, changing a symbolic link, and then restarting was not an option.

As a result of the space limitation, our deployment process actually involved extracting a single changed file from a "platform" artifact and a sequence of manual copying steps.

No doubt the Continuous Delivery book will have some wisdom to be absorbed on this topic.

More Spring bashing than usual at The Server Side?

I haven't really paid much attention to The Server Side website for a couple of years, but I had a glance around it this evening when trying out how things look on the iPad.

I came across an article entitled Moving from Spring to Java EE 6: The Age of Frameworks is Over which reminded me of a lengthy blog post that I had read recently Spring to Java EE – A Migration Experience. Sure enough the article ended by linking through to that blog post.

As I first read the blog post I sensed a definite anti-Spring sentiment, and couldn't help but notice that JBoss technologies were being name-dropped and linked to throughout. Sure enough the blog was authored by a JBoss / RedHat employee.

I suppose it would be asking too much for some kind of impartiality in the world of commercial software (if you dig deep enough you might suppose that the author of the article on The Server Side has some interest in a Java EE resurgence, given the books he has authored).

When I recently attended a couple of presentations of JEE6 and Glassfish 3 given by Arun Gupta I got to thinking that the CDI annotations would allow de-coupling from the dependency injection framework in much the same way as JPA can reduce dependence on a persistence provider (e.g. Hibernate, Eclipselink).

Just my thoughts, which are probably biased.

Flash or no Flash?

While working with graphic designers on various websites in recent years the decision of whether to include Flash or not came up on a number of occasions.

Things progressed from, "Let's not", to "Okay, as long as we have some Javascript to serve alternative content", to "Flash is so prevalent, alright you can use it for content that won't need to be maintained by the customer"

Now that the iPhone and iPad and various other mobile devices are moving up in the ranks of common browsers Flash may have to retreat again.

HTML5 support might make this less of an issue, but I don't particularly fancy moving to having multiple versions of presentation based on browser type (User Agent header supplied in request).

Mobile development experience

Even before acquiring my iPad (today) I have been thinking more seriously about getting into developing for mobile platforms.

I have been along to a couple of presentations about Android and cross-platform development for Android and iPhone so have picked up some useful ideas.

Since I don't have a Mac I think I will have to target the Android platform first.

Hopefully the development won't involve as much trial and error as was required for the Windows Mobile development work I did for Pocket PC applications a few years ago.

Anyone remember the HP iPAQ? That's the sort of platform that we were targeting back then - along with the early generation of 3G phones that came with Windows Mobile.

The .net Compact Framework didn't really have enough ways of hooking into the capabilities of the device back then, so we had to resort to integrating third party Visual C++ DLLs to get at the text messaging and GPS capabilities for location based services.

Sunday 3 October 2010

Property websites development experience

I was fortunate enough to be involved in a range of projects for real estate companies and large property developers between 1999 and 2008.

Infinity Investment Group
- Responded to request for proposal with a detailed estimate and planned approach for the Pegasus Town properties site (still live in a less functional form at: ).

- Participated in discussions with CEO and executives during inception.

- Liaised with designers to fit site within look and feel of their existing content managed platform.

- Coordinated development of dynamically updating township images and associated bid registration system.

- Updated system to work as a live auction held at the Westpac Arena for their sale day.

- Configured a secondary website for the sale of land for the Peninsula Bay land development project.

Technologies involved included:
- Java 5
- Struts
- Tiles
- PostgreSQL with GIS extensions (aka PostGIS)
- SQL Server 2008
- Javascript, HTML, CSS
- JPox JDO for Object Relational Mapping
- Geotools
- Debian Linux
- Tomcat
- Eclipse and CVS as the development environment and version control respectively.
- Servlets
- JSPs

Harcourts Group (New Zealand's largest real estate franchiser)
- Development of UI components in Swing for a rich client trust accounting system used by frachisee offices administrators.

- Development of data feeds to and from national real estate bodies in New Zealand and Australia. Built up modules and scripts in Perl to access large volumes of data in XML and CSV formats.

- Pair programming for the new listing and open home alert system, where visitors to the site could register to receive alerts by text message and email as new listings and open homes were coming up for properties that matched their criteria.

Technologies involved included:
- Java 1.2 - 5
- Perl 5
- Tomcat
- IIS 4
- SOAP web service for SMS gateway
- SQL Server 6, 7

Colliers Jardine New Zealand
- Development of a public website for property listings of different types of commercial property in a team of 3 developers.

- Implementation of change requests, ranging from tweaks to full campaigns with separate domain names.

Technologies involved included:
- Internet Information Server 4
- Classic ASP pages written in Perlscript
- Custom developed Perl modules
- CPAN Perl modules
- SQL Server 7

E-commerce projects experience

One of the problems of having over a decade of commercial experience developing software, is that I really can't fit enough information onto my CV without putting off recruiters.

This post might act as a supplement to outline my e-commerce project experience.

My most recent e-commerce projects have involved me designing and developing for the following technologies, integration points, and key functionality:
  • Hybris 3.1 and 4.0 clustered.
  • Commidea web service version 4 for online payment processing
  • Some familiarity with PCI compliance
  • Facetted navigation to enable filtering of products based on attributes
  • Google Analytics including E-commerce conversion and site search
  • Mailbrain and Prolog formats for order fulfilment
Some of the more generic technologies involved include:
  • Spring 2.5, web service client resource pooling
  • Tomcat 6, Servlets, Filters, Portlets, eXo
  • Apache httpd, Redhat Enterprise Linux on Rackspace hosted servers
  • MySQL, Java 6, Apache Axis SOAP web services

Earlier in my career I developed bespoke online purchasing systems as part of existing sites that I had responsibility for extending and maintaining.
  • An online stationary ordering system
  • A ski pass registration and sale system
  • Online interest registration system with colour-coded map of township lots available for purchase

Unit tests can help or hinder refactoring

Having a suite of tests which cover the intended behaviour of a class in isolation allows the development team to feel more comfortable that subsequent changes to the implementation of that class have not had undesirable side-effects.

If a blanket policy is in place to have some numeric value associated to represent "good test coverage," then some test cases can become an overhead that needs to be worked through when refactoring takes place.

Wednesday 29 September 2010

Diving into some Spring source code

While reading Spring Enterprise Recipes - A Problem-Solution Approach this afternoon I noticed that Spring uses a LinkedHashMap as the implementation for maps that it injects into beans.

I'm curious about this implementation choice, as it seems to go slightly beyond what would be expected for a default Map implementation.

I'm going to do some digging around to establish the motivation behind this, starting with the source code of Spring 3.

Java EE6 with Glassfish 3

Last night I attended a presentation at JAX 2010 which included a brief overview of Glassfish 3 and JEE 6.

I was pleased to see the use of facelets and XHTML files as the standard view to use with JSF 2, as that makes so much more sense than trying to use JSPs.

The "deploy on save" integration with the IDE during development was impressive. It used to be a real pain developing code to be deployed into an application server, compiling, generating the WAR(s), generating the EAR, deploying the EAR into the application server could take minutes.

Thursday 23 September 2010

Technologies to look into

I've recently resigned from my job, so will have some time on my hands to investigate technologies - in between applying for jobs, responding to calls from recruiters, preparing for interviews and attending interviews.

This is a sort of "note to self" on some areas of interest, in no particular order:
  • Scala
  • Spring 3
  • Tomcat 7
  • Hybris 4.2 (if I decide to stick with E-Commerce)
  • Hibernate
  • JQuery
  • IntelliJ
  • PostgreSQL 9
Looking back, I should be able to combine most of these technologies to produce some kind of hobby application.

I'm curious about the transport situation in London, so I might dream up an innovative visualisation of the bike stations status, or something along those lines.

Watch this space!

Saturday 18 September 2010

Load Testing

I came across a nice looking load/performance testing tool called loadUI today.

The Java site had a profile about it as an example of a Real-world JavaFX App:

I've only had a brief play with it so far and while it seems very slick I think I will stick with JMeter for its support of multi-page tests.

Monday 13 September 2010

Continuous Delivery / DevOps

Something that I particularly enjoy about living in London is the time that I have each morning and evening during the commute between home and work for reading on the Underground.

One of the books that I am currently reading is Continuous Delivery - Reliable Software Releases Through Build, Test, and Deployment Automation. I found the first chapter acted as a timely reminder for my recent resignation. To paraphrase, skillful and experienced team members getting bogged down with manual deployment processes doesn't make for a fun and productive environment.

The first half of this week has been dedicated to updating 7 existing websites, and launching a completely new one. So far it has been relatively painless, but tiring.

Sunday 5 September 2010

The continuous learning process

I think that software development is an amazing industry to be involved in.

I see my university studies as having been just the start of the learning required to be a successful software developer. It gave me a background to the way software can be developed, and an appreciation for how operating systems, networks and relational databases function.

Back in the 90s software engineering was taught with a significant focus on the "Waterfall Model", but in this day and age of unit testing, continuous integration, iterative development and frequent releases I'd be reluctant to be involved in any project that even mentioned "Waterfall".

The power and availability of IDEs and related build tools have come a long way too. Eclipse and IntelliJ IDEA with their various plugins and integrated updates are amazing, particularly compared with using Notepad or UltraEdit and a Makefile.

On the social side, blogs and Twitter have opened the world up so that almost any Joe Bloggs can learn about the thoughts of respected leaders and upcoming pioneers in the field, and contribute to discussions.

Wednesday 23 June 2010

Countdown to holidays

After a solid year of working, I will be taking a break and doing some proper travelling - instead of just weekends away.

Having given the required 8 weeks notice at work and received confirmation of the necessary approval of a director, the first week of accommodation and transport has been booked and discussions are well underway for options for the following two weeks.

Hopefully that volcanic activity in Iceland will not flare up again.

Thursday 17 June 2010

Only so many hours in the day

Oh the joys of the software industry.
  • Analysis
  • Design
  • Estimation
  • Implementation
  • Testing
  • Deploy
  • Maintenance

Just another day.

Sunday 13 June 2010

Youtube videos

A few years ago I used to carry my video camera around quite a lot.

I uploaded some clips to YouTube:

Eventually the novelty wore off, so I generally only have the camera with me for weddings and other big events.

Today I had a look around the "Insight" section of my YouTube account and discovered that a YouTube rival site has embedded some of my video content. If it was an individual on Facebook or something like that then I wouldn't mind, but this appears to be completely uncredited and scraped directly from YouTube.

I've now disabled embedding, but it appears as though the site may have taken a copy of the content - very naughty.

Wednesday 9 June 2010

Language in software development

While reading the Martin Fowler Refactoring book on the tube yesterday, I got to thinking about how programming languages are similar to general written and spoken languages.

Here are a couple of examples:
  • Terms that mean the same thing, but are called different names (synonyms).
  • Terms that share the same name, but mean different things (homonyms).
Much like written English, it requires a certain amount of context to determine the meaning of a term within a block of code.

Having a "Ubiquitous Language" within a system, as detailed in Domain Driven Design by Eric Evans, helps to ensure that developers use unambiguous terminology that even the end users of the system should be able to comprehend.

Saturday 29 May 2010

I feel the need, the need for speed

The site navigation is built up from a hierarchy of data stored in a relational database.

Every user is presented with the same navigation, based on their group memberships.

The navigation hierarchy is updated relatively infrequently.

This sounds like a classic candidate for data caching.

The implementation should result in:
- fewer trips to the database
- less short-lived objects
- less duplicate objects

Which all lead to faster performance.

Thursday 20 May 2010

Deploying Java into the cloud

At last week's Spring Source Forum in London I found myself thinking that being able to deploy Java applications into the cloud directly from SpringSource Tool Suite isn't that different to what can already be achieved for Google App Engine with their Eclipse plugin.

Less than a week later, I see Rod Johnson has blogged that VMWare have been collaborating with Google engineers for a while, and have now announced a collaboration.

I've only had a very brief skim-read, but I like what I see.

Tuesday 18 May 2010

Are we there yet?

Today I tried the delegation technique for getting things done in a team.

It didn't work anywhere near as well as I had hoped, as the updates that I expected 2 people to take a couple of hours at the most didn't get completed until the end of the working day.

As a result I had the office to myself to deploy the latest version of the current system onto the production servers from around 6 til 10:30pm - again. So, maybe today wasn't the best day to arrive into the office before 8am.

Friday 14 May 2010

S2G Forum London

A couple of months ago I booked today off work to attend the Spring Source S2G forum.

Unfortunately due to a looming deadline and issues arising back at the office, I felt compelled to miss the last couple of sessions but I still felt that I learnt enough from the day to make it worthwhile.

Mark Thomas did a good job of outlining some of the new features to be expected in Apache Tomcat 7.0.

Rod Johnson was good value with some self-deprecating humour when his live demonstration of Roo struck a couple of hiccups.

I was impressed with Roo's approach to round-trip code generation via AspectJ.

The main disappointment from the day was the thought that my currently planned projects are dependent on a third party - so I can't simply pick up Spring 3.0, Roo and Tomcat 7 for the next green-ish field development.

Sunday 9 May 2010

Mac for Java development

I've been stuck in the world of Windows as my desktop development environment for my entire professional career thus far (11+ years).

In the last couple of companies that I have worked at several of the developers have been successfully using a Mac for their day to day development.

It seems to be the case that "Once you go Mac, you never go back".

There are a couple of Macbook Pro laptops sitting around unused at my current work, so I'm wondering whether I should make the move.

Given that I seem to be spending quite a bit of time configuring *nix servers, it would make sense for me to have a unix-based operating system.

Thursday 22 April 2010

Attitudes to tests and documentation

On a fairly regular basis I hear people saying that documentation needs to be produced as early as possible, because otherwise it won't get done.

By the same rationale, test driven development must be considered a good way to ensure that software has tests.

Alas, the ambulance parked at the bottom of the cliff is still seen as effective.

Saturday 10 April 2010

Talking Heads

I was reminded of a line from a song recently, "You're talking a lot, but you're not saying anything".

The rest of the lyrics aren't relevent, but that line sums up my thoughts after a recent presentation.

It was like going for a meal and expecting a big feast, only to discover that the host is only going to serve hors d'oeuvres.

Is it just me, or do most software developers like similes and metaphors?

Thursday 8 April 2010

Apache config

I used to be the administrator of a handful of servers as well as having regular developer responsibilities. At the time I saw it as a way to make myself more of a valuable resource to the company, which almost backfired during the dot bomb era when billable hours were the main measure of value to the company.

In recent weeks I have had to take on responsibility for configuring production servers once again.

There have been a mixture of feelings:
- expectation that I would be delegated the task
- curiosity at why the estimate for my work was lower than that for the original resource, despite the requirements increasing

It's been reassuring to see that I can still find my way around the configuration of Redhat and Apache, but I know I don't want to be stuck doing this long term.

Wednesday 7 April 2010

Trust me

Lately I've been liking the expression, "Sometimes it's easier to ask for forgiveness than it is to ask for permission".

In my case it's not a matter of doing something without asking, but rather not doing what has been instructed.

Past experience just won't allow me to schedule testing with a third party when my client still needs to verify their approach has been approved. Admittedly it's nothing as critical as aircraft landing (that was a previous project), but it still has potential to waste time and money.

Of course I will never see that money as it was never mine, and I will inevitably be criticised for the communication delay.

Explaining will take longer than apologising, but I'm not the kind of person to apologise for doing what I feel was right.

Tuesday 30 March 2010

Just a theory...

From time to time over the past four months or so I have been receiving phone calls at my work claiming to be representing a secure delivery company that want to arrange for a delivery within a specified time range on a particular date.

Every time they ask for the names of people who should be allowed to sign for the delivery on my behalf, in case I am unavailable.

After the first couple of calls I developed the theory that the callers are not legitimate a delivery company, but could in fact be recruiters looking for contacts.

The most recent call was almost convincing, as they specified an organisation name that could have been legitimate so I gave the receptionist's name. Sure enough no delivery came, but I did overhear a call from a recruitment website who asked for the receptionist by name...

Sunday 28 March 2010

iPad might be worth a look after all

I'm slowly coming to the realisation that the last few books that I have purchased have been PDF files rather than physical paper.

Once the hype dies down and the inevitable technical version 1 issues are ironed out I may take a look at iPad.

Tuesday 16 March 2010

London Java meetup discussion

This evening I attended a meetup of the London Java community in a bar in central London.

There were a few familiar faces and some interesting informal discussions.

One discussion that I was lightly involved in revolved around the idea of some agile development practises effectively just being micro-management.

That triggered a memory about something I had read a few months back online.

Here is a link to the blog post by Mike Cohn that I suspect triggered my memory:

The attention grabbing headline is that it is about micro-management, but the important factor is that it is the team that is doing the management.

Monday 15 March 2010

Velocity in software development

It's not about the number of issues that you deal with, it's the estimates against them that counts towards velocity in software development.

Dealing with the smallest issues first might give some sense of satisfaction and accomplishment, but you'll have to face reality eventually and deal with those problems that require more thought.

Saturday 20 February 2010

DVD, Blu ray, or downloads

I sometimes wonder whether I am some kind of chump for continuing to buy DVDs.

Surely they will become a dead format, much like VHS tapes have?

Sunday 31 January 2010

Web service clients and concurrency

Web services are probably the most common mechanism for distributed systems integration online at the moment.

In the Java world there are tools available to generate classes to act as remote proxies and interfaces.

Apache Axis and Axis2 provide a wsdl2java command line utility for generating these Java classes from a web service's WSDL file/URL.

What some people may not consider is that the implementation details of the stub which their client code will call, may not actually be safe to be called from multiple threads at the same time.

So, if you have a multithreaded application - such as a web app - where multiple threads could potentially be making calls on the web service via a shared instance of the generated stub then it is possible that some state that is set up as part of the processing of one thread could be changed by another thread.

It may not be apparent from looking at the generated code, but ultimately that code extends code buried within a jar that you do not have control over.

There are several approaches to avoiding the problem:
- create an instance of the stub for each call
- create and access stubs in a thread local way
- set up a pool of stubs, much the same way as database connections are often pooled.

I'm going to try out CommonsPoolTargetSource for the pooling approach.

Friday 29 January 2010

Web clustering gotcha

A recent web application that I worked on had some strange issues within a day of going live.

The configuration has 2 nodes serving web pages over http and https behind a load balancer.

Secure pages and logins are served over https, all other URLs are directed to be served over http.

Some users reported that they could successfully login, but the next link they clicked would lose the login.

It turned out that our load balancer configuration had separate stickiness tables for http and https, so there was some chance of a user being connected to node1 for http, and node2 for https. In some situations that would not matter, but the underlying application does not share session state across the cluster.

Monday 18 January 2010

Am I just being cynical?

A few days ago I noticed a blog post over at SpringSource that announced the intention to move dm Server across to the Eclipse Foundation.

I haven't been attending enough geek meetings lately to appreciate what is going on in the world of OSGi, or the politics of the VMware acquisition of SpringSource for that matter.

A cynical person might observe such an announcement and think, "that project has been identified as not being aligned with the core business, so it is being abandoned in the nicest possible way". Today I might be that cynical person.

The optimist in me is hoping that the Eclipse Foundation can make the system into something that takes off and provides as much benefit as the Eclipse IDE did when IBM released that.

Time will tell.

Tuesday 5 January 2010

Geek meetups

Earlier this evening I attended the London eXtreme Tuesday Club for only my second time.

It was an interesting couple of hours of casual geeky conversation, including a live demo of some Erlang code for a handful of the group huddled around a netbook.

The general discussion around Scalar and Erlang reminded me of my first year of studying computer science at university, as our COSC122 course introduced a functional programming language (HUGS: Haskell User's Gofer System) with similar constructs to the currently trendy highly concurrent languages.

Hearing people talk about how Postgres is under-rated, and reminiscing about Perl made me feel a little old and nostalgic - in a good way. I like being able to nod knowingly when people mention the GIS capabilities, having compiled the PostGIS capabilities in from source for a couple of projects.

Monday 4 January 2010

A foreigner in a foreign land

If you've been developing software for long enough, you should have a reasonably good idea of what methodologies and technologies you can work well with.

I was fortunate enough to gain exposure to a range of different sized projects, using different approaches in the first decade of my career.

- Team sizes of 1 to 8;
- Timescales from a couple of days to 18 months;
- One-off throwaway scripts, enterprise applications that were maintained and in use for 5+ years;
- Solo missions, pair programming;
- Not worth testing, through to test-driven from unit to data access to GUI-driven automated suites;

When you've been with the company for that long you automatically know what sort of projects are going to come your way, and likewise your teammates know what you will be able to produce at the various stages, from design, to testing, development, delivery, and liaising with clients.

With a bigger company where nobody really knows all the ins and outs of the systems you're dealing with, and everyone seems to have a different view of the methodology it's difficult to explain the simple concept that "Garbage in" leads to "Garbage out".