TUI Graphing Calculator

2025 · C++20, ncurses, Catch2, CMake · github

A terminal-based graphing calculator built in C++ with ncurses. It parses mathematical expressions, evaluates functions over a configurable domain and sample count, and renders ASCII-art graphs interactively in the terminal. Computed values can be exported to a whitespace-separated file for use in other tools. The expression parser and evaluator are covered by a Catch2 unit-test suite.

Still frame from the graphing calculator demo video
fig. 1 · demo — watch on youtube ↗
Graph of tan(x + pi) rendered in the terminal
fig. 2 · tan(x + pi) rendered in the terminal

Computational Fluid Dynamics Simulator

2024 · Python, NumPy · github

A fluid simulator implementing the lattice Boltzmann method in Python. The image below shows the curl of a left-to-right flow around a cylinder, with vortex shedding visible downstream. I plan to rewrite the solver in C++ with support for custom obstacle shapes, with a focus on performance.

Curl map of left-to-right fluid flow around a cylinder
fig. 3 · curl of the flow field around a cylinder

AI Image Compression Optimization

2024 · Python, genetic algorithms · github

An image-compression optimizer that uses a genetic algorithm to balance file size against peak signal-to-noise ratio, so images keep their quality across different compression techniques. Running with a population of 1000 over 200 generations, it compressed the example below from 10.5 MB to 2.4 MB — original on the left, compressed on the right.

Side-by-side comparison: original image on the left, compressed on the right
fig. 4 · original (left) vs. compressed (right), 10.5 MB → 2.4 MB — click for the full-resolution comparison (18 MB)

AUVic Software Team

2023 – present · ROS2, Python, Gazebo, Ubuntu · github

I contribute to UVic's autonomous underwater vehicle team, mainly on a Gazebo-based simulator that lets the software team develop and test the 2026 sub without waiting on electrical and mechanical, along with systems validation testing ahead of RoboSub 2026.