Distributed systems graduate course individual course project. 2020-2021.
Designed and implemented in Go three different variants of a replicated, multi-primary key-value store that achieves eventual consistency via conflict-free replicated data types (CRDTs). The underlying database is MongoDB, all inter-replica communication is via RPC.
Compared the performance of the three variants by subjecting them to various loads while they were deployed on ten geographically distributed Azure VMs. One of the variants achieved a sub-second latency under a throughput of 10 000 operations per second and, as per one metric, outperformed MongoDB's built-in replication service under this test.
While working on the project, repaired a bug in and added a new feature to GoVector, a UBC distributed systems research group's open source Go library.
Personal Project. 2020-2021.
A MERN stack single-page web application where players earn points based on how well they can guess the years in which various world history events took place. Correctness of a player's guess relative to other players' guesses is shown on a D3.js chart. Communication with the database is via a server-side API.
The project was deployed on an AWS EC2 instance running Apache2 web server and on MongoDB Atlas.
Advanced operating systems course project, done in pairs. 2019.
Implemented in C and X86-32 assembly an operating system mini-kernel consisting of memory management, process scheduling, inter-process communication, a simple shell, and a keyboard device driver.
Introduction to compilers course project, done in groups of three. 2019.
Implemented in Java and X86-64 assembly a compiler for a subset of the Java PL consisting of a parser, type checker, translator to intermediate representation, instruction selector and register allocator.
A personal project. 2019-2020.
A comprehensive set of course notes developed for students taking UBC's CPSC 320 course entitled "Intermediate Algorithm Design and Analysis". Topics include stable matching problem, graph algorithms, greedy algorithms, divide and conquer, dynamic programming and NP-completeness.
Notes have been referenced by several cohorts of students taking CPSC 320 and were found to be a very effective study supplement.
Part completed while employed as a BCS teaching assistant, part is a personal project. 2019-2020.
A set of C++ video tutorials to help UBC students taking the data structures and algorithms course in C++ to quickly get up-to-speed with to C++ after having learned Java in an earlier course.
A set of tutorials that illustrate certain subtleties (for example, difficult to find memory leaks) and common errors of programming in C.