Kosmorro : objectif 1.0 !

Temps de lecture : 7 minutes

Deux ans, quatre mois, plus de 350 commits, pas tant de maux de tête que ça. C'est ce qu'il aura fallu pour parvenir à avancer une version 1.0 de Kosmorro.

Kosmorro, c'est pour moi l'histoire d'un projet totalement fou, dont jamais je n'aurais pensé jusqu'à l'existence il y a seulement deux ans et demie. Le plus gros projet que j'aie pu créer, à vrai dire, en terme de complexité. Il a connu de multiples évolutions depuis son annonce, et même depuis l'article de mise à jour de l'an dernier.

Kosmorrolib : la librairie qui fait tourner Kosmorro

À ses tous débuts, Kosmorro possèdait un répertoire, nommé kosmorrolib, contenant l'ensemble du code de Kosmorro. Non seulement la logique de calcul, mais aussi ce qui lui permettait d'interagir avec l'utilisateur dans le terminal.

Même si ça fonctionnait très bien, ça a très vite posé un problème, et un gros : en effet, en plus de l'interface en ligne de commande, j'ai prévu d'autres projets, notamment une interface graphique. Tous ces projets doivent reprendre la même logique de calcul. Or, tel que Kosmorro était bâti, deux choix s'offraient à moi : soit j'ajoutais systématiquement le programme en ligne de commande afin de profiter de ses capacités de calcul, soit je devais inclure les nouveaux projets dans celui de Kosmorro.

Aucune des deux solutions ne me convenaient : la première parce que cela signifiait qu'on ajoutait un programme en dépendance alors qu'on n'en a en fait pas tant besoin que ça, la seconde parce que ça signifiait créer un méga-dépôt qui deviendrait extrêmement difficile à maintenir avec le temps.

J'ai donc entrepris d'exporter toute la logique de calcul afin qu'elle soit désormais dans son propre paquet, que les développeurs nomment librairie (ou bibliothèque pour ceux qui se la pètent à ne pas utiliser des anglicismes comme tout le monde 👀), de sorte que Kosmorro ne soit désormais plus qu'une sorte de coquille vide y faisant appel afin de présenter les résultats de ses calculs d'une façon toute belle.

Schéma vulgarisant la communication entre Kosmorro et la Kosmorrolib. Kosmorro (dans un terminal) : « Bonjour, est-ce que tu peux me donner les éphémérides, la phase de la Lune et les événements pour le mardi 2 novembre 2021, s’il te plaît ? ». Kosmorrolib : « Mais bien sûr ! Tiens, voici les éphémérides et la phase de la Lune pour cette date. Par contre je n’ai pas trouvé d’événement, tu m’en veux pas, hein ? »

Une discussion classique entre Kosmorro et la Kosmorrolib. Oui, les programmes aussi sont polis.

Cette nouvelle architecture présente deux avantages conséquants :

  • elle est bien plus simple (dans le sens du principe KISS), dans la mesure où elle permet de séparer la logique de calcul en elle-même (désormais appelée la Kosmorrolib) et celle permettant d'afficher les résultats desdits calculs (le programme Kosmorro) ;
  • c'est bien plus maintenable. Si un bug est découvert dans la Kosmorrolib, il n'y a aucune nécessité de mettre à jour Kosmorro, et vice-versa. Conséquence directe, tout autre programme utilisant la Kosmorrolib profitera des mises à jour de cette dernière sans avoir besoin de subir la moindre mise à jour.

Tout comme Kosmorro depuis ses débuts, la Kosmorrolib est distribuée sous licence libre, ce qui signifie que tout le monde peut l'intégrer à son propre travail. Attention cependant, la licence n'est pas tout à fait la même selon la version que vous choisirez :

  • les versions antérieures à la 1.0 sont sous licence CeCILL-C ;
  • à partir de la version 1.0, la licence passe en GNU AGPL.

La librairie est conçue pour être facile d'utilisation : pas de calcul compliqué à réaliser. Une fois que vous avez installé la librairie, importez-la dans votre programme Python, et vous obtenez un accès direct à toutes les fonctions disponibles. Par exemple, si vous souhaitez obtenir tous les événements du 21 décembre 2021, procédez comme ceci :

from datetime import date
import kosmorrolib

events = kosmorrolib.get_events(date(2021, 12, 21))
# events = [<Event type=SEASON_CHANGE objects=[] start=2021-12-21 15:59:18.269509+00:00 end=None details={'season': <SeasonType.DECEMBER_SOLSTICE: 3>} />]

Vous obtenez une liste d'objets contenant les événements qui surviendront à cette date. Ici, il y en a un, le solstice de décembre (hiver si vous vivez dans l'hémisphère nord, été dans l'hémisphère sud). Je profite d'ailleurs de ces quelques lignes pour remercier LiamNgn pour sa contribution qui a permis cette détection des changements de saison !

Si vous avez besoin d'aide pour utiliser la librairie, une documentation est bien entendu disponible.

Version 1.0 : la feuille de route !

Désormais suffisamment stable, il est temps pour Kosmorro de basculer en version 1.0 (vous n'imaginez pas à quel point le fait d'écrire cette phrase éveille en moi une excitation intense) ! Mais cela doit se faire avec quelques précautions, c'est pourquoi je vous propose de dresser une feuille de route de l'avenir proche de Kosmorro, de la Kosmorrolib, et des projets à venir liés au projet.

Vous n'y verrez pas beaucoup de dates exactes, car cela dépend de mes disponibilités.

  • Le 1er novembre 2021, sort la version 1.0 de la Kosmorrolib. Elle sera suivie de la sortie de la version 0.10.3 de Kosmorro, qui apportera la compatibilité avec la nouvelle version de la Kosmorrolib, sans toutefois implémenter les nouveaux événements qui y ont été intégrés. Ce sera vraisemblablement la dernière version de Kosmorro avant la 1.0.
  • D'ici la fin de l'année, ce sera au tour de Kosmorro de sortir en version 1.0. Parmi les nouveautés, on pourra lister la compatibilité avec les systèmes Windows 10+, ainsi que le support des nouveaux événements ajoutés par la Kosmorrolib v1.0.
  • Début 2022, commencera le développement de l'interface graphique de Kosmorro. Elle sera également écrite en Python, et utilisera la librairie graphique GTK+, qui est très éprouvée sur toutes les plateformes.
  • 2022 verra également d'autres projets arriver, dont certains traînent dans mes cartons mentaux depuis bien longtemps. Mais je ne vous en dis pas plus pour l'instant…

J'espère que tous ces futurs projets vous plairont autant qu'il me tarde de les réaliser. Je l'ai beaucoup dit ces derniers temps, Kosmorro est le projet le plus ambitieux que j'ai réalisé jusqu'ici, et je souhaite terminer ce billet en remerciant toutes les personnes qui m'ont soutenu dans sa réalisation :

  • mes parents qui me soutiennent depuis le début du projet ;
  • les contributeur⋅rice⋅s qui m'ont aidé pendant plus de deux ans à concevoir, débuguer et traduit, même partiellement, Kosmorro ;
  • toutes les personnes qui viennent me voir sur Twitch pendant que j'avance sur Kosmorro — que vous soyez actif⋅ve sur le chat ou simple lurker ;
  • mes collègues qui me conseillent sur des sujets que je ne maîtrise pas forcément, sur des projets qui ne sont parfois pas encore devenus réalité, et qui m'ont soutenu lorsque j'ai été sélectionné pour tenir une conférence lors des Journées du Logiciel libre de 2021 (finalement annulées).

Merci à tous. ♥