Gregory Graham

Greg Graham

 Software Engineer

  Investigate Implement Improve
  +64 27 444 5201
  LinkedIn Twitter

Developer of



18 years of experience, for research institutes and major companies, from websites to multi-user client-server applications.

View details »


Delivering practical solutions for customers and colleagues.

View details »


Dedicated to helping and supporting colleagues and friends.

View details »



Problem: The customer likes the product but is wary of the risk.
Solution: Implement automated testing at unit and UI level.
Outcome: With increased confidence in the end product, the customer is now actively engaged in working toward the completed product.
Dr David Pearce, Senior Lecturer at Victoria University of Wellington, commissioned a project to implement a web-based Integrated Development Environment (IDE) to be used by the students. The end product was intended to showcase their on-going investment in the Whiley language and be used as a teaching tool. However both of these aims are very public-facing and potentially embarrassing. So he needed to be able to trust the output of 3 students and 2 engineers.
Together the team implemented testing frameworks at the unit level in Python and the user interface level with Selenium.
Code coverage analysis helped give a number to the code that was completely trustworthy and Selenium ensured that the existing functionality was rapidly, reliably, and conveniently checked at all stages. The team are also enervated and re-assured that their fast-paced development is building on the existing product without any problems


Problem: The database schema is impossible to work with.
Solution: Abstract the database behind a programming API that allows for dynamic query creation.
Outcome: A more efficient way of working that freed developers to improve the systems.
Toyota New Zealand had a 15+ year old database that contains almost all of their vehicle information. Unfortunately it was designed with an obsolete 4GL tool that produced an excellent 500 table schema that included no information about what the data meant. The need for constant intervention to investigate potential problems, and apply solutions meant memorising hundreds of generic table and columns names. Developers and management both agreed that this situation was torturous to work with and highly error-prone.
I designed and built a Java API that automatically generated a programming representation of the database schema, and added the semantic information. The API included the ability to combine the representative classes into dynamic queries and to apply the changes required to the database
Developers were able to work with the database without frustration, include solutions in the standard source control mechanism, and build a generalised diagnostic tool to diagnose and fix a myriad of problems


Problem: Emergency staff are difficult to contact quickly during an emergency and the current roster is unreliable.
Solution: Implement an integrated roster and texting application.
Outcome: Reduced communication burden on operational and emergency staff helps them focus on the emergency.
Port Taranaki has on-call emergency staff for dealing with critical situations like oil spills, fires, and containment failures. However coordinating the teams and contacting the individuals is problematic. In the event of an emergency Security staff must obtain the current roster from Operations and phone each individual, or page them. Home phones have been problematic and no-one likes wearing a pager. However all staff have a text-capable phone.
Use a distributed information system to allow Operations staff to maintain the current roster and provide Security staff easy access to group sending text messages to the current team. The application combined the current roster system with the emergency system and updated the communication system by adding a dedicate texting system.
Staff are happy to use their preferred device to be on-call, Security staff could mass-notify then focus on important individuals and event, and the Operations staff knew that their work was automatically and reliably available to Security.


Problem: Staff feel little ownership of the website.
Solution: Make their existing interactions with the website more immediate and significant.
Outcome: Happy departments actively and proudly maintaining their own website.
Port Taranaki had an extensive but mostly static website, and the update mechanism was to deliver documents to the programmer. Unfortunately this led to the feeling that the website was an IT function rather than a reflection of the individual departments.
Both the marketing department and HR had significant interactions with the website but their interactions were hampered by the manual and time consuming processes. The process was a chore and caused a lack of interest in the website.
By implementing a JavaScript, PHP, and database driven interface for the 2 departments to update their own content, I increased ownership of the content, added immediacy to website interaction, and streamlined the process.

Personal Stories


Every new technology has it’s challenges, just recently I have learned DWR, Agile, Informix, JavaDB, H2, Python, Cherrypy, Bootstrap and several others.

These were for a combination of work, university, and personal projects.

Generally the best approach is to chat regularly with someone knowledgeable in the domain, with a little bit of research to support free learning.

This has worked for me at all my jobs and particularly at Victoria where very little of my current skills set was applicable.  

There we were pushed into a pressure cooker of Agile sprints, Python, Bootstrap, and jQuery.  

With the client overseas but wanting to use it with classes in only weeks we frantically collaborated, with me focussing on dynamically balancing the team while learning as much as I could.


Developing the Port Taranaki SWAN system was interesting due to the variety of tools utilised and the reach of the software.

The original intent was to integrate the existing Port Taranaki data sources to provide automatically generated shipping information for the Maersk shipping line.

I utilised the existing container managements systems data from the Oracle database using Linux scripting and a custom mail client to provide the data.

As demand for information increased SWAN was extended to include data from SQL Server, Topspeed, and web site databases using Bash, Java, and other technologies.

It also provided the information requirements of Customs, MAF, 4 shipping lines, the harbour pilots, the automated text system, and the website.


The most interesting project was probably the Storms Project for GE Energy Control Systems.  

The energy network management system was the best in the world but during a record storm it actually was too helpful to Scottish Power.  

Our brief was to re-engineer the software at thousands of points so that the alerting system could be systematically reduced during emergencies.

All within a Oracle Pro-C, Motif, and C application that ran the power for half the United Kingdom. 

Obviously this was a massive undertaking and we worked with a world-class project manager flown in from Florida by GE.  

Ultimately we delivered under budget and only hours over deadline and that only because of a design flaw by an external consultant.