Peter Dye

Professional Software Developer

About Me

Hello! My name is Peter and I am a Professional Software Developer interested in all areas of software development.

I program in C#, Python, and JavaScript.

I recently graduated from the University of Waterloo where I studied Electrical Engineering with an Option in Computer Engineering. Now I am working as a Software Developer with Brock Solutions developing AutoCAD automation tools.

I have experience and interests in a whole variety of areas! Including:

  • Linux and open source software
  • Web development
  • Machine learning and advanced algorithms
  • Relational databases and SQL
  • Git and GitHub
  • Learning new langauges; I learned Rust for parallel programming

I have good communication skills that have been proven many times. I have had outstanding results on technical reports and presentations, and even won an award for the quality of writing in one of my reports! You can see some writing examples in guides I posted for my projects on GitHub. I’ve also successfully lead some school and work teams.

Some courses that I have really enjoyed (and done well in) are:

  • Operating Systems and Systems Programming
  • Compilers
  • Database Systems
  • Robot Dynamics and Control
  • Computer Security
  • Cooperative and Adaptive Algorithms
  • Fundamentals of Computational Intelligence
  • Programming for Performance

Projects

ButtBot

An autonomous cigarette butt collection and disposal robot.

ButtBot is an autonomous ground vehicle that drives around a given space and uses computer vision to identify and collect cigarette butts. The brain of the robot is a Linux based NVIDIA Jetson Nano. The smarts of the robot are written in Python and make use of many popular libraries. For the computer vision and deep learning we use OpenCV, TensorFlow, and Keras. The project also makes use of multithreading and multiprocessing to manage and coordinate the different functions of the robot. This was my fourth-year capstone project that I worked on with 4 of my peers, with myself and one other project member taking responsibility for all the software componenets.

Calculux

Calculator Delux, the most convenient desktop calculator app for engineers.

Calculux is a desktop calculator app I developed becuase existing apps did not provide the features that I wanted. Calculux allows you to access every single button on the calculator using only the numpad, Alt modifier, and the Control (Windows) or Command (MacOS) modifier keys. This eliminates slow and clumsy mouse movements. Calculux also implements math capabilities that most other off-the-shelf calculator apps don’t, such as complex number calculations. I developed Calculux in Python, and used PyQt5 to develop the graphical interface with the Qt framework. I used the fman build system to package the application and make installers for both Windows and MacOS. I learned a lot about desktop application development from this project, especially regarding packaging and distributing apps. I released Calculux as an open source project under the GNU GPL v3.

Pong

Online mutliplayer implementation of the classic arcade game Pong.

I built pong because I wanted to experiment with developing a real-time cloud-based multiplayer game that is playable over the internet. In pong, anyone can create a game and send the code to their friend so they can join and battle it out… 70’s style! I developed pong with JavaScript, using React for the frontend and Node.js for the backend. The content is served with Express and the real-time communication is implemented with Socket.io. Pong runs on an Azure server and is available for anyone to play. Checkout the GitHub link above to read more about the architecture and see the guide that I made or how to setup an Azure server to run the game.

PD40 Keyboard

My 40% ortholinear low profile keyboard that I designed and built.

The PD40 is a bluetooth keyboard that I designed and built from scratch. It is a handwired 40% ortholinear layout, and it uses Kailh Choc switches for a low profile (specifically linear red switches if you were wondering). The keyboard runs on an Adafruit Feather 32u4, and uses the QMK firmware written in C. This keyboard is highly optimized for writing code because it makes all the normal syntax characters available with minimal finger movement. I used FreeCAD to design and 3D print the top and bottom of the case. The switches are all handwired, which means I had to solder the diodes and wires to each switch individually to make the matrix. The QMK firmware is specifically designed for computer input devices, so all I had to do here was write the configuration code for a new keyboard implementation. I was new to the keyboard hobby when I built this so I wrote a detailed guide on how to build the PD40, which you can find in the GitHub repository.

Open Source Contributions

I really like the ideals of the open source community and I try to use open source software as much as I can in my work and personal life. My open source contributions thus far have been to improve documentation for software that I was using.

  • Clarity and code example corrections to the .NET API docs.
  • Grammar/clarity contribution to SciKit-learn docs.
  • Miscellaneous fixes to course content for my university Programming for Performance course.

Experience

Brock Solutions

Software Developer

May 2021 - Present

brocksolutions.com

Brock Solutions is an engineering solutions and professional services company specializing in the design, build and implementation of real-time solutions for broad based industrial/manufacturing and transportation/logistics organizations globally.

  • Reduced AutoCAD drafting time by developing sophisticated automation tools in C# to generate 60% of required drawings.
  • Increased software insights by starting initiative to add logging to new and existing automation tools using Serilog.
  • Ensured software quality with unit tests in NUnit and utilized dependency injection with Unity for a testable architecture.
  • Improved execution time of drawing cross-referencing software by 90% through profiler guided optimizations.
  • Refactored existing code base organization to match C# and .NET best practices.
  • Developed N-ary tree node reduction algorithm given leaf nodes with unordered known ancestors.

Tidal Medical

Software Lead (Co-op)

Sept 2020 - Dec 2020

tidalmedical.com

Tidal Medical is a dynamic new startup in the medical imaging technology field.

  • Architected multithreaded Python application to reconstruct, record, and view medical images at 13 frames/second.
    • Used Qt through PyQt5, and pyqtgraph, as well as Cython for real time images.
  • Successfully lead 3-person software team in developing the first prototype of a medical imaging system.
  • Modelled advanced image reconstruction algorithms in MATLAB/Octave.
  • Developed fast embedded system communications between Python application and a FPGA using the SPI protocol.

