// havox.org — v4

John Gatward

Software Developer

I like building useful things and understanding how they work.

Havox & me

day job

Backend engineer at Sainsbury's Supply Chain & Logistics. Microservices, Spring Boot, Kafka, MongoDB, AWS. It's good fun.

linux

Long-time Linux user and recovering distro-hopper. Currently: Hyprland on Void. Home server running 24/7 for friends and family who didn't ask for it but appreciate it.

teaching

Tutored CS, maths and English through school and uni. Still think the best way to understand something is to explain it — which is why this site has tutorials.

havox

Started in 2017 as a place to dump whatever I found interesting. Four redesigns and several dead domains later, it's still going. Less a portfolio, more a paper trail.

skills

What I know

Backend

Professional Java experience building microservices & RESTful APIs with Spring Boot. TDD with JUnit & Mockito.

Java Spring Boot AWS Kafka MongoDB
🎨

Frontend & Creative

Comfortable with react and CSS. I enjoy visualising algorithms interactively — it's more fun than a console output.

React.js TypeScript HTML/CSS
🖥

Systems & Infra

Long-term Linux user. Self-hosted web & media servers. Comfortable with networking, security practices, and the command line.

Linux Docker Self-Hosting Wireguard
🎓

Academic Breadth

C, C++, x86_64 assembly, Haskell, R & MatLab from uni. Modules in Advanced networking, algorithms, compilers, graphics, cryptography, malware analysis & many more.

C / C++ Haskell Algorithms Security Low Level OS

tutorials

Things I wrote down

Best way to learn is to teach. When I find something interesting I write a short tutorial — mainly to consolidate my own understanding, but if it helps someone else that's a win.

3 Jan 2021 Summed-area tables Integral images — what they are, how they work, and why they're surprisingly useful for image processing. 3 Feb 2019 Midpoint displacement terrain generation Generating random, natural-looking 2D terrains using the midpoint displacement algorithm. 22 Sep 2018 Travelling salesperson Different implementations of the TSP problem — a classic that never gets old. 14 Feb 2018 Convex hull generator Wrapping algorithms — visualising how to find the convex hull of a point set.

projects

Things I built

Mostly p5.js — visualising algorithms in ways that look more interesting than they have any right to. Most use mouseClicked() so desktop only, sorry mobile.

1 Oct 2021 Drawing Bézier curves Interactive animated diagram for quadratic and cubic Bézier curves. Click to place points. 23 Sep 2021 2D Marching squares Marching squares in action — click a tile to edit the terrain. 11 Apr 2020 Bubble sort visualiser Bars sorted by height, one frame per loop. Classic. 2 Apr 2020 Müller-Lyer illusion A visualisation of the Müller-Lyer optical illusion rendered in JS. 27 Feb 2019 Fourier series Building a square wave from nothing but sine waves. Mesmerising. 23 Feb 2019 Constructing an ellipse How an ellipse can be constructed with a circle and radial lines — inspired by 3Blue1Brown. 2 May 2018 Game of Life A JS implementation of Conway's classic. Still fascinating. 18 Mar 2018 Calculating PI Monte Carlo method — ratio of randomly placed dots in a square vs circle. 17 Dec 2017 Oscillations in 3D JS implementation of a Bees and Bombs gif. One of my oldest. 13 Nov 2017 Maze generator A maze generator in JS. The first project that made me think "oh, I like this".

contact

Let's talk

I'm currently employed but open to the right opportunity — backend or full-stack, somewhere that ships interesting things with people who care about their craft.

GitHub has the most complete picture of how I think. LinkedIn if you're formal. Either works.