Skip to content

Instantly share code, notes, and snippets.

@zipang
Last active November 24, 2021 17:18
Show Gist options
  • Save zipang/7c56950b442d0076abfda3c119ecd844 to your computer and use it in GitHub Desktop.
Save zipang/7c56950b442d0076abfda3c119ecd844 to your computer and use it in GitHub Desktop.
My CV

Développeur full-stack JS / Architecte

RESUME

25 ans d'expérience en SSIIs, startups et freelance comme Chef de Projet, Lead Dev ou Architecte Système.

Tout en veillant continuellement à me tenir à jour sur les derniers outils, langages, mon intérêt s'étend aujourd'hui de plus en plus à toutes les étapes du Design Produit (Product Design, Service Design Thinking).
Ces méthodologies ont comme objectif de toujours garder en ligne de mire un objectif simple : créer la meilleure expérience utilisateur (UX) possible pour son produit.
Cela consiste notamment à faire des recherches sur les problèmes récurrents des utilisateur, les modéliser sous forme de personas, imaginer les nouveaux parcours utilisateur pour qu'ils accomplissent leurs tâches, et s'assurer de ne livrer que des fonctionalités utiles puis de mesurer l'impact des livrables pour continuer à améliorer de manière incrémentale le produit.

DOMAINES D'EXPERTISE

OPEN SOURCE

Depuis mes sept années passées à Smile, SSII française leader dans les solutions Open Source, j'ai pu utiliser, contribuer à des centaines de projets open source qui sont au coeur de toutes mes propositions.
Les solutions open source sont bien sur en théorie gratuites à mettre en oeuvre (pas de licence) mais elles nécessitent une forte expertise. En contre-partie, toute évolution est possible en participant directement aux évolutions du code source.

ECOSYSTEME SERVERLESS/JAMSTACK

L'écosystème JAMStack et les solutions SAAS, FASS Serverless auto-gérées concentrent toutes mes attentes en terme de solutions scalables, performantes et simples à mettre en oeuvre.

Aujourd'hui ma stack de prédilection est constituée de :

  • NextJS pour le framework React open source le plus avancé de son temps
  • Chakra UI pour la librairie de composants open source hyper-accessibles
  • Vercel pour le déploiement en continu on the edge (CDN)
  • Firebase pour la base de donnée temps réel
  • Cloudinary en option pour la gestion des fichiers multimédias avec transformations à la volée

Dans le contexte de réalisation de MVP pour des startups, ces solutions légères et rapides à mettre en oeuvre contribuent au succès des équipes réduites qui souhaitent se concentrer sur leur produit et non sur des technologies à la mode (GraphQL, Kubernetes..) mais autrement plus couteuses à mettre en oeuvre.

Mon expertise principale est donc d'éviter l'over-engineering (KISS) tout en mettant en place les bonnes pratiques qui créent la valeur : documentation exhaustive du code, tests unitaires, choix des outils collaboratifs, rituels : revues de code, points de fin de sprint..

COMPETENCES

LANGAGES Javascript (ES7, Node.JS), TypeScript, Java (<=8), PHP
METHODOLOGIES KISS
DRY
Test Driven Development
Agile : SCRUM, Design Sprints
Conception Orientée Objet (Héritage, Polymorphisme..)
Gestion des Risques
COMPONENT FRAMEWORKS React, Vue.js, Knockout.js, jQuery, bit
WEB FRAMEWORKS Next.js, Gatsby
APIs, WEB SERVICES Swagger (Open API), API Blueprint, Kong, Fastify
OUTILS COLLABORATIFS Podio, Notion, Slack, Click Up, Figma
OUTILS DE DEPLOIEMENT Buildify, Gulp, Webpack, Github Hooks
GESTION DES SOURCES Git (Github, Bitbucket)
BASES DE DONNEES NoSQL : Firestore, ElasticSearch, Redis, CouchDB
SGBDR : MySQL, Oracle, SQL Server
OS Linux (Manjaro, Debian, Ubuntu), Mac OS X

Formation - Langues

FORMATION

  • DEA Informatique spécialité : Compilateurs et IA

LANGUES

  • Français (natif)
  • Anglais (courant)

PROJETS (une sélection)

XTRACK SHARE (2021 - 3 mois)

Projet : Outil B2B de partage de dossiers multimédias

