Jonathan Nifenecker

Senior Python developpeur

Animé par une soif constante de comprendre les choses en profondeur, je suis passé de l'électronique embarquée (ma formation initiale) au développement backend (mon parcours professionnel) et j'approfondis mes connaissances en autodidacte sur les technologies serverless d'AWS (avec pour objectif une certification à terme).

Débrouillard et autodidacte (merci à mon temps passé au Hackerspace/fablab), je suis capable de naviguer rapidement dans votre base de code.

J'aime relever des défis techniques, logiques ou mathématiques. J'ai notamment résolu le Rubik's cube en 4D et je prends les compétitions de bots sur Codingame trop au sérieux. J'explore avec plaisir de nouveaux domaines en mettant mes compétences à votre service pour résoudre vos problématiques.

Besançon, France

Formations

Université de Technologie de Belfort-Montbéliard

Diplôme Génie Électrique, filière Électronique et Systèmes Embarqués
février 2007 – janvier 2012

Expériences

Freelance

Senior Back-End Développeur Python
janvier 2024 – actuellement
détails

À la suite d'une rupture conventionnelle avec mon précédent employeur, je me lance dans l'aventure du freelance. Cela me permet:

  • de prendre du temps pour avancer quelques projets personnels,
  • suivre des cours AWS afin d'obtenir une certification,
  • de rester à l'écoute du marché et attendre la bonne occasion
  • avancer sur un projet personnel : jeux de logique 'daily' comme sumplete ou mathler.
Senior Back-End Développeur Python
août 2023 – décembre 2023
détails

Après avoir assuré le rôle de leader de l'équipe API pendant une période de transition importante pour l'entreprise, je suis passé à un temps partiel (80 %) pour m'occuper de mes enfants.

J'ai logiquement aidé au recrutement et à la formation de mon remplaçant.

Mes fonctions sont restées globalement les mêmes (à l'exception de l'organisation).

  • Participation à la migration de notre infrastructure vers AWS et à la gestion des conséquences qui en découlent.

  • Dockerisation et instrumentation Prometheus de notre proxy mitm legacy.

  • Collaboration avec un devops pour déployer une stack complète sous Kubernetes et résoudre les problèmes au fur et à mesure.

  • Une première expérience sur l'utilisation de Kubernetes et des charts Helm.

  • POC d'une réécriture complète de notre proxy mitm legacy, en utilisant mitmproxy.

Technical Lead API
février 2022 – août 2023
détails
  • Recrutement : mener les entretiens techniques et d'adéquation pour constituer l'équipe de développement API (passée de 1 à 5 personnes).

  • Organiser le transfert de connaissances : exercices d'onboarding, formations sur le backend, documentation.

  • Responsable de deux repos : API Backend et notre proxy mitm interne. J'en assure la maintenance, les releases et suis le contact pour toutes les questions techniques les concernant

  • De nombreuses revues de code (étant souvent considéré comme la personne à contacter)

  • Participation à l'établissement et à la validation des spécifications des nouvelles fonctionnalités.

  • Préparation des séances de grooming.

Senior Back-End Développeur Python
mai 2020 – février 2022
détails

Développement sur le backend de l'entreprise, offrant une API REST permettant d'automatiser la récupération d'informations financières sur les utilisateurs.

Stack technique : Python, Werkzeug (framework web de bas niveau, notamment utilisé par Flask), SQLAlchemy, MariaDB, Docker, GitLab CI.

Suite à des départs et à une réorganisation, j'ai été le seul développeur de l'équipe API pendant 6 mois.

  • Conception et développement de nouvelles fonctionnalités.

  • Maintenance : réduction de la dette technique (la base de code a 10 ans).

  • Audit des cas particuliers remontés par nos clients en soutien à l'équipe support. Je suis notamment efficace pour croiser nos nombreuses sources d'informations et de logs

  • Collaboration avec différentes équipes, notamment celles dédiées au web scraping et à la data science.

Developpeur backend Python
mars 2019 – mars 2020
détails

Cryptobox est à la pointe de la technologie de stockage collaboratif en ligne sécurisé. Fort de plusieurs brevets, notamment pour la récupération d'un mot de passe dans un contexte 0-knowledge, c'est la seule solution de ce type certifiée par l'ANSSI [en 2020] pour le stockage en ligne de documents classés "diffusion restreinte"

