Bonjour, je suis ingénieur logiciel avec une forte expertise en développement backend et en data science. Ma spécialisation en Java/Spring et Python, combinée à mon expérience en data engineering et en machine learning, me permet d'aborder de manière compétente une large gamme de projets informatiques.
Mes dernières missions chez Airbus et Shadow illustrent bien ma capacité à gérer des projets complexes et techniques. Chez Airbus, j'ai travaillé sur des projets tels que l'Automated File Classification Tool en utilisant des techniques de machine learning, et j'ai également développé et optimisé des microservices pour des systèmes d'authentification et de gestion des accès. Mon rôle en tant que Tech Lead m'a permis de superviser et de former des équipes, garantissant ainsi la qualité et l'efficacité des projets.
En plus de mes compétences en développement, j'ai également une solide expérience en DevOps, notamment avec des outils tels que Docker, Helm, Kubernetes, et Openshift, ce qui me permet d'automatiser et d'optimiser les processus de déploiement et de gestion des applications.
Je suis passionné par l'innovation technologique et toujours désireux d'acquérir de nouvelles compétences. Que ce soit pour une start-up innovante ou une grande entreprise, je suis prêt à relever de nouveaux défis et à apporter ma contribution à des projets ambitieux.
J'interviens sur le projet AFCT (Automated File Classification Tool). Notre but est de proposer un service permettant de déterminer automatiquement le degré de sensibilité de documents en utilisant des techniques de machine learning.
L'équipe (Agile - SAFE) est composée de 8 personnes de côté d'Alten et d'à peu près 10 personnes du côté de Capgemini. Les ingénieurs qui composent cette grande équipe ont des profils de développeur et surtout de Data scientist.
J'interviens en tant que Techlead. En plus de participer à l'architecture des différentes solutions ainsi que du développement comme n'importe quel développeur de l'équipe, je suis responsable de la codebase devant le PO, le client Airbusien ainsi que l'architecte solution qui nous accompagne.
Je suis chargé de faire monter en compétences une équipe de niveau intermédiaire. Cette équipe comporte 4 développeurs python backend côté Alten et un peu plus côté Capgemini (3~7 personnes). Je suis chargé de faire respecter les bonnes pratiques de code (code quality, Definition of Done, Gitflow, python3 PEP8), les objectifs en matière de diminution de la dette technique accumulée par le passé (couverture de tests, documentation). Je fais ceci au travers de présentations techniques, de sessions de Shadowing, de workshops techniques qu'ils soient prévus ou commandés par les besoins des développeurs. Je produis beaucoup de contenus de documentation, souvent écrits, parfois en vidéos, en mettant toujours l'accent sur la pédagogie, la bienveillance et la pratique. Jamais un concept abstrait n'est abordé sans une application concrète "hands-on" dans leurs tâches quotidiennes. Ce fut notamment le cas quand j'ai vulgarisé pour eux le fonctionnement des API REST, le Gitflow et la création de la chaîne DevOps. Mon exigence vis-à-vis de mes développeurs est acceptée parce qu'ils constatent rapidement leur montée en compétences et ils sont conscients que j'ai largement défrichés des sujets épineux pour eux.
Stack technique:
Python 3.8/3.9
Pytest
FastAPI
Swagger
Alembic
Pydantic
SQLAlchemy
PostgreSQL
OAuth2/MobileSSO
Github
Jenkins
Openshift4
PyCharm
JupyterHub
Shell/bash (côté Linux)
PowerShell (coté Windows)
Confluence
Sonarqube
Artifactory / JFrog
Jalons:
> Dès mon arrivée: audit de la codebase, shadowing des développeurs, estimations de la dette technique et du niveau de chacun. Après détermination du plan d'action avec le PO-proxy, écriture de contenus de formation (Gitflow, Coding rules, Git rules), présentation de ces contenus au travers de workshops et contrôle de la mise en application des bonnes pratiques ainsi que de la diminution de la dette technique.
> Architecture, conception, développement et déploiement de la première API REST (batch API) de notre écosystème. Les premières APIs ont également été utilisées comme références afin d'illustrer comment architecturer une API REST (Design pattern MVCS), comment gérer l'évolution et le déploiement du modèle séparé, comment tester unitairement et fonctionnellement ces applications. Les autres développeurs ont rapidement été appelés à prendre en main ces projets et à se les approprier en ajoutant de nouveaux endpoints, ce qu'ils ont fait volontiers.
> Création de la chaîne DevOps (une précédente chaîne existait mais elle était dysfonctionnelle et incomplète). Workflow: Les pipelines Jenkins réagissent par appel de webhook à des événements github en se lançant automatiquement. Ils récupèrent le code, exécutent les tests unitaires & fonctionnels, postent le résultat des tests sur la page de la Pull Request sur Github, calculent la couverture qu'ils envoient sur SonarQube, publient l'artefact de la solution sur Artifactory et déploient la solution sur OpenShift4. La création ainsi que le paramétrage de la chaîne DevOps sont intégralement documentés. Une première développeuse a déjà été appelée à s'aider de la documentation afin de monter la chaîne DevOps liée à une nouvelle brique de l'écosystème Api Reporting.
- Reprise de l'existant - Décembre -> Février Au sein du département Business Intelligence, je suis intervenu pour reprendre la stack Data existante. Cette stack data permettait de faire remonter les données depuis nos datacenters, répartis en Europe et en Amérique du Nord, pour une analyse en temps réel par la BI.
data processing (stream processing en utilisant faust)
datalake storage (S3)
database storage (Clickhouse)
data visualization (Metabase, Grafana)
Après un rapide transfert de connaissances du précédent Data engineer (~3 semaines), je suis passé seul responsable du bon fonctionnement de la stack Data jusqu'à l'embauche d'un interne en Février 2022. En vue d'un futur biseau, J'ai pris un maximum d'informations au jour le jour, j'ai cartographié et documenté mes sessions de debug afin de permettre à mon successeur de démarrer dans de meilleures conditions qu'à mon arrivée.
Les briques internes à l'écosystème étaient développées en Python3. Nos solutions étaient versionnées sur gitlab. Le déploiement des briques (Docker) se faisait via des playbooks Ansible. En plus du monitoring et du debugging de la stack, j'assurais un support sur notre fork de Metabase (outil de visualisation et d’agrégation des données). Je mettais régulièrement à jour ce fork ainsi que je le déployais.
- Formation du nouvel interne- élaboration de la nouvelle stack data 2.0 - conception de logiciels sur-mesure pour la BI - Février -> Décembre
Formation du nouvel interne grace à la documentation (gitlab) ainsi qu'à mes tutoriels vidéos pédagogiques.
[Pour la BI] Conception et publication interne d'un plugin Sheets pour accéder aux données de metabase sur Google Sheet
[Pour la BI] Conception et développement (Python3) du projet product-tracking permettant d'extraire la donnée depuis Metabase (DB->Clickhouse) vers Amplitude, un outil d'analyse business avancée.
Conception et développement (Python3) du projet synapse-kafka-api. Ce projet expose des endpoints API REST. Il permet aux applications de notre écosystème ne pouvant pas s'interfacer avec le bus de messages Kafka de diffuser des events kafka grâce à de simples requêtes HTTP.
Participation à la conception de la nouvelle stack Data v2. Data workflow:
Pour les sources tierces (Stripe, Zendesk, MongoDB) ++ Data ingestion tool: Airbyte [-> Data Warehouse]
Pour les sources internes (applications JS, Python). ++ Data integration tools: Kapacitor, Kafka connect -> Kafka [-> Data Warehouse].
Data Warehouse: Snowflake, Amazon Redshift, BigQuery [-> Visualization tools / ML Tools]
Explorer la nouvelle solution interne FusionOperate (DevOps : kubernetes, helm, Azure)
Déployer le projet de FusionLimits (microservice Java / Spring boot) via Fusion Operate
Identifier les forces et les faiblesses de FusionOperate ainsi que de son processus d’onboarding et participer à la décision quant à la généralisation de son utilisation pour le déploiement des microservices au sein de Finistra
Endpoint protection - knowledge transfer & industrialisation (voir plus bas pour la génèse du projet) Objectif: formation de nouveaux intervenants sur le projet (Airbus India et Bundle Capgemini) et industrialisation du projet Etapes Clefs: 1- Ajout de tests unitaires 2- Optimisation du système de cache 3- Ajout de documentation (scopes: architecture, développement et utilisation)
Volumétrie (production): entre 6k et 15k requêtes par jour.
Java J2E (Spring Framework, Spring boot, Spring cloud, Spring Web, Spring Data JPA)
Gestionnaire de projet & Forge logicielle : Jira/Github Enterprise
Environnement DevOps (Jenkins, Ansible)
Méthode Agile
OS : Openshift (cloud)
SGBD : MongoDB
Environnement DevOps (Jenkins, scripts utilisant le client oc "Openshift CLI")
Deep learning (Natural Language Processing): automatisation de la classification des tickets d'incidents Objectif: Diminuer le temps de traitement des incidents par les opérateurs, réduction les coûts Etapes Clefs: 1- Définition de la problématique 2- Collecte des données (diverses sources de données) 3- Nettoyage des données 4- Data augmentation 5- Construction des hypothèses, Détermination des variables explicatives 6- Construction du modèle 7- Transfer learning (gagner du temps à l'entraînement afin de ré-utiliser le fruit des précédents entraînements) 8- Entraînement du réseau de neurones 9- Exposer le réseau de neurones de classification en l'encapsulant dans un web service REST (Docker, Python, Flask) 10- Présentation, communication, documentation, automatisation des tâches 1, 2 et 3 de traitement des données (script python)
Endpoint protection (Policy Decision Point) Objectif: Architecture, conception et développement d'un Policy Décision Point utilisant la notion de role pour contrôler l'accès aux API/Services web (Middle-grained). Endpoint protection (anciennement nommé Role management) est utilisé d'une part par la Gateway (Gateway>Queen>Eggs, voir plus bas) afin de vérifier les accès et d'autre part directement par front end de services tiers comme MyAccount, MyAccess afin d'adapter l'affichage en fonction du role de l'utilisateur, notamment.
Volumétrie (production): entre 6k et 15k requêtes par jour.
Java J2E (Spring Framework, Spring boot, Spring cloud, Spring Web, Spring Data JPA)
Gestionnaire de projet & Forge logicielle : Jira/Github Enterprise
Environnement DevOps (Jenkins, Ansible)
Méthode Agile
OS : Openshift (cloud)
SQBD : MongoDB
Environnement DevOps (Jenkins, scripts utilisant le client oc "Openshift CLI")
AutoEgg : génération automatique des microservices ("eggs" de l'architecture Queen&Eggs) en fonction du contrat d'interface (OpenAPI/Swagger) du service tiers à proxifier. L'objectif était de faire gagner du temps à l'équipe de développement pendant la proxification de nouveaux services tiers (passer de 3 jours homme à <0.5 jour homme par proxification).
IAM API v2 - Architecture, conception et développement Objectif: refondation du proxy API grâce à une architecture en microservices (Queen & Eggs) avec branchement à chaud des modules (eggs). Chaque egg embarque le code de proxification du service tiers ainsi qu'une documentation au format OpenAPI/Swagger. A l'ajout de chaque egg, aucune configuration n'est nécessaire (plug'n'Play), l'egg démarre et la Queen le détecte (scan d'une plage de ports) et re-route les requêtes vers l'egg adéquates. Volumétrie (production): entre 30k et 100k requêtes par jour.
Java J2E (Spring Framework, Spring boot, Spring cloud, Spring
Web, Spring Data JPA)
Gestionnaire de projet & Forge logicielle : Jira/Github Enterprise
Environnement DevOps (Jenkins, Ansible)
Méthode AgileOS : RHEL 7 (RedHat)SQBD : Microsoft SQL
Tooling IDaas - R&D - Traitement de données IAM - gestion de groupes et de privilèges (déclenchement périodique)AIRBUS (INNX/ZIOIA) De Janvier 2018 à ?Objectif: Réaliser un ensemble d'outils pour faciliter le traitement de données utilisateurs (comptes, groupes)
IAM API v1 : Conception et développement d'une Gateway (Coarse-grained) et d'un proxy API (REST API) afin d'unifier l'IAM (Identity and Access Management) au sein du groupe Airbus (freelancing via société Infotel). Volumétrie (production): entre 30k et 100k requêtes par jour.
Framework : Java Spring (Spring Boot, Spring Web - REST, Spring Data JPA, ...)
Développement logiciel (Athéna) Technologie :WinDev, WinDev Mobile (Android & Windows Mobile) Langage : WLangage SGBD : HFSQL Objectif : Fiabiliser et poursuivre le développement sur la suite logicielle Athéna
Création Full Stack (Module SMS) : Boîtier tout-en-un pour l'envoi massif de SMS interfacé avec la suite logicielle Athéna Matériel : Raspberry Pi, clef 3G/4G (carte SIM) OS : Gnu/Linux SGBD : MySQL Langages : PHP Orienté objet (framework Descartes), JQuery, Bash scripting (sécurité, monitoring) Interfaçage : interface Athéna, web service, requête HTTP, interfaçage web
Réalisation d’un logiciel d’externalisation d’une base de données SQL Server en JAVA, puis réalisation d’un site web en J2EE permettant d’exploiter les données externalisées.
CLOVIS, un système monétaire décentralisé et sécurisé par chiffrement asymétrique. CLOVIS est une crypto-monnaie qui s'attache à favoriser la création de petites communautés d'échanges très localisées géographiquement tout en permettant des échanges à l'échelle globale de manière régulée entre toutes ces communautés. C'est une troisième voie entre le S.E.L. (Systèmes d’échanges locaux) et le Bitcoin.