Hi, I'm William.

software developer and computer science student

> William.email()
  => "[email protected]"

> William.location()
  => "Vancouver, BC"

> William.education.current()
  => school: "Carnegie Mellon University"
  => degree: "M.S. Robotics"

> William.education.previous()
  => school: "University of British Columbia"
  => degree: "B.Sc. Honours Computer Science"

> William.experience().current()
  => org: "UBC Data Science Institute"
  => role: "DSSG Fellow"

> William.cv()
  => "download"

> |

What am I interested in?


Clean, efficient, well-documented code is an art. I have a passion for building systems that stand the test of time, with a particular soft spot for Javascript, C#, and Go.


Computation allows us to see far more than meets the eye. I'm interested in how we can harness the power of big data to better understand the world around us.


Deep learning enables new problem-solving paradigms. I am especially interested in its applications to vision problems like recognition and super-resolution.

About Me

Hi, I'm William.
I'm currently a fourth year Honours Computer Science at the University of British Columbia in Vancouver, BC. I have a passion for building robust, scalable systems, with experience deploying to hundreds of thousands of users around the world. Drawn to the challenge of searching for needles in the data haystack, I am particularly interested in tackling problems in the intersection between computer vision and deep learning.

Get in Touch


Formula UBC

Electrical / Data Acquisition

Formula UBC is a student organisation involved in designing, building and racing a Formula style race car each year.

Through passion and commitment, students collaborate as a team to design and build a formula style open-wheeled race car that competes in the annual Formula SAE competition. Each member contributes his or her skills in a specialized area of interest such as powertrain, chassis, suspension, electronics, controls or aerodynamics. The completed car is taken to Lincoln, Nebraska, where it competes against 79 other universities and colleges from around the world.

As a member of the Electrical/Data Acquisition Team, I help build the car from the inside out, working with various electrical and software subsystems ranging from engine wiring harnesses to semi-automatic pneumatically-actuated transmissions. Through my work with the team, I've gained a wealth of practical experience in debugging embedded systems, networking protocols, as well as team problem-solving skills.

Check It Out


Visual Algorithm
Android Live Wallpaper

MazePaper is an interactive live wallpaper that I'm currently working on for Android.

MazePaper is a fun and interactive way to show off your love of data structures and algorithms, right on your phone wallpaper! Tap anywhere on the display to see a visually interesting maze generate right before your eyes, before solving itself and finding its way back to the origin.

The logic behind MazePaper is powered by an implementation of Prim's algorithm applied to a randomly weighted grid representing the coordinates of the maze. Conditions are imposed to guarantee that the endpoint and origin are sufficiently far apart to produce a visually interesting maze and that the entire maze will traversed at least once eventually. Once the maze generation process is completed, an implementation of depth first search is then called on the maze, solving the maze in a procedural manner that makes for a fun visualization!

Learn More


Web Scraper / Captcha Solver

Scrapair is a web scraping, captcha breaking, and data entry tool rolled all in one.

Originally developed to meet the challenge of retrieving data from UBC's PAIR office in CSV format, I needed a script capable of automatically filling out a form and successfully reading the captcha within before entering data into a database. The end product boasts a success rate of over 40% and is capable of pulling hundreds of datasets an hour.

Scrapair first makes use of the Mechanize library to automate the form completion process before handing over control to a captcha-breaking script that uses ImageMagick image manipulation operations to first return the captcha image back to a black and white representation, before separating each letter based on whitespace.

Each individual letter is then compared to a data set of histograms representing the average appearance of each image, as generated by a machine learning library. The solved captcha is then passed back to the original Mechanize script where it is entered into the form. If successful, the dataset is then automatically retrieved and stored ready for use locally.

Project Launch

Your Next Favourite
Musical Instrument

Designed by people passionate about electronic music for people passionate about electronic music.

Project Launch is a web app that aims to make it easy to create, record, and share music instantly from the web. First prototyped during DubHacks 2014 at the University of Washington, Project Launch is a client side web application written in Javascript making use of the Soundcloud API to enable users to sample and mix the latest music from all their favourite artists.

Users have the option of sourcing music from both local storage and online sources, where samples are then cached locally for later use. Project Launch also provides deep customization allowing for the use of macros and loops, as well as user-defined keyboard shortcuts for easy playback.

Check It Out


Real-Time Transit
Android Application

Know where your bus is, plan your trip and navigate Vancouver all from the palm of your hand.

NextBus is an Android application that was developed with one goal in mind, to ensure that you're never left wondering where your bus is again. Built as a term project for a software development course at UBC, Nextbus met or exceeded all requirements set out and later received an update adding additional sorting and caching functionality.

The app makes use of the Translink and OpenStreetMaps APIs to give users quick and reliable information about transit schedules, providing users with pinpoint locations of vehicles all around Vancouver on an interactive geographic display. Enhancements to the original app have added additional functionality to track by bus type and vehicle passenger capacity, as well as the ability to cache transit schedules provided in XML format locally for use off the grid.


The Android App
That Makes Fitness Fun

Tracks is a mobile app that leverages your competitive side to make fitness fun, one step at a time.

First conceived as an entry for Launch Academy's Student Startup Contest, Tracks helps you compete with your friends in fun physical challenges and races, whether they're right next to you or halfway across the world. A video was created to highlight the premise and featureset of the application, with an accompanying mockup to showcase some of the core features like location based challenges and social media integration.

However, no business model is complete without a sustainable model of monetization, so we also set out to create a subscription-based service to keep users fit and publishers happy. Our team consisting of Shikib Mehri, James Liu, and myself came in 7th place, amassing over 200 votes!

Watch the Video

Get in Touch

Drop me a line or send me an email and I'll be sure to get back to you as soon as possible.