Writing race detectors is hard. Even using a framework such as Cilk, which drastically simplifies the algorithm for computing races, a significant amount of engineering still needs to be done as either binary or compiler instrumentation to capture memory reads and writes of tested programs. Other tools such as call-graph generators and code-coverage analyzers require similarly Herculean efforts. My senior thesis was to build a highly-performant LLVM/clang framework so that tool-writers can focus solely on writing their tool, and not compiler internals. It won the Outstanding Research Project Award and was published in SIGMETRICS.
May 2015 · Java · Github
Modern screen-sharing applications fall into one of two patterns. One pattern is the broadcaster sending its screen to some distributer (e.g., Twitch or Azubu), which requires trusting that central authority. The other requires each client to open a connection to the broadcaster, a clearly non-scalable protocol that forces too much load onto the broadcaster's CPU and network and has no tolerance of network failures. This project solves the lack of fault tolerance and provides mechanisms for solving the performance issues as well.
Collaboration with Kevin Yue (game designer)
A three week challenge to make something awesome (two previous iterations took the first week; current iteration is about two weeks of work). No libraries besides the XNA framework. 2D 1v1 Platformer for Xbox 360 (playable on PC). 3 roles, each with 4 abilities, a dash, and a jump. Hitting an opponent removes their shield; hitting again before the shield recovers wins you the game.
Proof-of-concept for my Splash class on hacking PC games. Uses Windows API to read the memory of the solitaire process and displays the cards in each pile. The class taught students how to find the structure and addresses of the cards.
Created to advertise MIT techx. Initially, particles will spell out "techfair" (configurable for any font/string pair). Raising one hand will make all particles follow that hand; raising two hands will split the particles into two. Dropping both hands will cause the particles to rearrange to the spelling.