As generalist...

I'm a well rounded technologist who is effective at bridging the development and business worlds. Able to solve problems rapidly by drawing upon my extensive knowledge base of programming languages, frameworks and experience building large hyper-scale distributed data-driven platforms.

I spend loads of personal hours every week researching and developing personal projects which allow me to keep ahead of emerging technologies, tools and approaches to solving problems. These very often translate directly into revenue generating activities within my current role as Chief Disruption Officer at Synthesis, where I'm attracted to projects which have large amounts of "unknown". In fact, "unknown" is one of my favourite places to be.

I am a great communicator, and tend to gravitate towards building strong relationships with key stakeholders in any project I work on. I am a proponent of Agile, Lean Startup and ideas like Loonshots and always try to steer stakeholders to focus on the user experience and end-user value on any project.

I have been described as a futurist, and spend a lot of time living in the future. I'm attracted to functional languages, machine learning, quantum computing, temporal programming, extended reality and high-bandwidth user interfaces. I thrive on diving deeply into these things, and being able to articulate their value within the context of a customer domain.

As technology specialist...

Realtime, Distributed and Streamed

I coined two terms "Inference Oriented Architecture" and "Temporal Programming" in 2018 and 2019 respectively.

Inference Oriented Architecture describes an architecture which is optimised for producing model predictions based on incoming events in as realtime as possible. I had noted that most of the prevalent architectures I had seen in production machine learning systems tended to optimise for model training, rather than on inference. Although this is not a groundbreaking architecture I have found the term to be an effective tool for communicating to stakeholders the value in building for inference rather than training - as this is where the real value lies.

Temporal Programming is another effective term to describe the function of the modern programmer whose focus is shifting from building solutions which query and manipulate data at rest, to one which needs to extract value from a continuous and unbounded set of events. Architectures which put event streaming at the core (such as those you may find with Kafka, Flink, Spark Streaming, etc) promote an application design which must solve it's requirements through operations run against an unbounded commit log. These structures cannot be queried nor updated and are intrinsicly distributed, and so techniques such as map, reduce, windowing and partitioning which produce results continuously have to be leveraged. I have found these types of problems excellent for teaching functional paradigms.

Hyper-scale Distributed Systems

I have immersed myself into the public cloud space, and in the process re-taught myself everything I know about distributed systems (and why they are hard). By 2015 I was thoroughly convinced that the future would be wrapped in container and deployed upon an ocean of Kubernetes nodes, and that the basic premise that software must run on a computer is now optional. Matching supply to demand is the new software economy, and the industry equaliser. Enterprises that sit back and believe that the size of their infrastructure investment is somehow a barrier to entry are being severely disrupted.

I'm still pretty passionate about this stuff and use Kubernetes daily and would consider myself an expert in building for this platform. In the past I've written Operators, CRDs and extended Kubernetes to simplify deployment tasks for our general development teams. I've also been deep inside the k8s code base to debug and validate certain behaviour - and so I'd even call myself a golang novice (not my fave language though, ask me why).

Functional Programming

I've been inspired by functional programming forever, and especially the potential to write code which has much fewer bugs. I have spend hundreds of hours on researching the topic, starting initially with Scala, then ML, F#, Haskell and more recently discovered Elm & Elixir. I was fortunate enough to get a fair amount of F# into production through 2 projects circa 2009 and their success really reinforced my view that a functional style produces far more stable code bases than an equivalent OO or imperative alternative.

Today I would describe myself as a total functional programmer. However I am very comfortable working within more OO slanted languages like C#, Java, Golang etc - just don't expect to see a bunch of mutations and null references!

Javascript

Javascript is probably my scripting language of choice. I'm super comfortable with nodejs, ES6, promises and the asynchronous programming paradigm - which compliments my functional style completely. My secret weapon of choice is very often LiveScript - which is a functional language compiling down to plain old Javascript - it's got an amazing prelude, and really simplies code.

Elm Lang

Elm is a language for building web applications. It really invented the "redux" pattern which is now so popular in other Javascript based frameworks like React or Angular. However - because Elm is a specialist language it can provide a whole bunch of language support to keep it really simple and remove any ability for the developer to make mistakes in the pattern. It's a pure functional language - meaning absolutely no ability to generate side effects. The author (Evan Czaplicki) is obsessed with designing a language that is simple, easy to use and delightful for developers. It's an absolute pleasure to work with.

C, C++

