Projects
- Tetris with Twilio - This app allows for the use of a regular telephone as the input device for a game of tetris which is played in the web browser. It uses Twilio to interface between the web app and the phone. In order to push input from the phone in realtime to the web browser I decided to try the Tornado web framework. Get the source code here.
- Reject-Her-Him - It's a custom rejection hotline. You specify your own custom rejection message and then make a call to the rejectee using my service as the proxy. Your phone number is never disclosed to the rejectee yet they will be under thre impression they have your number. When they call the number back they will be played your custom rejection message.
- Dial-The-Joke - It's a web based version of a Dial-A-Joke system. The phone number is currently being used by my Reject-Her-Him application It uses Google App Engine and Twilio on the backend. The source is here.
- Tor-Gui - 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 was to allow users to configure Tor using Google Maps. I wrote most of the javascript that drove the UI in the web browser. Most of the javascript implementation was interaction with Google Maps and the communication with the backend webserver which configured Tor.
- Chipmark2RSS - 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 - 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.
- cfakestl - A set of common data structures I used for courses that required C programming.
- Python Tetris - 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:
....6..5.
296.15...
..5..3...
..8..9.3.
.32...87.
.1.3..4..
...4..2..
...69.145
.5..3....
end
- Automatic Sprinkler Control - 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.
- FlameBin - An NZB creator. Sorta kinda works. Probably won't work on it anymore.
- Minesweeper - 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 could was done.
- Record Playing Lego Mindstorms - 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.