Last updated January, 2010. Click here for the 1997 version

I live in Waterloo, Ontario, and work at a large technology company in the area. In my free time, I enjoy learning about computer science and creating interesting web applications.


You can email me at


I have a Masters of Computer Science, part time, at the University of Waterloo. I had originally planned to write a thesis. But I also have a job. The likelihood of the thesis is inversely proportional to present income. In the end, I took an extra course to fullfill the requirements.

Here's some papers I wrote for classes:

  • A Lightweight Window Wrapper - This article was published in the August, 2000 issue of C/C++ User's Journal. It describes how to write the simplest possible object-oriented wrapper for Windows. The magazine paid me $200. In retrospect, I should have been more verbose.

Other pages

Pages of others

  • Matthias Wandel If you go to this web site, you will quickly become "stuck" on it and lose all track of time.

Past Interests

Here's a list of stuff that I've worked on:

  • Natural Language Processing - I implemented a technique for automatically deriving the pronunciation of words, so I used it to create
  • Wavelets - Right now I'm obsessed with wavelets and their potential use in audio processing. See my web page on Wavelet sound Explorer


I used to dream of being a composer of film scores. I enjoy the music of John Williams, and Danny Elfman, and Cliff Eidelman's work on Star Trek VI. Unfortunately I don't have the patience to learn to play an instrument, I got up to Grade 4 piano before I stopped. Here's some music that I composed using Cakewalk music software.


I drew a comic strip for Imprint, the University of Waterloo student newspaper. After I got a job at Research in Motion, I continued it there for a while. All strips are archived here


Budgie-Zilla! Over a decade ago, I made a web page once called Budgie-Zilla. There are pictures of gigantic birds destroying landmarks. Apparently it's a part of budgie pop-culture now. The site is mentioned in a book about trademark law, and it has inspired a youtube video.


  • Corel Corporation, Winter and Fall 1999
    On the Text Engines team, I fixed bugs in the text formatter, and added several new features. You can drag text on a path away from the path because of me.
  •, Summer 2000, Winter 2001 (waybackmachine link) was making a phone portal, so you could call up a computer and it would tell you what movies were playing. I made the framework for a voice recognition server.
  • Soma Networks, Fall 2001
    Soma was making a box that would sit on your desk and give you your phone and internet connection wirelessly. I added the ability to play DTMF tones over the G729 voice codec, by pre-coding them using the reference G729 implmentation from standards. I also fixed a bug in the RTP protocol.
  • Microsoft, Summer 2002
    As part of the Windows Networking team, I made a Layered Service Provider that overrides the winsock functions to make an IPv6 connection look like IPv4. I don't think it was fully working when I left, and it was probably scrapped. But the chocolate milk was free, I got to do a lot of hiking!
  • Research in Motion, Sept. 2003 to 2010
    In my first full time position, I created large chunks of the EDGE and UMA protocol stack.

Other posts by Steve

Finding Bieber: On removing duplicates from a set of documents Let's read a Truetype font file from scratch A Quick Measure of Sortedness My thoughts on various programming languages A little VIM hacking The strange man reading a novel in the meeting room You can cheat so your web site seems faster than it is Yes, You Absolutely Might Possibly Need an EIN to Sell Software to the US Asana's shocking pricing practices, and how you can get away with it too 5 Ways PowToon Made Me Want to Buy Their Software How I run my business selling software to Americans 0, 1, Many, a Zillion Give your Commodore 64 new life with an SD card reader 20 lines of code that will beat A/B testing every time [comic] Appreciation of xkcd comics vs. technical ability VP trees: A data structure for finding stuff fast Why you should go to the Business of Software Conference Next Year Four ways of handling asynchronous operations in node.js Type-checked CoffeeScript with jzbuild Zero load time file formats Finding the top K items in a list efficiently An instant rhyming dictionary for any web site Succinct Data Structures: Cramming 80,000 words into a Javascript file. Throw away the keys: Easy, Minimal Perfect Hashing Why don't web browsers do this? Fun with Colour Difference Compressing dictionaries with a DAWG Fast and Easy Levenshtein distance using a Trie The Curious Complexity of Being Turned On Cross-domain communication the HTML5 way Five essential steps to prepare for your next programming interview Minimal usable Ubuntu with one command Finding awesome developers in programming interviews Compress your JSON with automatic type extraction JZBUILD - An Easy Javascript Build System "Your program is stupid. It doesn't work," my wife told me The simple and obvious way to walk through a graph Asking users for steps to reproduce bugs, and other dumb ideas Creating portable binaries on Linux Bending over: How to sell your software to large companies Regular Expression Matching can be Ugly and Slow C++: A language for next generation web apps qb.js: An implementation of QBASIC in Javascript Zwibbler: A simple drawing program using Javascript and Canvas You don't need a project/solution to use the VC++ debugger Boring Date (comic) barcamp (comic) How IE <canvas> tag emulation works I didn't know you could mix and match (comic) Sign here (comic) It's a dirty job... (comic) The PenIsland Problem: Text-to-speech for domain names Pitching to VCs #2 (comic) Building a better rhyming dictionary Does Android team with eccentric geeks? (comic) Comment spam defeated at last Pitching to VCs (comic) How QBASIC almost got me killed Blame the extensions (comic) How to run a linux based home web server Microsoft's generosity knows no end for a year (comic) Using the Acer Aspire One as a web server When programmers design web sites (comic) Finding great ideas for your startup Game Theory, Salary Negotiation, and Programmers Coding tips they don't teach you in school When a reporter mangles your elevator pitch Test Driven Development without Tears Drawing Graphs with Physics Keeping Abreast of Pornographic Research in Computer Science Exploiting perceptual colour difference for edge detection Experiment: Deleting a post from the Internet Is 2009 the year of Linux malware? Email Etiquette How a programmer reads your resume (comic) How wide should you make your web page? Usability Nightmare: Xfce Settings Manager cairo blur image surface Automatically remove wordiness from your writing Why Perforce is more scalable than Git Optimizing Ubuntu to run from a USB key or SD card UMA Questions Answered See sound without drugs Stock Picking using Python scam Copy a cairo surface to the windows clipboard Simulating freehand drawing with Cairo Free, Raw Stock Data Why are all my lines fuzzy in cairo? A simple command line calculator Tool for Creating UML Sequence Diagrams Exploring sound with Wavelets UMA and free long distance UMA's dirty secrets Installing the Latest Debian on an Ancient Laptop Experiments in making money online Draw waveforms and hear them Cell Phones on Airplanes Detecting C++ memory leaks What does your phone number spell? A Rhyming Engine Rules for Effective C++ Cell Phone Secrets