Mission : Une société de production m'a demandé un outil sur mesure pour partager les dossiers de rushes, montages et extraits sonores lors des phases d'aller-retour intensives avec ses clients. Ces dossiers comportent des playlistes structurées de fichiers sons ou vidéos qui doivent pouvoir être consultés et jouées, mais aussi téléchargées (individuellement ou en groupe de fichiers zippés) avec la possibilité de convertir les assets dans le format audio/vidéo de son choix.
Pour gérer cette problématique technique, j'ai choisi le service Cloudinary et rajouté une surcouche simple pour uploader les dossiers de rushes déjà préparés.
En l'absence de Web designer sur ce projet (c'est un projet B2B donc le design est brut et simple) j'ai utilisé l'outil Figma pour prototyper le produit final et le partager en ligne.

Détails techniques :

  • Prototypage avec Figma
    • Le prototype est accessible en mode collaboratif et éditable en temps réel
    • le guide de style des composants est exportable en CSS
  • Utilisation de la librairie de composants Chakra UI
    • Création d'un mini design système : typographie, thème de couleurs, boutons, formulaires
    • Animations avec framer-notion
    • Mobile friendly (pour les clients)
  • Authentification avec Firebase
    • Les profils administrateur accèdent au backoffice avec leur login habituel (compte Microsoft Office 365)
  • Envoi de mails avec SendGrid
    • Les templates de mail (au format Handlebar) sont directement stockés dans SendGrid
  • Création d'icones SVG
    • Les fichers SVGs sont transformés en composants React avec des propriétés dynamiques (ex: changement de couleurs sur hover..)
    • Chemins SVG optimisés à la main
  • Hébergement des médias avec Cloudinary
    • Conversion des formats à la volée (ex: wav > mp3, m4a, ogg)
    • Génération dynamique de fichiers compressés (.zip)
  • 2 types de playlistes pour les fichiers multimédias basées sur
    • Cloudinary Player pour les vidéos
    • WaveSurfer pour les sons
  • Réalisation d'un backoffice pour simplifier l'upload des assets
    • Gestion de la hiérarchie des dossiers : client/projet/dossier
    • Composant d'upload des fichiers en batch parallélisés avec 3 ré-essais en cas d'échec
LANGAGES Javascript
FRAMEWORKS, LIBRARIES NextJS, Chakra UI
SERVERLESS SASS Vercel, Sendgrid, Cloudinary
GESTION DE VERSION Git (Github)
OUTILS COLLABORATIFS Github, Slack

React Dashboards : MVP pour une application DRH (2019-2020 - 10 mois)

Projet :

Mission : J'ai rejoint une petite équipe pour une startup oeuvrant dans le milieu de l'AI. Ma mission a été de développer from scratch en technologies open sources une version minimale (MVP) d'une application destinée à montrer les capacités d'aide au managers d'un système de recommandations de missions et d'évolutions de carrière des équipes.

Détails Techniques:

  • Adoption du framework Next.js
  • Portage de composants jQuery en React
  • Création de nombreux composants graphiques personalisés basés sur :
    • Google Charts
    • Google Maps
    • ChartJS
    • composants SVG custom-made
  • Scrapping de pages LinkedIn pour créer une base de CVs
  • Développement de plusieurs micro-services
    • langues parlées dans chaque pays du monde
    • extraction des données d'un CV
    • Mise en place de Kong comme API Gateway
  • Utilisation de Storybook pour tester et présenter l'utilisation des composants React
LANGAGES Javascript
FRAMEWORKS, LIBRARIES NextJS, Google Charts
CLOUD SERVICES AWS, Vercel
IDE VS Code
GESTION DE VERSION Git (Gitlab, Bitbucket)
OUTILS COLLABORATIFS Slack, Notion

TIPAFRANCE (2018 - 2 mois)

Projet : Revamping de la partie front d’un site de vidéos pour le public japonais

Mission : Structuration et conseils sur la rédaction des contenus, développement des composants HTML avec React, publication continue avec Gatsby + git hooks + Netlify .

Détails techniques :

  • Paramétrage du CMS Forestry.io (git-based CMS)
    • Paramétrage de la saisie des contenus
    • Intégration avec le repo git hébergé chez bitbucket
    • Intégration du build Gatsby
  • Création des composants de présentation React
    • Template des pages
    • 5 types de sections (Hero Intro, 1 colonne, 2 colonnes, 3 colonnes, call to action) avec background personnalisable (image fixe ou parallaxe, overlay, dégradé..)
  • Intégration de composants tierces (librairie Antd)
    • Menu de navigation responsive, grille
  • Création d’un plugin source pour Gatsby
    • Parsing d’un arborescence de répertoires et fichiers Markdown+YAML Front-Matter
    • Séparation des données pages et des données globales (site, navigation, seo, ..)
