Projects
I usually have about 2-5 pet projects going on at any given time, and ideas for dozens more floating around in my head.
Current Projects
- MovMosaic - a Video-Mosaic generating program, using OpenCV and some sophisticated data structures to try and get real-time mosaic generation of a video feed. Haven’t really started development yet, due to lack of free time.
Recently Finished Projects
- Guitar Distortion Pedal - “The Crushinator”
Past Personal Projects
Past School-Related Projects
- Real-time target tracking - With two other students, built a real-time tracking system that detected targets (circles) using a webcam, and “shot” the targets with a laser mounted on some servos. Built for CS424, Real-Time Systems, at UIUC in Fall 2008. Video here.
- LC-3 Pipelined Processor - Designed and built, from scratch, an entire Pipelined CPU in VHDL. Built with Tracy during the Spring ‘08 semester at UIUC. Consisted of a 5-stage pipeline datapath, and L1 caches. After countless hours locked in computer labs, we ended up with a 99% perfect design, whose remaining 1% was a crippling race condition between the caches and datapath. Upon completion of the project, I slept for about a day. It may have been the most grueling experience of my life, and I loved every minute of it.
- FPGA Fractal Generator - Implemented a parallelized Mandelbrot Set generator on a Virtex-II FPGA. Built it with another ECE student for ECE412, during Spring ‘08 at UIUC. Used 6 identical generation cores to build a VGA image of a Mandelbrot fractal. Unfortunately the project was rather restricted by time constraints, and other courses. Was rather educational, as it involved dealing with complicated math in hardware, moving a fair amount of data between memory and registers, and orchestrating several parallel computation cores.
- Parallel Traffic Simulator - along with two other students, built a highly scalable traffic simulation program in the Charm++ language, for CS420, Spring 2008 at UIUC. Featured a timestep-based traffic simulator for city-like street topologies. Performed analysis of different load-balancing schemes and scalability up to several dozen processors. Had intent to run on hundreds, but ran out of time on the Cluster before the end of the semester before we could give it a big run.
- Glasnotes - an online collaborative music-creation website. Built as a semester-long project with two friends for CS465, Principles of User Interface Design, in the Fall ‘07 semester at UIUC. Designed and built the entire project in about 4 weeks, after doing fairly extensive prototyping and user studies. Still have the code kicking around my subversion server somewhere; but it’s no longer hosted (it was on my Dreamhost account, until I realized that I hated Dreamhost)
- x86 Operating System - developed a basic kernel for x86 for ECE391 during the fall ‘07 semester UIUC. Worked in a team with four other students to build an OS capable of running a shell, running a few tasks, and handling a file-system. Unfortunately the code was lost forever into the void when the next semester started and they nuked our group server space.
- FPGA Tetris - With another ECE student, built a VHDL Tetris game, which ran on an Altera FPGA. Used PS/2 keyboard input and displayed on VGA. Video here.
- Some smaller-scale projects:
- Photomosaic generator, used Flickr as a source of images to generate Photomosaics. Was used for a Machine Problem for CS225, Data Structures, at UIUC in Fall 2008/ Spring 2009 (in C++)
- Parallelized edge detection and image segmentation (in C)
- Dynamic memory checker (a la Valgrind) implemented as a dynamic binary instrumentation tool, using Pin. (in C++)
- Reference-counted garbage collection (in C++)
- Eclipse Refactoring Engine testing. Uncovered ~18 bugs in three refactorings, several of which were not reported yet to the Eclipse developers (in Java).
- Meddling with the Linux Kernel (adding system calls), QEMU (adding x86 registers and instructions), User-level threading library for an Operating Systems class (in C).
- TCP file-transfer program (in C)
- Implemented TCP-style features (reliable byte stream) over UDP (in C)
- Network routing algorithms (Link-state and Distance-Vector) for network simulator (in C)