Development Skills
Primary Programming Languages
Python: Expert ( 2005 - Present)
- Pixel Fusion - AWS Lambda services for TEC, Intellihub
- Plant and Food - Analysis, Data Science, Modelling, Visualisation, Inc Jupyter Notebooks, FastAPI, Django.
- NIWA - Analysis and modelling
- Vianet - Python on Pylons Web application, tooling
- Python is usually my chosen tool for home projects - AI, Data Science, Budgets, Scripting etc.
PHP: Expert ( 2005 - Present )
- Pixel Fusion - Long term support for pet.co.nz/petstock.co.nz/au large scale legacy symfony applications
- NIWA - PHP/Symfony multiple lightweight or WebUI oriented projects.
- Vianet - PHP/Symfony for full stack accommodation booking application
Javascript/Typescript: Expert ( 1997 - Present )
- Voluntarily.nz - Full stack, open source, web application for volunteer management, NextJS.
- Plant and Food - major web applications including Fishpond Data management system - NextJS
- NIWA - NiwaWeather application and others in JS + jquery
- Ansae - interactive web pages in pure javascript for museum displays
C,C++, Java, Object Oriented Programming : Expert
I used C++ almost continuously from 1987 to 2007 and have used Object Oriented Programming and Design techniques to specify and develop a wide variety of class libraries, components and complete applications. I have used both Microsoft and Linux GNU (GCC) compilers for both Windows desktop applications and embedded Windows CE development and have given small and large group training courses in C and C++.
I have used C since 1985 and have continued to use pure C in various embedded system developments where C++ was unavailable or inappropriate. This included GSM cellphone handsets, a medical data logger, and low level libraries for linux and image processing.
I have been using Java since 1996. At Renishaw I ported an Active X control used to draw specific machine accuracy polar plots into Java so that the web application can be used across a variety of platforms. For Ansae (1999) I worked on HTML and Java based (J2ME) handheld information devices and control units for the museum industry. I wrote a cookbook describing the use of Java for Ansae Puppeteer products. At NIWA the team used J2EE/Struts/JBOSS extensively for middleware in major biodiversity and other online systems as well as SEAM/JFS in newer systems.
Familiar with J2EE, J2ME CLDC/MIDP, Personal Java, JNI, RMI, Java Servlets, JBOSS, Tomcat.
Software Engineering Processes, Various development methodologies
A successful delivery team is able to produce software that is on time, under budget and of high quality. I'd add to that the team should be more productive in a year's time - that means no technical debt or burn out.
Outside of trivial projects this is an impossibility - in every project there are constraints, something has to give and every choice has consequences.
I use Agile methods because for the type of product development I have been involved with it leads to the best long term outcomes. Not the shortest path to a MVP or Demo system - but the most effective path to a sustainable product backed by sustainable processes and people.
At Vianet and NIWA I ran the development teams using Agile/Scrum methodology. Scrum involves iterative, test based development with regular releases and whole team commitment to the process and tasks. This allowed us to deliver new features in a timely fashion with high software quality and repeatability. At NIWA we refined the process to allow the team to deal with a wide and varied range of ongoing projects and legacy systems.
For the Voluntarily.nz open source project we needed a pattern of work that supported both a small central team of developers alongside a larger cohort of volunteer developers and weekend coders. Here we used a more Kanban style with a managed backlog and grouped and categorised tickets allowing people to identify areas they could move forward without necessarily asking for permission or being assigned work.
At PixelFusion we use a mix of Scrum/Kanban depending on the needs of the client and dev team size.
At NIWA I introduced a full range of software engineering processes including, revision control, issue tracking, wiki based documentation, unit and functional testing, automated continuous test and build, test driven development, virtualised dev, test and production deployment servers along with a re-centering of development on user driven requirements and analysis.
As a consultant I have been involved with digital transformation - which often means taking the business idea - we should be more agile and communicating how that maps onto the more specific ways to build effective development teams.
User Interface, User Experience and System Design
I have strong skills in Systems Architecture and User Interaction design. I have a good understanding of human factors, usability issues and technical constraints, and continue my personal education in this area. At Navman I was responsible for major improvements in both the visible face and usability of the GPS GUI and also the underlying architecture, versatility and internationalisation.
At Vianet I designed a Web Services Architecture that provided a gateway between a global accommodation booking service and mobile devices. At NIWA I was responsible for major improvements in the appearance and usability of online systems. I prefer a layered approach to systems design using pure CSS and HTML whenever possible and separating styling, content and behavior.
Although not a graphic designer I have a strong aesthetic sense and comfortable skills in Adobe Photoshop and Illustrator. I'm also a font nerd.
Full Stack Web – HTML, CSS, XML, Javascript : Expert
I have been writing pure HTML since 1995 and HTML + Client side Javascript since 1997. I was responsible for introducing web technologies into Renishaw plc both as a Rapid Application Development (RAD) tool and also as the user interface for an intranet based distributed application. This project involved considerable use of XML as a server side data transfer mechanism.
At Sendo I introduced XML as the data transfer mechanism between the order processing system and the handset configuration system and designed an XML system for managing and compiling MMI resources such as bitmaps, languages and melodies. I was also responsible for the design and implementation of the Intranet web site. This included a universal front end for handset test and diagnostics. At Sendo I implemented an Over The Air (OTA) diagnostic information system using XML and SOAP.
At Vianet I designed XML APIs for web services and published XML Schema Documents to describe the interactions both for message exchanges and WADL ReST based requests.
At NIWA I introduced the use of XML Databases (eXist and Geonetwork), Designed XML schema documents, and wrote XSLT stylesheets for rendering and conversion. For the Historic Weather Event Catalog I introduced the use of Xquery and for other projects investigated Xforms. All new systems at NIWA are Restful, Standards Compliant and make use of open standards such as OGC:WFS/WMS/WCS etc.
I first started writing Javascript in 1998 but most front end programming started with Vianet and NIWA. Having written some complex interactive front ends in pure js. I quickly recognised the need for supporting frameworks and after reviewing several adopted Angular at NIWA for applications such as NIWA Weather, NIWA Data and FarmMet.
For Voluntarily I adopted a Javascript end to end approach using the MERN (MongoDB, Express, React, Node) stack along with NextJS for Server side rendering. I have authored scores of react components and pages using both class and function/hooks based approaches.
Database, Metadata and Geospatial: Proficient
Experienced with SQL RDBMS (Oracle, MySQL, PostgreSQL/PostGIS). Can design and implement data models, script queries and interface to frameworks through ORM such as Doctrine, Hibernate.
Also now experienced with NoSQL databases including MongoDB and EAV (Entity Attribute Value) database design.
Experienced with main Open Geospatial Consortium (OGC) protocols, GML, WFS, WMS, CSW, OM, SOS. Used extensively in the design of new NIWA SOA.
Familiar with IS019115, ISO 19139, ANZLIC, MCP, Dublin Core and other metadata formats. Implemented the Geonetwork Metadata package (BlueNetMEST) within NIWA and extended the profile for NIWA requirements.
Real Time and Embedded Systems - Expert
Much of my experience is with embedded and real time systems. I can work closely and effectively with hardware designers, design and implement operating systems, device drivers, networking, debug support, user interfaces and control applications. I can manage and control the full software development life cycle for new consumer electronic devices. I understand issues of production, marketing, security and usability. Devices include: Navman Navigators, Sendo GSM Mobile phones, The Sendo/Microsoft Z100 Smartphone. The Ansae Puppeteer, Oakfield's Medical Data logger and Stack's motor-sport dashboard and data logging system. I also have extensive experience in Plant control including a full landfill gas power station. Water pumping stations and a nuclear materials testing rig.
Data Science and Artificial Intelligence - Proficient
Since working for NIWA full time I have also worked for the CRI's Scion and Plant and Food Research in a contract/consultancy capacity. These activities draw on my close association with the needs of science and researchers. In particular in the fields of data acquisition, storage and management, analysis and visualisation.
As a result I have been a champion for upskilling researchers in both data scient and coding skills. In NZ helping define the role of Research Software Engineer and presenting for science groups and conventions as well as developing tools that support accurate data entry, legacy data recovery, metadata discovery and communication.
For Plant and Food Research (PFR) I worked closely the data management group to define and implement requirements for metadata management, and then with the Seafood research centre to define and implement solutions for their data management needs. This includes a large scale data recovery project - analysing, parsing and converting 20 years of Excel spreadsheets. Creation of a data lake style solution based on the OGC Observations and Measurements Abstract data model and using the Apache/Age Graph database to track fish population movements, feed, treatment and environmental observations.
Also for PFR I worked with a research group to develop a Machine Learning (ML) system used to identify fish and make morphometric measurements such as length and weight from first photographs and later video feeds from fishtanks. My role involved building an inhouse and later cloud based training pipeline that stored large numbers of images and metadata, performed pre-training image optimisation to identify spots on the fish, fins etc. then built an AI data inference model (PyTorch) that had a gradually improving success rate in live identification of individual fish and their measurements.
Dev/Ops
All the bits you need to turn a code base into a running product.
- Git, GitHub, Bitbucket, Jira, Confluence.
- Github Actions, Jenkins,
- Docker, Docker-compose
- Unit/Functional Testings: JUnit, xUnit, Ava, Enzyme
- End to End testing: Codecept, Puppeteer, Selenium. Gherkin
- Auth0
Cloud
- AWS Cloud Architecture design and implementation
- AWS core services: EC2, S3, IAM, ECR, ECS, SQS, SNS
- AWS APIGateway, Lambda (Python/JS/Java)
- Cloudwatch: Dashboard, Metrics, Trace, Alarms, Notifications
- Infrastructure build: CloudFormation/CDK,
- CI/CD Deployment, multiple environments and stack.
Outdated skills
Windows CE, Win32, Pocket PC and Smartphone - Expert
I have been developing applications for Microsoft windows since Windows 3.0. I have experience in porting Windows CE onto new devices using Platform Builder as well as developing several complete user applications. I was involved with the Microsoft Smartphone project since its inception and have developed drivers and applications for the (now defunct) Sendo Z100 and the Orange SPV. This includes an Instant Messaging/ Social Networking application for Orange. I have also developed cross platform applications for Pocket PC, Smartphone and Symbian devices.
Symbian – proficient.
I started working with Symbian in 2003, I produced for Mobix applications for both the Series 60 devices e.g. Nokia 7650, 3650 etc. And for UIQ devices e.g. Sony/Ericsson P800. .NET, COM, ATL and ActiveX I am very familiar with these Microsoft component technologies and have designed and implemented a wide variety of COM objects including an automated test interface for the GSM handset, an encryption object, data capture and visualisation objects. These components include both ATL and MFC ActiveX technologies and have been used by both HTML, C++ and Visual Basic Clients.
Forth: Guru level
I started using Forth in 1984. At Sendo I introduced Forth as an ultra lightweight alternative to using a Java Virtual Machine to host downloadable games on the handset. Although no longer common my long experience with Forth has given me a close understanding of other VM technologies such as the Java Virtual Machine (JVM) and Microsoft's Common Language Runtime (CLR)
Assembler: Expert
ARM7, ARM9, StrongARM, 68HC11, x86, 68k and others. I am familiar with these devices both from a processor level debugger view and also to write time critical assembler sections.