Below are descriptions of the projects I worked on during my PostBac at Tufts. I can't publish the code publicly due to academic integrity concerns for current students, however I can share privately with prospective employers.
Java
- Developed a multi-threaded simulation of a train system, with one thread per passenger and one thread per train.
- Loaded simulation config from a JSON file specifying train lines and stops, and passenger journeys.
- Coded a simulation verifier to ensure that, given an initial state and a log of events, the simulation follows all rules.
Java
A simple MVC framework for Java. For this assignment, only Java Standard Libraries were allowed. Models are saved to a file
in csv format, while views allow a fluent api for generating html (for example, p("foo").p("bar")
will generate two adjacent
paragraphs). We also wrote the router ourselves, though the server was provided.
co-author | C, GDB, Valgrind, KCachegrind, simulated Assembly (UM-ASM)
- Teamed with a classmate to Design and pair-program an emulator for the Universal Machine, a 32 bit, 14 instruction machine with 8 registers.
- Analyzed and fine-tuned the performance of the UM, reducing the execution time on a 2 billion instruction benchmark from 193.84ms to 10.75ms, resulting in a 94% improvement.
- Coded a reverse-polish notation calculator in the UM’s instruction set to run on the UM.
co-author | C, Valgrind Developed a lossy image compressor and decompressor using bitpacking, quantization and discrete cosine transformations.
C++
A CLI simulation of a single train station. MetroSim takes in a file of station names, as well as a file of passengers and their journeys, and runs a simulation while printing all events (in order) to a specified output file.
C++
A CLI reverse-polish notation calculator. In addition to the usual calculator operations, it also handles files of commands
with the file
command, basic conditional logic with the if
command, and "RStrings", which are sequences of commands
rounded by braces. entering one will push the string onto the stack, while the command exec
will execute the commands in
the RString. For example, { 2 3 + { 5 5 + } exec + }
will evaluate to 10 (once exec
is called on it).