CSE Undergrad
igien...@cs.washington.edu
I'm interested in software development, discrete mathematics, and analyzing data to extract information. My other loves are animals, looking at art, hiking, Capture the Flag, and puzzles. When not at a computer, I can be found exploring Seattle or socializing. I've lived in three different countries, gotten a perfect SAT score, traveled a decent amount, and been told I'm eccentric!
Here are some pictures of my working environment, and my resume for those interested.
I've been sick all winter, but now that spring is back I'm starting up research and projects again. This one comes from the recent purchase of an iPhone after reviewing the SDK for it. Although the SDK isn't usable on current iPhones until they're updated to version 2.0, I was able to get some software running on it that updates my location periodically and posts it to a tracker I host. The result can be viewed graphically either as my latest location or as a timeline of recent locations.
I used the Skyhook SDK, Google Maps API, and the SIMILE Timeline API, in conjunction with various scripts and code to glue it all together.
Note: I don't actually keep the updates turned on continually because I value my privacy ;)
This was originally intended for backing up deviantArt galleries. It's a small Python script that lists links to full-sized images of all publicly visible deviations in a users gallery. I originally intended to add options to download all the images as a zip file or filter by date or name, but I kept it in this format because not everyone wants their gallery zipped (not to mention this would cause serious server computation), and I figured people can pick and choose which ones they want to download or mass-download using a Firefox extension like Down-Them-All.
Neat tidbit I figured out while working on a homework problem where the fixed subsets were 2 and 4. I found that, using a hash table, I could determine whether there was a subset sum adding up to a number k in O(n) for size 2 and O(n^2) for size 4. Continuing we have O(n^4) for a size of 8, O(n^8) for 16, and so on. Note, however, storage is atrocious.
The basic operation is a linear scan through a list of numbers that stores the number and its difference from k in a hash table as key/value pairs. Once inserted, if the value is contained within the hash table as a key, there exists a subset sum of size 2.
Continuing, if we need to find a subset sum of size 4, we enumerate all pairs of numbers and store their sums, which takes n(n-1)/2 operations, or O(n^2) time. These sums are then scanned using the operation above, and if a match is found, then there exists a subset of size 4. This can be extended indefinitely. For a subset sum of size 8, we perform O(n^2) and O((n^2)^2) operations to enumerate all pairs of pairs to find all sums of 4 numbers. Perform basic operation again.
Eventually, this method approaches legendary O(Stop! Hammer) time complexity. Share and enjoy.
PS: Your hard-drive will hate you if your input involves a large range of numbers.
A Python program for zipping up files, but with a twist! The zip file contains itself, a quine, inside. Unfortunately, there's one sticky detail tripping me up -- making a CRC32 checksum that is valid for a file that contains that same CRC32 checksum in three places. So close. However, I can brute force some files; I've yet to figure out what makes them forcable or not.
Some client-side Javascript (implemented through Greasemonkey) that modifies the gallery viewing user interface, based off the original version by doofsmack. It allows people to preview other images in the gallery while viewing a single image and jump to another image with one click.
A Python script for maintaining a NNTP to RSS feed. The working feed is currently up but undergoing refinement. I'm also re-arranging the project into separate poll-based and push-based systems.
Too Many Ninjas was a game popularized by Digg a few months ago. I got pretty good at it, but as with any flash game that makes it into my hands, I ended up disassembling it and playing with the innards. In this Hacked version, you cannot die! However, to be fair, you cannot 'win' either, since the game will never end. I wouldn't want people submitting high scores with a hacked game.
Too Many Ninjas - Hacked
A Python program that makes use of the Twisted method for network connections. This program takes names and uses various modules to scan particular social networking sites for data pertaining to the name. It can take a list of names and simultaneously scan many sites for data and save it in a database. Each module controls one site, i.e: a Facebook module, a deviantArt module, a LiveJournal module, etc.
Currently it is command line only, lacks many features for viewing the database, has a few bugs, and lacks modules for other sites. Hopefully I'll be setting up some Subversion soon for my source code so this can be posted.
This set of Python scripts takes modules to convert data from one form into marked up KML files. Modules control the conversion of various data types (example: GPS coordinates) into abstract comparable data. The comparable data is then passed through more modular scripts to output marked up KML files. For example, a GPS trace can be turned into a colored variable width line based on altitude and speed. However, this project was put aside after a lack of response from emails. GUI is not implemented, though the beginnings of it can be found at the link below. It might be picked up in the future as a personal project.
Link
Just for fun project! Takes Kevin Wallace's Fnorder (think random sentence generator) and couples it with Google Images. Be warned, even innocent sentences can bring up explicit images.
Visual Fnorder
An inside joke that is actually not dirty at all. I don't think much of porn, so I made an image grabber for random cute kittens that seems like it should be porn. Link below.
Link
Using Python, scripted a N-Sized Sudoku Solver (where n=3 is a typical game of sudoku) with web interface implemented from Kevin Wallace's Sudoku Marker.
The solver currently resides here.
Made a simple Perl script for doing mass reverse DNS lookups to fully explore the UW IP namespace (now that I have access to UW's network from my new dorm room). In addition, made a few Python programs for parsing the output in different ways and a Java program for viewing the several megabytes worth of results graphically in tree form.
Now to map the internet and start some data mining. An interesting exercise in switching between languages.
Returning to studies and making my way into the CS department. Learning as much as I can and trying to find projects to apply my knowledge to!
After graduating from high school, I decided to take a year off to explore the United States. Throughout my travels, I tutored mathematics and sciences at a prepatory school, did simple chemistry setups under a chemist, and helped people understand why their computers or internet wouldn't work (IT monkey). I went from Washington and explored from North Carolina to New York and Ohio.
Soon my interest in programming and network security gave way to interest in art, graphic design, and related subjects. I developed my painting skills from this to this. For two years I made websites, designed publications, painted, and drew. If you're interested in any art I did, go to deviantArt or my personal dump.
NOTE: I've had severe depression for most of my life, so a lot of my artwork could possibly be disturbing/angsty/etc. I've only been treated since early 2005 during a lengthy stay in a mental institution, which, interestingly, is when I stopped all my artistic endeavors.
Now that network protocols for Diablo 2 were available, knowledgeable coders could easily make software with it. However, this kept a good 90% of forum members from contributing anything but ideas. The solution was to create a higher level programming environment with simple scrpiting structure that implemented complex code behind the scenes. This project resulted in several object-oriented script parsers based on JavaScript. These simple scripts would be parsed into things only advanced programmers could previously do.
As a founder of an internet forum, I watched the dynamics as it grew from a 50 member group to a 2,000 member community and further. The changes fascinated me, and so I became interested in documenting the various social stereotypes, the administrative policies, and other random facts of interest. In the end I compiled 14 months of data on member growth, topic growth, administrative growth, bandwidth use, policy changes, stereotypes, topics including useful information, etc. I made some misc. notes, such as:
The first problem in finding holes in Diablo 2 was understanding what data was being sent and received. A handful of people understood only parts of it, but none of them made that information public. My goal was to understand as much of the network protocol as possible and publish it so anybody could use it to program with.
When I was younger I was interested in breaking the rules of online games. My game of interest at the time was an MMORPG called Diablo 2. My goal was to create a community where information on Diablo 2 game security could be publicly exchanged, and thus, grow.
Last time I checked, the community lives on at Edge of Nowhere.
This is especially meaningful to me: Dreama led an extraordinary life, and receiving this inspires me. I'd like to live up to the honor of being given this.
Funny story: they told me I was a candidate after I got out of a hospital stay, and so the deadline to compete for full status had passed by the time I got out.
Not a real award, but my community wanted to present me with something for getting a perfect SAT score. Apparently I was the only person in the school's history and the only person in Washington state that year.
And of course, there are also the silly "Quarterly/Annual Dean's List" things, but they're not important.
According to RateMyProfessors.com, I'm the hottest professor in this department ;)
To be updated with other information, such as resume, awards, et cetera at later date.