Paper Globe : le retour !

Joachim

Il y a dix ans, j’ai vu une maquette de globe terrestre sur le net, et je me suis dit que je voulais la même. L’acheter en ligne était alors impossible, donc j’ai tout recalculé, tout reverse-engineeré, et tout publié sur un petit site : Le Paper Globe. Le site a vécu sa vie, et j’ai reçu de temps en temps un email depuis l’autre bout du monde, avec une photo d’un globe fraichement monté. Des classes l’ont utilisé, il a été reproduit au sein d’un petit livre de poésie, il a beaucoup voyagé, et c’est super.

Cette année, au début de l’été, j’ai reçu l’email d’un professeur de collège avec une requête qui m’a tout de suite intéressé. Il projetait d’étudier Mars avec ses élèves, et me demandait s’il était possible d’utiliser n’importe quel fond de carte comme base pour le gabarit du Paper Globe.

En 2012, c’était mon but, mais je ne savais absolument pas comment aborder ce problème : j’étais tout juste en train de me rediriger professionnellement, du design au développement web. Après dix ans à me former sur le tas dans divers domaines, du HTML/CSS à Python et Javascript, en passant par la création et l’administration de diverses applications web, je me suis dit que ça pouvait valoir le coup d’essayer.

La première étape a été de voir comment déformer un carré sur une projection cartographique en un trapèze ou un triangle en gardant les bonnes proportions. La bibliothèque de manipulation d’image ImageMagick propose ça, donc j’ai décidé d’utiliser le wrapper Wand pour Python, qui donne accès aux fonctionnalités d’ImageMagick dans un langage de programmation que je connais bien.

Après une semaine à penser déformations, images, angles, positionnement, masques d’opacité, format PDF, etc., j’ai publié l’utilitaire en ligne de commande Paper Globe. Cet utilitaire prend une image en entrée, et génère un fichier PDF. L’image doit être un fond de carte dans une projection adaptée (plate carrée, Gall équidistante ou Mercator), et le PDF généré est un gabarit de Paper Globe prêt à l’impression/découpage/pliage/montage (en format A4 ou Lettre US).

Mais je ne me suis pas arrêté là : le prof qui m’avait contacté ne pratique pas la ligne de commande, donc j’ai décidé de rentre mon outil le plus universel possible, via une interface web.

Le souci avec le traitement via le web, c’est que la tâche de transformation d’image et de génération du PDF prend trop de temps pour permettre un chargement normal de la page du résultat. Pour résoudre ce problème il me faut deux choses :

  • Un service web, pour fournir les pages et envoyer les gabarits aux navigateurs une fois qu’ils ont été générés
  • Une fonction qui fait le traitement de l’image via l’utilitaire Paper Globe de manière asynchrone

C’est grâce aux choses que j’ai apprises en collaborant à Bookwyrm que j’ai fait mes premiers choix techniques, et que j’ai ensuite pu les adapter aux besoins de mon app.

En gros, il me faut une base de donné toute simple pour garder trace des transformations (une table, moins de dix colonnes), donc j’ai choisi SQLite. Pour le traitement asynchrone, Celery + Redis me paraissaient très bien faire le travail. Pour l’application elle-même, j’ai utilisé Flask, un framework web très simple en Python, que j’ai déjà utilisé pour rewind.website.

Pour la partie front-end, j’ai voulu éviter d’ajouter une grosse infrastructure d’application front actuelle—pas de compilation côté serveur, pas d’environnement Node.js, le moins possible de code à exécuter du côté du client. Le site doit pouvoir fonctionner sans JavaScript, mais peut avoir des fonctionnalités proches d’une app web moderne si le JS est activé. Pour permettre cette approche, je me suis tourné vers HTMX, une manière d’apporter des comportements d’app moderne dans un environnement de développement plus classique. Ce choix m’a permis d’expérimenter les sujets que j’aborderai dans ma prochaine mission professionnelle (il faudra que j’en parle le moment venu).

Après deux ou trois semaines de développement j’ai publié le projet PaperGlobe-Web, que j’ai ensuite déployé sur le site paperglo.be.

Image qui montre le Paper Globe. Le lien renvoie sur le site de l’outil.
Cliquez pour accéder au service

J’ai donc le plaisir de vous inviter à générer/imprimer/couper/plier/monter des globes en papier !

Et si vous trouvez des problèmes, prévenez-moi sur le Fediverse ou sur Twitter !