Hi, my name is Lenny Cheng
I'm a fourth year Computer Engineering student studying at the University of Waterloo

Languages: C/C++, Java, Python, C#, MATLAB, JavaScript, SQL, HTML/CSS/Sass
Libraries: ParSeq, Kafka, ZooKeeper, OpenCV, scikit-learn, pandas, matplotlib, Seaborn, NLTK, gensim
Frameworks: Qt, Node.js, ASP.NET MVC, Universal Windows Platform
Tools: Vim, GDB, Docker, PDB, WinDbg, Git, Mercurial, SVN, Perforce, tcpdump, ffmpeg
Databases: MongoDB, SQL Server, Oracle

Technology is a driving tool of change that touches almost every facet of our lives: from online banking to wearables, mobile games to machine learning, submarines to spacecrafts. It transforms dreams of the past into realities of the present.

Since coming to UWaterloo, my focus has been to expand my problem-solving and collaboration skills. Through the co-op program, I've had the opportunities to intern at six different companies, tackling diverse problems, collaborating with teammates, and delivering meaningful projects. To continue learning outside of the classroom, I've also built several technical projects and explored upcoming technologies.

I'm currently seeking full-time opportunities. If you would like to connect, please feel free to contact me at L43cheng@edu.uwaterloo.ca.

I look forward to discussing with you how we can collaborate together.


Work & Research Experience


Software Engineering Intern | San Francisco Bay Area

Sept - Dec 2018

As a member of the Artificial Intelligence (formerly Relevance) department, I worked with Java 8, generics, and the ParSeq asynchronous library to build ML infrastructure. This included designing a module to inject plugins into a framework, exposing its public API, integrating services to extract outputs of a post-processing pipeline used on the 'Jobs' page, and attaching recovery logic to failed RPC operations. I also learned a bit about the Java Memory Model and concurrency practices.

Evertz Microsystems

Software Engineering Intern | Burlington, ON

Jan - Apr 2018

At Evertz, I worked with video compression technologies, and in particular the H.264 codec and MPEG Transport Streams. I implemented features using the open-source JM H.264 Reference Software in C, built a parallelized test framework, and compared distorted YUV videos. I also validated MPEG TS used in ABR streaming and built visualizations to present the results.

UWaterloo Image & Vision Computing Lab

Undergraduate Research Assistant | Waterloo, ON

Sept - Dec 2017

As an Undergraduate Research Assistant, I evaluated the perceptual uniformity of the ICtCp colour space, implementing a subjective testing program with the C/C++ Blackmagic DeckLink SDK and a UHD Reference Monitor, generating and sanitizing pre-test data and analyzing post-test results. Work was conducted with PhD Candidate Thilan Costa and Professor Zhou Wang.


Software Engineering Intern | San Francisco Bay Area

May - Aug 2017

OptumSoft is an IoT startup founded by the namesake of our School of Computer Science and former professor from Stanford University, David Cheriton. During my internship at OptumSoft, I worked on a Kalman-like algorithm for predicting the reliability of sensor readings, and used C++/TACC, our in-house distributed language, to implement new features and maintain existing ones. I also wrote a test generator in Python that generated hundreds of tests to validate our in-house compiler and a serialization mechanism used in distributed environments

SMART Technologies

Software Engineering Intern | Calgary, AB

Sept - Dec 2016

As a member of the Driver and Diagnostics team, I built a cross-platform C++ API to change pen settings when they contact a SMART Board© and fixed cross-platform bugs related to SMART Board© driver diagnostics tools. I also collaboratively led a team of 5 interns to build an educational game with Node.js that was demoed at the BETT 2017 trade show.

Canadian Imperial Bank of Commerce (CIBC)

Application Developer | Toronto, ON

Jan - Apr 2016

At CIBC, I improved an ASP.NET MVC-based communication platform used by 10+ traders by reducing performance bottlenecks by over 80%, built an instant messaging prototype with SignalR and Oracle, and developed a "What You See Is What You Get" (WYSIWYG) editor. Before leaving CIBC, I initiative wrote a 20-page report suggesting future improvements for the communication platform.


Software Developer | Ottawa, ON

May - Aug 2015

At Fusebill, I created an internal querying tool with ASP.NET MVC and SQL Server to find frequent API callers and track down bottlenecks, built samples to show clients how to integrate with our RESTful API, and wrote automated tests for our marketing site. We worked in an Agile environment with two-week sprints.

Technical Projects

Musical Words

Musical Words leverages machine learning and text mining techniques to pair background music to text documents. Its features include classifying, extracting topics, and summarizing text. It also applies sentiment analysis to determines the feelings expressed in text.

Pioneer Doctrina

