The items on this page are just a sample of random projects, some things I did as part of class projects while in graduate school or hobbies; fun stuff but not very serious. If you're interested in my research, you should check out my Work page.


Back in my day, the word "theory" meant something. So, in all my attempts to learn "music theory," I was stymied by suggestions of memorizing seemingly unrelated collections of patterns, facts, and rediculous nomenclature.

With dedication, books, wiki pages, and a good instructor (hi Ed!), though, I was able to make some progress. In order to better understand and visualize what I was learning, I wrote a little program for exploring scales, notes, chords, and all their relationships, as well as temperament (which I think is pretty cool, and unavoidable once one starts digging into theory).

Files: Linky.

Timelapse Thing

With the proper setup, one can configure a camera to take a series of long-exposure images over a timespan of minutes, hours, or days; once stitched into a video, these "timelapses" show a fast-motion and fascinating view of the world. Dealing with such large numbers of images is tricky, so software such as described here can help to process them in batches.

What I find more interesting are the opportunities for artistic modification of timelapses, such as speeding them up, slowing them down, and blending images over time. Timelapse Thing is a python project (requiring some other command-line tools) I created for working in this area.

Files: Link.

Statistical Analysis of Nerf Blaster and Darts

While still toys, Nerf blasters have improved significantly in their design over the years, and are currently remarkably capable, with a new line having been recently released. Further, the "Nerfing" community (myself included) enjoys modifying them for improved range and accuracy, but it's been unclear whether these modifications or the new line truly outperform older models.

Here, my girlfriend Kate and I attempt to answer this question using a robust, balanced experimental method complete with statistical analyses of the results. Nerf + science = awesome.

Files: Full Study.

CSE60416 System Interface Design - Microsoft Surface

I did this project with Mike Olson, a Notre Dame graduate student. (He's narrating the video.)

We studied the proper design of user interfaces in this class. Although we mostly focused on graphical interfaces, we also learned how to interface with motion-based systems such as the Nintendo Wii remote and Balance Board.

For our final project, we wanted to design an interactive browser for the Microsoft Surface, a multitouch based coffeetable like device. Since we have one of these units sitting in the department office, we thought it would be nice if people visiting could sit down while waiting for appointments and quickly see the research currently being done in the department. To this end, visitors can simply touch a researcher's picture on the left, and a card detailing their research projects appears. The research project pages can include pictures as well as video. Cards are animated in and out in several interesting ways; each animation is also accompanied by a swooshing sound. These details make the browser actually quite fun to play with.

All the researcher data for this application isn't in fact stored on the Surface unit itself: a Drupal based web site serves as the backend datastore. This allows for easy administration and content management.

CSE60532 Bioinformatics - Genetic vs. Annotated Distance

I did this project with Nate Garrison, a Notre Dame undergraduate.

The study of genomes and DNA sequences in general is terribly fascinating. While on the one hand many important insights about biology and life have been made, there is still much science doesn't understand about the systems at play. One of the big problems is the sheer glut of data; genomes can range from thousands to billions of nucleotides in size. If we were to gather the whole genome for a number of members of a species (mosquitoes, for instance) most of their sequences of DNA would be the same. However, since each individual is unique, there will be differences. Areas of the sequences which differ are frequently interesting areas to study.

But how can we find these areas which are different? Even more importantly, how can we find areas which are different in an interesting way, rather than just random genetic mutation? We propose that a particular "interesting" difference is when the amount of change between genomes happens to correspond to how far the two individuals lived from each other. (Or how long they lived from each other, or how deep in the ocean they lived from each other, etc.) To find these interesting areas, we developed a tool that finds the correlation between the genetic and annotated (e.g. geographic) distance and plots it along the genome. The graph to the right does this for 13 genomes of the SARS virus, where genetic distance is compared to time of the sample.

Files: Paper (pdf).

CSE60622 Cryptography - BobCash

This was a project I did for Cryptography, which implemented a digital cash scheme as a web service. The idea behind digital cash is that, well, it's digital cash. Which means, it's a digital object which has value and can be traded/spent, but is also anonymous. This is accomplished via digital signatures. Alice, who has money in the bank, sends the bank an string of random letters and an amount to withdraw. The bank then confirms that she has that much money in her account, removes the money from the account, and "signs" the string of letters; the signature is sent back to Alice. Using the signature, Alice can prove to anybody who cares to check that the string of letters really does represent money from the bank.

There's more to digital cash than that, of course, but that's the idea. See the paper for more details. Here, the string of letters and the signature is all wrapped up in a jpeg using steganography. This makes it easy to transfer digital cash between parties, as the image itself then "becomes" the cash. This project was an exercise in security for me: all connections are SSL enabled, including the connection to random.org from which true random data is drawn from. Strong password libraries are used, etc. The only weakness currently present is the use of only 20 random bits used in the blinded signature protocol. I also needed to implement RSA style blind signatures myself, as I didn't find any libraries for such purpose.

Files: Proposal (pdf), Paper (pdf).

CSE60647 Data Mining - Predicting on Slashdot

Most of my research thus far has been on the newsvendor problem, which deals with attempting to guess the demand for short-lived products so as to maximize profits. Unfortunately, data about newspaper sales is tough to come by. So, why not use an online equivalent? This project aims at predicting the number of comments a Slashdot story will generate given text which appears in the summary.

However, since we are interested in looking at the number of comments as a demand for a product to be sold, we don't stop there. Using cost-sensitive data mining approaches, we interpret probabilistic predictions as a sort of "customized distribution" and order the correct amount in terms of likely profit maximization.

As a bonus, be sure to check out the paper for some interesting statistics about Slashdot summaries over the past several years.

Files: Proposal (pdf), Presentation (pdf), Paper (pdf).

CSE60317 Online Algorithms For Computational Finance

This one doesn't completely fit the description of "class project." This class was very interesting; we studied some of the basics of online algorithms as well as some applications to computational finance. Perhaps the most intriguing parts (for someone already familiar with online algorithms) were what we learned about classic computational finance, such as Black-Scholes-Merton.

This "project" is a review of the main result of an interesting paper, entitled "Making Decisions in the Face of Uncertainty: How to Pick a Winner Almost Every Time," by Awerbuch et al. For details, just check out the paper. I also look at the possibility of using this algorithm to make millions on the stock market...

Files: Paper (pdf)

CSE60171 Artificial Intelligence - Learning to Play Games

I did this project with Allison Regier. It's not too difficult to write a program which uses an exhaustive search to play a game. What this requires, though, is some way to evaluate one board against another to tell which moves to make. Usually such a comparison function is hand written.

We asked whether it was possible to write a generic board evaluation function which would learn a preference over board states by playing many games, either against itself or a hand coded evaluation function. After a game is finished, if the learner lost, it works backwards through the board states visited reducing the preferences by decreasing amounts. Boards are recorded in terms of "features," so the learner is generalizable over different board games. As you can see from the presentation, we met with some success.

Files: Proposal (pdf), Presentation (pdf)