Projects

memory reordering for GPU optimization

NeedleTail: Long-Read Alignment

Collaborators: Nick Wendt, Nathan Ozog
Mar - April 2020

I had a great group for this project, and enjoyed optimizing global read alignment algorithms for a GPU. For longer (10k bp) sequences, our project "NeedleTail" (on an NVIDIA Titan XP) beats the parallel SIMD baseline ParaSail (on an Intel Xeon E5-2697) by ~30x, and the recent GPU research work GASAL2 by ~10x. Unfortunately for shorter (100 bp) sequences (more common in practice), ParaSail was ~5x faster and GASAL2 was ~25x faster than our work.

mesi protocol table for processor

MESI Cache Coherence Protocol

Feb - Mar 2020

Although I had no interest in and strongly disliked this required course project (which cost me my entire Spring Break), it is probably the project I was most glad to finally complete. I designed an unordered MESI cache coherence protocol from scratch and formally verified it using the Murphi verification system. This type of programming is fraught with innumerable race conditions and edge cases, and was great practice for deep thinking and careful debugging.

accelerator overview and signal trace

Basecalling Accelerator

Collaborators: Hari Sadasivan, Yichen Gu, Ayush Agarwal
Oct - Dec 2019

This project was my first experience designing hardware using SystemVerilog. My project group chose to accelerate Guppy, the current leading nanopore basecaller. Although our design and simulation were successful, the chip requirements proved too large for practical use on an FPGA.

frog jumping on lilypads

Frogger

August 2019

I tried my hand at game development in Unity, and realized it's not for me. Although Unity is an incredible tool, creating a polished product requires a huge time investment and just as much artistic ability as coding. I started working on a frog-jumping puzzle game inspired by Club Penguin's "Thin Ice", but lost motivation part-way through.

bot winning level

Stick Hero Bot

June 2019

I've written bots before to play online games on my laptop better than I ever could, but before this project I didn't know how to write one which could play apps on my phone. As a proof-of-concept, I selected the simple app Stick Hero, and spent a weekend messing around with MonkeyRunner. It performs far better than most humans (my bot's high score is 336, while mine is only 20), but due to fundamental timing inaccuracies isn't quite perfect.

microcontroller inside juggling ball

Smart Juggling Balls
(Phase 1: Hardware)

Nov. 2018 - Jan. 2019

I want to develop juggling balls which can identify the pattern in which they're being juggled in real time. Persevering through some exploding batteries, I now have a working hardware prototype which consists of a Raspberry Pi Zero W, a 6-axis accelerometer/gyroscope, a LiPo battery, and some circuitry for voltage conversion and overdischarge protection.

quadcopter

3D-Printed Quadcopter

Collaborators: Tom Conroy, Brandon Pugh, Sabrina Sepowski, Tyler Delea
Sept - Dec 2018

For EE senior design we designed, built, and programmed a quadcopter. When switched into autonomous flight mode, it would search for a series of QR codes placed on the ground and land.

solver results

S4: Simple Small SDP Solver

May - Aug 2018

A solver for semidefinite optimization problems written in MATLAB. Used as a reference solver for my CUDA C++ implementation, it was naively implemented and can only solve small optimization problems due to large memory usage.

aes server and encrypted data

AES Chatroom

Collaborators: Josh Geary
Mar 2018

I wrote the AES encryption algorithm in Python from scratch for our chat program containing a chat server and multiple clients. Messages are only legible for clients who connect to the chat server using the same secret key.

pid controller

Hardware PID Controller

Collaborators: Tom Conroy, Jack Broderick
Nov 2017

For EE junior lab we used op amps, 555 timers, resistors, and capacitors to create a PID controller. Photoresistors and a servo motor enable the robot's head to swivel and track a moving light source.

rover

CREATOR

Collaborators: Ryan Burnham, Jake Melite, Mike Leczinsky
Sept - Dec 2017

For CS350 I worked with four friends to build the Cyber Reconnaissance And Targeted Offensive Rover. It was composed of a remote controlled (RC) car, a Jetson TX1 computing module, a Raspberry Pi, several Arduino microcontrollers, a GPS sensor, an accelerometer, a magnetometer, and an LCD touchscreen display. The rover intercepts WiFi broadcast signals and generates signal-strength maps of nearby networks, visible in real-time for our web server. I also worked on path detection algorithms for outdoor navigation.

tank battling game

Darwin's Tanks

Collaborators: Ryan Burnham, Jake Melite
Mar - May 2017

For our AI project, we wrote our own tank-battling game and trained tanks to battle against one another using a genetic algorithm. Tanks were given limited information (their radar could detect the presence of bullets, enemies, and walls within each region), and learned strategies to be the last tank alive. After several hundred generations, tanks learned basic dodging tactics and that they should shoot at their enemies.

dec to brainf*ck conversion chart

DecCompiler

May 2017

I wrote this simple compiler in two days for a compilers course, an amusing spin-off of BrainF*ck which compiles decimal integers into working x86 Assembly.

compiled assembly code

PASCAL Compiler

Jan - May 2017

For a compilers course, I wrote a basic PASCAL to x86 Assembly compiler in C using Lex and Yacc. Although it does not have full language support (no strings), most of the important functionality such as control flow statements, function calls, recursion, and real and floating point data types are supported.

website textbook exchange

Clarkson Honors Student Website

Sept 2016 - May 2018

During my sophomore year, the webmaster for the Honors Program started developing a new student website and then abandoned the project. I volunteered to take over, and have since been responsible for completing the website, creating a textbook exchange, and enabling easier submission and recording of service hours for over one hundred students.

checkerboard plane with reflective spheres

C++ Raytracer

Apr - May 2016

Because I was curious to learn how 3D rendering works in video games and movies, I wrote this ray tracer from scratch in C++, following several online references. It performs anti-aliasing, handles reflections, and can depict standard geometric objects such as planes, spheres, and polyhedra. Here's an example GIF rendering!

map pathfinding

TurtleBot Mapping and Pathfinding

Collaborators: Sam Heater
Jan - Apr 2016

For my introduction to programming class, Sam and I programmed a TurtleBot to store a 3D voxel map of obstacles as it is driven around a room. This map is then flattened into two dimensions, and the user can select a point on the map for the robot to navigate to.

sudoku puzzle and solution

Sudoku Solver

Nov - Dec 2015

After about a year or so of solving small toy problems, I wanted to work on a larger project and so I wrote a program to automate Sudoku puzzle solving.

hello world code

Hello World

May 2014

I first discovered programming during my last year of high school. I started by reading the full Python Docs tutorial and then solving math challenges at Project Euler. It wasn't until about a year later that I even knew "Hello World" was a traditional starting point.