~/leungjch/
Hi! I'm a Computer Science student at UWaterloo. I've previously worked at Tesla, SAP, SingleStore, Dropbase, Waterloo Data Visualization Group at UWaterloo, and Software Analysis and Intelligence Lab at Queen's University. I'm interested in building distributed systems and full-stack applications.
I'm a maker at heart. Over the years, I've worked on a variety of projects in my spare time. Check out my Github to see more.
Fudge is a force directed graph explorer built with C++ OpenGL/WebGL. Given a graph network, it uses n-body simulation to model nodes with a repelling force against each other node, and edges act as springs which keep connecting nodes together. The result is a visually aesthetic 3D layout of a graph.
Keywords: c++, opengl, webgl, graph, force-directed, webassembly
A 2D universe simulation app which numerically solves a n-body system with Euler integration of gravitational forces. Features asteroids, planets, stars, black holes, white holes, AI satellites, and a player-controllable spaceship. Published on the Google Play Store.
Keywords: java, android-studio, kotlin
A full-stack application that I built at UWaterloo Data Visualization Group which lets you convert scribbles into photorealistic landscape images using the GauGAN CV model and create art in the style of famous paintings through neural style transfer. The app supports collaborative drawing through a server I developed in Go, and hosted ML models on a Flask server. The entire backend is hosted on GCP and deployed using Docker. Co-author of a paper published to International Journal of Human Computer Studies.
Keywords: ml, gaugan, style-transfer, art-therapy, react-native
An Android / WASM app that visualizes the chaotic behavior of a pendulum being attracted by the force of magnets. The color of the pixel represents which magnet the pendulum landed on, and the brightness of the color represents how quickly it landed on that magnet from that location (blacker corresponds to more time required).
Keywords: physics, android, webassembly
A Raspberry Pi Linux driver written in C for the Bosch BME280 sensor, which measures temperature, humidity, and pressure. Uses I2C interfacing to communicate with the sensor. The driver is loaded as a Linux kernel module.
Keywords: c, linux, raspberry-pi, i2c, embedded
A Chrome extension for AI-assisted live notetaking on videos and live meetings - copy text directly on YouTube videos and automatically summarize presentation slides during live meetings! We used Google Cloud Vision API to perform OCR from video as well as NLP models (BART, spaCy) for automatic summarization named entity recognition of the text. We deployed the backend with Flask.
Keywords: hack-the-north, gcp, nlp, flask
A full-fledged cellular automata simulation built with React and styled with Bootstrap, complete with 28 rule variants, various customizable parameters, a time machine, 3D rendering using three.js with the option to download model as .obj, and live graphing of cell population with d3.js. Completed as part of the Harvard CS50X final project.
Keywords: react, bootstrap, three.js, d3.js, webapp, p5.js
A stock simulator made with PERN stack (PostgreSQL, Express, React, Node) + data visualizations with D3.js, with site deployed on Heroku. Trades and transactions are handled through REST APIs to the Node server, which send SQL queries to the Postgres DB. I also run a Python child process to fetch live stock data from Yahoo Finance, which is processed using Pandas.
Keywords: fullstack, webdev, node.js, react.js, d3.js, pandas, sql, rest-apis
An experimental C# lexer+parser+eval interpreter for a modified Logo programming language extended to 3D, with graphics with Unity 3D. The interpreter is comprised of three parts. The lexer takes in the raw text and generates tokens. These tokens are processed by a parser, which produces an abstract syntax tree (AST). The evaluator traverses this tree and executes each command to the turtle. Currently, the language supports looping, primitive commands (up, down, left, right, forward, backward), and (possibly recursive) functions.
Keywords: c#, unity3D, interpreter, programming-languages
A peer-to-peer kinect-like fitness game that requires only your webcam. Destroy and avoid the enemies, and move quickly within 60 seconds to win against your friends, while getting a workout! Frontend created using React app and Material-UI for styling. Websocket server run through Node.js (Express). Smooth video calling between two peers is achieved through simple-peer, a WebRTC Javascript library. Project deployed on Heroku. The game is built using p5.js, and I implemented a quadtree to improve collision detection time complexity to O(nlogn) from O(n²).
Keywords: javascript, node.js, react, express, p5.js, simple-peer, posenet
Predict when you'll receive the COVID-19 vaccine in Ontario using a simple questionnaire and crowdsourced data. Created with a team of three other uWaterloo students for Hack the North 2021. Built with MERN (MongoDB, Express, React, Node.js) stack, with data visualizations using Chart.js.
Keywords: mongodb, express, react, node.js, chart.js, javascript
A React / d3.js webapp that visualizes 330,000+ integer sequences, scraping data from oeis.org. Contains interactive option to view in linear/logarithmic scale, search specific sequences in OEIS, view a curated list of interesting sequences, and browse random sequences.
Keywords: react, javascript, d3.js, math
A variational autoencoder trained to generate unique druglike organic molecules using Tensorflow. I used a training set of 100K molecules, convnets for the encoder and GRUs for the decoder. I used RDKit to plot and verify generated molecules and used QED and SAS to quantify the druglikeness of a molecule.
Keywords: python, tensorflow, keras, rdkit, deep-learning, chemistry
A unique method of generating fractals by simulating the chaotic behaviour of a swinging pendulum that is attracted to various magnets on the board. The physics simulation using numerical integration of spring and magnetic forces (Hooke's Law and Coulomb's Law). The colour of the pixel depends on the magnet that the pendulum landed on starting at the pixel's location, and the brightness of the colour corresponds to how quickly it lands on that magnet (blacker corresponds to less time required).
Keywords: python, numerical-integration, chaos-theory
A web implementation of epicycles (essentially a sum of sine and cosine waves) which is capable of generating beautiful flower-like shapes and approximating any function via Fourier series (e.g. the square wave shown). Epicycles are in your electronics (sort of), the classic Spirograph toys, and were the backbone of the geocentric model of the solar system.
Keywords: javascript, p5.js, math
A neural network built from scratch using Numpy matrices and trained to play Snake, generalizable to any game tile size. The neural network is trained using genetic algorithm concepts and techniques (tournament selection, random mutation, and fitness)
Keywords: python, numpy, neural-network, genetic-algorithm
A vanilla neural network that classifies a doodle (a 256x256 grayscale bitmap) as a cookie, a donut, or neither. Trained using backpropagation algorithm on doodles from Google Quick, Draw! dataset (~1M images). Runs on Android. Neural network implemented from scratch using Numpy linear algebra module, weights transferred to a Java implementation of a prediction-only neural network I made using the ojAlgo library.
Keywords: python, java, neural-network, multiclass-classification
A VR headset built from scratch. Head tracking was done using the MPU-6050 gyroscope and accelerometer sensor (~$30), which is sent to the Arduino Micro and converted into mouse input. Fully compatible with all SteamVR games (I'm playing VRChat in the video). The headset display is my phone, which streams video from my desktop.
Keywords: vr, arduino, c++, hardware, openvr, steamvr
A 2D printer that works on the size of a sticky note. The printer moves in the XY axis using the motors of old CD drives, and the pen is controlled with a servo motor. Supports printing any image up to a grand resolution of 64x64.
Keywords: arduino, hardware, gcode
A clone of the classic lunar lander game, where the objective is to safely land on landing zones while being mindful of speed, gravity, alignment, and fuel (it's harder than it looks!). Features an infinite landscape using the midpoint displacement algorithm. Made for my Grade 11 Computer Science final project, which I took in Grade 10.
Keywords: actionscript, gamedev, lunar-lander
An implementation of the midpoint displacement algorithm, used to create random landscapes. Features vivid, randomized colours and starry skies to simulate the aesthetic of sci-fi planetscapes.
Keywords: c++, sfml, midpoint-displacement
My first project: a Pong clone implemented in C++ using the SFML graphics library. The ball speeds up every time it is hit, and the bounce angles were calculated using fancy trigonometry.
Keywords: c++, gamedev, sfml