- Self-taught Software Programmer, Developer, and Engineer, with experience spanning the last 23 of my 34 years
- Skills focused on the "Open Web Platform" and various open-source web-server platforms: PHP, Perl, Python, and, most significantly, Node.js
- Adapts easily to new languages, environments and interfaces, and has a range of experience outside the web domain, such as desktop and mobile applications, and embedded software
- Strong talent for collaboration and leveraging the open-source community
- High attention to detail
- Passion for creating high-end user and developer experiences
- Languages
- JavaScript (ES5, ES6+), TypeScript, Python, Perl, PHP, HTML, CSS, SASS, SQL (MySQL, DB2, PostgreSQL), GraphQL, Bash, PowerShell
- Libraries & Frameworks
- Express, Fastify, Next.js, Django, Webpack, Babel, PostCSS, React, Vue, jQuery, MobX, Axios, Apollo Client, urql, Bootstrap, Quasar Framework, Semantic UI, Material UI, styled-components, Tailwind CSS, Jest, Jasmine, Electron
- Development Tools
- Git, GitHub, Jira, JetBrains WebStorm, Chrome DevTools, Windows Subsystem for Linux, Beyond Compare
- DevOps Tools
- Docker, GitHub Actions, Jenkins, Elastic APM, Vercel, Heroku
- Contributed to the Node.js runtime by proposing and implementing a new feature
- Worked on SSR (server-side rendered) SPA (single-page application) ecosystem in 2014, long before it was popularized, authoring first the ractive-express package and later the ractive-isomorphic package
- Collaborated extensively on sweetalert2, a popular vanilla-JS UI component for modals/popups in vanilla JS, which is downloaded hundreds of thousands of times per week from NPM alone (reference), and has been known to hit the list of trending JS repositories on GitHub (reference)
- Made dramatic improvements to the public API, while deferring any breaking changes to the next major release. For example: fixed async control-flow (#485), added functional-programming way to configure default options (#1023), refactored to be object-oriented and extensible (#1036)
- Authored sweetalert2-react-content, the official integration for React
- Made many improvements to the development experience of contributors. For example: #970, #885, #820
- Contributed to the Next.js project by improving the example integration with Apollo GraphQL (#5241)
- Contributed to the ubiquitous dotenv package with fixes for Windows compatibility (#278, #307)
- Contributed fixes and enhancements to many other awesome projects, including FormidableLabs/urql, tinacms/tinacms, ianstormtaylor/superstruct, FormidableLabs/react-ssr-prepass, mobxjs/mst-gql, facebook/docusaurus, SerayaEryn/fastify-session, fastify/fastify-swagger, pinojs/pino, lerna/lerna, yargs/yargs, Semantic-Org/Semantic-UI, opencog/link-grammar, and many more
- Authored a number of packages on the npm package registry, including sweetalert2-react-content, composite-service, generate-ctrl-c-event, docker-run-kill, stream-line-reader, link-parser-js, ractive-express, flatstream, bpb, fast-download, and more
Algonquin College - Ottawa, ON - 2010 to 2014
Carleton University - Ottawa, ON - 2008 to 2010
Sault College - Online - 2000 to 2002
Manitoulin Transport - Remote - January 2022 to present
- Maintained and enhanced existing applications on MT Direct 2, the next generation of web interface to Manitoulin Transport's ERP systems, using Python & Django on the backend and Vue & Quasar Framework on the frontend
- Maintained and enhanced framework features and common components of MT Direct 2
- Reviewed Pull Requests to give constructive feedback
- Maintained some legacy MT Direct and standalone applications
- Helped to port some legacy MT Direct applications to MT Direct 2
- Performed upgrade of all MT Direct 2 frontend dependencies
(including Vue 2 to 3, Quasar Framework 1 to 2, and many others),
an especially challenging task since:
- MT Direct 2 is a monolithic "physical" application consisting of many "logical" applications (over 40 at the time), and as such it's not possible to upgrade and release each "logical" application one by one (an architectural problem that management had previously declined to address)
- The development team was simultaneously releasing new fixes, features, and applications
- Testing was difficult as we had no specifications documents or automated tests, much unintuitive code and UI, and many preexisting bugs
- Many undocumented breaking changes were found in the dependencies, due to our unsupported misuse of some dependencies
Manitoulin Transport - Remote - October 2018 to July 2019
- Hired as frontend developer working with Vue & Quasar Framework on the MT Direct 2 project, the next generation of web interface to Manitoulin Transport's ERP systems
- Later promoted to Lead Developer & Architect of the MT Direct 2 project, planning and overseeing development of the project including the Django Python backend
- Organized tasks, lead daily team meetings, planned solutions in collaboration with team members, reviewed Pull Requests to give constructive feedback, and implemented bug fixes and features
- Implemented solutions to many challenging problems presented by the requirement to integrate with legacy systems, and the unique requirement to build a highly scalable (in terms of code and features) monolithic application
- Worked as DevOps engineer, using Jenkins CI/CD to automate building, testing, and deployment of several web applications in addition to MT Direct 2, including the legacy MT Direct
Manitoulin Transport - Gore Bay, ON - July 2015 to December 2017
- Maintained and enhanced existing applications on the legacy MT Direct, a web interface to Manitoulin Transport's ERP systems, using Perl on the backend and jQuery + jQuery UI on the frontend
- Worked effectively with employees in various departments and positions to obtain requirements and specifications
- Provided first-class support to end-users of MT Direct
- Developed and maintained one major customer-facing application on the legacy MT Direct, employing modern design principles such as the Single-Page Application (SPA) model, the Model–View–ViewModel (MVVM) model, and server-browser code sharing, using KnockoutJS, and delivering a dramatically enhanced User eXperience to Manitoulin Transport's customers
- Worked on various proofs-of-concept for the Node.js rewrite of MT Direct
- Conducted Quality Assurance for and helped to manage several programmers in the Java/Spring rewrite of MT Direct
- Devised and implemented a migration path to move the legacy MT Direct from SVN to Git & GitHub while allowing team members to move at their own pace
Lixar I.T. Inc - Ottawa, ON - August 2014 to December 2014
- Worked on a front-end UI for a Bell modem/router, providing bug fixes, new feature implementations, quality assurance, and guidance for migrating the existing code-base to more maintainable patterns (particularly in the use of Promises)
- Provided enhancements for two existing web applications, both using CodeIgniter PHP web framework, for the Ontario Regional Blood Coordinating Network (ORBCoN): "e-tools" used for administering online courses and evaluation, and "Platelets" used for keeping track of blood platelets and sharing them between hospitals
- Implemented the front-end for a fantasy baseball game for APBA Games
Lixar I.T. Inc - Ottawa, ON - May 2011 to October 2011
- Implemented new features in a variety of pre-existing LAMP (Linux Apache MySQL PHP) web applications, using CodeIgniter, Zend, and vanilla PHP
- Acted as a team player by dealing with bugs and browser compatibility issues for other developers
- Fulfilled a unique role as the resident Flash guy, building and upgrading various interactive Flash applets for the web
- Updated content and design for CMS instances (Drupal, WordPress, Expression Engine)
Manitoulin Transport - Gore Bay, ON - May 2006 to December 2006
- Implemented features in a Visual Basic desktop application used by Manitoulin Transport and its business partners for creating, viewing, printing, submitting and performing other operations with Bill of Lading documents