Guilhem CHARLES

Guilhem Charles

Software Engineer

My boy-scout rule: Always leave the code better than when I found it.

Resume
Contact Me

About Me

Driven software engineer writing code that scales across CPU registers, multi-core, and machine clusters. I take a first-principles approach to problem solving, breaking down complex problems into structured elements, as opposed to just relying upon standards. I pick my tools based on the challenge ahead, and move through the software stack, between services, caches, message queues, middleware applications. Whatever needs to get done to move the business forward.

more

I am passionate about programming languages and strive to write idiomatic concise code, with a strong emphasis on correctness.
I am always happy to work with new tools and ready to learn new languages and libraries in order to grow my toolbox.
When I develop I look beyond what the code should do, I enjoy software engineering through design patterns and debates about which algorithms or data structures would be the most efficient; if it implies having to build one myself, even better!

As a Python developer I have tamed the GIL and type annotations. I have solid experience with widely used frameworks and libraries like Asyncio, Falcon, FastAPI, Pydantic, Kafka, and Celery. I even wrote my own C++ bindings... Twice!

In the future I intend to tackle challenges even more complex in fast-paced, highly technical and intellectually challenging environments in order to grow the skills that I need to achieve my career goal.

I am passionate about programming languages, distributed systems, data and DevOps minded. If your company shares this enthusiasm I am looking forward to speak with you!


Work Experience

Senior Software Engineer - LivestreamJW Player (January 2020 - Now)

Technical owner of the Live Channels product that allows customers to broadcast live events to their audience.

Build highly scalable, performance-oriented systems around livestream workflows; over hundred million of minutes per month. Design processes and build APIs, infrastructure, pipelines, testing, monitoring, etc.

Achievements:

  • Reduced external storage costs by an estimated $500k by automating the import of assets produced at a third-party vendor
  • Designed and developed an auditable event ingest system that scales horizontally by combining Kafka, RabbitMQ and Python services
  • Reduced build time and docker image size by implementing a multi-stage build, leading to 50% faster CI pipeline and 10% faster image pull
  • Introduced mypy in the company ;
  • Design the CI/CD pipelines using buildkite dynamic pipelines ;

Python 3 Docker Fast API mypy Kafka PostgreSQL RabbitMQ Falcon Kubernetes AWS datadog sentry pagerduty

Software EngineerMapscape (September 2015 - January 2020)

Python Developer / AWSOctober 2018 - January 2020

Build a serverless platform to deliver the most efficient updates over-the-air to vehicles.

Achievements:

  • Reduced computation time by 90% by developing an improved optimal update path finding algorithm leading to computation taking seconds instead of minutes
  • Developed the map update ingest workflow using AWS s3, lambdas and step functions and Python
  • Representative in a technical workgroup of the NDS consortium in charge of designing the new generation standard for map data in automotive eco-system
  • Awarded by the executive committee as one of 4.500 employees globally for my work on the build systems and continuous integration pipeline

Python 3 AWS SAM Boto3 Cloud Formation Docker Docker Compose Kubernetes ELK Swagger ZSerio

C++/Python Developer / Data processing & visualization (via MCA)September 2015 - September 2018

Part of the Test Tools team building geographical data processing and visualization tools, automation frameworks and infrastructure used by the Validation department in order to visualize, inspect, test and validate production maps.

Core Tasks

  • Developping and maintaining test and visualisation tooling;
  • Performance benchmark;
  • Monitoring regression tests;
  • Performing peer code reviews;
  • Performing development test;
  • Creating and updating documentation;
  • Mentoring new team members.

Achievements:

  • Reduced regression testing time from 2 days to 4 hours by creating a distributed testing framework on a cluster of machines
  • Re-designed the CMake build scripts, to comply to modern standards and leverage modularity, reducing build time by 20%
  • Increased application FPS by three-fold with multithreading by re-designing map rendering algorithm to parallelize code
  • Update application scripting from in-house domain specific language to Python, using pybind11, leading to more expressive and correct scripts

C++14 STD Boost pybind11 OpenGL SQLite wxWidgets CMake GTest SpatiaLite SQL Bash Perl Cross-Compiling GIS NDS Jenkins Celery Docker

Software Engineer Apprentice - R&DLumiplan (September 2012 - September 2015)

During three years I worked autonomously on different research projects aiming to improve gathering of information, management, supervision and installation of all embedded equipment developed by Lumiplan Duhamel. I developed real-time embedded softwares, in which performance, robustness and reliability are crucial.

