Projects portfolio
Implementing automatic colorization of grayscale images with deep convolutional networks using tensorflow.
A repository for re-implementing and replicating the results of neural style transfer papers. Includes both style transfer by optimizing style loss and by training a feedforward network for the task.
Generating song lyrics using recurrent neural networks. Includes a web demo created with tensorflow.js
Using transfer learning to create a classifier for forest mushrooms. Gathering a dataset by (responsibly) scraping the web.
From-scratch implementation of training a multilayer neural network using backpropagation.
Exact computation of adversarial examples and minimal explanations using a MIP/MIQP solver for neural network predictions on the MNIST dataset.
1k js intro for Assembly 2018. Voxel terrain rendering, heightmap generation, fog effect, and ambient sound generation in under 1 kb of javascript.
Minimal CPU-based multithreaded raytracer in C++. Some features include soft shadows, different material types, and real-time computation at small resolutions.
Mandelbrot set fractal visualization and exploration using Nvidia CUDA for computation and Qt5 for GUI.
A small raycasting graphics engine, as seen in e.g. Wolfenstein 3D and the Windows maze screensaver. Written in vanilla javascript.
Forking a cartoon camera project to anonymize a webcam stream in near-realtime using OpenCV.
Implementing a Fourier transform visualization as seen on 3blue1brown. Plotting in cartesian and polar coordinates with matplotlib.
Java implementations of multiple-exact-string-matching algorithms. Comparisons of Aho-Corasick, Karp-Rabin, and multipattern Shift-And.
Interpreter for a toy programming language in C#. Includes syntax-tree generation and regex engine for parsing.
What if we could compress text while retaining readability by recursively abbreviating common phrases?
A visualization dashboard for snack purchase data, using plotly with python dash backend and pandas for data wrangling.
A highscores leaderboard web app for old PC rally games. With serverless.js backend on AWS lambda and github.io static frontend.
Code for procedurally creating a .wav file in a browser.
Creating tileable heightmap textures in javascript using midpoint displacement / diamond-square algorithm.
You’re looking at it. A Github pages site using Jekyll.
A weighted partial MaxSAT solver. Ranked first in the 2015 MaxSAT Evaluation.
Answer set optimization solver of KR’18 paper.
Propositional abduction solver of KR’16 paper. Computes optimal abductive explanations with an implicit hitting set algorithm.
Creating sudoku puzzles with provably minimal sets of clues with unique solutions. Uses SAT and SMT solvers via pySAT and pySMT libraries.
Experimenting with AVX2 instructions to build a bitparallel SAT solver.
Minimalistic CDCL SAT solver in javascript. Runs in browser or with node. Live at github.
Algorithms for playing Reversi (Othello). Minimax, UCB1, and UCT (Monte-Carlo tree search) implemented in C++. Includes a tournament setup for evaluating algorithms against each other.
A playable emulator for the Nintendo Game Boy in C++. Emulates the Sharp LR35902 instruction set, tile-based graphics, and 4-channel audio. Graphics rendered using OpenGL (glfw) and sound output created with OpenAL (alut). Includes savestates and a python API for interacting with the emulator.
Flocking behavior simulation using a boids model. Shows emergent behavior from simple rules, with a javascript sandbox for experimentation.
Computing and drawing all possible tiles for the board game Tsuro.
Reverse engineering old PC rally game save files.
A visual sudoku solver, which gives step-by-step reasoning for each filled square. BSc data structures project coursework.
A chess game with minimax AI and a GUI. First-year BSc programming project coursework.
Solving a puzzle with hexagonal tiles. C++ with a Qt gui.
Retro-inspired asteroids game in javascript.
Conway’s Game of Life computed on the GPU with CUDA.
Using the 2019 Advent of Code puzzles to learn Julia.
Brushing up on Ruby with the 2018 Advent of Code puzzles.
Python solutions to Advent of Code 2017 puzzles.
Scripts for the Reaktor traveling santa competition. Solving a multiple trip, weight-constrained traveling salesperson problem with local search and simulated annealing.
Solving a shortest-path problem in 3D space given (latitude, longitude, altitude) values.
Arduino project using a Teensy board to connect a pair of gameport interface joysticks to a modern PC using USB. Modifies the base USB gamepad code to register as two devices.
A handmade 7x16 LED matrix display. Row and column addressing using shift registers. Controlled by Raspberry PI GPIO pins.