Stuart McFarlane

Professional Application Development

phone
+31 641 747 449
email
stuart@mcfarlane.nl
office
de Breeck 17
1151 BN
Broek in Waterland
www
http://stuartmcfarlane.github.io

About me

I am a seasoned programmer with a wide range of engineering and development experience currently specializing in React/node.js applications.

For the last few years I've been building graphical applications running in the browser. Typically using React and rendering to SVG. The most satisfying of these applications is a small CAD-like tool for drawing kitchens.

In the past I've written device drivers, communication protocol drivers, security implementations, financial service application development, note and coin handling applications, middleware and realtime software.

Education

Flinders University

Bachelor of Information Science and Technology (BIScT) 1986 - 1990 Adelaide, Australia

Experience

Full stack developer

Stuart McFarlane Software 2024 Amsterdam

It's time to reimplement the 24 hour sailing race planner with 2024 technologies.

The front end is using NextJs.

The backend API is using Fastify and Prisma.

  • NextJs
  • React
  • node.js
  • fastify
  • Prisma ORM
  • My SQL
  • SVG
  • Python
  • Go

Full stack developer

caressikitchentops.nl 2021 - 2024 Amsterdam

Kitchentops is 2D drawing web application I wrote providing a tool for in house users and B2B customers to graphically design and order kitchen surfaces and accessories. Cutting diagrams and DXF files for CNC machines are produced to facilitate production.

The system is implemented as a REST API built on fastify in node.js with a react frontend.

The graphical frontend's 2D drawing function is implemented by rendering to SVG.

  • React
  • node.js
  • fastify
  • My SQL
  • SVG
  • 2D graphics

Freelance developer

Stuart McFarlane Software 2017 - 2024 Amsterdam

Building CMS and eCommerce installations.

  • TYPO3
  • PHP
  • Javascript
  • REST API
  • scss
  • grunt
  • eCommerce
Clients
Wholesale eCommerce website DPS https://dpsbv.com

Completely rewrote the front and backend of this successful B2B eCommerce site. Implemented a REST API that is consumed by the site itself and a mobile application to maintain orders.

Keeperstrainer https://www.keeperstrainer.com/

Creating new online portal for football keeper trainers. Initially conceived as a library of exercises grouped as trainings and sold in a subscription. It is growing into a comprehensive training program management tool with social media inspired features.

Amsterdamse Hogeschool voor de Kunsten https://www.ahk.nl/

Full stack developer

reclamefolder.nl 2019 - 2020 Amsterdam

I was taken on os a frontend developer for reclamefolder.nl during it's scale-up phase after acquisition by DPG Media in a team varying from 4 to 6 developers.

My chief responsibility was the development of features in the React front end. I am also a very capable backend developer so typically I would also implement any API's and corresponding database artifacts the front end required.

The team were very capable and professional, it was a pleasure to work for reclamefolder.nl.

  • Typescript
  • node.js
  • React
  • GraphQL
  • Angular
  • fastify
  • Express
  • Postgres
  • Google cloud
  • Docker
  • Kubernetes

Full stack engineer, lead developer

Booking.com 2013 – 2017 Amsterdam

Built a scaling white label implementation of Booking.com's front end. The backend communicated with a proprietary interface for content and availability and bookings. Our customers were hotel chains such as Marriot and Best Western. A given white label instance was generated from a declarative configuration specifying the theme and landing pages.

The project was very successful and provided the basis of Booking.com's Hotel Services division. Unfortunately Booking.com decided that they needed to reimplement the product in their house language Perl. We stopped developing features for the rewrite and while we were doing this they bought a company with a similar product and more market penetration.

After the completion of the this project I stayed on at Booking and participated in the development of the sales process management system fir the new division. The system was built around a state machine with various temporal and activity triggered events feeding into a Salesforce implementation and also into our data science team. The state machine approach provided a time-series of events for each salesperson, lead and customer. Unfortunately the data science team found it difficult to interpolate the time series into actionable advice and the system was abandoned.

  • Javascript
  • node.js
  • Express
  • swig.js
  • grunt
  • browserify
  • sass
  • AWS EBS
  • AWS EC2
  • AWS DynamoDB
  • Perl

