Work-related projects

  • (more detailed writeup on the way) An open-source Javascript library that provides a simple interface for verifying the structure of Javascript code, backed by the abstract syntax tree generated by Esprima. Built to help guide and verify code as part of my work on Khan Academy's intro CS platform. Also check out the Github code and user-friendly display of structures. (Summer 2013; Javascript)

  • Structural Analysis of Khan Academy CS Programs

    (more detailed writeup on the way) Data exploration of user-created Khan Academy computer science programs. Built during the weekend Khan Academy hackathon. Includes an interactive force-directed graph where programs are nodes and links show spinoffs. A bunch of data processing yielded the code of the programs, so clicking a node showed a code diff against the program's spinoff parent to see what the user actually changed (plus general user and program data such as upvotes and downvotes). Allowed user to run StructuredJS queries against all of the program code to see a breakdown of matches. Also included gender data on program creators, if known. Individual project. (July 2013; Javascript, D3, Python)

  • In-browser Palantir Tagging

    Created web bookmarklet for the user to tag and markup any web page in-browser with existing or new Palantir objects, then send the data back to the Palantir backend to create a new document object linked to the tagged document entities. Vastly simplified the existing tagging workflow. Hackweek project with one of the designers and another software engineer. Selected by company leaders to present at Palantir's main conference for clients in Washington, D.C. (August 2012; Coffeescript, Java, HTML/CSS)

  • Stack Trace Clustering System for Identifying Similar Failures at Google

    Researched, designed and built machine-learning system for clustering similar crashes and bugs based on stack trace. Streamlined resolution of production crashes via string-matching and clustering algorithms to detect and display related past failures. Self-initiated Google summer internship project that was later incorporated into Google Feedback across all Google products, and presented at Google's Search Summit. (Summer 2011; Python, Bigtable, internal Google tools)

Personal and class projects

  • (article) (code) A peer-to-peer server inside of a browser that serves static and dynamic content over WebRTC. Built in 9 weeks for Stanford CS Senior Project. Allows anyone to build and serve a web application live on the internet simply by opening the site in their browser tab. Supports static HTML/CSS/JS content, as well as dynamic content with a database, templating system, sessions, and dynamic routes. Our server performs the initial handshake between the peer server (in your browser) and the peer browser (in someone else's browser), and all other content is served browser-to-browser over WebRTC. Team of two with Brie Bunge. Won top project awards from Palantir, VMWare, Hearsay Social, and Twitter across all Stanford CS senior projects at the software fair. (April-June 2013; Coffeescript, NodeJS, Less/CSS, Handlebars, Backbone)

  • (article) (code) Won the Stanford ACM 2014 Hackathon with Brie Bunge. When you click the bookmarklet in your browser bar, you join a live video chat with others viewing the same webpage -- a chatternet! A WebRTC project to make web pages into conversation areas. Built in ~18 hours over a weekend. (January 10-11, 2014; Coffeescript, NodeJS)

  • (poster) (paper) Machine learning analysis of programming communities on StackOverflow for Social and Information Network Analysis course. Predicted the current popularity of a programming tag based on the first four weeks of the tag's life. Found that the early affiliation network around a tag was more suggestive of later success than metrics on initial activity. In other words, we could tell more about a tag's future by knowing how it related to other tags on the site, versus knowng how many raw users, questions, or answers there were. Also ran PageRank on the affiliation networks. With Brie Bunge and Melissa Johnson. (October-December 2013; Scipy, Scikit-learn, Python, Snap)

  • (writeup) (code) Tool for lightweight static instrumentation of Javascript for proof-of-concept. I extended Esmorph (based on Esprima) to allow for instrumentation of Javascript constructs beyond just the top and bottom of functions (such as variable declarations, try/catches, for-loops, and so on). I show examples of instrumenting return statements to count how many times each return in a function has been hit during program execution, as well as example of instrumenting functions to detect when a function has been called with parameters of different types. Team of four with Daniel Jackoway, Kat Busch, and Peter Johnston. (June 2013; Javascript)

  • Kite Coding

    Prototype for engaging middle-school girls in beginning programming, emphasizing coding as a way to create. Website includes first level of guidance toward building a magic-8 ball. Part of Stanford product design senior capstone course where my partner and I went through the design process of ideating, needfinding, and prototyping around engaging middle-school girls in CS, including small-group interviews and experiments with existing learn-to-code methods with middle-school girls. Insights also came from volunteering at the CS course at a local girls' school and helping 75 6th-12th grade girls learn to make Android applications as part of Technovation Hack Day. Worked with product design partner as lone CS major in the class. (February-April 2013; Coffeescript, Backbone, Less, HTML)

  • Machine learning analysis of New York City school data to examine individual school performance between 2006 and 2011, based on demographic data, test performances, and survey responses. Found that two questions on parent involvement strongly predict future improvement or decline. Also provided machine-learning evidence of a strong web of interrelated factors in characterizing schools. Team of two with Daniel Jackoway. (December 2012; Python, Matlab)

  • Web App for Stanford's Course Evaluation Data

    Web application for searching, comparing, and exploring official Stanford course evaluation data to find information on classes to take, best professors, and differences between departments. Visualized data from ~350,000 evaluations of over 15,000 course offerings across seven quarters, comparing across more than 15 dimensions. Included a parallel-coordinates display to filter, summarize, and find patterns, as well as a detail view to sort, drill down, and directly compare courses. Also included brushing and linking between the different components, with searching across courses, professors, and departments and a word cloud of sample searches. Team of two, where teammate handled the database and search. (December 2012, Javascript, D3, HTML/CSS)

  • Exploration of Presidential Debate Transcripts from 2012, 2008, 2004, and 2000.

    Searchable word tree of the presidential debate transcripts, coloring words and phrases according to party affiliation. Data exploration tool for the last four presidential elections to show popular statements on America, the economy, and what "we have to" do. Team of two where teammate handled extracting and processing the data. (November 2012; Javascript, D3, HTML/CSS)

  • D3 Visualization of Gender Equality and Female Athletes by Country in the 2012 Summer Olympics

    Chart visualization comparing different countries' external ratings on gender equality with the percent of their Olympic athletes who were female, including data on country location and medals won. Individual project. (October 2012; Javascript, D3, HTML/CSS)

  • Tableau Analysis of Federal Aviation Administration Airline Flight Departure Delay Times

    Visualization-driven investigation of how carrier and time of travel affect average and median departure delay, based on FAA data from December 2009. Explored different methods of visualizing the data and concluded that the December data suggests that if we are desperate to leave precisely on time, we should generally avoid flying on weekends, or via Southwest or Continental -- but, if we can tolerate just a few minutes of departure delay, it does not particularly matter when we fly nor the carrier. Individual project. (November 2012; Javascript, D3, HTML/CSS)

  • Fun tool that replaces words in sentences with random synonyms, inspired by how high school students often "improve" their essays. Uses the Big Huge Thesaurus API. Individual little script. (February 2012; Javascript, D3, HTML/CSS)

  • Python script that listens to the currently-playing iTunes song and finds the corresponding Ultimate Guitar tab, which it auto-loads into a browser. Built because it is hard to type while holding a guitar. Individual little script. (November 2011; Javascript, D3, HTML/CSS)