Final year - Period of 7 months
Study, design and develop a solution that provides a partial, and later full, auto-configuration of Lumiplan-Duhamel products when installed onboard. The solution scope goes from a first installation to addition of equipment, and includes maintenance. Thus will help Lumiplan operators to be more efficient and faster to realize such operations.
Direct benefits are installation time decreased, less operator actions on equipment (which can be source of failure) and generalized solution; auto-configuration is designed to work whatever customer, installation type and location, independent of vehicles. Hence the solution lead to less cost for installation, addition of equipment and maintenance.
Self-governing management of a full software development life cycle following ISO 9001 standards: planning, specifications, validation plan, development, deployment and integration.

Two first years - Periods of 6 weeks
C/C++ program development intended to improve monitoring and maintenance of systems and equipment embedded. Tasks:

  • Program to obtain information on embedded equipments in a vehicle(GPS, speed, journey, etc);
  • Development of a software to test a LED displayer in C#;
  • Development of an SNMP agent in C++ for an embedded monitoring equipment;
  • Development of a SNMP manager in C# to queries SNMP agents and allow technicians to obtains information and configure embedded equipments;
  • Development of SNMP agent on another embedded equipment in C with Keil OS.
Gradual increasing level of responsibilities for the software development life cycle (e.g. validation plan, planning, etc.).

C++ STD C C# Cross-Compiling TCP UDP SNMP Thread Poco Keil MDK WinPcap

Final Year Internship in Software DevelopmentBusiness & Decision (April - June 2012)

Software development in Java using the API Apache POI, creation of KSH scripts.

Java API: Apache POI

Teaching for First Year StudentsAix-Marseille University (Academic year 2011-2012)

Selected as one of the 5, out of a few hundred students, to teach first year students about algorithm, database, software development (C/C++ and Java), operating system and network.

Algorithm C++ Java SQL Merise Bash Shell Network

School Projects

Operating System Project - Minimalist Linux-like Kernel

Development of a linux-like kernel in C and ASM. It is the final project of the Operating systems and parallel computing course which we followed during our second year at Ensimag (first year of master of science). It includes comprehension and knowledge of how a kernel works. The project was vast, requiring a rigorous organisation and a smart work sharing to be done.

Semaphore C ASM Thread Processus

Find out more (French)

Software Engeenering Project - Java-like Compiler

Ensimag first year end's project. Development of a compiler (in Java) for an oriented object language close to Java itself.

OOP Compiler

Development Project, First Year, Huffman Compression

Java development of a program for Huffman compression/decompression algorithm that let the user to browse for the file that needs to be compress or decompress and then make the required operation using huffman coding.

Java Huffman coding

WiFi Honeypot - Study, Prevention and Proof of Concept

Honeypot is a well known method in security. Usually it is used to attract bad people already present inside a local network. However, WiFi honeypot technique can be use in another way: trap normal user into a malicious WiFi hotspot.
We demonstrated how sneaky a WiFi honeypot can be and how unprepared you may be against this threat. These attacks are based on the habit people have to connect any WiFi access point whenever they have the opportunity and could hit everyone, everywhere and every time...

Kali Linux IEEE 802.11

Volunteering Experiences

MonitorScouts et Guides de France (September 2011 - August 2014)

Monitoring of youths from 11 to 14 years old, locale and equipment management, activities organization, planning establishment and budget management. Educational follow-up of the youths during the year. Each year was concluded by a two weeks summer camp.

Staff & PartnershipEnsimag Students Union Office (April 2013 - March 2014)

Gather of companies’ sponsors for events and good deals for school students. Events organization for school students: cocktail, reception, party and week-ends.

Information System ManagerEnsimag Students Union Office of Companies

April 2013 - March 2014

Administrator of: the website, intranet, wiki and databases of the Union. Technical support and assistance for companies and students.
Organization of a one day forum between companies and school students: companies reception and their placement to stands, system of student godfather for companies and provide a platform to allow companies to search students’ Resume.

Favorite Quotes

"Perfection is finally attained not when there is no longer anything to add, but when there is no longer anything to take away."Antoine de Saint-Exupéry

"Bad programmers worry about the code. Good programmers worry about data structures and their relationships."Linus Torvald

"Perfect is the enemy of good"Italian proverb
"C makes it easy to shoot yourself in the foot. C++ makes it harder, but when you do, it blows away your whole leg."Bjarne Stroustrup