J'étais l'un des deux développeurs backend du projet, dans une équipe de 6 personnes au total travaillant sur ce produit. (Les bénéfices de ce projet étant marginaux au global, il s'agit d'un side-project chez Thales.)

  • Maintenance et ajout de fonctionnalités à l'API

  • Création et optimisation de requêtes SQL complexes (sans ORM)

  • Refactorisation de l'existant pour réduire la dette technique

  • Ajout de nombreux tests. Tout étant chiffré en base avec des clés détennues seulement par les utilisateurs finaux, le debug d'erreurs est extrèmement complexe sur des instances de production.

Netatmo

Développeur C embarqué
septembre 2017 – mars 2019
détails

Développement du protocole RF permettant de piloter un parc de volets roulants de la marque Bubendorff à l'aide d'une carte hardware interne. (produit fini : iDiamant)

Le protocole étant figé et le parc installé étant important, ne suivant pas toujours les recommandations radio actuelles, de nombreuses astuces et du rétro-engineering ont été nécessaires pour assurer une qualité de communication radio, tout en respectant les contraintes inhérentes au sujet (temps d'occupation des canaux radio, préservation des batteries pour une partie des volets).

La majeure partie de mon temps était consacrée au développement de C embarqué bas niveau sur microcontrôleur. Un certain nombre de scripts Python ont été développés, notamment :

  • la génération automatique de headers définissant la matrice des fonctionnalités disponibles pour chaque type de modèles.
  • le décodage 'human-readable' de logs radio hex-encodés lus en temps réel par une passerelle.
  • étude de la précision atteignable par un code C calculant sans FPU l'heure du lever/coucher du soleil. Le script Python calculait la référence exacte et parcourait les possibilités (position GPS, jour de l'année).

En poste du début du projet jusqu'à sa commercialisation. Premier développeur à temps plein sur ce projet, j'ai travaillé seul pendant les 6 premiers mois, puis en équipe de 2 le reste du temps.

lagalenebleue

Indépendant
octobre 2016 – avril 2017
détails

Temps passé à développer et estimer la viabilité commerciale d'un projet personnel: utiliser le boîtier d'une radio vintage des années 20 pour y intégrer un lecteur multimédia intelligent connecté. Le prototype permet:

  • de lire les fichiers du réseau local et sur internet (via youtube-dl).
  • la gestion de playlists/podcasts et réveil utilisant ces derniers, via les boutons physiques de la radio.
  • interface web accessible en local, compatible avec le protocole MPD.

Au final, la viabilité commerciale de ce projet n'était pas assurée et le ratio gain/investissement était bien moins intéressant qu'un CDI dans mon domaine avec mes compétences.

  • Apprentissage autodidacte: Flask, SocketIO, Angular.js, Bootstrap.

  • Création d'un plugin Python pour Mopidy, permettant le streaming depuis le site radiooooo.com

  • Développement bas niveau Linux sur BeagleBone/Raspberry Pi pour la gestion d'un DAC audio

  • Développement d'une API Flask pour faire la liaison entre le server MPD, les boutons physiques et servir l'interface web personnalisée.

Sophysa

Ingénieur bureau d’études
mars 2016 – septembre 2016
détails

Employé en renfort (CDD) lors de la sortie d'un nouveau moniteur médical 'Pressio2', j'ai développé complètement (POC, schématique, PCB et logiciel) un outil de démonstration destiné aux commerciaux. Cet outil simule des signaux vitaux réalistes et paramétrables (température, fréquence cardiaque, pression artérielle moyenne, amplitude) d'un patient.

Mes autres tâches consistaient principalement en :

  • participer à différentes campagnes de tests afin de valider des modifications de processus.
  • corriger des bugs logiciels ponctuels sur différents équipements développés en interne.

La partie conception de A à Z de l'électronique me convenait tout à fait, mais le reste beaucoup moins. La majeure partie de mes 6 mois a été consacrée à la conception, en raison du besoin particulier lié à la sortie du produit. Par la suite, cela n'aurait représenté qu'une proportion marginale de mon travail. C'est pourquoi j'ai décidé de ne pas poursuivre dans cette entreprise à la fin de mon CDD.

Institut Polaire Français Paul-Emile Victor

volontariat de service civique (Instrumentation)
octobre 2014 – février 2016
détails

