Joel May - Portfolio

Com S 309 - MAC


This was a group project developed by four students. It is a web server, framework, and TLS server built with extremely minimal dependencies. We designed the project to be modular, so each person could take a section. I built the backend server in C++ with CGI to interact with the framework. We integrated TLS (built by a group member) by extending a standard C++ class.

In doing this project, I refined and expanded my C++ skills, I learned more about the C++ standard library, and I became more familiar with the C network API. I faced many challenges involving streams and data transmission. Obviously, I had to read and write to the network, but I had to do so in a fault tolerant way. I also had to interact with executing a new process and reading and writing to its standard IO. These skills were very beneficial to my summer internship at HP.

To accomplish this project, I relied heavily on RFC 2616 (HTTP/1.1), the C manpages, C++ online documentation, and StackOverflow. The RFC was used to make my implementation compliant to the standards. The language manpages and documentation were for knowing how to interact with the standard libraries. StackOverflow provided supplemental information to specific language questions.

The end product is a command line application that used a YAML configuration file to serve files and CGI though HTTP and HTTPS.

Com S 327 - WAV Effects


This project was a one week project. I took on the task of learning how to work with a binary file format. Despite having the option to take shortcuts to hard code certain assumptions, I designed the project to deal with most of the WAV specification. This project lead to the use of a union to deal with sound samples taking variable widths based on the metadata. I had to become familiar with the WAV specifications and all the possible options. While implementing the project, I was careful to plan for failures and used valgrind to help validate that I didn’t make mistakes in memory access or cleanup.

To accomplish this project, I relied primarily on McGill University's Audio File Format Specifications for a description of the WAVE binary format.

Then end product is a command line application that can do certain modifications to WAV files.

Cpr E 288 - Robot Rover


This was a group project of developed by four students. It was a final project based on techniques we had practiced as pairs in previous labs. The goal was to get an iRobot (like a Roomba) with various sensors to navigate to a marked goal. We separated ourselves into certain sub-tasks. Much of our code was written by us earlier in the class, and we could drop in modules to abstract some complexity of hardware interaction. My sub-task was to make the iRobot autonomously find the goal. I learned how to debug embedded applications and identify the symptoms of the stack colliding with the heap. I learned how to build a “large” application under the embedded constraints of the system of CPU and RAM. Through that I was able to create a rudimentary algorithm to explore the arena and find a goal.

This project required very few outside resources and research. I consulted the spec sheets of the hardware often, but the coding techniques were simple. The project was an exercise in controlling hardware, and it avoided requiring new or unfamiliar coding concepts.

The end product was firmware that ran on the specific hardware configuration we had in the lab.

Cpr E 281 - Alarm Clock


This project is outside of my primary skillset of being a software engineer, but it showcases my engineering and problem-solving skills. The project is a 12-hour AM/PM alarm clock, built on an FPGA (it sounds trivial, but it was quite complex to build, and the TA was very impressed). This project required layers of abstraction with much component reuse. There are many basic building blocks that I had to design and package to be used in many places elsewhere. This allowed easy understanding at every level of design. This project was based on a lot of digital logic problem solving (and truth tables). Most programming is done sequentially, but digital logic is all concurrent. That required a different mindset for problem solving. This project expanded my experience and allows me to relate better to chip designers (which I have interacted with at my internship). It also gave me visibility into how the hardware that I code for operates.

This project required using knowledge I had gained throughout the semester in one integrated project. I required no external resources outside of my previous work in labs.

The end product is a schematic for an FPGA on a development board with buttons and a seven-segment display.

©2017 Joel May