Freelance programmer

Stuart McFarlane Software 2013 Amsterdam

Developing a tool chain to provide cloud supported mobile application development. Typically node.js implemented REST APIs for browser hosted one page applications and native mobile clients.

  • Javascript
  • node.js
  • AngularJS
  • MongoDB
  • Redis
  • AWS EC2
  • Puppet
  • Vagrant

Senior Application Developer, freelance

BKWI 2011 - 2013 Utrecht, Netherlands

In 2011 I started a long contract for the Bureau Ketenontwikkeling Werk en Income (BKWI) where I lobbied for and implemented a professionalisation of their web development department. Specifically, I got them using version control (GIT) and continuous integration (ANT, Jenkins).

I was initially employed in a team of four developers to implement www.naleving.net which is a community site with features like communities (where general posts can be gathered together for interest groups) and the ability to follow other users. It’s all built from GIT with versioned DB update scripts for a reproducible deployment to the test, acceptance or production server. Naleving was a large project spanning six months. It was built on pi_base and ###TEMPLATES### with a lot of typoscript. This left us with strong motivation to move on to ExtBase development.

After Naleving went live we started building sites using ExtBase and Fluid templates. This went well enough but eventually we decided to switch to FLOW, an MVC architecture that is being build by the TYPO3 community.

My last project at BKWI was a re-implementation Kernkaart.nl. Kernkaart is a tool that decision makers in federal and gemeente politics can use compare the performance of gemeentes with respect to indicators calculated from census (CBS) data. The application needs to process reasonably large amounts of data to produce the indicator values which led us to use CouchDB. CouchDB enabled us to perform complex calculations over the data sets offline keeping the response times of page requests down.

  • TYPO3 4.x
  • TYPO3 pi_base
  • TYPO3 ExtBase
  • FLOW3
  • PHP
  • MySql
  • CouchDB
  • Javascript
  • Linux
  • HTML5
  • Git
  • Frontend development
  • Backend development

Continued freelancing

Stuart McFarlane Software 2011 Amsterdam

In 2011 I returned to my own office in amsterdam and started taking contracts to develop websites again. I implemented a questionnaire system for the AHK (Amsterdamse Hogeschool voor de Kunsten), and implemented the search function for an existing Ruby on Rails app.

  • TYPO3
  • PHP
  • MySql
  • Ruby
  • Linux

Application and System Programmer, freelance

Rabobank 2009 – 2010 Zeist (Utrecht), Nederland

It turned out that banks still needed programmers so in November of 2009 I took a contract to developing and maintaining application software for automatic teller machines for the Rabobank.

  • MS Visual Studio 6.0
  • C++
  • PVCS
  • HTML
  • Wincor Nixdorf ATM systems and peripherals
  • NCR

Began freelancing

Stuart McFarlane Software 2009 Amsterdam

As a result of the banking crisis in approximately May of 2009 banks started becoming difficult clients. Many projects were scrapped and I found myself free to pursue my desire to become a freelance developer. I picked up PHP and CMS development using TYPO3 and started taking contracts.

I started out making small business sites, but quickly moved on to writing custom plugins for larger clients. These are made with templaviola and pi_base custom plugins.

  • TYPO3
  • PHP
  • MySql
  • Linux

Application and System Programmer

Wincor Nixdorf 2007 – 2009

I was primarily hired to develop and maintain automatic teller machines application code. Between core business projects I continued the development of the in house build/delivery system, developed office productivity tooling.

  • Agile develpment (Scrum)
  • MS Visual Studio 2005, 2008
  • C++
  • MS Visual source safe
  • PVCS
  • HTML
  • Wincor Noxdorf ATM systems and peripherals
  • Java
  • XSLT
  • C#
  • XAML
  • Windows forms

Application and System Programmer

Diebold 2005 – 2007 Utrecht

Developing and maintaining application software for automatic teller machines.

