I'm a software developer working at Tulip and a recent graduate of the University of Guelph. I have created and contributed to a few free/libre open source side projects.
I try to keep this website up to date with my latest work, projects, and ways to contact me.
Projects
Page with a list of my latest projects, source can be found on Github.
I bought a custom ALU68 Canadian mechanical keyboard and wanted to flash it with my specific keymapping. There was not an addition for the board in QMK, so I made the keymap code for it. I'll soon create a pull request with the main QMK project.
Noctilus started as a project for me to learn from the very start a simple PHP7, Bootstrap 4 and other technology full stack. It was a fun summer project in 2016, and gave me more insight into setting up a server with TLS on AWS with a stack of modern technologies.
While working on my portable video game framework (soonTM), I needed to implement color shimmering, such as white to red, or a rainbow of colors moving from one end of the spectrum to the other. There were many libraries available on Github but not many in pure C without any bloat, and it gave me the opportunity to learn about color conversion.
I started this project mainly to convert from RGB to HSV so I could easily traverse Hue to get 360° to have a shimmering rainbow color. I also needed saturation in order to get a white to X Color shimmer. Almost all of the libraries I looked at used the Wikipedia article to get the formulas for conversion. I looked into the sources used in the Wiki, and found they seemed to taken from "Color Space Conversions" by Adrian Ford and Alan Roberts. I ended up using this paper to write my C library and found a minor error in the paper and corrected it here in color.c
Overall it was interesting to read an academic paper and implement the formulas given, and even find an error and correct it. Along with the audio library written below, my game framework is coming to fruition and it may be the next project you see here.
While working on my next RPG style game, I needed to implement audio in SDL2. The most recommended method is to use SDL_Mixer, but that library adds a ton of features I didn't need, and added more complexity to cross-platform compilability. While browsing the web, I didn't find many solutions, the closest thing to a simple one file audio library was this gist. This solution wasn't very generic, couldn't mix multiple audio sources, and used deprecated functions. This led me to spend time developing a simple, compatible, and modernized library solution.
This library is simply just two files you include in your project, licensed under Apache2.0 License, and anyone is free to use it how they like if that falls under the terms of the license. There is a simple test.c file with an example of how to load music and sounds and how easy the library is to use. With SDL2 you can make any sort of desktop application from a video game to a media player to anything else, and my hope with the release of this code as FLOSS is that it allows others to benifit from the research I did in trying to implement native SDL2 audio.
uMinimal is a lightweight web application that displays videos in a clean way without use of any APIs. The web application is written in PHP, HTML5, CSS3, and native JavaScript and it leverages MySQL relational database management software as well as PHP-cURL, and PHP-MySQL.
The purpose of this project was to fix my issues with JavaScript video players as a whole, and video user interfaces. To resolve these issues uMinimal only shows the videos you want, and has a dynamic JS video player which you can drag around, resize, maximize, or minimize.
The way uMinimal works is that it builds a simple webpage (single-page site) by scraping webpages, such as youtube channels. All options are stored via cookies, not server-side, such as sort order, or watched videos (such that uMinimal won't display already watched videos if you request it.) Databasing happens in the dynamic/datastore.php, webpage scraping happens in dynamic/scraper.php. Main logic for building the webpage happens in body.php, and lastly the dynamic JavaScript player and related functions are stored in minimal.js.
The entire project is probably no more than 1500 lines of code, and is fairly efficient, making use of cURL multi interface for pseudo-threaded cURL requests. The parsing happens entirely through regex for a couple of reasons. I initially used the many PHP-DOM readers, parsers, and viewers, and they all sort of failed in a number of ways, such as when given imperfect HTML. The regex I wrote is theoretically O(n), whereas the parsers without their flaws would be O(1) which isn't that large of a gap for the small amount of logic uMinimal does each page load. The regex library is platform independant and doesn't require any extra installation. For comparison, the cURL requests take about 95% of runtime, so for optimization reasons the regex is not that much of a concern.
This project is an implementation of the Continued Massive Network Game Object Server, which is an emulation software that has a long installation guide.
The reason I started this project was because the default installation guide is incomplete, and doesn't really give a specific, copy paste implementation that I wanted. So the guide itself leverages an Amazon Web Services EC2 server instance running Ubuntu Server 14.04 and fixes all the holes in the default guide.
The project is a simple desktop video game written in GNU C11 and Make, leveraging SDL2 media library. It compiles on GNU/Linux, Windows and OS X. The game itself is a top-down shooter, asteroids-like video game. I made this as an introduction to SDL2 for myself as I am now working on another, larger project.
The linked webpage is a reflection on my 2017 Winter work term at Tulip as a Full Stack Web Developer. Included in my fourth work term report is an overview of Tulip, a description of my job, my goals, and what I took away from from my experience.
This webpage is a reflection on my 2016 Summer work term at Symcor as a Full Stack Web Developer. Included in my third work term report is an overview of Symcor, a description of my job, my goals, and what I took away from my experience.
This webpage is a reflection on my 2015 Fall work term at Adknown as a Web Application Developer. Included in my second work term report is an overview of life at Adknown, a description of my job, my goals, and what I got out of it.
This webpage is a reflection on my summer 2015 work term at Dainty Foods in Windsor as a software developer. This webpage includes an introduction to my work, my learning goals, the company, and what I got out of my work term.
I have recently completed a Bachelor of Computing with a major in Software Engineering (Co-op) at the University of Guelph, in Guelph Ontario Canada. I have a background in full stack web development and system administration with platform-independant desktop applications as an area of interest.
I recently signed a full-time employment with Tulip, which is an iOS mobile platform built exclusively for next generation retail store associates to offer a world-class omnichannel experience. I am a part of the Innovations team, technically leading partnerships and cutting edge products.
Resume
My Resume can be viewed on Github or inline below:
Contact
If you are interested in working on a project together, or want to get a hold of me: