Projects and Coursework

MIT was a fun three years - here's an effort to highlight the technical parts.

Splice (splice.josh.ma) 6.824 Distributed Systems

Partnered with Somak Das - Go and JavaScript

Splice is a peer-to-peer, live text editor à la Etherpad or Google Docs, moving information processing to the participating peers only. A central server is used to serve the initial HTML/JS/CSS assets and broker connections between peers - all further communication is done peer-to-peer over WebRTC (via PeerJS). Splice handles operational transforms in a distributed environment, promising eventual consistency, and supports cursor data, user names, and chat.

Octopus 6.829 Computer Networks

Partnered with Somak Das - ANSI C and Java

Octopus is a fork of TightVNC (the old, open source 1.3 version) that improves on VNC's RFB protocol under poor network conditions. Octopus is resilient to high latency (actively pushes frames to client instead of waiting for client requests), high loss rates (lossy transport over UDP is combined with intelligent retransmissions), and varying bandwidth (adapts quality and framerate to match sampled bandwidth). Writing in ANSI C can be a nostalgic experience.

Polymerase 6.UAP Senior Project

Good ol' Java

Polymerase is a Java library to add Paxos-based replication across a set of servers. It works by instantiating a Replicator that takes in (serializable) objects and returns replicated proxies. Any method calls on the returned objects are automatically replicated across all configured servers - Paxos ensures reliability and consistency even under failure of (a minority of) servers.

Replicated method calls are applied in a consistent order across all servers. Polymerase uses a log-and-play approach to achieve consistency. Further mechanisms allow for finer-grained serialization controls. @AllowStale is a decorator on methods to allow best-effort calls without first waiting for the object to become up to date. By default, consistent serialization is enforced across all method calls - @InstanceParallel and @ClassParallel decorators allow parallelization at the instance and class levels, respectively.

Process Migration in JOS 6.828 Operating Systems

Partnered with Thomas Georgiou and Mark Zhang - low level C

We implemented process migration in JOS, a lightweight exokernel operating system. A migration daemon runs in the background, and an accompanying user-level binary initiates the migration by taking in a process ID and a target host. The process is frozen, and its state (including call statck and allocated memory) is transferred to the new host where it is resumed. Our implementation of process migration allows for shared memory between local and migrated processes as well as remote, forwarded system calls from migrated processes.

Starbucks 6.035 Compilers

Java

Starbucks is a Decaf (think Java, but simplified) compiler written in Java. It actually outputs to NASM syntax, where it's compiled and linked. Optimizations include dead code elimination, common subexpression elimination, copy propagation, register coloring, algebraic simplification, and loop unrolling.

Coursework Fall 2010 - Spring 2013