Chenyang Yuan
• ### Coding.js

This is an set of Javascript-based interpreters which use web-workers. It differs from other Javascript interpreters as the main interpreting work is done in a seperate worker thread, and thus would not slow down the main UI thread when performing a lengthy computation. There is a front-end providing the input and output prompts, which links to many separate interpreter backends. Currently the main backend is a Scheme interpreter, which implements a significant subset of Scheme. There is also a logic interpreter which is based on a subset of Prolog taught in CS61A at Berkeley, and a Javascript interpreter which just calls eval.

A tool for saving Facebook groups in a local database and doing comprehensive searches locally. After the first download, it will sync the local database with the Facebook group during each run. This also includes a web-interface for stats, searching and running database queries with nicely formatted results.
• ### 3D Particle Simulation

A simulation with thousands of particles attracted by gravity towards many sources. Particles are shaded based on their speed, with red the fastest and white the slowest. The gravity is simulated numerically with the Runge-Kutta method ran in the CPU, whereas the rendering and the shading is done in the GPU using WebGL and the three.js library.
• ### Python Control Flow Visualization

An online tool that run python programs and visualize the code branching using D3.js. The programs are run in a sandbox in the server while being profiled, and the branch information is then sent to the client and rendered. From the rendered diagram we can see which lines of the code is hit the most, and also color-coded lines to indicate the direction of control-flow.
• ### Scheme on TI-89

A Scheme interpreter from scratch that runs on my TI-89 graphing calculator. It is written in C and supports a small subset of the Scheme language.
• ### Python Logic Simulation

Used Python to create a logic gate simulation system with constraint passing. This system also allows powerful abstractions to be made so that more complicated sets of gates can be created, saved and reused.