make
gcc -c src/project_manager.c -o build/project_manager.o
gcc -c src/display_handler.c -o build/display_handler.o
gcc -c src/process_monitor.c -o build/process_monitor.o
gcc -c src/main.c -o build/main.o
gcc build/project_manager.o build/display_handler.o build/process_monitor.o build/main.o -o build/my_projects
ln -sf $(pwd)/build/my_projects /usr/local/bin/my_projects
Build complete.
./my_projects --help
my_projects v1.0.0
DESCRIPTION:
A top/htop-style resource monitor for displaying projects.
Shows active projects with details including PID, language,
command name, and memory usage.
USAGE:
my_projects [OPTIONS]
OPTIONS:
--help Show this help message
--version Show version information
./my_projects
Korewa AI
A visual-novel-styled AI chat platform where anyone can speak to (or create) user-generated anime character chatbots.
I've been running and maintaining this project since my first year at USASK in 2022, and over the course of the past few years, I've amassed over 95,000 users (though that sounds more impressive than it really is, because that counts any user that's ever used our service, including inactive and non-premium users).
Anyway, Korewa AI runs off of open source models such as LLama 3.1 that I've fine-tuned with cloud GPU services, and I regularly fine-tune and benchmark new open source models as they release.
JavaScript, PHP, PostgreSQL
website
Desmos MIDI
A Rust-based CLI tool and Web UI for converting MIDI files into formulas for Desmos.
I'm a professional jazz pianist, and I like to dabble in electronic music production. As such, I've always been interested in the math behind sound and software I use like FL Studio. I'm also somewhat a part of the desmos community discord.
All sounds can be composed with a collection of pure sine waves, in a process called additive synthesis.
With a fast fourier transform, you can analyze a sound to find the phase and amplitude of those composite sine waves, and through that you can recreate the timbre of any instrument.
Desmos MIDI lets you recreate instruments from audio files, assign each track of a MIDI file to an instrument, and finally convert the MIDI file into a formula you can paste into Desmos and listen to.
Rust, Desmos, JavaScript
github
showcase
Proxima
A modern, feature-rich interface compatible with almost all publicly available roblox script executors (third-party code injection tools) with advanced tools for developers.
Proxima is one of the most comprehensive applications I've ever written, complete with features like in-game instance monitoring, RemoteEvent and RemoteFunction network traffic analysis, lua type serialization and codegen, monaco text editor integration, etc.
Proxima began as a standalone, closed-source script executor that I had developed and maintained for a couple of my friends and myself. Unfortunately, Roblox updates very frequently, usually every week. This means maintaining a commercially viable script executor requires many hours a week in Binary Ninja (or whatever you use) reverse engineering every little update to Roblox's complex anti-cheat, and so Proxima would remain a private project for some time.
Proxima's additional tooling was its primary advantage over publicly available alternatives, and so I eventually migrated Proxima from a standalone script executor to a plug-and-play UI compatible with other script executors, allowing me to release it as an open source project.
Rust, Tauri, Vue3, TypeScript, Lua
github
showcase
Spellcast Solver CLI
A high-performance C-based CLI tool for solving the Discord game Spellcast, optimizing word choices based on letter scores and special tiles.
I made this because I had just learned about the Trie data structure from a programming blog that ThePrimeagen read on stream.
I had also recently played Spellcast (one of the games you can play on discord with your friends) which is pretty much a turn-based word search, along with some powerups that both make the game a lot more interesting but also balloons the search space by a crazy factor.
Naturally I had the overwhelming urge to wreak some havoc on my friends (in a computationally optimized manner of course). This solver is built on heavily optimized C code and utilizes OpenMP parallelization to take advantage of multiple CPU cores.
C, OpenMP
github
MinoTaur
A high performance modern tetris bot framework written in Python (and eventually) C++ with useful bindings, utilities, and UI for visualizations.
Modern Tetris is a vastly different game from the NES-Classic Tetris that most think of when they hear "Tetris". Additions like the SRS Rotation System, 7-Bag Randomizer, and Hold Piece make optimal play unimaginably more complex to compute.
I would highly recommend checking out this 60-second explanation of modern tetris.
In Classic Tetris, the search space (pretty much) consists of the 10 columns (or fewer depending on piece orientation and width) where a piece can land, multiplied by 4 for each of its orientations. Achieving efficient search in modern tetris introduces a massive amount of new complexity.
I built this framework out of my passion as an avid player of modern tetris and an inability to help myself from tango-ing with that complexity through programming. My goal with `mino_taur` is to create a _blazingly fast_ platform for creating modern tetris bots in a beginner-friendly language such as python, with the plan to eventually interface with bindings in C++ (a language I'd really like to learn) for performance-critical components.
Python, C++
github
A+Plus
A social network for students to track course grades, share grade calculation templates, and manage course prerequisites.
I and my friends built this for our CMPT 370 (Software Engineering) project at the University of Saskatchewan. As such, we've decked it out with a couple of useful technologies.
In addition to using GraphQL for our API, Jest for unit tests, and Cypress for integration testing, we use a suite of software observability tools including Winston for logging, Prometheus for telemetry, and Grafana's dashboards for displaying that data.
JavaScript, Node.js, Express, GraphQL, Svelte, SQLite, Docker, Jest, Cypress, Winston, Prometheus, Grafana
github
showcase
PACE
An extremely rudimentary HTML5-export-based game engine and editor for simple point-and-click adventure games.
You see, a friend of mine has a nostalgic sweet spot for point-and-click adventure games, where the entirety of the way you interact with the game is by clicking various objects on the screen.
Another friend of mine had also said something along the lines of "I wish I could export a web game as a js project and just add stuff with js and make it look cool with css".
From that the idea is a bit obvious isn't it? And so, I got to work. With exports being for the web, if the engine for creating them used web technologies it'd be trivial to add a preview to the engine,
So with a bit of reading of the electron documentation, PACE (point-and-click engine) was born.
TypeScript, React, Node.js, Electron
github
docs
DevBoard
A simple devforum and board with images and discord-esque markdown + codeblock support, built in JavaScript and Typescript using NodeJS, GraphQL and React.
This was my final project for CMPT 353, where we all had to create a stackoverflow-style devforum, and come up with some additional feature to add to the basic requirements.
The special feature I decided to add is the ability to write markdown and have it rendered, including things like ```c int main()...``` style codeblocks with proper syntax highlighting, etc.
JavaScript, TypeScript, React, Node.js, Express, GraphQL, MySQL
github
showcase
Floracide
A multi-level plant-themed top-down shooter built in Godot.
My groupmates and I built this game for CMPT 306 (Game Development) and had a blast doing so.
I've always had a fondness for the bullet hell game genre, being a long-time Touhou and Realm of the Mad God player, so a simple bullet hell game seemed like a decent choice of genre.
The game is designed with extensibility in mind, with focus during development being on the ease of creating new enemies and levels. (A level editor with the ability to script bullet hell patterns for enemies may be planned for the future)
GDScript, Godot
github
itch.io
trailer
Yo That's Heat
A comedic Gartic Phone inspired online multiplayer game where players collaborate to create wonderful (terrible) songs with a massive collection of meme songs.
My groupmates and I created this game in 48 hours for the SaskInteractive Game Jam, winning us the award for 'Best Multiplayer Game'.
I probably slept a grand total of 3 hours in the span of those 2 days, grinding away at the client-server communication.
The result is a game I can only describe as hilarious brainrot with friends.
JavaScript, Node.js, Express
itch.io
trailer
3CPF Specification
Spec for 3CPF (3D Colored Point Frames), a binary file format for storing animated colored point data designed with simplicity of reading, writing, and playing in mind.
As far as I could tell, before creating this file format, there were no convenient file formats for animated and colored point data that did not also include massive amountts of unnecessary mesh data. Point cloud formats like pcd did exist but support for both animations and colors at once simply did not exist.
In the end, I designed a new binary file format, 3cpf, complete with a magic header number, and detailed documentation in the form of a spec document.
I actually created this file format with a very specific goal in mind. I urge you to check out the 3cpf_projects to find out what that goal was.
File Format Specification
github
3CPF Projects
A collection of projects I made that utilize the .3cpf file format I designed. This includes:
- cpf3d, an offical python module you can install via `pip install cpf3d` for reading and writing 3cpf files
- animated_surface_to_points, a blender addon for exporting a vertex-colored animated mesh as a 3cpf file
- mat3cpf, a CLI tool for rendering a simple 3cpf file
- minecraft3cpf, a CLI tool for converting a 3cpf animation into a minecraft datapack which allows you to visualize an animation with colored moving minecraft blocks
Believe it or not, the entire reason I created this file format and suite of projects was to make Hatsune Miku (a vocaloid character) dance in minecraft.
Anyway, here's an example of her in mat3cpf for example.
If you'd like to see her in minecraft, click the showcase link in the section below.
Python, Blender, Matplotlib, MCFunction
cpf3d
animated_surface_to_points
mat3cpf
minecraft3cpf
showcase
Anyway, here's an example of the same in mat3cpf
RNG Cracking Demo
A demonstration of how predictable random number generators can be exploited in games, with a simple top-down 2d procedural game as an example.
During the USASK Cybersecurity Club's session on 'advanced game exploitation', I was invited to give a presentation on the vulnerabilities of randomness and exploiting mundane game logic.
I created this to showcase during the rng cracking portion of my presentation.
JavaScript, Python
github
Game Logic Exploits CTF
Capture The Flag (CTF) challenges focused on exploiting game logic vulnerabilities.
During the USASK Cybersecurity Club's session on 'advanced game exploitation', I gave a presentation on the vulnerabilities of randomness, and a presentation on game logic exploits.
I also created a few of the ctf challenges for this session, including an rng cracking challenge where you predict a linear congruential generator to determine the outcome of every future dice roll, as well a challenge on utilizing an issue in the order of database operations to duplicate items with a forced race condition.
JavaScript, Node.js
github
USask Class Notifier
A Discord bot that monitors University of Saskatchewan class seat availability and notifies users when seats become available.
This is a bot I host that allows someone to watch a USASK class's remaining seats and get immediately notified when a seat is available to register in the class.
It was, just like pretty much all of my projects, something I made for myself, but it ended up being incredibly useful to my friends who use it.
The main difficulty actually came in reverse engineering the USASK registration page (which is a legacy Java Spring Boot application with a bunch of strange design decisions that made interacting with their backend way harder than it had to be).
Python, Discord API
github
Tidecaller
Tidecaller is an admin script for roblox script executors (common third-party code injection tools), featuring a themable command palette, auto-complete, and a highly-extensible plugin system designed for luau developers.
I designed this with the goal of creating a system where plugins can safely do anything the native code can. This includes the ability to create custom autocompletions for commands, custom datatypes, custom styling for autocompletions, etc.
I've also created extensive documentation so that others in the community can easily create and share plugins for Tidecaller.
Lua
github
docs