Suite au rachat de la société par un grand acteur du e-commerce, nous avons eu l’opportunité de développer un nouveau produit 𠇏rom scratch”. Nous
en avons profité pour effectuer une migration souhaitée de longue date vers des runtime Linux, sous dotnet Core, et des conteneurs docker, dans un
orchestrateur Kubernetes.
Ce projet nous a permis de concentrer toute l'expérience acquise dans les années précédentes et de déployer plus de 50 microservices dont le
développement à été simplifié grâce à une specification des contrats et des modèles par OpenApi et de la génération de code permettant une
mutualisation 'souple' des dépendances. L'introspection des communications de ces services (directe, http, queues, streams…) est supporté par une
trace distribuée OpenTracing.
Api First - SwaggerHub / Open API, ProtoActor, Jaeger, OpenTracing, App.Metrics, CosmosDb, RabbitMq, EventStore,
SwaggerHub, Nuke.build, Helm, Azure DevOps, BDD / DDD, Actor Model - ProtoActor
Lead Programmer - Edenred - 1 an et demi - Octobre 2012 à
Mars 2014
Extranet Client
Lead technique de l’équipe de développement et programmation de l𠆞xtranet (front office) de vente de différents produits Edenred (Tickets
restaurants, Tickets Kadéos …)
VS 2012, Framework 4.5, Asp.net MVC, Entity Framework code first, N-Tiers, Castle Windsor, Sql Server
Développeur freelance - InfoFlash - Septembre 2012
Kourses - Licensing Akademy
Production de la partie serveur, base de données et service d’un site e-learning de préparation aux certifications.
VS 2010, Framework 4, Asp.net WebForms, Entity Framework 5 code first, N-Tiers, Unity, Sql Server
Le but de ce projet était une refonte de la première brique du système BeezUP : le processus qui permet de récupérer les catalogues des marchands, lire
leurs produits, enrichir des colonnes calculées et enregistrer le tout. Le but était de pouvoir exécuter ce processus au moins une fois par heure et par
marchand, quelque soit le nombre de marchands. Dans la version précédente, le processus étant limité par la persistance (Sql Server) et le nombre de
machines pouvant se répartir le travail, il était difficile à la société d'acquerir de nouveaux clients, spécialement de gros clients. Nous devions distribuer
le tout.
Ce projet a été l'occasion de nombreux errements. Son architecture fut retravaillée maintes fois pour arriver à la solution aujourd'hui en production.
Fraichement acquis au CQRS/EventSourcing, nous avons testé, plusieurs persistences, plusieurs orchestrations, plusieurs frameworks. Puis nous avons
renoncé à l'Event Sourcing sur certains des aggrégats métiers les plus consommateurs (les produits et leurs valeurs) et dont la persistance du journal
des évènements était parfaitement dispensable. Forts de ces expériences, après un autre renoncement plus fonctionnel, il a été possible de faire passer
tous les imports clients sur cette nouvelle architecture.
L'architecture en place, au moment où j'écris ces lignes, hybride Azure Service Fabric pour sa partie DDD/Aggrégat, tandis que les traitements et
projections tournent dans un cluster Kubernetes.
Azure Service Fabric, Azure Event Hubs, Kubernetes, EventStore, BlobStorage
Open Source
Depuis peu, par goût personnel et avec le consentement de ma hiérarchie, il m𠆚rrive de contribuer à des projets libres afin de servir les intérêts de
BeezUP à moindres frais. Le code ainsi contribué est alors utilisé au delà des projets BeezUP. Il sera éprouvé et peut-être amélioré par la communauté :
https://github.com/AsynkronIT/protoactor-dotnet - Ultra fast distributed actors
https://github.com/opentracing-contrib/csharp-decorators - OpenTracing tracer extensibility
https://github.com/jrouaix/Mutopic - Micro, yet turbocharged, C# pubsub library.
Il y𠆚 aussi dans la société une volonté de transparence de notre solution vis à vis de nos utilisateurs. Nous ne sommes pas encore prêts à l’ouverture du
code source de notre framework, mais c𠆞st une réflexion en cours.
BeezUP est, de loin, l𠆞xpérience qui m𠆚 demandé le plus de ressources et m𠆚 fait évoluer de la “simple” architecture logiciel à la conception de
solutions distribuées, hautement disponibles et élastiques. Je décris ci-dessous les principales étapes de cette prise d𠆞nvergure.
Order Management V2 Ma première mission à l'arrivée chez BeezUP fut de retravailler le module de gestion des commandes Amazon (import des commandes et modifications des statuts depuis le site BeezUP) pour en faire une version performante et poser les bases d'une architecture permettant d'intégrer plus rapidement les prochaines marketplaces. Après la première implémentation finalisée et mise en production, le projet a été repris par d𠆚utres développeurs de l’équipe pour ajouter de nouvelles marketplaces avec succès. L'architecture mise en place a permis à des développeurs débutants d’intégrer la gestion de commandes pour une nouvelle marketplace en deux semaines.
Service container, Strategy pattern, TableStorage, QueueStorage, BlobStorage, Async/Await
BeezUP Framework - One to rule them all.
Segmentation des responsabilités d'un framework monolithique en quelques 30 packages Nuget et veille assidue autour des technologie intégrées.
Abstraction de certaines technologies (Queuing, Caching) afin de proposer des APIs communes et des comportements standards.
Centralisation des bonnes pratiques, accompagnement des développeurs, Proof of concepts, centralisation des mises à jour.
VS 2017, Framework 4.6.2, Dotnet Core 2.0, Microsoft Azure (Cloud Services, Table/Blob/Files/Queue storage, Service
Fabric, EventHubs, AzureSearch, EventHubs), Asp.net MVC WebApi, Entity Framework, Rabbitmq, Rollbar, EventStore, Kafka,
Cassandra, Reactive Extensions, DynamicExpresso, RosLyn, Redis, CQRS, DDD, BDD, Event Sourcing, ProtoActor, Docker,
Kubernetes, OpenTracing, Polly
Architecture, accompagnement et encadrement d’un stagiaire chargé de réalisé le site internet vitrine d’une société de promotion immobilière.
VS 2010, Framework 3.5, Asp.net MVC, jQuery, NHibernate, N-Tiers, Unity, Sql Server
Ausmane - Cellule d'appui aux développements
DIP : Développements itératifs de proximité
Production d'un Template applicatif destiné à accélérer le développement des nouvelles applications DIP.
VS 2010, Framework 3.5, Winform, MVC, Template Applicatif (WSIX), génération de code T4
Proposition de solutions techniques résolvant les problèmes des différentes équipes clientes de la cellule d'appui aux développements. NHibernate,
Entity Framework, Log4Net
Présentation, explication, formation, assistance, pair programming à la demande permettant de soutenir les développeurs dans l'adoption des
solutions proposées.
Dossiers de fond : adoptions de WPF et pattern MVVM, Injection de dépendance Castle Windsor, Tests Unitaires MbUnit, Moq, Intégration Continue
Cruise Control.net, programmation orientée aspect, Domain Driven Design, Model Driven Design.
NGAI - Documents Subscriptions
Production d'un outil de mailing automatique de documents intégrant un paramétrage complexe des documents à envoyer. Accès au listing de
souscription par web services Saleforce. Base de données embarquée par soucis de performance. Mise à jour retour du CRM Salesforce.
Production Silverlight / MVVM
Intégration de l'ancienne application dans la nouvelle par chargement dynamique avec refonte minimaliste de l'existant.
Assistance technique de l'équipe déjà en place sur XAML/Silverlight ou sur des notions plus générales d'architecture logicielle et de bonnes pratiques de
développement.
VS 2010, Framework 4.0, Silverlight 4, MVVM Light, WCF, Entity Framework
Expert .net - Air Liquide Grande Industrie - 3 mois - De mars à mai
2010
Avatar - Outil de formation pour les opérateurs en usine.
Production de deux outils, constructeur et lecteur de scénarios permettant aux équipes de capitaliser sur l𠆞xpérience de situations exceptionnelles.
Projet court en démarche agile SCRUM sur 10 sprints d'une semaine.
Développement atypique, accès sur l'ergonomie et la performance des outils.
Architecture et tests unitaires montés par évolution successives conformément à la philosophie des méthodes agiles.
WS2008, .net Framework 3.5, WPF, MVVM, PostSharp, NUnit
Framework 4.0, SQLite, NHibernate, SalesForce, Unit Test Famework
Pour diversifier mon activité et notamment creuser une technologie qui je crois a le potentiel de révolutionner le développement informatique, j'ai pris congé de mon employeur et me consacre pour les prochains mois a ma propre formation sur le sujet (Rust). J'ai d'autres projets en tête dont je ne vais parler sur mon CV que quand et si je les réalise.
J'interviens régulièrement chez mon ancien patron et désormais client.
Je suis en train de finir de rédiger un article introductif au langage Rust pour un magazine spécialisé développement (parution en Novembre).
Je suis intervenu en tant que vacataire a l'IUT en 2019 pour animer quelques heures en DUT 2ème année (modules bonnes pratiques objet
(C /Php) et Programmation Web (PHP / TDD)). L'expérience va probablement se renouveler en ce début d'année scolaire.
En début 2019 j'ai présenté une partie de mon expérience de l'Event Sourcing à l'occasion d'un évènement sur La Rochelle :
https://gitpitch.com/jrouaix/cqrs-es-presentation/master
https://www.facebook.com/events/615931308827938