Skye Kangbin Im's Portfolio

Jeeves course planner

source code (Github)

screenshot

Using d3's svg module heavily, and underscore for its functional helper tools, I created a replacement for my school's (New York University Shanghai) course-helper, which is named Albert. The data was formatted into an easy-to-consume JSON file--located at /src/courses.flat.json-- via a series of Python scripts, with Selenium used to interact with Albert itself.

Unlike Albert, Jeeves is:

While detailed analytics were not obtained, thepage was requested roughly 400 times over a month, indicated a modest degree of success. Further improvements would be supporting all three of NYU's major degree-granting campuses' schedules; improved analytics using Google Analytics; and a better layout.

(to top)

Recipe recommender

screenshot

Created in a hackathon along with 2 other teammates. This web app takes a list of ingredients you have on hand, and searches for a recipe you can create either using only ingredients you have, or those you can make with n extra ingredients, where n can be provided by the user.

My contribution to the project was the client and the backend infrastructure.

(to top)

Raycaster3

source code (Github)

screenshot

Using pyeuclid for geometry, JSON format for configuration files and pure Python for the rest, I created a simple implementation of a recursive raytracer. This version builds on the experience I gained coding a previous one. For example, camera rotation is implemented with quaternions. Features include:

However, due to limitations of Python, render speeds are not fast enough for a realtime display and are instead saved to a file.

(to top)

Boidfish

source code (Github)

screenshot

Using Javascript(d3.js and victor.js), a "swarm" of boids was simulated. The virtual fish tank resembles an actual school of fish.

Boids are agents that act following three rules: separation from nearest flockmates, alignment with nearby flockmates' directions, and cohesion, steering towards the center of gravity of nearby flockmates. This demo follows basic MVC principles, where a model (that consists of an array of boids) is updated continuously, which then affects the view, facilitated by d3.

This project was made firstly because I simply enjoy creating simulations, but also because d3 and svg is a robust combination for making simple graphics effortlessly, compared to eg. SDL.

(to top)

What color is it?

source code (Github)

screenshot

A simple, effective web app that uses d3.js's transition module to provide a novel 'clock,' where time is represented as color, changing over time. The text smoothly and automatically resizes itself when the screen size is changed. The color transitioning uses HSL for more intuitive scaling, compared to RGB. This project was an exercise in using d3 as a jQuery alternative, simple responsive page design, and attempting to make something simple but useful.

(to top)

Chartered Waters

source code (Github)

screenshot

screenshot

A naval trading game/simulation written in C++. Inspired by the series Uncharted Waters, this game aims to simulate economies and merchants not as systems but as individual agents acting to form observable, rational behaviours. Some features include:

Link to executable

(to top)

DNA viewer

source code (Github)

screenshot

Using the human genome files generated as a result of the Human Genome Project and mirrored by Project Guttenberg, I used Python to transform the chromosomes into an image. The finished chromosome images are hosted on a "viewer" page that lets the user click on the image and find the actual genome at that point. Unfortunately, because this was created a few years ago and I have migrated systems, the look-up system no longer works and will require some non-trivial effort to reintegrate it.

Some key points:

(to top)

Erosion simulation

source code (Github)

screenshot

This is a simulation of water, using the "virtual pipes" model described in this paper. Water is placed in imaginary, discrete "boxes" and water flow is modeled as water transfer between two such boxes. Implemented with C++, with Allegro for the 2D info window and a DX11 renderer (made by Joshua Alway), this simulation utilizes up to 4 threads to more rapidly process each simulation step. It has a simulation speed of roughly 20fps at optimum.

(to top)