I am a graduate computer scientist with extensive interests in electronics, engineering and mathematics. Since childhood, much of my spare time has been spent disassembling, building and repairing machines, electronic circuits and software. This website is a showcase of my projects in each of those fields. My main academic interests are programming language design, implementation and optimisation, with particular focus on functional programming. When I am not pursuing technical interests, I am a keen rower, cyclist, self-taught pianist, photographer and cook.

This website is designed to provide a showcase of my work, but you can also download an old-fashioned   Curriculum Vitæ.

Assorted Wisdom

Tuna sandwiches: triangles. Ham and cheese: squares.

Random Python Gadget

"""Helpful Context Manager for timing blocks of code."""

from contextlib import contextmanager
from time import perf_counter

def timer():
    delta = None
    start = perf_counter()
        yield lambda: delta or perf_counter() - start
        delta = perf_counter() - start

"""Example Usage"""

from time import sleep

with timer() as t:
    print(f'We\'ve been in this code block for {t():.2f} seconds')

print(f'That code block ran for {t():.2f} seconds')

Elsewhere on the net