Brock Solutions

Controls Engineering (Co-op)

Sept - Dec 2019

brocksolutions.com

Brock Solutions is an engineering solutions and professional services company specializing in the design, build and implementation of real-time solutions for broad based industrial/manufacturing and transportation/logistics organizations globally.

  • Significantly decreased PLC tag generation time by developing Python script to automate the process.
  • Learned about the whole software development cycle for PLCs.
  • Performed QA and controls systems validation with PICS and AutoMod simulation programs.
  • Gained lots of experience programming with Ladder Logic to solve a variety of controls problems.
  • Implemented controls solutions using inter-PLC communication and redundant PLC systems.

Smith + Andersen

Junior Electrical Designer (Co-op)

Jan - Apr 2019

smithandandersen.com

Smith + Andersen is a trusted Canadian mechanical and electrical consultanting engineering firm, reaching new levels of engineering and design excellence in the communications, security, and audiovisual fields.

  • Improved communication techniques to manage competing deadlines through upwards management.
  • Deepened experience in electrical system design techniques, as well as in the consulting industry as a whole.
  • Performed site visits to map existing conditions and investigate design solutions.
  • Expanded and improved on skills gained from working at Stantec.

Stantec

Electrical Design Assistant (Co-op)

May - Aug 2018

stantec.com

Designers, engineers, scientists, and project managers, innovating together at the intersection of community, creativity, and client relationships. Designing with community in mind.

  • Developed feeder size calculator in Excel to increase efficiency of feeder sizing by 80%.
  • Experience working on new construction and tenant fit-out for office, retail, warehouse, hospitals and airports.
  • Designed building systems such as power, lighting, fire alarm and security in accordance with the OESC, OBC, and NFC.
  • Well versed in modelling building electrical systems using Revit and AutoCAD.
  • Coordinated with architects, interior designers, mechanical, and structural teams for seamless design.

Engineering Student (Co-op)

Jan - Apr & Sept - Dec 2018

navcanada.ca

Canada's Air Navigation Service Provider, keeping airplanes safe from coast to coast.

  • Developed a local network data logger for weather sensors by using PHP and MySQL running on a Raspberry Pi server.
  • Developed a JavaScript algorithm to graph data gathered from a precipitation sensor over a specified period.
  • Created and modified technical schematics in AutoCAD while adhering to company standards.
  • Designed a power supply to be integrated into an existing system.
  • Authored technical documentation for installation and upkeep of airport weather systems.

Education

University of Waterloo

Bachelor of Applied Science
Major in Electrical Engineering
Option in Computer Engineering

Sept 2016 - Apr 2021

Canada's most innovative university, with a world renowned engineering faculty, and a co-op program that is second to none.

I majored in Electrical Engineering and completed an additional Option in Computer Engineering. This allowed me to gain valuable exposure to both hardware and software, although I focused on software for my upper-year courses. I enjoyed my academics and did well in them; I usually ranked near the top of my class. My cumulative average was 86.3% and my fourth-year average was 90.9%. Have a look at my transcript if you are interested!

Outside of academics, I was heavily involved in campus life. I dedicated large amounts of time to the Engineering Society, and served as VP Finance where I managed our termly operating budget of approximately $80,000, along with other society operations. I also organized various events, was elected as a class Academic Representative, chaired Engineering Society meetings, and sat on the Engineering Society board of directors.

I also taught 50 students the basics of the Linux command line by organizing and running a technical workshop.

My favourite invovlment at university has to be as an orientation leader. I was able to welcome multiple years of new students and help organize and run fun orientation weeks for everyone who participated.

I also attended engineering conferences to broaden my knowledge and make new connections. They were:

  • Professional Engineers Ontario conference (provincial).
  • Canadian Federation of Engineering Students Congress (national).
    • Participated in the case study competition and placed second.
  • Conference for Sustainability in Engineering (national).
    • Participated in the case study competition and placed third.

Professional Development

"The more that you read, the more things you will know. The more that you learn, the more places you’ll go.” - Dr. Seuss

Personally I learn best from books, so I wanted to kickstart my software development career by reading some books that contain years of experience from some very smart minds.

Code Complete: This book is all about code construction. It deals with low level implementation details relevant to the everyday writing of code such as variable naming, functions and parameters, classes, and above all, readability. My main takeaway was that readability is the most important and one of the hardest things to achieve in a complex software system.

The Clean Coder: This book is all about being a professional as a software developer. The book talks about the best way to handle various office situations, working in teams, mentoring and being mentored, and working efficiently as a software developer. My main takeaway was that professional programmers need to constantly be practicing their craft, in addition to what they do at work.

The Pragmatic Programmer: This book focuses on building robust software. It covers programming techniques for software that is easy to maintain, such as decoupling and reducing duplication. It discusses interesting paradigms to avoid errors (such as design by contract) and possible actions to take if errors are present at runtime. My main takeaway is that software should be made as configurable as possible so that future changes have minimal impact on only one area of the code base.

A Little More About Me

Some of my other interests and hobbies are:

  • Flying airplanes and sailplanes; I have two pilots licenses!
  • Cooking and baking; I love trying new techniques and working with new ingredients!
  • Biking; especially mountain biking and downhilling!
  • Skiing; the bigger the mountain the better!
  • Reading and learning; I enjoy a good book, especially sci-fi, and love to investigate new things!