Pioneer Doctrina is a Raspberry Pi-based car that streams videos to and accepts movement commands via RFCOMM or TCP/IP from its associated Windows App. I built it to learn about the Raspberry Pi and gain some familiarity with embedded systems.


WebServio is a multithreaded or a multiplexed I/O web server that partially conforms to HTTP/1.1 and includes a CLI for changing configuration settings. I built it to learn new technologies and implement portions of the RFC.

Surveillance Tools

Wanting to build a project that uses diverse technologies, I developed a set of tools that sends keystrokes, files, system information, and directory structures to a remote server and polls server for operations to perform.


I've been thinking about building a programming language for a little over a year before finally comitting to it. Swoosh is an interpreted dynamic procedural language inspired from Pascal.


This is a story-sharing app that authenticates users with Facebook Login and contains a RESTful API that uses Basic Authentication. NOTE: This site has been migrated to become a free subdomain on Heroku's server


After reading about compression algorithms, I decided to build a cross-platform desktop compression program that losslessly compresses .txt files. Average compression ratio is 60-80%.

Tower Pop

Tower Pop is a prototype of a multiplayer tower defence game that leverages k-nearest neighbour algorithm to assist players in making strategic decisions.


Having played many years of recreational chess and wanting to learn about networking protocols, I built TCP::Chess, a simple multiplayer chess game.

JobMine EZSearch

JobMine EZSearch is a web scrapping web app that downloads jobs from JobMine, UWaterloo's former co-op portal, and applies extra search filters to them to facilitate finding jobs. It also formats jobs into Word documents, displays analytics. and triggers JobMine's "Add to/Remove from shortlist" feature.

WaterlooWorks Productivity Suite

This is the humble successor of JobMine EZSearch. This is a set of scripts that downloads jobs from WaterlooWorks (current job portal), generates Word documents from them, and notifies users of new interviews.

Stock Simulator

Picked up the Boo programming language to experiment writing fluent interfaces and a DSL on the .NET framework.


Spodometer is an Android app that determines a device's distance and velocity by applying kinematics equations to accelerometer readings. It also uploads velocity and distance data to Google Drive and uses local storage to store user settings.


While experimenting with Unreal Engine 4's visual programming tool, Blueprint, I built Bouncer, a break-breaker-style game. Bouncer includes physics simulation and animations.

Speed Match

Speed Match is a stimulating speed game that times how quickly users can identify if two images are identical.


It turns out that graphing calculators can be programmed too! Animator is a series of animation programs built for the TI83/TI84 calculators. Animations include making a spiral, lines, diamonds, and writing 你好 (hello in Chinese).

Speed Match

To learn more about interpreting sensor data and using Android Studio, I built Easy Compass, a multilingual compass app for Android.


Thank you for visiting my website! This page is built with HTML/Bootstrap/Sass/jQuery. My blog uses Wordpress with MailChimp integration.

Memory Ultrapack

Released to the Windows Store six months after I wrote Console.WriteLine("Hello world!");, Memory Ultrapack was my first programming milestone.



  • Cool Things You Can Do With Python: 27-page e-book containing six starter Python projects, including a web scraper and a Word document generator. Introduces several concepts, including HTTP verbs and multithreading. Available on the Kindle Store.

Programming Articles


  • A Right Way to Use Inductive Reasoning: 5-page paper in "Pi in the Sky", a math magazine sponsored by the Pacific Institute for the Mathematical Sciences, that demonstrates how to find and prove with induction the formula that determines the maximum number of regions formed by an inscribed convex polygon and its intersecting diagonals


  • [CBC] University of Waterloo students want two-ply toilet paper on campus, student councillors say : Hahaha, this is kind of funny. As an elected student representative, I tend to focus on more important issues, such as legal services for students (eg, against predatory housing) and mental health initiatives, yet at the end of the day, it's my job to represent Engineering students on matters big and small! If students want it, let's have it!
  • [Imprint] The breakdown of the 2018 Co-op Education fee raise : Co-op opens many doors, but there are legitimate reasons for advocating against a fee raise that doesn't improve service, especially when many students report being treated unethically by co-op staff. The petition referenced in the article drew 3000+ supporters in 3 weeks, and received attention from the Board of Governors, Provost's Office, our Student Union, and two student newspapers. Although the petition failed to stop the 18/19 fee raise (3 abstentions, 1 objection), it's worth noting that 19/20 will not have a fee raise.

Let's chat!

Whether you're a recruiter or a student, a psychologist or a scuba diver, a writer or an engineer, I'm interested in exploring how we can work together to accomplish greater challenges.

If you would like to connect, please feel free to reach me at L43cheng@edu.uwaterloo.ca. (The reason there isn't a contact form is because forwarded emails from contact forms might be marked as spam and automatically placed in a Spam folder. If you're taking the time to reach out to me, I want to be sure that I could receive your email and followup with you.)