LANGAGES Javascript (Front + SSR)
FRAMEWORKS, LIBRARIES Gatsby (a progressive web app generator), Ant Design
CMS Forestry.io
IDE + OUTILS DEDIES VS Code
GESTION DE VERSION Git (Bitbucket)
OUTILS COLLABORATIFS Bitbucket, Podio

Mathforu (2018)

Projet : Reprise d’un forum de mathématiques et ajout d’un site de contenu de cours

Mission : Sur ce projet pour un client indépendant, j’ai du migrer un forum PHP vers nodeBB et utiliser un générateur de pages statiques pour créer le contenu fixe (fiches de cours, présentation du service)..

Pour la partie génération du site statique je souhaitais initialement utiliser un CMS de la JAMStack comme Netlify CMS ou Forestry, mais ils ne supportaient pas encore des structures de données hiérarchiques complexes. Je me suis donc reporté sur Statamic, le CMS à fichiers plats (Markdown+YAML) et un générateur de site statique node.js : Metalsmith avec le moteur de template Handlebars.

Détails techniques :

  • Migration d’un forum NukePHP vers NodeBB
  • Scrapping des pages de l’ancien site
    • Transformation du HTML parsé en Markdown + Katex pour les images cgi représentant des formules mathématiques.
  • Génération des pages statiques
  • Création de plugins pour Metalsmith : gestion des variables globales, breadcrumbs
    • Création d’un système de surveillance qui reconstruit les pages dès qu’un fichier contenu change dans le CMS
  • Intégration d’un éditeur Markdown (SimpleMDE) avec prévisualisation dans Statamic (expressions mathématiques + intégrations de contenu riche)
  • Création d’un bundle markdown proposant de nombreuses extensions : katex, table des matières, contenu riche comme Geogebra, Youtube Vimeo, ou PDFs..
LANGAGES Javascript (Front + Static site generator), Markdown, YAML
FRAMEWORKS, LIBRARIES Metalsmith, Handlebars, Less, Bootstrap
CMS Statamic (CMS), Nodebb (forum)
PROTOTYPAGE Bootstrap Studio, Bootstrap Live Customizer
JAMStack Statamic (Markdown with YAML Front matter) + Metalsmith
GESTION DE VERSION Git (Bitbucket)
OS Linux Debian
OUTILS COLLABORATIFS Podio

UNEP (2017)

Projet : Refonte totale du site de l’Union Nationale des Paysagistes

Mission : Sur ce projet au long cours, ma tâche était de développer l’infrastructure nécessaire du back-office pour plusieurs fonctionnalités clé (recherche géocentrique, consultation de documents), et de fournir également une série de composants front-end spécifiques.

Détails techniques :

  • Implémentation d’une service de recherche full text géolocalisé sur la base des adhérents actifs
  • Création de vues sur la base SQL Server du CRM
    • Création de scripts de synchronisation chargés de mettre à jour la base ElasticSearch avec les fiches adhérents
    • Utilisation des APIs Google Places et Google Maps pour pouvoir localiser les adhérents dans ElasticSearch à partir de leur adresse postale (souvent fautive)
    • Implémentation du service de recherche multi-critère en node.js : API JSON créée sur server.js avec interrogation de la base ElasticSearch
  • Réalisation d’une carte des régions de France interactive
  • Création et optimisation de la carte en SVG
    • Intégration dans une page avec synchronisation d’une liste des régions
  • Création d’un service de recherche/consultation de documents PDFs. Les documents étant stockés dans des blobs (!) dans la base SQL Server du CRM. Il faut les indexer pour pouvoir lancer des recherches full-text dessus, et les rendre accessibles dans l’espace membre des adhérents.
  • Utilisation du client SQL Server et de la librairie pdfkit pour extraire les PDFs des blobs et les indexer dans ElasticSearch avec leur contexte hiérarchique.
    • Recréation d’une arborescence virtuelle des documents dans le système de fichier des assets du CMS pour pouvoir utiliser le composant d’exploration hiérarchique. Les fichiers créés ne sont que ces placeholders (des fichiers YAML pointant vers les vrais documents en base)
    • Implémentation du service de visualisation des documents PDFs à la demande.
  • Création de plugins PHP pour Craft CMS pour lancer et visualiser les résultats des scripts de synchronisation entre le CRM et le CMS.
    • Intégration du composant Algolia Places en remplacement de Google autocomplete car l’API Google ne permettait pas de restreindre les lieux retournés à la France métropolitaine et à ses DOMs et territoires d’Outre mer.
