Raymond Gauthier

linkedin.com/in/jraygauthier

Education

2004-2008

Bachelor’s Degree, Computer Engineering; Sherbrooke University (Sherbrooke)

Robotic & AI concentration

2002-2004
College Diploma, Pure And Applied Science; Cégep Lévis-Lauzon (Lévis)

Work Experience

Amotus Solutions / Dimonoff (Québec)

Senior Software Developer, Sept 2017 - Present

Client 3 (Sep 2019 - Today)

An embedded power metering device running multiple Dbus interconnected Python3 services hosted on a custom Yocto Linux distribution that pushes its acquired data cloud side through a google cloud platform MQTT channel taken over by a JS cloud function that stores data to both Firestore and BigQuery. A cloud side PHP dashboard manages / exposes / leverage device metering data. Devices are individually configurable through a local web UI accessible via: USB Gadget, Ethernet and recently even a ZeroTier VPN.

Responsibilities:

Major achievements:

Technological Environment: Python 3 (Pytest, Mypy, Asyncio, Aiohttp, Jinja2), Rust, Yocto, Dbus, Systemd, USB gadgets, Html, JS, Css, Docker, Docker-compose, Google Cloud Services (Cloud functions, Firestore, Big Query), PHP, PostgreSQL.

Client 2 (Sep 2020 - Dec 2020)

A client internal inventory management and tracking system implemented as a C# Blazor app working with MS SQL Db data through a well-designed C# MVC RestAPI. According to client specification, Amotus exclusively designed and developed an embedded C# Xamarin bar code scanner application connected to the same RestAPI facilitating inventory product management / manipulations.

Responsibilities:

Major achievements:

Technological Environment: C#, .NET Core, Entity Framework, MVC RestAPI, Blazor, FluentValidation, MS SQL, Docker, Docker-compose, Nix, C# Xamarin.

Client 1 (Sep 2017 - Oct 2020)

A medical device running a client (JS) / server (async Python) application hosted on a custom Linux / Nixos distribution. Overall goal was to configure a MCU trigging a camera, a spectrometer, a laser and some LEDs collecting the camera / spectrometer frames trough usb making sure not to lose sync. Collected frames would then be bundled as whole cycles and send in real-time to the JS frontend through websockets while being persisted for later sync with the cloud storage service.

Responsibilities:

Technological Environment: Python3 / Python2 (Mypy, Pytest, Asyncio, etc), SQLite, Haskell (servant DSL), Swagger, Html, CSS, JS, AngularJS, Linux Nixos, Bash , Gnu Tools, Nix, Nixpkgs, Git, Markdown (pandoc), Sphinx.

Innovmetric (Québec)

C++ Software Developer, Aug 2016 - Sept 2017

Technological Environment: C++14, Windows, MFC, Mercurial, Visual Studio 2015, huge set of private libraries.

Ungava Technologies (Québec)

C++/Qt Embedded Software Developer, Jun 2013 - July 2016

Technological Environment: C/C++, Qt, QMake, Embedded Linux (Yocto), NDT systems, Doxygen, Markdown, PlantUML, Graphviz, Haskell Diagrams, Latex Math, Pandoc/Gitit/Hakyll, Mediawiki, QtCreator, Ubuntu/Nix/Nixos, Bash / Gnu Tools, Haskell, Python, Html/CSS/Javascript, Git, Svn, Bitbucket, Jenkins, Apache

Bentley Systems, Inc. (Beauport)

C++ Software Developer, Jun 2009 - Jun 2013

Technological Environment: C/C++, ImagePP framework, ATP framework, Visual Studio .NET 2005/2008, Microstation, Descartes, WinCVS, Bentley Build, Mercurial

Bluberi (Drummondville)

C Software Developer, Mar 2009 - Jun 2009

Technological Environment: C, Visual Studio .NET 2005, Custom Casino Boards

Bentley Systems, Inc. (Beauport)

C++ Software Developer (Intern T4), May 2008 - Aug 2008

Technological Environment: C/C++, Visual Studio .NET 2005, Microstation, WinCVS,

CAE Inc. (Montréal)

C++ Software Developer (Intern T3), Sep 2007 - Dec 2007

C++ Software Developer (Intern T2), Sep 2006 - Dec 2006

Technological Environment: C/C++, Java, Visual Studio .NET 2003, Borland JBuilder, Flight Simulators, Multithread programming, Shared Memory, Unicode vs ANSI, StarTeam, Visual Basic Application, Smart Heap

Promutuel (Québec)

Java Software Developer (Intern T1), Jan 2006 - Apr 2006

Assistant to the re-engineering of business processes (Intern T0), May 2005 - Aug 2005

Technological Environment: Java 1.4.2, WSAD (Eclipse 2.0), Struts-Tiles Framework, JUNIT, JSP, JavaScript, Adobe Designer

Technical Experience

Work on my personal private cloud

Hosted on Amazon EC2 through multiple Nixos Linux machines, 2015-2016

Open Source

Nixpkgs: Multiple contributions to the default package/configurations set of Nix/Nixos, 2015-2021

All of my personal and work computers are now using Nixos. Over the time, added multiple packages to Nixpkgs and fixed multiple issues. Doing this made me pretty fluent with the open source development process.

Programming Languages

Python:

Worked with libraries: asyncio, tornado and many others.

C++:

Worked with libraries: Qt, boost, wxWidget, OpenGL, MFC and many others.

Nix:

Build many tools using nix over the years in order to make builds reproducible anywhere.

Haskell:

Worked with libraries: servant, pandoc, diagrams, wx-haskell, reactive-banana, turtle, yesod, happstack, aeson, pipes and many others.

Good knowledge of: Javascript, Bash, Java, Matlab

Basic knowledge of: Python, Visual Basic, Cuda

Development environment

OSes:

Linux, Windows

Build systems:

Qmake, gnu make, CMake, cabal

VCS:

Git, Mercurial, Svn, Cvs

IDE:

Vscode, QtCreator, Microsoft Visual Studio, EMacs, xCode, KDevelop, Eclipse, JBuilder

Continuing education

Functional programming related:

Object oriented programming related:

Miscellaneous:

University projects

Neurospike Project, 2008

C++, optimization of the C++ reference implementation of an image recognition neural network using a NVidia tesla server (Cuda) and development of a real-time debugger / analyzer of its internals (wxWidget and OpenGL).

Design of a distributed system, 2007

Java, RMI, Architecture MVC

Design of an embedded system with networking, 2007

C, uC-OSII (RTOS), TCP/IP stack, protocole HDLC RF link, interrupts, UARTS, microcontroller interfacing, timers, ARM architecture, cygwin

Design of a customized drink distribution machine, 2006

Java, Cervelets, Tiniboard (embedded system), network, electronic interfaces, fully functional prototype

Conception d’un brouilleur de signal, 2005

C++, XILINX, data transfer protocol, logical gates et Qt GUI

Conception d’un robot interagissant avec son environnement, 2004

C, Handiboard, electronic interfaces (lecteur DC et autres)

Miscellaneous