About Me
Machine learning, distributed systems and big data excite me, but robots will always hold a special place in my heart. You can keep the wires and circuit boards, though. I want to work with a small team on fun, tough problems with real-world applications. I get a kick out of producing simple, intuitive code, but will always hold functionality over beauty.
I am currently finishing up my Masters of Engineering at MIT CSAIL. I work in the Evolutionary Design and Optimizations (EDO) group with Dr. Una-May O'Reilly and Kalyan Veeramachaneni. I am creating a cloud-scale, distributed platform for machine learning. See more about my research below. When I'm not working or in class, I enjoy exploring Boston by foot and catching up with friends. I'm a ping-pong enthusiast, join in the occasional pick-up basketball game, and love strategic board games.
I will be graduating in June, and am actively seeking employment opportunities which align with my interests. If you think you have or know of an opportunity of interest to me, please get in touch!
The rest of this page is a reverse-chronological presentation of my work and various projects, with links to code and more information where applicable.
Poker Equity Calculator
For the 2013 MIT Pokerbots competition, I created an open-source equity calculator library, pbots_calc, in C. Because competitors develop on PCs, Macs, and Linux, and we support bots written in C, Java and Python, we needed a simple library which was cross-system compilable and compatible with the supported languages. The pbots_calc library uses the popular poker-eval library for computing winning hands. I also advised the rest of the dev team work on the engine and competition framework.
Intent Vulnerabilities in Android
In the Fall of 2013, I took the Computer Systems Security (6.858) course at MIT. The course operates as a seminar-style study of the various aspects of security concerns in computer systems. Additionally, the class builds a secure C++ web server through a series of labs, focusing on certain aspects of security. The class ends with an open-ended final project requirement. For our final project we examined the security of intents in Android application by building a static analysis tool for examining apps for unprotected intent usage. Then we used our tool to identify such an app and build an exploitation app. See our writeup for more information.
FlexGP
I am developing a distributed genetic programming system to efficiently run on the cloud. This system is called FlexGP The system has a decentralized, fault-tolerant, cascading startup for bringing nodes online, and a peer-to-peer neighbor discovery protocol to construct a robust communication network across the nodes. The cloud enables the creation of an island model where the populations are not only independent, but examine different data subsets, evolve in different manners, and are evaluated against different criterion. The ultimate goal of this research is a genetic programming implementation which achieves performance on big datasets comparable or better than that achieved on single machine implementations for small datasets.
Disconnections in a Distributed FS
In the spring of 2012, I took the Distributed Systems (6.824) course at MIT. The class has series of labs focused on building and extending the YFS (Yet another File System), a simple distributed file system built in C++. The class culminated in a final project. We extended the distributed YFS to allow for lock invalidation and editing while disconnected, with automatic merging when clients reconnected. See the writeup for more information.
Jaybridge Robotics
For the summer of 2011, I interned with the great team over at Jaybridge Robotics (Rep Invariant when I joined). I had a blast working on the software for their autonomous agriculture tractor. I worked mostly on refining the software controlling path planning, working to optimize it and make it more robust. I also expanded existing regression tests for new functionality and added features for assessing gains in the software performance. The majority of my work was in C++ and Python.
EvoGPJ
I first worked for Una-May and the EDO group in the spring of my Junior year. Under the excellent guidance of Dr. James McDermott, I built EvoGPJ - a simple, light-weight genetic programming library in Java. At the time, there were no genetic programming libraries which were both free-to-use and simple to understand and easily extensible, and yet powerful enough to run on the sort of problems the group needed to use it for. Based on that, simplicity and extensibility became the design guidelines for EvoGPJ.
Pokerbots
MIT Pokerbots is a month long competition at MIT where students code and submit poker "bots" to play a variant of texas hold'em. In 2011, the first year of the competition, I competed on a team with my then roommates, and we came in 14th place. The following year, with a game of triplicate no-limit hold'em, I helped team PoKerboT place 4th in the final tournament. I also moonlighted on the Pokerbots dev team, helping design and debug the poker engine and competition framework.
NASA Ames Research Center
I spent the summer of 2010 in Mountain View, CA working with Dr. Robert Mah and the Intelligent Data Understanding group at NASA Ames. While there, I worked on their new Machine Learning and Controls Laboratory - a test bed for fault isolation and detection algorithms. My primary work was to incorporate a new accelerometer into the test bed. I demonstrated the new accelerometer by implementing a simple fault isolation algorithm to tell when the accelerometer was on or off. All code was written in MatLab.
iRobot
I was fortunate to land an internship with iRobot Corporation the summer after my freshman year, working on their Warrior robot. My major tasks were twofold. First, I developed components to support streaming 2-way audio and video from the robot to the controller. This involved establishing a connection and (de)compressing the streams on the endpoints. Second, I developed a tool for viewing and manipulating runtime data. It supported real-time viewing as well as viewing data from log files. My work on the A/V streams was in C++, and the logging tool was in Python.