iPod Meets Reel
The goal was to combine old and new technology. In this case, to demonstrate that an iPod Touch could record and playback audio
from a reel-to-reel machine using a Square card reader. The project was featured on
Hack A Day.
Tetris with Twilio
I implemented tetris using the tornado web server and Twilio service. The player
uses their telphone as the input device for the game. Once the user clears 5 lines their phone will call me. The app was even featured
The source code can be found here.
Tor-Gui (UI design)
This was a reasonably significant project that was part of the
User Interface Design class at UMN. I was a member of a group with 4 others. The goal
implementation was interaction with Google Maps and the communication with the backend web server which configured Tor.
Chipmark2RSS (bookmark RSS feed)
This app allows any chipmark user to create an RSS feed of their public bookmarks. As of right
now Chipmark does allow users to have an RSS feed. To get this to work the user must provide there username and password (yuck if only chipmark implemented
OAuth) to this service. The service then provides a link to an RSS feed which when requested fetches all their public bookmarks and returns RSS XML. It even
provides the ability to filter bookmarks based on label. This little project also gave me a chance to build something interesting with the Google App Engine. I
haved zipped up the source code here.
Chipmark (social bookmarker)
A service similar to del.icio.us and foxmarks. This is the senior project in the computer science department
at the University of Minnesota.
CSCI 5161 (Introduction to Compilers)
I typically wouldn't list a class here but it was a semester long individual project. We built a compiler for the Tiger language targeting SPIM. We went through the first 12 chapters of Appel's
Modern Compiler Implementation in ML. The major
pieces I completed were: lexer, parser, type checker, translation to intermediate representation, and code generation. I elected not to write the register
allocator because I simply didn't have enough time to write one during that week of school and our grade was highly dependent on actually finishing the
compiler. The professor provided us with his register allocator if we chose not to write it. And I am happy to say that I only found 2 bugs once I ran my
compiled code on SPIM and both were easy fixes.
Python Tetris (pygame framework)
I implemented tetris in python using the pygame framework. If you want to play it you will
have to have both python and pygame installed.
VLC Laser Gesture Control
I originally saw a hack on
hackaday and ended up implementing my own version for both windows and linux.
The windows version used a COM wrapper to talk with the camera and it would always crash after about 10 minutes of use. The linux version was much more stable
and used video4linux to pull images in from the camera.
Sudoku Solver (with backtracking UI)
I made a sudoku solver back in January for fun. Then I changed it a
little bit to conform with the ACM Practice problem guidelines in February. Then I added a GUI that traced the backtracking as it took place in March. To
understand the GUI, if the dot moves down it has made a recursive call. If the dot moves to the right that means it is taking the next element from the queue of
possible solutions for that depth of recursion. You must download this jar and run it from the command line using: "java -jar sudoku2.jar". Input at the console
looks like this:
Automatic Sprinkler Control (java and php)
My dad wanted to put an automatic sprinkler control system in our backyard. We already had an existing underground sprinkler system but it lacked any form of automation. My dad replaced the manual valves with automatic
valves and wired them up to a parallel port on an old HP Pentium 100. He wrote his software with PERL and Quick Basic. I wrote my software with Java and PHP.
At the time AJAX was trendy so I used the Sajax library and got a pretty nice refreshless webpage that could control the sprinkler system. We used his software
in the end because he was going to have to maintain it if anything went wrong because I was going away to college. I suppose today it would be cool to use a
service like TextMarks and control it via SMS.
LBRAM: TI89 Riemann Sums Program
I made this because all of the existing Riemann sum programs were slow. For my AP Calculus class we had to find Riemann sums with a few hundred divisions. Existing programs took about 60-90 seconds to find Riemann sums with 500
divisions. My program did it in about 20 seconds. Existing programs calculated the left, right and trapezoidal rule separately. By the time the program was done
they had calculated the left and right sums a total of 4 times because the trapezoidal rule is just the average of the two. The left and right sums are the same
except for the ends. I calculated all three of them in one single loop. I implemented my solution in C using TIGCC. It's also on
ticalc.org and gets a few downloads every week.
I made minesweeper one summer after a friend talked about the version he made. He talked about
how he used recursion to make his game clear the board after a user selected a cell to clear. I wanted to implement it myself to see how it was done.
Lego Record Player
I built this way back in my freshman or sophomore year of high school (I can't remember exactly when). It played a 45 RPM with
a needle and a paper cone. Once it finished playing I could hit a button and it would stop, pick up the arm and move it back into its original position.