But not just any software.

I build things that make other people's lives easier, simpler, and more efficient.



Resume

Here's some of my work:

WatAreMyClasses

Every year, new students come to university, and without fail, wind up hopelessly lost. Visitors need constant signs and volunteer help to get to where they're going.
WatAreMyClasses is an innovative app that allows first-years and visitors to the University of Waterloo to navigate to any building from any point on campus. WAC also keeps track of student's schedules, so that students can navigate to their next class with just one tap. I developed the frontends of this app, designed the backend architecture, and wrote lots of the backend with help from another first-year student. WAC is a native app on both iOS and Android, and has an accompanying web interface.
WatAreMyClasses currently has over 300 users.

InTheFridge

InTheFridge was an Android app built for university dorms and family homes alike. It lets users keep track of what items are in their fridge, their expiry date, and who purchased and used them. It also keeps a shared grocery list so that everyone in a dorm knows what's needed when they go shopping. InTheFridge also presents users recipes based on what they already have available.

IntelliSwitch

IntelliSwitch is a different take on home automation. Instead of forcing you to buy bulky boxes that you stick on your outlets, and control with your phone, IntelliSwitch goes inside the conduit boxes, behind your existing outlets and switches. It presents an incredibly easy-to-use editor to allow you to make changes to the perceived wiring of your house. If you've got a light fixture that you always wanted a 3-way switch for, it can be done in seconds. If you want your bedroom fan to turn on whenever it's going to be hot in the evening, it takes less than a second. IntelliSwitch focuses on software-defined wiring, and allows you to have unprecedented control over the same fixtures and switches that you already own Sound too good to be true? It gets better. Retail units will sell for $3 or less each.

IntelliSwitch is a product that I'm actively developing for eventual market.

D2LPeel

D2LPeel allowed students in the Peel school board access their class sites. For a year, students needed to sign on to a terribly optimized site which didn't even load on most devices. I built an app to interact with the site and provide dates from the class calendar (which could be added to the device calendar), viewable, savable and sharable PDFs of posted lessons and announcements.

PCSS Coding Site

Me and a group of friends started a coding club. One problem: Organization, collection, and marking coding projects. After trying it for one challenge, I started working on a better solution. This site was the result. It allows us to post new challenges, as well as specify a series of marking criteria (weighting/difficulty, and a series of input/output scenarios). The backend then compiles user submitted code, and runs it against the challenges. User's scores go up onto a scoreboard. This project also involved a significant amount of distributed computing. The site was built to scale to well over 1000 users. AppEngine made the frontend easy, but the backend was being run on 2008-era Celerons (throwaways from computer labs). I built a cluser-based solution using PXE, WOL, Docker, and Redis that would allow the site to instantly scale up computing resources, and scale down to conserve power when it wasn't needed. The site was load-tested with 1000 solutions being posted per hour without issue.

CryptoSMS

CryptoSMS allows users to send encrypted SMS messages to other users of the app. It was built to be used in environments where data use was unavailable or prohibitively expensive. It does key-exchange, as well as message transfer using the SMS network, never over a data network.

But that's just the start.

Employment

Milq: Spring 2016 Work Term

Milq is a social media startup trying to redefine how people connect around the culture they love.

What I did: I worked as an Android developer, and was the primary developer on the Android app for my 4-month term. For the first month, I was making improvements to the existing app. This included lots of usability features (full-screen media player, adding transitions, etc), lots of performance improvements, and integrating the app with the Android system (share-to-app, links open in app, other audio players pausing). I was also responsible for bringing the Android app up to feature parity with the company's iOS app (including many major features). My extensive previous experience with the Android framework allowed me to be very productive in the limited time I had.

The rest of my time at Milq was spend rapidly prototyping a brand-new direction for Milq. I was responsible for building our latest ideas for new features or UI changes. My ability to produce quality code quickly meant that Android remained the place to try new things. Being able to implement and try out features with a turnaround time of under a day allowed us to quickly discover issues with our ideas and try new things with low risk.

At Milq, I earned the co-op rank of outstanding.

What I learned: My term at Milq was my first time working with a team of other programmers all coming together to work on one overall product across many different technologies and platforms. Over the course of the term I learned about how to quickly get up to speed with a large existing codebase - I implemented my first feature on the first day! I also learned a lot about staying flexible and ready to change things. As part of the prototyping process, many features would only stay in the app for a day or two. Building the app in a flexible, extensable way made that very easy to do.

MagmaStone: 2012-2015

For the past 3 summers, I've worked as a freelancer under my company: MagmaStone. I've built everything from litle web scrapers to a lead-management platform that has since become business-critical. I focus on exceeding specifications, prompt and professional communication, and efficient and timely delivery of projects.

Starting MagmaStone and working as a freelancer has led to me developing excellent communication skills. When dealing with clients who don't have much technical knowledge, it takes a significant amount of skill to figure out exactly what they're expecting. Freelancing has also taught me important lessons about building software: always expects specs to change, and write code and unit tests that you'll be able to maintain in a few years.