System Programmer

Getronics 2002 – 2005

Developed middleware on win32 for banks' backend and office applications.

System Programmer

1998 – 2002 Netherlands

Various projects.

Traveling

1996 - 1998

Travelled through Africa and wound up in the Netherlands.

Programmer

M&B Electronics 1995 - 1996 Brisbane, Australia

Developed embedded software for an integrated credit and jackpot system for a casino.

Programmer

CSIRO - (Australian agricultural and industrial research organisation) 1991 - 1994 Narrabri, Australia

Developed and maintained a decision management tool for cotton growers.

Programmer

DSTO - (Australian defense science resource organisation) 1988 - 1989 Adelaide, Australia

The goal was to develop a modulation recognition system for battlefield communication.

The research engineer had developed RF electronics to extract signal characteristics that could potentially be used to identify the modulation of a given signal. I implemented the data capture from A/D converters, primary statistical analysis on the sliding window and the test framework required to analyse candidate pattern recognition algorithms.

A period of literature research identifying pattern recognition algorithms a selection of candidates was made. I implemented the candidate algorithms into the test framework. The candidate algorithms were tested against representative signal inputs and a set of winning candidates were identified.

The final implementation was a bus addressable PCB hosting a network of Inmos Transputers running a pipeline implementation of the capture/analysis and pattern recognition implementations from the first research and testing stage.

  • C
  • Occam (Proprietary Inmos Transputer programming language)
  • Realtime data capture and statistical analysis
  • Research

Personal projects

24uzr

My pet personal project is a race planner for the 24 hour sailing race. This annual race has a unique format whereby you must sail as far as you can in a 24 hour time period along a selection of possible legs. It is an interesting strategic puzzle and a fabulous mathematical puzzle at the same time.

Whenever I need to learn a new programming language or framework I always look to this puzzle to provide the content of my autodidactic endeavour.

Mathematically speaking it is a graph search/path-finding problem maximizing distance sailed and minimizing the delta to 24 hours. Exhaustive search becomes intractable on a single machine long before the 24 hours is reached so finding an optimal search algorithm is necessary.

Besides the mathematical puzzle it is also good puzzle for application development. The application is multiple clients have realtime analysis of their progress and a selection of optimal solutions given their actual progress. This requires a application client, backend services to collate and provide necessary information such as wind predictions and a routing service to do the path-finding.

I've built this once before using Angular in the client, node.js in the backend and with a routing service written node.js with the actual graph routines implemented in C++. Unfortunately this is not currently hosted so I can't show it to you.

The current instance of this project is progressing nicely and uses react in the client, node.js for the backend and the routing service written in Go.

Sailing

I am a keen sailor. I have my own sailboat which means I am also a keen handyman. When I'm not painting her, building a new rudder because the old one broke or monkeying about with the motor because it wont start then I'm usually out sailing.

I also like to race. Every week on Wednesday evening during the clement months you'll find me on the foredeck of a 10 meter racing yacht hoisting and gibing spinnakers, skirting gibs and counting down boat lengths to the start line.

Skills

Languages

Typescript (node.js, Browser)
Good
Javascript (node.js, Browser)
Expert
Haskell
Learning
R
Usable
Go
Usable
Perl
Expert
PHP
Expert
C++
Expert
Java
Experienced
BASH
Expert

Frontend technologies

NextJS
Good
React
Expert
Angular
Experienced
scss/sass
Expert
css
Expert
jQuery
Expert
Bootstrap
Expert

Databases

Postgres
Good
MySQL
Expert
MongoDB
Experienced
CouchDB
Expert

Version control

Git
Expert
Subversion
Usable
MS Source Safe
Expert
PVCS
Expert

Platforms

Linux (Debian)
Expert
Mac OSX
Good
iPhone
Experienced
Win32
Expert

Infrastructure

AWS
Experienced
Google cloud
Usable

Dev Ops and Continuous integration

Terraform
Usable
Docker
Good
Jenkins
Good
Ant
Good
Puppet
Usable
Chef
Aware
Scripts
Expert