Hi, my name is Lenny
Languages: C/C++/C++11, Python, Java, C#, MATLAB, JavaScript, SQL, x86 Embedded: yocto, uboot, embedded Linux distributions, kernel modules, EFR32 Gecko, Micrium RTOS Networking: C sockets, wpa_supplicant, TCP/IP, Wireshark, tcpdump, nc Other: Qt, LLVM, ANTLR, Jenkins, Node, ASP.NET MVC, MongoDB, SQL Server, Docker, matplotlib, scikit-learn, Git If you would like to connect, please feel free to email me at L43cheng@edu.uwaterloo.ca.
I'm an Embedded Developer currently working at Ecobee. My goal is to build innovative products that solve real problems!
I graduated from UWaterloo's Computer Engineering program in 2019. Through the co-op program, I had the opportunity to work with several technologies, including ML infrastructure, compilers, video compression, cross-platform tooling, and web development.
As the saying goes, learning doesn't stop after formal education. To strengthen my technical and communication skills outside of work, I've built a LLVM-compatible compiler, a wifi-enabled camera on embedded Linux, and wrote blog articles.
I look forward to discussing how we can collaborate together.
Cheers,
Lenny
Work & Research Experience
Embedded Developer | Toronto, ON
July 2019 - present
Super excited contributing to the smart-home industry!
Keywords: yocto, uboot, embedded Linux, Gecko EFR32, Micrium RTOS, cross-platform development, GDB, binutils, networking tools, Jenkins, custom UI toolkit
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.
Software Engineering Intern | Burlington, ON
Jan - Apr 2018
This internship was focused on video compression technologies, especially the H.264 codec and MPEG Transport Streams. I implemented features using the open-source JM H.264 Reference Software in C, built a Python test framework, and wrote an algorithm to compare 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 assisted in evaluating the perceptual uniformity of the ICtCp colour space by implementing a subjective testing program with the Blackmagic DeckLink SDK and a UHD Reference Monitor, filtering pre-test data and analyzing post-test results.
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 that predicted the reliability of sensor readings and used C++/TACC, our in-house distributed language. 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.
Software Engineering Intern | Calgary, AB
Sept - Dec 2016
At SMART, 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. Working with 4 other interns, we built an educational game with Node.js that was demoed at the BETT 2017 trade show.
Canadian Imperial Bank of Commerce (CIBC)
Application Developer Intern | 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 also wrote a 20-page report suggesting future improvements for the communication platform.
Software Developer Intern | 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.
Education
Computer Engineering | Bachelor of Applied Science - BASc.
Sept 2014 - June 2019
Eight academic terms, six internships, and countless cups of coffee later,
I graduated from UWaterloo with a BASc. in Computer Engineering. It was fun learning about software and hardware development.
Selected Courses: Image Processing, Autonomous Vehicles, Adaptive Algorithms, Computational Intelligence,
Operating Systems, Compilers, Security, Networks, Database Systems, Leadership and Influence, Personality Psychology
Technical Projects

Bluefin Compiler
Bluefin Compiler

SmartCam
SmartCam

Musical Words
Musical Words

Pioneer Doctrina
Pioneer Doctrina

WebServio
WebServio

Surveillance Tools
Surveillance Tools

Swoosh
Swoosh

ihaveastorytoshare.com
ihaveastorytoshare.com

CompressIt
CompressIt

Tower Pop
Tower Pop

TCP::Chess
TCP::Chess

JobMine EZSearch
JobMine EZSearch

WaterlooWorks Productivity Suite
WaterlooWorks Productivity Suite

Stock Simulator
Stock Simulator

Spodometer
Spodometer

Bouncer
Bouncer

Speed Match
Speed Match

Animator
Animator

Easy Compass
Speed Match

lennycheng.com
www.lennycheng.com

Memory Ultrapack
Memory Ultrapack
Console.WriteLine("Hello world!");
, Memory Ultrapack was my first programming milestone.
Media
E-book
- 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
- Implementing Observer Pattern with Events (C#): uses event objects to implement the Observer Pattern
- Making GET Requests in Python - Tutorial: introduces Chrome DevTools,
urllib
andBeautifulSoup
to make GET requests from www.codeproject.com - Creating Forms in ASP.NET MVC 5: examines 4 synchronous and asynchronous ways to pass data between the client and the server
- Beginning TI-BASIC: Using Your TI-83/TI-84 to Solve Math Problems: shows how to program a graphing calculator to solve algebraic and geometric problems
Publication
- 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
News
- [CBC] University of Waterloo students want two-ply toilet paper on campus, student councillors say : This is kind of funny. As elected student representatives, we usually advocate for more important issues on campus, such as legal service support (eg, against predatory housing), student outreach programs, and mental health initiatives. With that said, 1-ply toilet paper is quite unpleasant and students had enough of it ;p
- [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 didn't stop the 18/19 co-op fee raise (3 Governors abstained and 1 objected to the fee raise!), the University decided not to increase co-op fees for 19/20, the first no-increase in many years.
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.)