Although less frequently in recent years, I have been required to write a fair amount of C / C++ code - generally to be run within customized hardware security modules. It takes a couple days to get back into it, but I soon get into the groove and love the language (especially C - for it's simplicity). In my past in the early 2000s I wrote an absolute ton of pure C, back then in a pseudo object-oriented style (function pointers in structs ftw!).

My belief is that C is the language that absolutely every wannabe software developer should learn, and write at least 6 months of production code in - too many good lessons and concepts to mention, concurrency, threading, memory, strings, etc - all of which are probably taken for granted in higher level languages.

Objective-C

A surprisingly cool language that I needed to pickup while looking at IOS development for a proof of concept project I worked on. I ultra-love the ability to switch into C, but also the language is super modern with automatic reference counting, and asynchronous constructs optionally built in. I absolutely love the objective-c language additions - they are quirky and show their amazing history.

Probably nowadays Swift is a better (functional) choice!

C#, F#

A great, solid, practical and easy to use bunch of languages for everyday use. These are the languages that I tend to recommend for most of the projects which I bootstrap, because of running least risk generally. Microsoft have done a great job of including a monumentally awesome standard library into the runtime, but produced an amazingly powerful core runtime.

Rats and mice - Java, Scala, Python, Golang

Comfortable working with all of these - and have in the past spent many thousands of hours in each.

As weekend warrior...

I love building stuff. And this love is not limited to work related projects alone - however I have only one mind so it's sometimes hard to seperate. See below a list of some fun weekend projects which have swung from small prototypes to sometimes full blown obsessions:

Container Chaos

Films---TV-2020_02_10-12_54_24-PM

You can watch and upvote the 1m23s video which I posted to r/kubernetes in February 2020 here:

Container Chaos in Unity3d

Another idea was more of a structured "appliance" view of kubernetes. Where various resources (such as Deployments, ReplicaSets and Pods) are represented as rackable equipment and connected to each other through "cables".

appliances

Tjaards idea was a huge set of cogs dropped onto massive spindles to represent the Deployment -> Pod relationship. The speed of cogs rotating depicting how hard they are working (or something like that):

AB192AD8-83A8-4246-88FA-C7FBAE0C5013

I think this would be really cool in VR. The ability of players to immerse themselves into the cluster resource and also be able to move stuff around to make more sense to them... Hopefully more to come.

Ultra-nerf

After a couple of excellent Nerf wars at the office I decided to do some upgrades of my gun. Removed the standard brushed motors, replaced them with powerful brushless (scavenged off an old fpv drone), fitted with ESCs and driven by a 16.8 4-cell LiPo battery. Added an Arduino behind the trigger to drive them, and now this thing is literally deadly.

Unfortunately I've been banned from Nerf games at the office now...

Labs-Update-15-Oct-2019.019

Etherlock

During my time obsessed with Ethereum smart contracts & solidity I build a small prototype which allows any ethereum user (with wallet) to "rent" my safe. The safe was fitted with a raspberry pi, running a small ethereum node synced to the public ethereum blockchain. It would be able to detect changes in rental ("ownership"), and then be able to respond to functions invoked on the blockchain, i.e. the ability to lock or unlock the safe.

I think this idea has TONS of potential. Of course you could use it to protect your stuff, but you could of course also program much more complex contracts, such as the ability for the safe to open when a buyer has paid the purchase price of whatever is inside the safe (almost like a vending machine).

Labs-Update-15-Oct-2019.014

FPV Racing Drones

I was obsessed with building and flying FPV (first person view) drones for a few years (2016/2017) and during that time built approx 8 machines over 18 months. This was when I learned to solder, and learned about things like PID controllers etc.

IMG_6562

My collection at one point in time - includes the DJI Mavic on the far right for perspective.

IMG_4082-2

My 5" Lumenier - really my first "proper" racing build, using top-end components.

IMG_3105
IMG_6584

A couple others in various sizes (above is a 4" plus a 6").

As project specialist...

Chief Disruption Officer

Synthesis Software Technologies (since 2016)

Leading projects in our Emerging Technology space with key early-adopter customers. Customers wanting to explore possibilities with Machine Learning, Realtime Streaming or even experimental ideas such as Extended Reality. Usually these are shaped as timeboxed proof-of-concepts executed with a small highly capable and focused team to maximize learning and exposure - thereafter and if successful can be spun into longer-term project commitments aimed at getting into the market.

Director of Information Security

Synthesis Software Technologies (since 2007)

In this role I managed a team of approx 8 developers deployed on various projects, interfacing directly with customers through the sales, contracting and implementation stages including diving into architecture and development head first to get projects up and running as effectively as possible.

I am passionate about writing secure, clean and bugfree code and am an agile and MVP evangelist. I used to be nuts about security, cryptography, vulnerabilities, penetration testing and the security industry and it's ecosystem. These days I prefer to focus my energy in areas which are more positive and creative, but I always have a slant towards developing applications which require higher levels of security, privacy and compliance.

A couple notable projects

Afgri Internet Banking - Feb 2014

I bootstrapped a small, nimble and effective team to develop the next generation of Afgri's Internet Banking platform. Scrum process with a focus on MVP to manage the development, with business interaction on a daily basis to prioritise features. Technology platform leveraged AngularJS frontend, ASP.NET WebAPI backend, integration into SAP PI core banking platform.

Investec Issuer Script Generator - Oct 2011

Replacement of a heavyweight (read expensive) european EMV scripting engine with a lightweight and fit-for-purpose EMV issuer script generator tied into the card authorisation process handled by the AS400 card host. This application allows the management of cards post-issuance, supporting any number of issuer scripts to be delivered to a card while performing online authorisation, such as managing velocity counters, enabling/disabling contactless support, blocking/unblocking or even pin change. Technology platform is F# .net core service, with integration into a Thales nShield HSM for Secure Messaging encryption / signing. Administrative frontend developed in ASP.NET MVC4.

Investec Mauritius Online Banking - Oct 2010

From first line of code to live to the first client within 6 months. Fully transactional, multi-currency, multiple level authorization, auditable and secure platform that has become a key differentiator for Investec in the Mauritus market. Through the epic success of this delivery, this project has been used as blueprint for future development projects tackled by Investec. Combination of Scrum and Kanban project methodologies, managing a team of approximately 11 people. Technology platform is a very straightforward mix of ASP.NET MVC4 frontend, WCF Webservice backend, Java service layer integrating into the AS400 Bankfusion Equation core banking platform.

ABSA Zero Knowledge of PIN - Feb 2009

Secure the ABSA sign-in and registration process through termination of SSL/TLS web traffic within custom code running on Thales nShield HSM devices. Encryption of sensitive (generally PCI PSR / PCI DSS) parameters is done within the FIPS-140-3 boundary and re-originated from within the device en route to final destination. This infrastructure secures 1.3 million users, accessing ABSA web resources upto 4000 requests per minute, across multiple geographies. Technology platform is based upon the Thales nShield CodeSafe development environment which runs our C-language "Zero Knowledge of PIN" application on an emulated FreeBSD kernel.

Senior Software Developer

African Defense Systems, Midrand, South Africa (Jan 2001 - Nov 2004)

In this role I spent a lot of time writing military grade software against the MIL-STD-498 software development methodology. My focus areas were mainly in fire control, environmental and missile weapon simulation.

Artillery Fire Control System

Worked in the Ground-Based Command and Control Department as a software developer on an artillery command and control system. The system was written in Java using Sun Microsystems’ NetBeans Platform and targeted at the Linux platform. I was a member of the architecture team and was instrumental in redesigning the entire system from scratch after identifying a number of critical flaws in the prototype design. My responsibility on the project involved developing the core module infrastructure of the framework in order to support a pluggable and modular application. Later I was tasked with developing a digital elevation data processing module in C++ integrated into the core product (using Java Native Interface), as well as taking on the role of software configuration manager for the project.

Combat Team Trainer

Worked in the Simulator Systems Department as a Junior Software Developer on a combat-team trainer for the South African Navy’s Patrol Corvette (SANPC) Programme. I was solely responsible for the synthetic environment subsystem which provides the entire system with emulated real-world data of the vessel’s current situation. This simulation engine also allows visualization and modification of the surface situation by an instructor. I was partially responsible for writing both the surface-to-surface and surface-to-air missile console simulators which emulated the actual combat consoles linked to the vessel’s combat management system. This involved writing human-machine interface code as well as simulation of ballistics, flight-path and collision-detection code. The simulator was a complete success and I was instrumental in the delivery and rollout process which occurred over a period of 3 months in Simonstown, Cape Town.

As athlete...

Well... this is mostly in my dreams, but I do spend a lot of time on my 4 bicycles, either ripping up the neighbourhood trails on my singlespeed mountain bike, leading the peleton at the cradle of humankind on my road bike, exploring the drakensberg on my dual suspension mountain bike or trying to better my ironman bike split on my time-trial racing machine.

I have discovered that I really enjoy pushing myself to the next level in everything that I do.