LANGAGES Javascript (Front + services back) + PHP (CMS)
FRAMEWORKS, LIBRARIES Flatiron (a decoupled, express-compatible framework), jQuery
CMS Craft CMS
APIs Google Places, Google Maps
SERVEURS APPLICATIFS Server.js
IDE + OUTILS DEDIES Inkscape, SQuirrel, MySQL Workbench, cron
GESTION DE VERSION Git (Bitbucket)
SGBD MS SQL Server (CRM) + ElasticSearch (search) + MySQL (CMS)
OUTILS COLLABORATIFS JIRA + Bitbucket, Podio

TOLLENS (Janvier 2015 - Juin 2015)

Projet : Développement du premier prototype de l’application mobile Tollens (qui deviendra plus tard my.tollens.com)

Mission : Sur ce projet, réalisé au sein d’une équipe de freelances, j’ai été chargé de développer le MVP d’une application mobile pour les chefs de chantier. Les fonctionnalités étaient : recherche de produits dans la gamme Tollens, ajout au panier, choix d’un magasin Tollens autour du chantier pour retirer la commande dès sa préparation, envoi et suivi de la commande via les web services du back-office. Le back-office a été réalisé en C# par un autre prestataire, sur les bases d’une API spécifiée en mode collaboratif avec API Blueprint et l’outil Apiary.

L’application mobile était en fait une vraie application web, controlée par un CMS (Statamic) mais totalement optimisée pour les clients mobiles grâce au framework App Framework d’Intel (une version allégée de jQuery Mobile). Ce type d’application mobile first allait devenir ce qu’on nomme aujourd’hui PWA : Progressive Web Application.

Détails techniques :

  • Spécification d’une API B2B privée
  • Création du modèle de données nécessaires au domaine de l’application
    • Spécification de l’API REST grâce au langage API Blueprint
    • Création des mocks grâce au service apiary.io
  • Développement de l’application web mobile (PWA)
  • Utilisation du framework mobile AppFramework d’Intel pour la navigation interne (une version light de jQuery Mobile)
    • Utilisation du framework MVVM Knockout.js pour rendre les pages complexes (recherche produits + panier)
    • Développement de composants webs réutilisables avec la librairie x-tag de Mozilla
    • Intégration des itinéraires Google Maps pour guider l’utilisateur vers le magasin de son choix
LANGAGES Javascript (Front) + C# (back-office)
FRAMEWORKS, LIBRARIES App Framework, Knockout.js, x-tag
CMS Statamic
APIs Google Maps
IDE + OUTILS DEDIES Apiary
GESTION DE VERSION Git (Bitbucket)
SGBD MS SQL Server (back-office)
OS Windows Debian
OUTILS COLLABORATIFS Assembla

VIOLET - MINDSCAPE (2008-2010)

Projet : Conception-prototypage d’une plateforme applicative (PaaS) pour l’Internet des Objets

Mission : J’ai intégré la startup Violet (créateur du lapin Nabaztag) pour m’occuper exclusivement de la mise en place d’une plate-forme applicatives pour les objets connectés.

A la suite de la banqueroute de Violet au moment ou une première version de la plateforme était déjà utilisée en interne pour créer de nouvelles applications, le projet a été repris à zéro par Mindscape mais subira le même sort.

Détails techniques :

  • Architecture d’une Plateforme applicative dans le cloud (PaaS)
  • Utilisation de nombreux design pattern : bus de messages, pool de workers, publishers/subscribers
    • Spécifications des services internes de provisionnement et de runtime des applications, ainsi que des services publics (API REST)
    • Spécification d’un langage de commandes extensible au format JSON : chaque classe d’objet connecté comme Nabaztag ou le Mirror peut implémenter tout ou partie des modalités d’expressions de base (envoi de message texte via mail, sms ou hangouts, lecture d’un fichier média) et avoir des propres modalités d’expression propres à sa classe (clignotement de LEDs colorées, chorégraphie pré-enregistrée..)
  • Création d’un runtime d’applications JS sandboxé
  • Utilisation de la librairie Rhino pour fournir un contexte d’exécution protégé (sandbox) aux applications, avec injection de dépendances.
    • Création d’un toolkit JS pour simplifier l’envoi de messages à destinations de n’importe quel objet connecté.
    • Possibilité d’avoir des applications statefull restant en mémoire dans Hazelcast (utile pour des applications temps réel)
LANGAGES Java (PaaS) + Javascript (applications)
FRAMEWORKS, LIBRARIES Rhino, Hazelcast
ARCHITECTURE Event Driven Architecture
CONCEPTION Diagrammes de classes UML
GESTION DE VERSION Svn puis Git
OS Linux Ubuntu
METHODOLOGIE Agile (sprints d’une semaine avec réunion de replanification tous les lundis)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment