Site web
C’est toujours en développement, mais j’ai passé plusieurs heures à travailler sur deux grosses améliorations pour le site :
Mode sombre 😍🌚
À chaque fois que je vais sur notre site la nuit, ça me brûle les yeux 😵 En tant que développeur, je sais à quel point le mode sombre est important, et j’ai essayé plusieurs techniques pour le configurer ici. Pour éviter les FOIT – Flash Of Incorrect Theme – (voir le Guide Complet pour le Mode Sombre sur le Web de CSS-Tricks), j’ai décidé de partir sur la version CSS pur au niveau du système d’exploitation. Malheureusement, on utilise Bootstrap, qui ne supporte pas le mode sombre. Après de nombreux essais avec Bootstrap, et après avoir essayé des alternatives comme Halfmoon, je n’ai pas réussi à trouver un bon équilibre entre simplicité et prise en compte du mode sombre.
Comme on est toujours très occupés à développer notre logique métier, j’ai décidé de rester avec Boostrap, pour éviter d’avoir à réécrire un thème CSS entier pour le site, mais en utilisant la surcharge de variables SCSS pour permettre le mode sombre. J’ai eu des problèmes, mais c’est en bon chemin.
Tags 🏷
On n’a pas encore beaucoup d’articles, mais il nous faut quand même des tags pour organiser les sujets. Hugo propose des outils très utiles pour l’utilisation de tags, donc ce n’était pas très difficile. C’est bientôt prêt, mais je le publierai en même temps que le mode sombre.
Redirection des GitHub Pages
Tâche très simple, mais j’ai juste configuré GitHub Pages pour rediriger monkiprojects.github.io vers docs.monkiprojects.com.
Cette partie est destinée à des développeurs(euses). Vous pouvez essayer de la lire sans l’être, mais je ne vous promets pas que vous comprendrez 🙃
Spécifications OpenAPI
J’ai passé beaucoup de temps à améliorer le processus de définition OpenAPI pour en automatiser une grande partie. À ce jour, voici ma to-do list :
- Définir des spécifications OpenAPI pour chaque API dans des fichiers dédiés
- Simplifier et continuer de factoriser les spécifications OpenAPI (les rendre plus lisibles)
- Fusionner les spécifications OpenAPI en un seul fichier
- Génerer l’interface Swagger UI pour les définitions OpenAPI fusionnées
- Génerer l’interface Swagger UI pour toutes les définitions OpenAPI (fusionnées et séparées) en utilisant le paramètre
urls
Améliorations de l’API Monki Projects
En plus de développer la plupart des fonctionnalités définies par la spécification de l’API Monki Projects, j’ai configuré SwiftLint, pour avoir un style de code uniforme et faire respecter les conventions de Swift, et Sitrep, pour analyser le code source.
J’ai aussi passé beaucoup de temps sur un bug bizarre de Swift Package Manager… qui venait d’un patch que j’avais fait il y a quelques mois 🤦🏻♂️
Génération automatique des clients d’APIs
Les APIs de Monki Projects sont, en grande partie, du code métier (notre domaine). Nos applications et logiciels sont, en grande partie, du code métier également. Cependant, la communications entre les deux ne l’est pas. C’est pourquoi nous avons décidé de définir des spécifications OpenAPI claires pour toutes nos APIs et d’automatiser la génération du code des clients dans tous les langages. Pour l’instant, on supporte seulement le Swift (car on n’a pas besoin des qutres langages pour l’instant), mais ce serait très simple de générer des clients dans de nombreux autres langages (tant qu’ils sont supportés par OpenAPI Generator).
Le générateur de client Swift est toujours en développement, donc le code qu’il génère n’est pas aussi bien que ce que l’on voudrait (voir OpenAPITools/openapi-generator#8901, mais on va l’utiliser pour l’instant afin de gagner du temps, et on contribuera plus tard si besoin.
Vues SwiftUI réutilisables
On développe une application, sur iOS pour l’instant (ne vous inquiétez pas, Android arrive derrière, c’est pourquoi on dépense autant d’énergie à tout séparer et spécifier), mais il y aura aussi des applications macOS et iPadOS. Ansi, on a besoin d’avoir des vues réutilisables pour rendre le développement plus rapide et avoir une identité d’application de qualité. Ça facilitera aussi la maintenance, la lisibilité et permettra à n’importe qui de réutiliser les vues de Monki Map (et toutes celles de Monki Projects par extension) dans leurs projets.
J’ai passé beaucoup de temps à mettre en place l’architecture et l’automatisation mentionnés plus haut, donc l’application a dû être mise en pause. Cependant, j’ai créé une petite application macOS en quelques heures – vous voyez la puissance d’avoir bien découpé le code ? – qui permet à quelqu’un de créer un compte, se connecter, se déconnecter, voir la liste des utilisateurs et la liste des lieux publiés/soumis à vérification. C’était juste un petit projet pour tester l’infrastructure (avec succès) et pour trouver des problèmes (avec succès aussi 😭), c’est pourquoi il n’est pas encore sur GitHub.
Géneration automatique de diagrammes
Je suis quelqu’un de visuel, et je trouve que ces articles manquent de diagrammes et d’images. Pour rendre ça plus simple, j’ai décidé de scripter l’utilisation de Kroki pour générer des diagrammes à partir de leur représentation textuelle. Ça a l’avantage de permettre le versionnage (avec git
) et a une très grande portabilité (puisque ça utilise des outils Open-Source avec des formats communs).
- Utiliser Kroki manuellement
- Scripter la génération des diagrammes
- Ajouter un cache pour éviter la génération inutile de diagramme
- Stocker le hachage des fichiers (SHA-256)
- Nettoyer le cache des hachages de fichiers d’entrée supprimés
- Détecter les fichiers de sortie supprimés (même si le hachage du fichier d’entrée est dans le cache)
- Permettre les formats de sortie multiples (ex : savoir que
diagram1.svg
est généré mais pasdiagram1.png
)
- Ajouter un vidage du cache en cas de problème (option
-f
pour forcer la génération) - Écrire une documentation d’utilisation du script
- Permettre la génération en dehors de monki-projects-api-specs
- Créer un
git
hook / une GitHub Action pour générer automatiquement les diagrammes lors d’ungit push
- Prendre en charge les paramètres du script proprement