Warfit-learn (2019)

A machine learning toolkit for reproducible research in warfarin dose estimation.


  • Seamless loading, cleaning, and preprocessing of the IWPC warfarin dataset.
  • Standardised implementations of scoring functions.
  • Multithreaded model evaluation using standardised resampling techniques.
    • Monte-carlo cross validation
    • Bootstrap resampling
  • Full interoperability with NumPy, SciPy, Pandas, Scikit-learn, and MLxtend.

Supports Python 3.6+ on macOS, Linux, and Windows.


Bit of a Tangent podcast (2019-2022)



Each week, two aspiring rationalists bring you mind-bending ideas from science, philosophy, artificial intelligence, and medicine. Whether you enjoy wide-ranging discussions or are looking to upgrade your reasoning and critical thinking skills, this podcast will satisfy your intellectual hunger and sharpen your skeptical eye.

Interactive PCA Visualiser (2019)


Real-time tool for exploring the relationships between PCA components and input features. Or, “Roughly what do these principal components actually correspond to?”

Demonstration GIF

  • Real-time plot to give intuition about prinipal components.
  • Sliders dynamically created for each input feature.
  • Sliders begin at mean and are scaled to feature data ranges, giving an intuitive feel of how “sensitive” the components are to each feature.

Not-Wors – Boerewors Classifier (2018)


My final AI assignment at UCT, for which we had only a week. Accuracy is above 99.9% on unseen images.

I parodied the popular Silicon Valley Not-Hotdog image classifier by creating a boerewors classifier. This was achieved by trained a ResNet fixed-feature extractor with PyTorch. Because labelled images of boerewors are not available in standard datasets, I used transfer learning to train the model with only 380 images scraped from the web.


WarFit — Machine Learning for Warfarin Dosing (2018)


Warfarin is a life-saving drug that requires individualised dosing. Currently, this dosing is done by human experts, which is expensive and error-prone.

My study evaluated the accuracy of 17 supervised learning algorithms on both a South African warfarin dataset (PathCare) and the international (IWPC) dataset and outperformed the best published results in this field.

10 algorithms had manually-tuned hyperparameters. 7 were bespoke pipelines generated with an autoML technique based on genetic programming. I also contributed to feature engineering techniques in the domain and defined improved strategies for handling missing data using imputation.

Telegram Alert Bot (2018)


A command-line Python script to send a message to your personal Telegram bot. If you include the script as an alias in your command-line (as I have), you can add it to the end of any sequence of commands and receive a notification on Telegram when the commands have run successfully.

Screenshot at Jul 16 17-02-01

Pomodoro.js (2018)


A simple Pomodoro timer built with JavaScript and a touch of GreenSock animation. You can view the source code on GitHub or check out a live version on CodePen.


Titanic Decision Tree (2018)


A simple decision tree that predicts if a passenger on the Titanic would survive based on their age, sex, cabin class, etc., which was implemented with scikit-learn.

Titanic Decision Tree

Me.js — a QS-style Memento Mori (2018)


This quick project used Javascript (with the GreenSock library for animation) to blend the quantified self with the concept of a memento mori. Check out the original source code on GitHub or a live demo on CodePen.

Me.js Example GIF

The Shower Scene, a User Interface Study (2018)


As part of a human-computer interaction course, my team and I developed an app design to help encourage water savings in Cape Town, using iterative development and user evaluations.

The shower scene

Parsely (2018)


As part of a compilers class, I co-developed Parsely — a bespoke mathematical language and supporting code for lexical analysis, syntactic analysis, and visualisation.


Visit the Git repo, or read the full whitepaper.

Serv — The Community-Driven Smartphone App that Revolutionises Service Delivery (2018)


As part of a module in new venture planning, my team and I theorised an application that improves service delivery in Cape Town.


Random_Tube (2018)


A pair of scripts for extracting YouTube links from your watch history, and randomly opening one in your browser.

Random Tube

Functional screening of novel antibiotic H3DTB-0002745 using indicator bacteria B. subtilis (2017)


As part of my third-year genetics course, I co-wrote a paper on research into the functional screening of a novel antibiotic using indicator bacteria.


Instagen (2017)


A simple script to generate abstract digital art for Instagram.


AuCT — Audio Capture Tool (2017)


A third-year university project providing an audio capture, segmentation and labelling tool for South African languages. This was a collaboration with two other students, under the supervision of Dr Brian DeRenzi.


Visit the Git repo, or read the full whitepaper.

Circle of Friends (2017)


As part of a class, I co-created a chat app called “Circle of Friends.” It is based on radial geometry and is designed to enhance the chat experience for users who are on-the-go. This is achieved through radial menus that make one-handed operation seamless and intuitive, as well as homescreen that reduces the number of taps and swipes needed to access the most relevant chats. It has a deep focus on multimedia, but from the perspective of users operating on limited mobile data plans in a country with lower bandwidth availability. Users can selectively filter all multimedia messages they receive to reduce their downstream bandwidth consumption.

Circle of Friends

Watchdog.py — Server Health Checker (2017)



A versatile python app to query a health.txt file on a remote server and perform Slack alerts in the event that the server is malfunctioning. I developed this whilst interning at B Online.

Project_Sleep (2016)


A Quantified Self project in which I use ~40 nights of data to determine what helps and hinders my sleep.

Project Sleep

Speedup on Parallelised Sorting Algorithms (2016)

Part of my undergraduate CS coursework, this is an investigation into parallelisation of Quicksort and Mergesort algorithms within the Java context and with the goal of speedup across different architectures.

Read whitepaper.

Speedup Graph

Vula Resource Synchronising Script (2016)


A collection of bash scripts that automate mounting drives for my online university resources, detecting any updates or additions, and synchronising the changes.

Defeating HIV with Genetic Algorithms (2012)

Age 16, I entered the Google Science Fair with a project that explored theoretical methods of creating HIV immune cells by computing optimal sequences.

Remote-Controlled BB Gun Turret (2011)


Age 15, I built an over-the-web RC turret with a second-hand webcam and a BB Gun. Disclaimer : No curious cats or siblings were harmed in the making of this gadget.


Gooka-Bot (2009)

Age 13, I built and programmed an autonomous bot from scratch using salvaged electronics and a BASIC Stamp 2 microcontroller.