Rétrospective
Les 3 ans passés chez JMSinfo SAS m'ont permis d'affûter grandement mes connaissances en Python, de découvrir l'incroyable crossbar.io en autres, et surtout d'avoir pu mettre au point des solutions logicielles innovantes et intéressantes à développer. Ce fût une très bonne expérience à tout point de vue et souhaite bon vent à mon frère pour la suite des événements.
Nouveau job
Python Lead Developer chez Nuxeo !
Nuxeo, c'est une plateforme pour la gestion de contenu structuré utilisée par de grosses enseignes. Un beau morceau.
Je prends la tête du développement de Nuxeo Drive, un logiciel de synchronisation bidirectionnelle des contenus entre le poste de travail et la base documentaire Nuxeo. Pour faire simple, il s'agit d'une sorte de client OwnCloud, DropBox ou Google Drive spécialisé pour la plateforme Nuxeo.
De grands défis m'attendent :
- repenser l'architecture ;
- améliorer la batterie de tests ;
- générer une documentation digne de ce nom ;
- corriger les bugs remontés par nos clients ;
- ajouter de nouvelles fonctionnalités ;
- et tout le reste, il y a de quoi faire !
Et j'ai hâte de m'y mettre ☺
Le bonus de l'histoire, c'est qu'à Nuxeo, nous croyons au FOSS et quasiment tout se trouve sur GitHub :
L'autre bonus, et non des moindres, c'est que les quelques personnes avec qui j'ai eu des contacts sont juste géniales.
Enfin, la cerise sur le gâteau est leur adage, s'il devait en avoir un : « Respect the Geeks ». Il n'y a rien à ajouter. ❤
Réalisations
« Retrospective en continue... »
Voir aussi Comment Nuxeo contribue à l'écosystème Python ? et Dossier : Python Desktop Application.
Voici un aperçu des améliorations notables que mon équipe (the Drive team ©) a pu faire pour le client lourd Nuxeo Drive :
- 2017-2018 NXDRIVE-969 • NXDRIVE-692 • NXDRIVE-692 : Réduction d'une bonne partie de la dette technique, notamment via une mise à jour majeure de la base de code :
- depuis Python 2.7.10 vers Python 3.7.4 (article à propos de la migration) ;
- depuis Qt 4.11 vers Qt 5.13.1 ;
- depuis une interface graphique réalisée en HTML/JS affichée dans une Qt WebView vers QML ;
- 2018 NXDRIVE-730 : Revue complète de la génération des binaires multi-plateforme :
- macOS : conversion des outils utilisant cx_Freeze, Esky et py2app pour PyInstaller. Au final, un fichier dmg est créé et signé. La signature de code n'a pas été simple à mettre en place, il a fallu patcher PyInstaller, en autre.
- Windows : conversion des outils utilisant cx_Freeze, Esky et py2exe pour PyInstaller. Au final, un fichier exe est créé et signé (InnoSetup). Quelques améliorations ont été apportées, comme notamment l'ajout des propriétés de l'exécutable.
- macOS : conversion des outils utilisant cx_Freeze, Esky et py2app pour PyInstaller. Au final, un fichier dmg est créé et signé. La signature de code n'a pas été simple à mettre en place, il a fallu patcher PyInstaller, en autre.
- 2018 NXDRIVE-1143 : Création d'un module de mise à jour automatique multi-plateforme. Il s'agissait de la meilleure solution, à mon sens, comparé à la seule alternative du moment : PyUpdater (j'avoue ne pas avoir bien saisi son fonctionnement et semblait une usine à gaz pour notre besoin). L'ancien système ne supportait pas GNU/Linux, un peu trop complexe à mon goût et surtout non supporté sur Python 3 (Esky). Le résultat est clair et fonctionnel.
- 2018 : La documentation éparse et obsolète a été grandement revue et améliorée (en constante évolution) : sur GitHub et la documentation Nuxeo.
- 2018 : Un travail énorme sur la QA/CI où nous devons avoir des agents (machines) disponibles et fonctionnels sur GNU/Linux (docker, SSH), macOS (Mac Mini, SSH, VNC) et Windows (VM, Remote Desktop), le tout étant géré par Jenkins. Nous utilisons des Jenkinfiles et scripts pipelines partout (depuis les tests unitaires, fonctionnels et d'intégration, jusqu'à la création des binaires sur chaque OS et les releases alpha/beta).
- 2018 NXDRIVE-1157 : Ajout des icon overlays sur macOS, entièrement réalisée par ma collègue Léa (Swift, FinderSync).
- 2019 NXDRIVE-1467 : Ajout des icon overlays sur Windows, presque entièrement réalisée par ma collègue Léa (C, DLL).
- 2019 : Pour donner un aperçu des nombreuses corrections qui ont été apportées depuis 2017 : le nombre de tickets client (JIRA) de type "bug" est passé de ~140 à < 5 !
- 2019 NXDRIVE-1522 : Introduction des DEP (Drive Enhancement Proposal), fortement inspirés des PEP (Python Enhancement Proposal), et permettant de mettre les idées au clair.
- 2019 NXDRIVE-1714 : L'ajout de la prise en charge du transfert de très gros fichiers (jusqu'à 1 To et plus), avec pause/reprise et gestion des erreurs. Le tout de manière efficiente et sans contraintes : il est toujours possible de transférer plusieurs fichiers en même temps.
- 2019 NXDRIVE-1408 : Support officiel de GNU/Linux. Ce n'était pas le cas avant où seules quelques personnes de l'équipe en faisait usage. Pour n'importe qui d'autre, les étapes d'installation nécéssitaient un temps fou, comprenant la compilation de Qt et d'autre modules. Maintenant, il n'y a plus rien à faire, simplement à télécharger un fichier. La mise en place d'une chaîne de compilation pour générer un binaire universel au format AppImage nous a pris un certain temps, mais le résultat est impressionnant (PyInstaller, docker).
- 2019 NXDRIVE-1835 : Nouvelle fonctionnalité, le Direct Transfer ®. Cela permet d'envoyer n'importe quel fichier ou dossier depuis son ordinateur vers n'importe où sur le serveur. Ceci est parlant dans le fait que ces actions sont impossibles en temps normal : tout transfert se fait au sein de racines de synchronisation ; maintenant le Direct Transfer permet de faire plus. Il faut voir ça comme un complément à Nuxeo Drive, mais qui en fait partie intégrante. Je connais Aspera qui fait un peu la même chose, mais sans bénéficier de ce que Nuxeo Drive apporte.
- 2019 NXDRIVE-1710 : Nouvelle amélioration notable du processus de release. L'idée, c'est de pouvoir sortir une nouvelle release (alpha ou beta) seulement si la mise à jour automatique fonctionne parfaitement ; testant au passage que l'application se lance correctement et est bien intégrée au système. Nous avons donc mis en place un script Python pour automatiser les tâches sans qu'aucune action manuelle ne soit requise :
- création des binaires et installeurs pour la version actuelle ;
- création des binaires et installeurs pour la version N-1 ;
- mise en route d'un serveur local de mise à jour ;
- installation de la version N-1 en utilisant l'installeur fraichement généré ;
- démarrage de la version nouvellement installée ;
- (l'application se met à jour automatiquement 🤞)
- vérification de la bonne mise à jour effectuée.