Hi, my name is Lenny

Languages: C/C++/C++11, Python, Java, C#, MATLAB, JavaScript, SQL
Embedded: yocto, uboot, embedded Linux distributions, kernel modules, EFR32 Gecko, MSP430, 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


I'm a Firmware Developer building SERDES solutions at Alphawave. Before joining the semiconductor industry, I developed software at IoT and Internet companies.

Having graduated from UWaterloo's Computer Engineering program, I had the opportunity to participate in 6 internships and work with several technologies, including ML infrastructure, compilers, video processing, cross-platform tooling, and web development.

If you would like to connect, please feel free to email me at L43cheng@uwaterloo.ca.

Let's chat!

Cheers,
Lenny

Work & Research Experience



Alphawave

Firmware Developer | Toronto, ON

Jan 2021 - present

Developing post-silicon software for 100+Gbps connectivity solutions.

Ecobee

Embedded Developer | Toronto, ON

July 2019 - Jan 2021

At Ecobee, I worked mostly with embedded Linux, networking tools, and a bit on the EFR32 Gecko MCU. This included hacking kernel code, writing user-space programs to control smart thermostats (eg, multi-speed fan controls), and playing with our build system.

Keywords: yocto, uboot, embedded Linux, Gecko EFR32, Micrium RTOS, networking tools, cross-platform development, Jenkins, custom UI toolkit, Python

LinkedIn

Software Engineering Intern | San Francisco Bay Area

Sept - Dec 2018

This internship focused on building ML infrastructure, including designing a module to inject plugins into an asynchronous 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.

Evertz Microsystems

Software Engineering Intern | Burlington, ON

Jan - Apr 2018

This internship was focused on video processing. This included implementing features using the open-source JM H.264 Reference Software, building a Python test framework to verify an H.264 encoder, writing an algorithm to compare distorted YUV videos, and validating MPEG TS used in ABR streaming.

UWaterloo Image & Vision Computing Lab

Undergraduate Research Assistant | Waterloo, ON

Sept - Dec 2017

Working as a 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, filtering pre-test data and analyzing post-test results.

OptumSoft

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. I worked on a Kalman-like algorithm that predicted the reliability of sensor readings, learned to use an in-house programming language, and wrote a test generator to validate our in-house compiler.

SMART Technologies

Software Engineering Intern | Calgary, AB

Sept - Dec 2016

The theme of this internship was to improve SMART Board© diagnostic tools on OS X and Windows computers. This included developing a cross-platform C++ API to change pen settings when pens touched a SMART Board and fixing cross-platform Qt bugs. Working with 4 other interns, we built an educational game with Node.js that demoed at the BETT 2017 trade show.

CIBC Capital Markets

Application Developer Intern | Toronto, ON

Jan - Apr 2016

This internship was focused on improving an ASP.NET MVC-based communication platform used by 10+ traders, which included building an instant messaging prototype with SignalR and Oracle, reducing performance bottlenecks by over 80%, and developing 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.

Fusebill

Software Developer Intern | Ottawa, ON

May - Aug 2015

My first internship was at a SaaS startup where I learned to use C#/ASP.NET MVC, JavaScript, SQL Server, and RESTful APIs.

Education



University of Waterloo

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 is an OOP language with a C-like syntax. It supports classes, inheritance, polymorphism, types, variables, and control blocks, and compiles to LLVM IR. Built with ANTLR, LLVM, and C++11.

SmartCam

SmartCam is a wifi-enabled camera that runs on embedded Linux. It's built with Yocto/Make and contains a bootloader, initramfs, SDK, and rootfs. I also dabbled with changing the DTB and played with kernel modules

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

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.

Swoosh

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.

ihaveastorytoshare.com

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

CompressIt

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.

TCP::Chess

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. It applies extra search filters, generates analytics, and has a "Add to/Remove from shortlist" feature. I actually used this to help find my 3rd internship!

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

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.

Bouncer

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. Built with Qt.

Animator

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.

www.lennycheng.com

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.


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

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.)