Throughout university, my interests led me to investigate different areas of computer science. I used projects as a way to dive into new subjects, while also creating something I was interested in. I started out practicing by writing a game in Python that drew the game state to the terminal, and various other little projects. I've only listed projects from later years of university, as the skills learned in the earlier ones are encompassed by the new ones.

I likely won't be doing new projects for a while as I'm focused on work and other things besides CS. If I choose to create something new, it would hopefully be put under the employment tab.


"Ray Tracing in One Weekend" in One Engine | Realtime C++ Vulkan Ray Tracing Engine 2021
I wrote a Ray Tracing program following the "Ray Tracing in One Weekend" series because I was interested in computer graphics and simulations. Unfortunately, the original program took a long time to render a single image. I was more interested in real-time simulations (especially in the context of video games), so I decided to learn Vulkan to speed up the Ray Tracing simulation. I was able to get it running at a decent frame rate and resolution, while learning a new graphics API at the same time. Some footage of the engine can be found here.
  • Developed in C++ using the graphics library Vulkan
  • Implemented Ray Tracing principles in a compute shader, which then renders the final image directly onto the swapchain's images
  • The program utilizes GPU-accelerated computation to calculate each pixel's data in parallel
Bitcoin Lite | Blockchain Protocol & Simulator 2020
For my final Networking course I was able to choose my final project. At the same time, I was interested in learning more about blockchains, especially Bitcoin. I built a basic clone based on concepts in Bitcoin's whitepaper with the intention of simulating a global network of nodes with different conditions (eg: changing block difficulty, network latency, block size, etc). This was done by running many nodes of the program in parallel with delayed queues between them, simulating a network. Then a CLI at a layer above, able to interact with each node, or capture the current state of the network. Functions in Bitcoin unnecessary to the simulation weren't added, such as signing transactions. The GitHub repository can be found here.
  • Learned about blockchains by developing a blockchain networking protocol based on Bitcoin's original whitepaper
  • Major features include networking capability, proof of work, longest chain, and mining functions
  • Developed a simulated socket interface to simulate this protocol on one machine, utilizing multiprocessing and concurrency best practices
  • Used TCP sockets at the application layer to allow a single machine to act as a node for this program on the internet
  • Created a CLI to interact with the Blockchain Node/Simulation while it is running
FunctionGuessr | Online Game 2020
An online game where the player has to guess the function being used on their input, based on the output given back to them. Turns out it is surprisingly hard to do. I had trouble guessing which functions were acting on my inputs once the functions got complex enough - and I knew all the functions the website had. This was a project for university, and an excuse for me to go back and learn some more web technologies that I didn't get around to with tree-chan. The GitHub repository can be found here.
  • Used Python's Flask to rapidly build a lean HTTP server which serves the game page
  • Developed with WebSockets to create a persistent connection between server and client, and built game logic around that
  • Utilized SWIG to connect C functions with the Python server for significant speed up
  • Created REST APIs for communication not requiring persistent connections
Hotel Analysis | Data Science and Machine Learning 2020
Using data science, primarily machine learning, to analyze the quality of a hotel based on its location and distance to other ameneties. This was partially a university project, but incorporated techniques I used in a different project where I analyzed movie scores/revenue based on the description. The GitHub repository can be found here.
  • Extracted relevant information from big data using Spark and Hadoop on a compute cluster
  • Engineered features using Pandas and Numpy
  • Optimized a scikit-learn machine learning model with Pipelines and Grid Search
  • Trained a model that can explain 40% of a hotel's score knowing only its location
  • Analyzed and created a report detailing the results and inner workings of the model
  • Visualized the model-predicted quality of locations with Plotly to communicate results
Asteroid Eater | 2D Video Game 2020
A top-down video game where the player is a space ship which grows when it eats asteroids. The goal of the game is to grow as much as possible. I made this game as a way to consolidate all of the earlier, smaller projects I had on this page into one big project. It uses some of the skills and code I've developed through those past projects, and bundles them into one game. I recorded some gameplay that can be found here.
  • Written in Lua using the LOVE2D framework
  • Created a procedurally generated asteroid field using an adapted Perlin noise function
  • Utilized the Box2D physics engine for the physics simulation within the game
  • Wrote a 'line-of-sight' algorithm so the player can't see behind asteroids. Wrote a readme.md in the Markdown language to explain how it works
  • Wrote many other complex algorithms and classes in order to deal with the unique gameplay
TV Tropes Graph | Data Collection and Analysis 2019
A directed graph consisting of TV Tropes pages as the nodes, and the pages they link to as their outgoing edges. I started this project to see if tropes can be grouped into categories based on their connections to one another. I was inspired by research in personality - and how correlations between different behaviours formed the 'Big Five' personality traits. Through this project, I learned about task automation, data collection, statistical analysis, data visualization, and that my computer can't handle that much data. It took 9 hours to collect all the data from TV Tropes (~1 second per trope).
  • Scraped web data from 35,000 connected TV Tropes pages using Python libraries and a graph traversal algorithm
  • Used graphing software to visualize the data as a network of tropes
  • Isolated and analyzed the major groups within the network using factor analysis
  • Automated the data collection process of this project
tree-chan | Social Media Website 2019
A social media website shaped like a tree. I wanted to try something different to the classic 'categories-posts-comments' structure of a regular website, so this is what I came up with. A website where you can make posts 'branching' off of a parent post, and you can post comments on each post, like leaves. Be warned that the 'leaf' and 'branch' terminology used within the website is different to that used within computer science. Some features include user accounts, custom emojis, reuse of images, notifications of replies, custom comment formatting language, and leaf navigation. A live version of the site can be found here.
  • Became a full-stack web developer - learned node.js/PostgreSQL for the server-side framework, and javascript/HTML/CSS for the client-side
  • Utilized cloud-computing services such as Amazon's AWS (S3 for image hosting; SES for confirmation emails), and Heroku (Platform for node.js app hosting, and Postgres for database hosting)
  • Wrote a text parser to convert user-submitted comments into 'marked-up' and sanitized HTML
  • Designed a database's structure to support the site's unique features, and created a RDBMS Schema graph to visualize it
  • Dynamic website design which accounts for window resizing and JavaScript being disabled
  • Built a user authentication process to allow for user accounts
itemRanker | Android Application 2019
An android application where you can sort items. You can do so in 'manual' or 'tournament' mode. In manual mode, you drag the items from the unsorted list into the place you want them in the sorted list. In tournament mode, two items are presented to you, and you choose which item is better. This continues until the list is fuly sorted. (Uses custom sorting algorithm) Two types of lists are possible: Ranked and Tier lists. You can have multiple lists at once. You can assign each item an image. The Google Play Store page is here.
  • Developed in the Android Studio environment, for the Android OS
  • Designed the application using Java for the model and controller, and XML for the view
  • Released to the play store, giving insight into the administrative efforts behind an application's release process
  • Designed a database in SQLite that would allow for 2 different data types to be represented within the same tables