Programming

I have major experience coding in C, C++, and Python. I have additional experience in a number of other languages, including Java, SML, QBasic, Perl, PHP, and Javascript, though I vastly prefer C and Python where possible.

Java

I started programming in Java in the summer of 2003, just before I took a high school class that taught Java. I continued to teach myself Java after the class ended, and I created, during those latter high school years, a class-based chess game complete with "learning AI". I put that term in quotes because it learned by recording its moves and whether or not it would directly result in a win or lose, moving essentially randomly otherwise. This is, of course, not a very good AI, though it helped me debug the chess program.

There was a bug in the function that would verify whether a move was legal that allowed a player to move out of check by placing the other player in check. It turned out that this occurred because the player newly in check could not legally move their piece onto the opposing king's square, as it would not bring them out of check.

As a freshman at Carnegie Mellon, the final assignment in my Data Structures and Algorithms class was implementing a chess bot that used Alpha-Beta pruning. This time I didn't have to program the chess engine itself, though I did get a chance to find a bug by source-diving. The bug allowed an en passant to occur after a pawn moved two squares forward followed by each player castling.

In the summer of 2007, I worked at a company known as Princeton Softech (later absorbed by IBM), where I created data masking functions for their enterprise data privacy software. The data I was responsible for masking were foreign country identification numbers, similar to the Social Security Number used in the United States.

C/C++

I learned C in my freshman year of college (Spring 2007). My biggest project to date in pure C was the implementation of a basic kernel in the CMU course Operating Systems Design and Implementation, with my friend Thomas Tuttle.

I taught myself C++ in the spring of 2009 while programming the Game Creation Society project "Backfire". The source for that game is available on the project page for Backfire.

In August 2009, I began submitting bug fixes to the Dungeon Crawl Stone Soup development team. I traditionally find these bugs by source-diving or otherwise having an understanding of the code, and possibly running the game through gdb and replicating the bug. I have also submitted minor gameplay patches which have mostly been accepted (some with modifications).

Python

I taught myself Python during the summer while working for reCaptcha in building an image recognition Captcha using Python and Javascript. This Captcha shows three images and a label, requesting that the user outline where in each image that label occurs, if it does. It is guaranteed that one of the pictures will have the label, one will not, and the third is unknown. For example, if the label is 'cat', one or two of the images will contain a cat, and the user must outline them in order to be deemed human and pass.

The Captcha was once available on captcha.net as "Squigl-PIX" but no longer appears to be functioning.

My next big Python project was Jokeserver, an IRC bot that maintains a Redis database of jokes, telling them in channel upon request, observing the reactions, and determining which jokes are better.

jokeserver, and the more general ircbots project that forms its backbone, utilize Joel Rosdahl's python-irclib package for the low level IRC/socket framework. The ircbots source code is available at http://bitbucket.org/zannick/ircbots under the GPL.

My current project is Demystify, an ANTLR-based parser for Magic: The Gathering.

Most of my work at Google as an SRE (2010-) is in Python.