Software engineering student interested in systems development, backend development, Linux systems administration, cybersecurity, reverse engineering, and a bit of networking.
Experienced in Go, C, C++, JavaScript, TypeScript, and Bash. Familiar with C++, Python, Java, ARMv7 assembly, Terraform, and Ansible. Learning ARM64 assembly and Rust.
Very experienced with Linux (desktop, embedded, and server) and Android, but also have some knowledge of Windows.
Android live wallpaper visualizing local wind patterns. Based on the shaders from the original Pixel 2017 live wallpaper, but with up-to-date wind data (the official one was last updated in 2019), more themes, permission fixes for newer Android versions, lower power consumption, and other fixes. The Java code has been completely rewritten from scratch; only the shaders are based on the original APK.
The custom backend which generates the wind vector field textures is written in Go and uses the NOAA GFS forecast data.
Port of cmus for Android with system integration and some extra UI features. Partly vibe-coded.
Ottawa Recreation Schedules
Go
HTML
CSS
TypeScript
Scraping
Scraper, dataset, and website for City of Ottawa recreation schedules.
The official site splits the schedule data across hundreds of facility pages, and does not provide any way to quickly filter across facilities. I wrote a robust scraper by hand to collect the hand-written schedule data and turn it into a structured dataset, which is now also used by many other projects. I put a lot of work into ensuring the data is complete and unambiguous, and it frequently catches typos, which I've been reporting.
I also created a website which provides unique features to efficiently browse the schedules. There's a chronological list of upcoming activities (which also incorporates the freeform cancellations and schedule changes where parseable), a filterable map, filterable schedules on a single page, activity pages with an overview of facilities and times, and advanced search.
Queen's University ARC Schedules
Go
HTML
CSS
File Formats
Innosoft Fusion is a recreation facility management software suite used by many universities in North America. The official white-labeled app (Fusion Go) provides schedule information, cancellations, and notifications for drop-in events, but does not provide an overview of an activity. Moreover, the official swim schedule is often outdated, and never includes cancellations or excluded dates.
The data comes from the HTTP requests the official app makes, and the schedule generation is powered by a custom algorithm to generate the best schedule by combining event dates/times optimally based on metrics like the number of exceptions, the number of exclusions, the duration, the most common times, and so on.
To ensure correctness, there are comprehensive unit tests ensuring the schedule accurately represents the events from the source data. There are also tests to ensure the optimal schedule is generated from complex combinations of activity dates.
I chose to make this highly configurable to allow it to be used for other universities too. The color scheme is dynamically generated using the Material Design 3 Color Utilities. For efficiency, there are multiple layers of caching.
wasm2go-based library bindings
Go
WebAssembly
C/C++
Rust
I've created high-quality idiomatic bindings for various libraries transpiled to Go using wasm2go.
While creating these bindings, I've also put a lot of work into supply-chain security and ensuring the builds are reproducible.
Along the way, I've also made various contributions and bugfixes to wasm2go including DWARF support and fixing optimizer bugs.
asslcapture
Go
eBPF
Capture system-wide Conscrypt/BoringSSL TLS traffic on Android using eBPF.
This is a non-intrusive alternative to injecting root certs and generally works more reliably, but requires root and a modern kernel.
push-signed-commits
TypeScript
Create verified/signed commits as bots or GitHub Actions. Available as a CLI, GitHub Action, or library.
This one is MUCH more robust than the alternatives, and it has a strong focus on supply chain security.
Patches for the Lithium EPUB Reader app adding an offline dictionary, custom fonts, additional progress information, series metadata support, support for inverted rotation, and more.
The custom Android app patching functionality is written in Go and uses apktool to decompile APKs and provides abstractions to safely modify resources and smali (i.e., dalvik/java bytecode).
The dictionary is implemented as a script injected into the reader webview, but will work fine in an ordinary web browser too. The dictionary code is written in modern JavaScript and is optimized for performance, while still being relatively memory-efficient. The binary dictionary files are generated other dictionary sources, including the Project Gutenberg's Webster's 1913 Unabridged Dictionary. The frontend JavaScript uses Shadow DOM to isolate the dictionary from the book content.
Patches for the RealVNC Viewer app to fix bugs and improve usability.
As of 4.7.0.51044, this includes: making the gigantic distracting connection toolbar FAB invisible when inactive, allowing more than the first 4 connections to be pinned to the home screen, adding key repeat support to the extension keyboard (e.g., arrow keys), and fixing missing key presses when rapidly pressing buttons on the extension keyboard.
NickelMenu is a custom integrated launcher for Kobo eReaders, exposing hidden features, providing easier access to shortcuts, and allowing external functionality to be added.
Various patches modifying the behaviour of Kobo's native e-reader device software. Uses a custom patching tool which greatly simplifies writing safe and future-proof patches.
Assembler for the CPU created in the Queen's University ELEC374 Winter 2023 course.
Innosoft Fusion iCalendar Feed
Go
JavaScript
iCalendar
File Formats
Innosoft Fusion is a recreation facility management software suite used by many universities in North America. The official white-labeled app (Fusion Go) provides schedule information, cancellations, and notifications for drop-in events, but does not provide a way to integrate this with external calendar software.
Based on the app's HTTP requests and data models, I implemented an API to provide the drop-in event information and notifications as an iCalendar feed or JSON, including support for inferring recurrence rules for events, and ensuring compatibility across clients including Outlook/Exchange, Apple Calendar, ICSx5, and Google Calendar.
For convenience, events can be filtered by various categories with wildcard support, and subscribing the calendar is as simple as pasting the link into the calendar application (replacing html with ics if not auto-detected).
Library to parse offline dictionary files from Microsoft Edge's Immersive Reader.
Essentially, the dictionaries are stored as a sqlite3 database containing two tables: a mapping of terms to one or more shard/word indexes, and a mapping of shards to blobs. The gzipped blobs contain a binary header followed by a sequence of headers and entry JSON.