Jason Kim

The following is a list of the courses I have taken at the University of Michigan. I have listed programming projects alongside each course where applicable. I am bound by the Engineering Honor Code at U-M not to release those projects to the public. Consequently, a brief description of the work is the furthest extent that I am able to disclose. For more information, click here.

Electrical Engineering & Computer Science


445, Introduction to Machine Learning

Link to syllabus

Projects in Python:

  • Linear regression using stochastic gradient descent (SGD).

  • Decision tree learning with ensemble methods of bagging and random forests.

  • K-means and K-means++ clustering.

  • Clustering with a Gaussian mixture model using the expectation maximization algorithm.

  • Classification of RateMyProfessor reviews with a kernelized support vector machine. Involved feature extraction, k-fold cross validation, performance metrics, hyperparameter and kernel selection, loss functions and regularization, and accounting for class imbalance.

  • Classification of food images with a convolutional neural network, and transfer learning with an autoencoder.

485, Web Systems

Link to syllabus

Projects in Python:

  • Static templated clone of Instagram as an exercise in parsing JSON and writing jinja2 templates.

  • Server-side clone of Instagram based on the previous project. Integrated databases with SQLite3, which made it possible to create user accounts and new posts. Handled server-side processing with Python/Flask.

  • Client-side extension of the Instagram clone. Completely redesigned the main feed with React and an additional REST API on the server. This made infinite scrolling possible as well as likes and comments updating in real time.

  • MapReduce master and worker interface compatible with Apache Hadoop. Exercise with sockets and multithreaded programming. Implemented heartbeats and fault tolerance.

  • Wikipedia search engine. Implemented a MapReduce pipeline to create an inverted index from a list of documents. The search engine consists of two servers, one for storing the inverted index in an efficient data structure and another for serving search queries. Both used REST APIs, one of which the front end implemented in React relied on to fetch information.

388, Introduction to Computer Security

Link to syllabus

Projects in Python:

  • A Vigenere deciphering tool. Uses variance in ciphertext letter frequency to estimate key length, and either simple frequency analysis or chi-square test to guess the key.

  • A length extension attack on MD5 hashes, and a collision attack composed of two binaries with identical MD5 hashes but wildly different behavior.

  • RSA signature forgery implementing Bleichenbacher’s attack.

  • A padding oracle attack against cipher block chaining, modeled after the vulnerability in earlier versions of TLS/SSL.

  • SQL injection against inadequate sanitation and hashed user input fields.

  • Port scanning detector using the dpkt library to parse packet captures.

  • Buffer overflow attacks for C programs. Encompasses shellcode, bypassing DEP and ASLR, and return oriented programming.

  • A fuzzer for black box testing on an instructor program that parses JSON input.

Projects in JavaScript and jQuery:

  • XSS attacks that send user data to a remote server. Implemented against increasing levels of sanitation, and coupled with CSRF attacks.

Other project work:

  • Analyzed network traffic with Wireshark to find vulnerabilities.

  • Wrote a phishing email to a simulated helpdesk.

  • A penetration test on a simulated corporate network, and digital forensics using Autopsy and various other tools. Due to the open ended nature of those projects, I am unable to disclose their components or methods.

370, Introduction to Computer Organization

Link to syllabus

Projects in C:

  • A fictional assembly language, LC2K, was used for this course as well as a limited subset of ARMv8. LC2K resembled a limited subset of MIPS.

  • Basic assembler and simulator for LC2K.

  • Advanced assembler for LC2K with support for multiple source files and external references. Implemented a symbol table and relocation table.

  • Linker for multiple LC2K source files.

  • Pipelined simulator for LC2K. Implemented a 5-stage pipeline with forwarding to resolve data hazards and simple branch prediction and rollback for control hazards.

  • Cache simulator for LC2K with variable number of lines, block size, and associativity; writeback policy and LRU.

Projects in Assembly:

  • Multiplier for LC2K, which lacks a multiplication instruction. Uses long multiplication with bit shifting for speed.

  • Binomial coefficient calculator using stack frames and recursion.

Other project work:

  • For most (if not all) projects above, students were instructed to devise their own test cases, handwritten or randomly generated. The test cases were graded against a set of buggy instructor implementations for their ability to catch bugs.

281, Data Structures and Algorithms

Link to syllabus

Projects in C++:

  • Word morph solver. Takes a start word, end word, dictionary, and rulebook. Implemented with stacks, queues, and deques.

  • Mine escape solver implemented with priority queues.

  • Binary heap and pairing heap implementations from scratch.

  • Hash table implementation from scratch.

  • AVL balanced binary search tree implementation from scratch.

  • SQL simulator for a limited subset of commands. Implemented with a mix of hash tables, arrays, and maps.

  • Minimum spanning tree generator and traveling salesperson problem solver with heuristics. Employs backtracking and branch-and-bound designs.

Other project work:

  • For most (if not all) projects above, students were instructed to devise their own test cases, handwritten or randomly generated. The test cases were graded against a set of buggy instructor implementations for their ability to catch bugs.

  • Projects in this class were graded for correctness and also for performance. Runtime, peak memory usage, and memory leaks were measured.

280, Programming and Introductory Data Structures

Link to syllabus

Projects in C++:

  • Image processing program with seam carving algorithm, which is implemented by introductory computer vision.

  • Euchre card game simulator. Exercise for object oriented programming, arrays, and vectors.

  • Reverse Polish Notation calculator with implementation from scratch for a linked list and stack.

  • Forum post analyzer using log-likelihood machine learning. Implemented a binary search tree from scratch for one part. Exercise for recursion.

Other project work:

  • For most (if not all) projects above, students were instructed to devise their own test cases, handwritten or randomly generated. The test cases were graded against a set of buggy instructor implementations for their ability to catch bugs.

Engineering


101, Introduction to Computers and Programming

Link to syllabus

Projects in MATLAB:

  • Intro to finite element analysis.

  • Image processing to reduce noise and detect tumors.

  • Analyses and plots of environmental conditions.

Projects in C++:

  • Braking coefficient calculator.

  • Simple natural language processing using keyword weights to classify reviews as real or fake.

  • Naive (nearest neighbor algorithm) traveling salesperson problem solver.

Mathematics


214, Applied Linear Algebra

Link to syllabus

Projects in MATLAB:

  • Group final project - theoretical and actual runtime comparison for QR-factorization algorithms. Compared Gram-Schmidt orthonormalization, Householder reflection, and Givens rotation.