Présent pendant 14 mois sur la base Alfred Faure dans archipel de Crozet. C'est une base militaire et scientifique isolée, composée de 24 à 36 personnes. Employé pour la partie scientifique, j'étais le relais logistique de l'IPEV sur place et le support technique des scientifiques au quotidien. Le poste pouvait se résumer à "faire ce qui est nécessaire pour que les études scientifiques puissent se dérouler le mieux possible".

  • Assure en binôme le suivis et la continuité des mesures pour différents observatoires des sciences de la terre (orbitographie, géomagnétisme, sismologie, marégraphie, prélèvement d'air)

  • Réparation d'appareils électroniques divers (balance de précision, spectrophotomètre, magnétomètre à proton, connectiques, vérification annuelle des appareils médicaux, etc).

  • Développement d'outils en Python avec les données d'OpenStreetMap : génération de fonds de carte Garmin spécifiques simplifiant les sorties aux scientifiques selon leurs besoins.

  • assistance à l'anesthésie pour les opérations chirurgicales de prélèvements de muscle sur les manchots.

  • manipulation d'animaux, mesures et collecte d'échantillons (manchots, albatros, insectes, escargots, etc.).

Alstom Transport

Ingénieur électronique
septembre 2012 – septembre 2014
détails

Recherche, proposition et validation de solutions techniques pour gérer les obsolescences de composants sur l'ensemble des produits d'Alstom Transport.

Toutes les technologies ont été traitées : composants discrets, circuits intégrés (principalement mémoires et logique) et composants programmables (microcontrôleurs/DSP et FPGA).

  • Études de solutions complètes, du remplacement pin à pin compatible au redesign plus ou moins local des cartes électroniques.

  • Responsable des analyses de codes existants pour les remplacements de composants programmables afin d'identifier l'ensemble minimal des périphériques et caractéristiques nécessaires.

  • Création d'un outil de scrapping en Python des données métier (schémas affectés) sur un outil interne extrêmement lent.

  • Automatisation partielle en Python de la partie documentaire : détection et extraction des tableaux de caractéristiques de composants dans des PDFs (datasheets) pour les comparer.

Projets personnels notables

miam

Un site pour générer une liste de courses à partir de recettes choisies parmi un catalogue scrappé d'un service de livraison à domicile.

N'hésitez pas à me demander un compte si vous voulez tester/voir.

Python Serverless AWS Fastapi Alpine.js dynamodb Zappa lambda Webscrapping

personal iot API

Une API privée me servant pour mes différentes projets électroniques connectés.

Exemple de l'URL: génération d'image à la demande pour l'affichage sur un panneau E-Ink. Ici, la météo par demie-journée, pluie dans l'heure et les prochains passages de tram. Les librairies de scrapping, manipulation d'images et de textes sur les systèmes embarqués étant vite limitée.

Chaque projet a son router Fastapi dédié.

Python Serverless AWS Pillow Fastapi Zappa lambda

Solving Temple Trap

Génération de puzzles supplémentaires difficiles pour le jeu SmartGames Temple Trap. Trouvés par un parcours exhaustif de tous les états possibles du jeu. Le calcul parallélisé a été fait en quelques heures sur un calculateur EC2 à 72 cœurs. Le résultat final est un jeu de cartes à imprimer.

Python AWS EC2 compute optimized Logic game printed card

Solving Fold It

Création de puzzles sur le modèle du jeu Fold-It pour une taille de 6x6 (format initial : 4x4). Parcours exhaustif des états de jeu possibles. Création de motifs pour impression sur tissu et d'un jeu de cartes.

Python AWS EC2 logic game printed card

QR-code escape

Création d'un escape game papier pour un week-end entre amis. Le PDF ne vous sera pas très utile sans les instructions de préparation, mais il montre les détournements faits sur des QR-codes. Les résoudre/compléter les rend lisibles.

Python logic game Pillow

Publications

Python Advanced Interview: Method vs Function (or Staticmethod vs Classmethod)

Une investigation pas à pas sur les différences en Python sur les fonctions et les méthodes. L'article est écrit en suivant la problèmatique suivantes: comment "monkey patcht" une méthode d'une seule instance d'une classe ?

Achievements

Magic cube 4d

379ème personne à résoudre le rubik's cube en 4 dimension (2018)

Code competition

Langues

Anglais

Bilingue

Échange linguistique de 3 mois au Canada (2003). Stage de fin d'étude au Tyndall National Institute en Irlande (2011). Road-trip de 5 mois en Australie (2012)

Français

langue maternelle