Education

  • 2011-2015: Port Credit Secondary School. Obtained OSSD.
    • Stage Crew: I trained, organized, and managed the student crew of the PCSS Auditorium. I developed strong leadership skills, as well as conflict resolution. Communication with presenters and staff members was a part of daily life at PC in this role. It also taught me the importance of bullet-proofing everything that someone else is able to touch.
    • PCSS Coding Club: Some friends and I started a coding club at PCSS. We had roughly 20 members, and published 2-3 challenges a week. This was another opportunity for me to develop leadership skills.
  • 2015-Present: University of Waterloo, Software Engineering. Expect to graduate in 2020 with a Bachelor of Software Engineering
    • WatSat: I'm currently working on the Command and Data Handling subteam on the WatSat design team. We're constructing a satellite that can be used to measure the change in arctic ice using GPS reflections. I'm personally working to build the main computer module and software to power the entire satellite.

Projects

I've worked on dozens of projects over my decade of making, but here are some of the coolest and most fun ones to work on.

  • Homebrew DVR.

    Years ago, I built my first DVR using MythTV, a $20 tuner card from EBay, and an antenna made out of a coathanger. Since then, I've built better and better antennae, increased the tuner count from 1 to 4, and built my own management scripts. This DVR now automatically records my favourite shows, strips commercials from them, distributes transcoding across all my computers, and re-organizes them into something that Plex (a media library manager) can understand. The result is a library of all of my favourite TV shows in perfect HD, without any work on my part. This project has lasted for years and years, and I still continuously make improvements.

  • HDHomeWeb.

    I built HDHomeWeb to allow me to stream live TV from SiliconDust's HDHomeRun devices (Ethernet enabled TV tuners). I built a system using Python that would connect to the tuner, start streaming any channel that the user chooses, transcode it into something the device can handle, and stream it. The result was live-tv across all iOS and Android devices, as well as the ability to Chromecast (show on TV) live TV. This was among the first projects able to stream live TV to the Chromecast, and the first project to allow HTTP live streaming from HDHomeRuns.

    HDHomeWeb has at least 20 daily users, and many more that use the project on occasion.

  • Pebble Apps.

    One of my hobbies is building community-requested watchfaces for Pebble (a digital, e-paper smartwatch). I've built three watchfaces with reasonably-successful adoption (100+ active users). I've also taken advantage of it's power in building apps for it. I built an app that let you see the next bus times for the closest stops around you, and another app that allowed users to log into their Google account with a rotating PIN displayed on their wrist (Google Authenticator).

  • USB->DMX adapters.

    In preparation for a Christmas talent show at my school, we needed to use a significant amount of special-effect lighting. This was simply not possible with the 80s-era light board we had. I built an adapter that allowed me to connect my laptop to the auditorium's lighting control system to control and choreograph all of the lights and special effects. The adapters started with simple logic gates, and eventually expanded to microcontroller-controlled, optically isolated units. The units are able to be produced for less than $10 each, which is a massive difference from the $100+ of competing commercial units.

    These units have over 10 active users around the world.

  • Distributed Transcoding.

    As demonstrated with my PCSS Coding Club site, I really like the power of distributed computing. I built a script able to process terabytes of media, and allow all of it to be transcoded into one normalized format with ease. The script is able to make use of all available computers on a network (with simple client software installed), at speeds usually reserved for high-end systems.
    This script has quite a few active users, and has processed an estimated 40TB of media.

Skills

MagmaStone, my personal projects, and my own research has led to me developing numerous skills. These are listed in no particular order.

  • Linux usage and automation.

    I use Linux as my daily driver operating system, as well as my server-side development target. I'm very familiar with RedHat/CentOS, and Arch Linux.

  • Linux/Lighttpd/MySQL/PHP stack.

    My preferred quick-build stack. I've built more projects than I can count using this platform. I've even taught a Grade 11 CS class PHP and MySQL.

  • Python.

    I use Python for most of my small applications, and things that need to be highly portable, but with a fast turnaround. I also built the backend for the PCSS Coding Club, IntelliSwitch, and WatAreMyClasses with Python. I've also built much smaller apps and scripts.

  • C.

    C is my preferred language for apps that serve a small, single purpose, or need to process a lot of data in very little time. Experimentally, I've also used C to build games using the SDL framework.

  • Java.

    I use Java for everything from Android apps to large Google App Engine frontends. I built the frontend of the PCSS Coding Club using Java, as well as numerous other App Engine projects. I've also used Java for several years to develop Android apps. CryptoSMS, InTheFridge, and more have been written with Java.

  • Objective-C.

    I use Objective-C for native iOS apps and Mac applications. I've built small apps like Trakr (GPS position tracking with one button) and LibertyStockAlert(stock price and news alerts for a company), but also larger apps like D2LPeel.

  • AVR.

    I also have a reasonable amount of hardware experience from experimenting with hobby electronics. This has made me very capable of writing code for embedded systems, as well as writing code capable of running on platforms with next-to-no resources.

I feel comfortable using nearly any language after a day or so of learning. The languages listed here are simply the ones that I use on a day-to-day basis.