Various software projects that I contribute to. My projects can be found on Github.

Building CS 61A

My most recent work (2014-2015 school year) has been related to CS 61A infrastructure.

In preparation for co-lecturing CS 61A in summer 2015, I redesigned the class's website using Bootstrap to improve responsiveness. With students' ease-of-use in mind, I added

  • fixed sidebars on assignment pages for easier navigation
  • an auto-updating quick-links section on the home page for fast access to upcoming assignments.
  • a resource search bar that queries by resource name, type, and topic

In Fall 2014, CS 61A developed an autograding system called OK. I led development on the student-facing command-line autograding script called ok-client, which features

  • autograding to test correctness for programming assignments in the Python3 programming language
  • an "unlocking mechanism" in which students answer questions to "unlock" autograder tests before the tests can be used for correctness testing. You can read more about the idea in this paper.
  • collection of student usage statistics, which are aggregated and stored on OK's servers. This data is used for CS education research.

CS 61A reuses material from semester to semester, but with some differences due to scheduling changes. To address this, I wrote Templar, which features

  • a Markdown-to-HTML converter, so that course material could be written with little markup overhead
  • a plain-text linker, so existing resources can be reused without the need of duplication between semesters
  • a static templating engine that supports template inheritance and embedded Python, to build a consistent front-end while minimizing code repetition

I also use Templar to generate this website.

Personal projects

Some side projects that I wrote for fun.

My personal website. From Summer 2012 to Summer 2015, my website was primarily used to host CS 61A-related practice problems and notes that I wrote over the years. The code I originally used to generate my website was the predecessor of Templar (I now use Templar to build my website).

If you've seen my website before, you may have noticed I recently redesigned it!

A Twitter bot that I built with my good friend Brian for a quick hackathon. If you tweet to @TweetLikeMeBot, our bot replies with random message crafted from your most recent tweets. You can also ask @TweetLikeMeBot to tweet someone directly at

Tweetbot is written with node.js and the Twitter API. The messages are generated by sampling from a Markov model of bigrams of previous tweets.

A web-based Java-to-Python3 compiler that I wrote as a learning exercise. I experimented with node.js web development, CSS, and JavaScript. The compiler supports a subset of Java syntax.