Wololo! convertir de l'open data en geojson vers des tags openstreetmap

wololo monk from age of empire image

L'open data concernant les choses situées géographiquement est une mine d'or d'informations mal foutues. Les transformer en vue de les comparer à ce qui existe dans OpenStreetMap est un travail qui a été réalisé de plusieurs façons par bien des personnes différentes.

Aussi je me devais de réaliser une autre façon de faire cela en me concentrant sur des données au format Geojson. Ainsi est né le projet Wololo. L'idée est d'avoir quelques scripts qui vont prendre un certain jeu de données et y appliquer une configuration de conversion en ignorant les données qui ne rentrent dans aucune partie du convertisseur pour en sortir un autre fichier geojson que l'on peut ensuite examiner dans JOSM ou dans d'autres outils d'analyse.

https://forge.chapril.org/tykayn/wololo

Vous pouvez par exemple voir ce que cela donne sur le jeu de données Data Gouv des bornes de recharge pour véhicules électriques qui contient une cinquantaine de propriétés différentes:

git clone https://forge.chapril.org/tykayn/wololo
cd wololo
npm install
make irve

Le makefile permet de lancer des scripts prédéfinis sur le point d'entrée principal du projet, du Nodejs écrit en TypeScript à qui on donne un fichier à convertir et une configuration de conversion.

ts-node convert_to_osm_tags.ts

Vous avez le fichier geojson qui a suivi les conversions selon le Mapper IRVE, et celui ci contient des tags OpenStreetMap. Ça se passe par ici: https://forge.chapril.org/tykayn/wololo/src/branch/main/mappings/converters/configIRVE.ts

Un petit exemple de la partie tags

Lorsqu'une feature du Geojson d'origine contient des informations sur plusieurs points de charge, on fait une feature de station de recharge (amenity=chargingstation), et si il n'y en a qu'un seul, on un fait une feature de point de charge (amenity=chargingpoint). Les autres propriétés de la feature sont ajoutées selon certaines conditions de clés et de valeurs, puis éventuellement formatées selon les standards déterminés par le Wiki d'OpenStreetMap comme par exemple pour les puissance en kW ou les numéros de téléphone. Les travaux d'intégration des données ouvertes sont documentées dans le wiki OSM, ici par exemple pour les bornes de recharge: https://wiki.openstreetmap.org/wiki/France/data.gouv.fr/Bornes_de_Recharge_pour_V%C3%A9hicules_%C3%89lectriques Ce qui permet de savoir comment convertir les propriétés de l'open data.

J'ai aussi ajouté des tags wikidata concernant quelques opérateurs de stations de recharge.

Faire une conversion peut être assez difficile car les producteurs de données sont plus de 3000 et ont chacun les bras cassés d'une façon différente, ce qui est très courant dans l'open data en général. Comme dit l'adage, garbage in, garbage out: on ne peut faire de bonnes conversions que si les données d'entrée sont bonnes. https://fr.wikipedia.org/wiki/GIGO

Pour limiter cela, des filtres sont possibles si on change le fichier de configuration afin de tester des résultats sur des plus petits ensembles de données, et le convertisseur informe de la présence de filtres activés lors de l'exécution du script principal.

Conversion de clé

Dans un Mapper, c'est la partie qui s'occupe de définir comment on convertit les propriétés de chaque Feature du Geojson:

  const MappingIRVE: MappingConfigType = {
  tags: {
          nbre_pdc: 'capacity',
          siren_amenageur: 'owner:ref:FR:SIREN',
          date_mise_en_service: 'start_date',
          nom_station: 'description',
          // ... etc
  }
}

On convertit la clé "sirenamenageur" en "owner:ref:SIREN" et on garde la même valeur.

Conversion avec des transformations avancées

La configuration accepte aussi les objets JS pour définir quoi faire selon les valeurs. Ici pour la puissance on devrait avoir des kW, mais comme je disais avant, c'est rempli avec les pieds, on applique donc une fonction de conversion qui va se charger de deviner la puissance. La fonction n'est pas définie dans le Mappeur, mais dans le moteur de conversion qui reconnaîtra la clé socketoutputfindcorrespondances pour lancer une fonction sur les données de chaque Feature pour tenter de trouver une valeur correcte.

  const MappingIRVE: MappingConfigType = {
  tags: {
      puissance_nominale: {
          key_converted: 'charging_station:output',
          socket_output_find_correspondances: true,
      }
          // ... etc
  }
}

La fonction qui permet de trouver la puissance des sockets est détaillée dans ce fichier:

Dans les exemples suivants je masquerai la partie autour des exemples se trouvant dans la partie tags

Valeurs conditionnelles

L'accessibilité a été décrite de plusieurs façons, notamment avec la notion de "réservé aux PMR" que je n'ai pas retrouvé dans le wiki d'OSM. J'ai donc mis une conversion de valeur conditionnelle vers "wheelchair=yes" dans le cas de plusieurs valeurs particulières pour la propriété "accessibilitepmr".

accessibilite_pmr: {
    key_converted: "wheelchair",
    conditional_values: {
        "Accessibilité inconnue": {
            ignore_this_data: true, // ne pas ajouter de tag wheelchair si la valeur est égale à Accessibilité inconnue.
         },
    "Accessible mais non réservé PMR": {
        value_converted: "yes"
    },
    "Réservé PMR": {
        value_converted: "yes"
    },
    "Non accessible": {
        value_converted: "no"
    },

Inversion de valeur booléenne

Quand l'open data demande si une station est gratuite à l'usage et que l'on a une clé openstreetmap qui dit oui quand ce n'est pas gratuit, il faut inverser la valeur du oui de l'open data.

/**
     * l'info de gratuité a été mal renseignée par les opérateurs, ils mettent TRÈS souvent que c'est gratuit alors que ce n'est pas vrai.
     */
    gratuit: {
        key_converted: 'fee',
        convert_to_boolean_value: true,
        invert_boolean_value: true,
    },

Suppression de clé originale

stationdeuxroues est une propriété qui n'a pas de tag dans OSM, mais on veut ajouter trois autres tags quand on la croise et qu'elle vaut "vrai". J'ai donc dû faire en sorte de supprimer une clé et ajouter des tags de façon conditionnelle. En gardant la logique précédente on a donc ceci:

station_deux_roues: {
            remove_original_key: true,
            conditional_values: {
                // ajout de trois tags si la valeur est yes
                "yes": {
                    tags_to_add: [
                        { bicycle: "yes" },
                        { scooter: "yes" },
                        { motorcar: "no" },
                    ]
                }
            }
        },

Ces quelques règles simples de transformations à appliquer aux features permettent d'avoir une description lisible et des fonctions réutilisables d'un jeu de données à un autre.

Certaines clés du Mappeur permettent de ne pas avoir à décrire quoi faire pour toutes les clés où les opérateurs ont eu la flemme de remplir les données ou d'apprendre à écrire des accents. Exemple ici, où on ignore les Features si la valeur est "Non renseigne":

https://forge.chapril.org/tykayn/wololo/src/branch/main/mappings/converters/configRouen_PAV.ts

tags_to_ignore_if_value_is: ['Non renseigne'],

Nous avons aussi la possibilité de toujours mettre un certain tag et une certaine valeur à toutes les Features que l'on ajoute à notre conversion. Pour les points d'apport volontaire décrivant ds conteneurs, on voudra toujours avoir ces deux tags à minimum: amenity=recycling et recyclingtype=container


default_properties_of_point: {
        'amenity': 'recycling',
        'recycling_type': 'container',
    },

Comment ajouter un convertisseur de jeu de données:

Une documentation détaille les étapes pour créer votre Mappeur et l'intégrer au projet. https://forge.chapril.org/tykayn/wololo/src/branch/main/docs/ajout_jeu_de_donn%C3%A9es.md

Pour d'avantage de flemme, un script python permet de vous proposer des choses à mettre dans la partie tag d'un Mappeur sans avoir à aller chercher toutes les propriétés possibles des features à la mano.

python propose_mapping_from_data.py etalab_data/musées/fr.geojson

Les propositions restent en console et ne sont pas écrites dans un fichier de Mappeur, vous n'avez plus qu'a copier et faire le tri dans un futur Mappeur. Cela vous permettra aussi de détecter des propriétés similaires si vous avez affaire à des champions des bras cassés de l'open data.

Le projet Wololo permet aussi d'appliquer des conversions sur des geojson issus d'Osmose.

https://osmose.openstreetmap.fr

Extraction de données depuis OpenStreetMap

On peut faire des extractions thématiques sur des données OpenStreetMap un peu à la façon Geodatamine. https://geodatamine.fr/

Ça se passe dans les extractors, ce sont des scripts bash qui utilisent une requête overpass et une fonction bash pour faire un geojson d'export, que l'on stocke dans osmoutput.

https://forge.chapril.org/tykayn/wololo/src/branch/main/mappings/extractors/planning_familiaux.sh

La fonction extractfromosm : https://forge.chapril.org/tykayn/wololo/src/branch/main/update_scripts/functions.sh

On peut lancer tous les extracteurs à la suite avec ce script de mise à jour pour ensuite travailler sur des données fraîches.

bash update_scripts/run_all_extractors.sh

Pour ne pas blinder l'espace disque de la forge logicielle, les extractions et les fichiers geojson transformés ne sont pas versionnés, merci au Gitignore.

Bonnes conversions de données ouvertes!

Quelques concepts autour d'OpenStreetMap

La connaissance autour d'OSM se construit de façon collective et est documentée dans le wiki d'OSM, rédigée collectivement, avec un ensemble de descriptions plus ou moins cohérentes, avec des variations selon les endroits. Le wiki d'OSM est fait avec MédiaWiki, le même logiciel que Wikipédia.

Tout le monde peut créer de nouvelles façons de qualifier les choses que l'on peut constater dans le monde réel, même si ces choses ne sont pas forcément visibles depuis l'extérieur. Un exemple, les réseaux électriques ou la présence de toilettes, de moyens de paiement, ou d'autres services tel qu'Ask Angela dans un commerce, ou encore ses horaires d'ouverture.

La grammaire des étiquettes.

Pour rester infiniment incohér… extensible, le système de tags d'OSM ne possède pas de contrainte de validation ou de typage fort. Toutes les étiquettes sont des chaînes de caractères valables. C'est le principe "any tags you like" FR:Créer un attribut qui manque - OpenStreetMap Wiki

Si on veut préciser l'unité de valeur d'un nombre on peut la mettre ou pas, seule une documentation dans le wiki, et des outils de contrôle qui suivent ces règles de validation, ou des gens qui suivent les modifications d'un certain type d'objet, pourront comprendre qu'il y a une erreur. Ainsi, si un jour on décide qu'il vaut mieux mettre l'unité d'une mesure dans un tag séparé, on peut le faire avec un petit script de remplacement. Anatomie des étiquettes osm - OpenStreetMap Wiki

Les bonnes pratiques

Réutilisez les étiquettes existantes, ne mappez pas juste pour faire joli si ça n'a pas le sens qui décrit le monde réel correspondant, mettez le vrai nom des choses et non une description.

FR:Bonnes pratiques - OpenStreetMap Wiki

Vérifiabilité

Pouvoir vérifier une information dans le monde réel et la faire correspondre dans la base de données d'OSM est un des principes de base.

FR:Vérifiabilité - OpenStreetMap Wiki

Quand une chose est plusieurs choses.

Comment tagguer un hotêl restaurant ? Il existe `amenity=hostel` et aussi `amenity=restaurant`, on devrait donc logiquement utiliser une énumération qui dit que l'on a ici une aménité qui est un hôtel et un restaurant, non ? Hé bien non, certaines clés sont documentées comme ne pouvant pas être une énumération. Ce que l'on fait souvent alors, c'est faire de la qualification en fonction de la majorité de surface.

FR:Un item, un objet OSM - OpenStreetMap Wiki FR:Séparateur de valeur point-virgule - OpenStreetMap Wiki

Certaines descriptions sont contre intuitives.

Les choses contre intuitives le sont pour plusieurs raisons, et elles le restent à cause des procédures de modification des tags pour lesquelles la grande majorité des gens sont frileux. Il est d'ailleurs assez étonnant que modifier une base de données semble aussi complexe alors que beaucoup de modifications très simples pourraient être faites car on modifie des informations numériques et qu'il est très simple de vérifier leurs effets de bord sans tout casser sur la base partagée. Counterintuitive keys and values - OpenStreetMap Wiki

La plupart du temps, les gens opposent que l'on ne devrait pas changer la façon dont sont tagguées les choses pour la rétrocompatibilité avec les gens qui réutilisent les données, les éditeurs de logiciel de carte, et aussi parce qu'ils n'ont pas envie de modifier les indexes de nom de recherche.

"On ne change pas un truc qui fonctionne", cette aversion au changement, alors que des outils et des procédures existent pour faire cela, est très connue dans le monde de la cybersécurité comme "le problème de l'adhérence logicielle". On est scotché à certains logiciels ou certaines façons de faire pas parce qu'elles sont meilleures que le reste, mais juste parce qu'on a une peur bleue qu'il faille ensuite faire des choses qu'on ne fait pas actuellement pour que ça continue à fonctionner.

Comment tuer OSM ? Surtout, ne changeons rien par Florian Lainez - peertube.openstreetmap.fr FR:Code de conduite des modifications automatisées - OpenStreetMap Wiki

Comment qualifier correctement un ensemble d'objets et ses précisions possibles?

Il serait probablement bon de clarifier ce que l’on attend des modèles de tags pour faciliter les consensus.

Personnellement j’attends quelques qualités aux tags, sans ordre de priorité:

  • une cohérence dans un ensemble et dans ses sous ensembles
  • la réutilisation au mieux de ce qui existe déjà, permettre des combinaisons
  • suivre une anatomie qui soit facilement compréhensible et documentée dans le wiki
  • des tags au plus possible anglophones et bas de casse pour une utilisation mondiale
  • une spécificité suffisante
  • une clarté, de la désambiguation
  • un certain lien entre monde réel et mots utilisés
  • ne pas avoir peur de faire évoluer les tags et déprécié ce qui est mal foutu, même si c’est utilisé. On ne devrait pas rester bloqué pour des raisons de « on a toujours fait n’importe quoi alors pourquoi faire autrement? »

Utiliser le principe de moindre surprise en ingénierie informatique. Principe de moindre surprise — Wikipédia

Les identifiants d'objets ne sont pas pérennes

Zut alors, on ne peut pas simplement faire un lien vers un restaurant et espérer qu'il soit lu pour toujours comme un lien pointant vers ce lieu précis? En fait, à court terme, si, mais pas sur le long terme. Les commerces changent assez souvent dans le monde réel, mais les identifiants d'OSM peuvent aussi changer si quelqu'un fait une modification sur un chemin en le découpant ou en supprimant un objet pour en créer un autre avec des informations similaires ailleurs, l'identifiant est perdu et l'URL vers un noeud sera morte.

La wikibase à la rescousse

Un des grands intérêts d'OSM est de pouvoir être un pivot entre plusieurs autres bases de données. Et la wikibase permet de mettre du sens entre plusieurs objets à l'identifiant pérenne grâce à des notions de web sémantique qui proposent de relier entre eux des concepts. Par exemple, on peut y distinguer que Guestave Eiffel est l'inventeur de la Tour Eiffel, et que si on veut connaître toutes les tours de France on ne demande pas la même chose que "je veux voir une description de ce qu'est l'évènement le Tour de France".

FR:Collaboration avec Wikipédia - OpenStreetMap Wiki

La gestion des cycles de vie d'un objet et d'un tag

Il y a deux choses à distinguer ici:

  • Les objets du monde réel sont envisagés, construits, changent, et disparaissent. On utilise alors des clés et des préfixes de clé pour décrire ces étapes.

FR:Key:proposed - OpenStreetMap Wiki Category:FR:Cycle de vie - OpenStreetMap Wiki FR:Key:construction - OpenStreetMap Wiki FR:Key:startdate - OpenStreetMap Wiki

  • Les étiquettes évoluent dans le temps, certaines deviennent dépréciées et on met alors en place des contrôles de qualité pour vérifier à ce qu'elles ne réaparaissent pas.

Participez aux ateliers en visio ou en présence

Le meilleur moyen de vraiment adopter OSM et sa richesse est de rencontrer les gens qui y participent et de voir comment ce que l'on connaît peut s'insérer dans ce grand commun numérique.

En attendant des rencontres, vous pouvez échanger sur le forum qui est une mine d'or pour voir le fonctionnement de la gouvernance, les outils, les erreurs courantes, trouver des gens près de chez vous, les thématiques qui pourraient vous intéresser, comment réutiliser les données, comment trouver tous défibrilateurs, ou les panneaux biche.

https://forum.openstreetmap.fr

Partagez des photos avec Panoramax

Combiner des images de terrain avec des enquêtes au plus près du monde réel pour le décrire au mieux. Contribuer à Panoramax avec son smartphone est une excellente piste pour cela.

Quelques liens:

Pour aller plus loin:

Rétrospective de blogs

Au début, j'avais un blog sur papier dans mon agenda de lycée où je dessinais ce qui m'arrivait avec les camaradz de l'époque, ce qui m'a bien occupé pendant 4 ans. C'était le média social très low tech en papier de l'époque. En y repensant, mes premiers journaux de bord sur papier datent de bien avant cela, autour de 1995 quand je me suis régulièrement mis à écrire sur tout et rien juste pour le plaisir de l'écriture.

Puis je découvre les forums de dessins en ligne à l'aide d'un ami qui s'amuse à bidouiller des mods de jeu comme American Mc Gee's Alice sur ordinateur.

Au lycée je bricole un site personnel pour montrer mes dessins en html et css, en dupliquant plein de choses d'une page à l'autre, ce qui rend l'évolution pas super simple, le tout hébergé chez Lycos. Je ne fais pas de backup de ce site et expérimentera les déconvenues d'un crash d'ordi bien plus tard, ainsi que la découverte qu'il est tout à fait possible qu'une grosse boîte comme Lycos puisse tout à fait supprimer ses hébergements web sans prévenir, et disparaître du jour au lendemain sans possibilité de recours. Pareil pour Photobucket où j'avais placé des dessins et des photos retouchées.

En 2003, un copain, Monoceros, me propose d'installer un blog dotclear sur mon espace free, ce qui me convient pendant pas mal de temps. Puis souhaitant bénéficier de thèmes un peu plus jolis dans un catalogue bien plus fourni de thèmes et de plugins, je convertis mon blog Dotclear en blog Wordpress, toujours hébergé chez free.

Une copine pas du tout ingénieure, Puchi-ko, mais aimant la musique Japonaise me montre comment me servir des flux RSS des sites qu'elle lit en utilisant Firefox, c'est une super fonctionnalité dont je découvre les nombreux avantages. J'adopte peu de temps après Thunderbird pour y mettre les flux RSS principalement de sites de dessin. De nos jours, Firefox ne propose plus cette fonctionnalité et peu de sites web proposent un flux RSS.

J'incite les gens que je connais et fréquente en festival manga / fanzine / dessin en ligne à avoir leur site personnel pour présenter leurs dessins, commençant à comprendre que dépendre d'acteurs qui n'en ont rien à faire de ce que l'on place chez eux est un risque important. Je participe à un évènement de l'école d'ingé d'Every où le thème est "les blogs" avec d'autres gens qui le pratiquent depuis un bon bout de temps, genre Korben, Sauvane, etc.

J'avais développé un script de migration des billets en base de données pour aller vers Wordpress. Je constate aussi que le temps avançant, de plus en plus d'artistes qui avaient ouvert un blog sur une plateforme comme Livejournal, overblog ou d'autres endroits exotiques disposant de flux RSS ne mettent plus leurs oeuvres en ligne (sauf Loish <3 https://blog.loish.net )

Les gens se rendent de plus en plus captifs de plateformes privatrices sans flux RSS qui cachent à ses abonnés ce que l'on poste selon son bon vouloir, tout en requérant aux visiteurs d'avoir un compte pour accéder à ce qui est publié. Je commence mon plan pour sortir de Facebook et Google et envisage des exports de mes données, tout en incitant d'autres à faire de même et à toujours alimenter une adresse personnelle et me mets à héberger mon instance Mastodon et à suivre des artistes dessus.

Mes flux RSS d'artistes suivis deviennent de plus en plus morts, ayant migré deux ou trois fois de nom de domaine aussi pour mes blogs je fais en sorte d'indiquer régulièrement la nouvelle adresse et d'avoir les contenus qui fonctionnent à coup de rechercher et remplacer les liens en base de données dans mes sites. Ce n'est pas très compliqué et ça marche assez bien, le plus relou étant le changement de chemin vers les articles, le chemin du slug d'article.

Inspiration wiki personnel

Ayant adopté Zettlr pour faire un wiki perso et exporter tous les trucs que j'avais écrit dans des blogs avec base de donnée mysql, je fais une moulinette pour exporter mes écrits en Markdown. Un kamaradz libriste me vante les mérites d'Emacs et je m'y essaie. Je lis des gens qui aiment particulièrement le format Org, et convertis mes écrits de Markdown à Org pour me faire un wiki personnel. Emacs étant un bon outil pour se forger ses propres raccourcis clavier c'était bien pratique. J'ai donc mon wiki dans un format Orgmode en réunissant plein de fichiers dont je peux voir une représentation en graphe orienté avec org-roam-ui, ça me permet de préparer des articles et de relier des idées ensemble, sans que mes blogs exposent l'intégralité de mes pages de wiki.

Je suis étonné de voir que l'ensemble de mes écrits en ligne (blogs, site perso, médias sociaux et forums) tient sur un espace disque très restreint: 33Mo. Mes dessins avec leurs versions de travail intermédiaires, tiennent quant à eux sur une cinquantaine de Go. Ce qui aurait tenu sur le disque dur de mon premier ordi perso acheté en 2003 avec l'aide de mon frère, le disque était alors un disque IDE de 80Go.

Constatant qu'il y a un temps non négligeable entre mes écrits et leurs publication sur mes blogs wordpress, j'envisage de faire quelque chose pour relier plus directement l'écrit à la publication.

Puis lisant du Ploum qui évoque la version finale de son blog parce qu'il en a gros des évolutions bancales et des trucs relou des CMS qui deviennent des monstres, je m'intéresse à la gestion de blog statique et aux capsules gemini.

https://ploum.net/2022-12-04-fin-du-blog-et-derniere-version.html

S'inspirer des meilleurs

Je regarde comment fonctionnent deux ou trois outils de génération de blog statique, en tentant d'y reporter quelques uns de mes contenus: Pelican, Hugo, Offpunk, LazyBlorg, Zola… certains sont affreusement complexes pour comprendre les infos nécessaires à leur utilisation, d'autres beaucoup moins.

J'examine les fonctionnalités minimales dont j'ai besoin, et quel est l'effort à faire en développement pour adapter un outil existant ou partir vers une solution maison en quelques scripts. Je veux pouvoir réutiliser mes articles Org en devinant la date de leur publication, leur titre et leur contenu.

Je constate que pour réutiliser des choses existantes il faut forcément bidouiller sur le contenu des articles, ne serait-ce que pour que le moteur de blog détecte les dates des articles, car la date de création ou de modification de mes fichiers org ne reflète pas du tout cela. Heureusement c'est une bidouille assez simple à faire.

Quelques objectifs pour mon moteur de blog:

J'opte pour un petit ensemble d'outils qui me permettent de générer à partir de documents org:

  • plusieurs sites, dont les contenus sont séparés dans un dossier
  • un flux RSS/Atom par site
  • un thème de base en quelques lignes de scss, différent pour chaque site si on veut
  • avec des posts dans plusieurs langues
  • des tags naviguables qui permettent de lister les autres articles ayant ce tag
  • des tags auto détectés à partir d'un vocabulaire contrôlé, spécifique à chaque blog
  • une gestion simple des chemins vers les articles avec un préfixe d'année et des slugs
  • pas besoin de section commentaires ou de plugins, les gens peuvent m'écrire par email à contact+blog@cipherbliss.com
  • les templates html permettent une réutilisation de style pour les thèmes de wordpress
  • une configuration de contenu paramétrable pour chacun des sites, titre, description, tags de base, signature, infos de soutien financier, etc.
  • un index qui présente en entier quelques articles puis liste les suivants avec des liens au lieu de faire une infinité de pages
  • pas de moteur de recherche interne, on utilise un lien vers un moteur externe
  • une mise à disposition de l'intégralité des articles sur une forge logicielle qui cause le Git, ici

https://forge.chapril.org/tykayn/orgmode-to-gemini-blog

  • une automatisation de la gestion des nouvelles images
  • pas d'administration à plusieurs, bien que c'est tout à fait faisable en partageant un dossier et en ajoutant chacun ses articles avec la gestion de version git.
  • un outil en ligne de commande pour simplifier la création de nouvel article avec les quelques infos nécessaires à tout article: titre, date, texte.

Faire de la publication programmée à une heure donnée? Ce serait faisable mais finalement je n'y tiens pas particulièremment.

Les quelques bibliothèques pour faire ce blog dynamique: git, python, pypandoc, argparse, SASS.

Avec un peu de bash, pandoc et quelques scripts python je parviens à générer en une trentaine de secondes des pages html à partir d'un milier d'articles. En utilisant pypandoc au lieu de pandoc je réduis ce temps de conversion à moins de 2 secondes. En faisant quelques autres vérifications pour ne régénérer que les articles qui ont été modifiés depuis la dernière génération, comme le font d'autres moteurs de blog, je réduis encore ce temps.

La mise à jour des blogs est super simple, un git pull, une génération de blog, et une copie vers les dossiers hébergés. Le tout peut se faire dans un cronjob qui lance un simple script qui ne fera des changements que si il y a du neuf.

Voici les sources du dépot, qui contiennent donc tous mes écrits en ligne sous licence libre CC-BY-SA et en AGPLv3+ pour les scripts:

https://forge.chapril.org/tykayn/orgmode-to-gemini-blog

Pour le fun, ce blog de cipherbliss contient 274 articles, 140 000 mots, qui se lisent en 10h34min si vous lisez à la vitesse moyenne de 220 mots minutes comme beaucoup d'adultes.

Bons essais à vous si vous souhaitez adopter ce moteur de blog statique, il vous suffira de commencer à lancer une commande et à mettre dedans des anciens fichiers org (dans le dossier `sources/monblog`), ou à en créer un nouveau avec une commande sur `newarticle.py`.

git clone https://forge.chapril.org/tykayn/orgmode-to-gemini-blog

cd orgmode-to-gemini-blog

py new_article.py # ceci vous demandera le nom du dossier de blog, la langue, et le titre de l'article
# 

Vous pouvez maintenant modifier votre nouvel article avec votre éditeur de texte préféré. Et zou pour convertir votre blog en site statique:

bash converters mon_blog 

Ce qui génère un site html statique et une capsule gemini dans les dossiers de destination: htmlwebsites/monblog et capsules-gemini/monblog

Lisez le readme pour d'avantage de personnalisation. Havez fun!

Contribuer à un projet libre

Trouver des gens autour du projet. Savoir comment ils s'organisent, piocher les infos, comprendre de quoi le projet à besoin. Pas forcément du dev, beaucoup de projets libres ont besoin d'amour dans leur interface visuelle, de traduction, ou juste de texte lisible pour que l'on comprenne bien de quoi il s'agit, à aquoi et à qui ça sert. Cibler ce qui nous motive le plus parmi les besoins. Définir le temps que l'on souhaite consacrer.

Causer avec les autres contributeurs avant de se lancer dans le moindre travail, c'est super important si on veut éviter les frustrations. Ne surtout pas se lancer dans douze fonctionnalités à la fois.

Plan d'action

  • Proposer de faire un truc
  • Le réviser
  • Voir sa contribution approuvée par l'équipe, ou pas
  • ???
  • profit (heu lol)

Liens:

https://digitalprinciples.org/ https://cakebaby.dev/a-beginners-guide-to-open-source?guid=none&deviceId=18f51939-894a-4996-b27b-4d19f26d18e3 https://contribulle.org https://wiki.openstreetmap.org/wiki/FR:Projet_du_mois https://wiki.openstreetmap.org/wiki/FR:Project_of_the_month/Mod%C3%A8le https://learnwithnie.hashnode.dev/user-interface-a-seamless-communication

Critères de qualité de votre plan de sauvegarde

Petite check liste pour vérifier la qualité de vos sauvegardes:

  • [ ] Je dispose d’une seule source pour mon organisation d’archives
  • [ ] J’ai plusieurs destinations de sauvegarde
  • [ ] J’ai du chiffrement sur la source
  • [ ] J’ai un ensemble varié de lieux de sauvegarde où sont mes supports
  • [ ] J’ai au moins un espace de sauvegarde en dehors de chez moi
  • [ ] J’ai au moins 2 sauvegardes hors ligne
  • [ ] J’ai au moins 3 espaces de sauvegarde différents
  • [ ] J’ai mis en place de la sauvegarde automatique
  • [ ] J’ai mis dans mon agenda un rappel mensuel pour vérifier que mes sauvegardes sont bien réalisées et que leur contenu est récupérable
  • [ ] J’ai une sauvegarde résistante aux pannes de disques durs (pas facile celle-ci, bande magnétique, disque dans un conteneur résistant aux impulsions électromagnétiques?)
  • [ ] Ma source est chiffrée avec une phrase unique de plus de 25 caractères (keepass, bitwarden, autre)
  • [ ] Ma source est chiffrée avec une phrase unique de plus de 25 caractères et stockée dans un coffre fort numérique lui aussi verrouillé par une clé unique de plus de 25 caractères

Enjaillez!

Dépasser la spécialisation

Selon les époques, nous nous informons principalement via certaines sources d'informations sans l'avoir vraiment choisi. Certaines générations préfèrent la radio, la télévision, des "podcast" ou des livestream qui n'en sont qu'une variation, ou encore les plateformes privatrices les plus connues. On spécialise nos sources d'informations, et lorsque ces sources sont utilisées dans des buts hostiles à leurs utilisateurs à grand renfort de propagande ou d'agenda politiques visant à banaliser certaines violences tel qu'en faisant le choix de supprimer les vérifications de faits, de déterminer comme acceptable les qualifications de maladie mentale pour des choses qui n'en sont pas ou en supprimant la modération, on choisit de façonner une certaine vision très autoritaire et violente envers énormément de gens.

C'est ce qui s'est passé sur Twitter, sur Facebook, sur Instagram, sur Whatsapp, sur TikTok, et il n'y a aucune raison que ça ne se produise pas sur Bluesky. C'est une plateforme qui ressemble à Twitter, dont le développement est financé par des spéculateurs de cryptomonnaies. Les ingénieurs vantent monts et merveilles de logiciel et de gouvernance distribuée, mais dans les faits il n'y a rien de tel. Et d'autres alternatives permettent dès aujourd'hui de faire ce que promet de faire un jour peut être Bluesky, et sans pognon provenant de la publicité. Bien que les choses semblent pas si graves en surface, la merdification est inévitable dans un cadre qui l'autorise et dans des dynamiques politiques et capitalistes qui l'encouragent. Il n'y a aucune raison pour qu'une structure qui peut se faire racheter par un miliardaire qui fait OKLM deux saluts nazi pendant une conférence de presse, ne devienne pas une énième chambre d'echo de ses idées les plus néfastes. Aller là dessus c'est la garantie de devoir de nouveau un de ces jours se dire "comment on a pu en arriver là? Qui aurait pu prévoir que ce serait autant la merde et que ce que je croyais comme un lieu d'amusement ait pu aussi mal tourner ?"

Combien de fois va-il falloir que ce genre de chose arrive pour que le grand public comprenne l'essence du problème et ait enfin la main sur la gouvernance, les données et les sources des logiciels qu'il utilise pour les faire évoluer dans un sens qui lui convient plutôt que de donner systématiquement ces responsabilité à des gens nostalgiques des heures les plus sombres de l'histoire?

C'est pourquoi j'ai été ravi de voir l'initiative HelloQuitteX/openportability qui a permis à pas mal de monde d'envisager un exode non pas seul mais en gardant une trace des liens sociaux avec ses contacts. https://openportability.org

C'est pourquoi aussi, j'invite mes contacts à me rejoindre sur Mastodon et pas ailleurs, et à y poser ses bagages et réellement interagir avec les autres gens.

pourquoi plutôt venir sur Mastodon

Vous n'avez pas besoin d'étudier les concepts techniques autour de Mastodon pour comprendre ses avantages sur les autres médias sociaux. C'est un lieu qui permet de ne pas mettre tous ses oeufs dans le même panier et de répartir le pouvoir des liens qui se font avec nos contacts.

Parce que c'est un des rares endroits qui permettre d'avoir la main sur ce qui s'y passe et sur ce que l'on veut voir sans être mis dans le flou par des intérêts totalement hostiles à l'humanité toute entière. https://mastodon.cipherbliss.com/@tykayn

Vous n'avez pas forcément besoin de compte pour accéder à des informations.

Il existe d'autres moyens de s'informer, c'est un des avantages des flux RSS et Atom. Bien sûr, comme c'était trop pratique d'avoir les actualités combinées de plusieurs sites web auquel on s'inscrit, cette option a été de plus en plus éloignée du public.

Méta Press est un autre moyen de s'informer, c'est une extension firefox qui va fouiller plein de sites de journaux. La BNF permet aussi d'accéder à des journaux. Mais pensez aussi aux gens avec qui vous discutez.

Enfin il faut faire preuve d'une certaine retenue dans nos sources d'informations et arrêter de prendre pour acquis et comme la vérité des informations qui nous sont présentées dans un bel emballage, par de belles personnes, avec aplomb. Beaucoup de choses présentées comme de l'information sont en réalité du bruit, des opinions, des réactions, des spéculations infondées, de franches erreurs, et pire encore, il n'est jamais pris le temps pour clarifier ce qu'on a échoué à informer correctement ou à importer des éléments qui permettent de vraiment comprendre ce qui se joue, d'où ça vient, comment ça fonctionne. Le petit monde de la télévision aime se regarder le nombril et faire comme si un très petit ensemble de sujets étaient les seuls à avoir de l'importance, le but étant de vendre du temps de cerveau disponible et de polariser l'opinion publique en singeant une synthèse de "ce que pensent les gens qui comptent", peu importe leur diversité ou la justesse de leur représentativité.

Nous sommes spécialisés dans nos centres d'intérêts et dans nos goûts pour des tas de raisons, de par notre histoire et celle des gens qui nous ont précédé, notre classe sociale, les lieux et opportunités que nous avons eu, les attentes de nos proches qui ont fait notre éducation, ainsi que l'ensemble des structures de domination qui font en sorte que les choix et les opportunités ne soient pas du tout les mêmes pour tout le monde.

Sortir de toutes ces pressions sociales demande des efforts conséquents et une mobilité aussi bien physique, financière que mentale. Plus on apprend de choses avec la sociologie et plus on a le sentiment étrange que tous les humains, bien qu'ils parcourent de temps à autre les mêmes espaces, les mêmes rues, les mêmes sources d'informations, ils ne vivent pas du tout dans le même monde et font en sorte de ne surtout pas y penser. On fait de nécessité raison, on rationalise, on se moque de ceux qui ne vivent pas dans le même monde que le notre, on imagine des choses pour s'en écarter encore plus et se rapprocher d'autres, pour se conformer aux pressions de notre classe sociale et réduire notre inconfort, ou encore pour sonder qui sont nos semblables ou détourner la colère de ceux qui subissent les conséquences de nos propres privilèges.

Prendre conscience que l'on a pas la maîtrise de nos goûts ou de ce que l'on imagine d'autres ensembles de gens permet de sortir de ce qui nous détermine et peut être commencer à s'ouvrir aux autres dans des perspectives autres que celles de la domination ou de la destruction. Savoir tout cela ne vous permettra pas de changer ce qui vous plaît ou déplaît d'un simple claquement de doigts. Mais je ne sais pas ce que vous en pensez, mais je dirai qu'on a drôlement besoin d'un peu plus d'ouverture aux autres en ce moment.

Julie de la fabrique des mobilités - Elles font le libre

Julie de l'association "La fabrique des mobilités" présente les actions de vulgarisation et de collaboration entre acteurs publics. L'association existe depuis une dizaine d'années et contribue à des communs, des logiciels libres pour décarboner les transports, et faire avancer les réutilisations. https://lafabriquedesmobilites.fr/blog/dix_communs_numeriques_essentiels_mobilite

https://lafabriquedesmobilites.fr

Une façon simple de considérer l’ensemble des leviers nécessaires pour réduire les émissions et les externalités négatives du transport est le triptyque d’action « éviter / reporter / améliorer » repris par de nombreux travaux dont l’ONU, l’Ademe, le Shift Project et bien d’autres.

Merci Julie pour cet entretien!

Stitching de photo gopro fusion pour Panoramax

Aujourd'hui il a fait beau après des mois de pluies et d'inondations, c'était l'occasion de faire chauffer le vélo et la gopro fusion pour faire quelques 4500 captures 360, et de raconter un peu ce que j'ai pu développer pour participer à Panoramax avec tout ça.

Il existe des outils pour assembler des photos 360 en fisheye, notamment Hugin, ou des logiciels divers fournis par les producteurs de matériel de capture photo et vidéo 360. Le gopro studio? ça ne fonctionne que sous un spyware qui siphone mes carnets d'adresse et tout ce que j'écris. Vous savez, ce gros virus là. Ah oui, Windows ça s'appelle. Bref.

Fusion2sphere ne faisant pas super bien le taf et laissant apparaître des bandes de luminosité pas ouf, j'ai demandé à Stéphane Péneau de Carto Cité ce qu'il en pensait l'an dernier. Il m'a conseillé de faire un script qui utilise une conversion sur des groupes de 2 photos avec une config pour Hugin qui corresponde à ma caméra. Je lui ai donc passé des photos prises avec ma gopro Fusion, il a fait des essais et m'a donné un fichier de config .pto. Merci énormément!

J'ai donc pu continuer d'élaborer autour de ça et au bout de plusieurs jours j'ai enfin suffisamment d'avancement pour pouvoir ratrapper les assemblages de mes photos GoPro Fusion et les envoyer sur Panoramax.

Voici les scripts: https://forge.chapril.org/tykayn/scripts/hugin-gopro-fusion/

Y'a du bash et du node typescript.

C'était pas évident au début de savoir où j'en étais entre les choses à faire et le reste, et sans fibre à la maison, impossible d'envoyer des dizaines de gigas en un temps acceptable. J'ai fini par adopter un flux de travail qui permet de réduire le temps entre la capture et la publication des photos. C'est pas aussi simple qu'en utilisant juste son smartphone avec Open Camera et de balancer les photos dans un lieu disposant de la fibre: le local de l'association Linux en Essonne que j'ai l'honneur de présider, ou un espace de coworking, ou encore plus rarement avec la fibre des locaux d'un client.

Flux de capture photo

Pour faciliter le flux, j'ai utilisé un système qui décrit l'avancement des étapes dans des dossiers à chemin prédéfini, et fait quelques scripts.

Dans mon dossier de gestion d'imageries gopro j'ai ces dossiers qui correspondent chacun à une étape de traitement:

  • 'à ne pas envoyer sur panoramax'
  • FIXMEaverifiersienvoyé
  • huginassemblagesscriptoutput
  • INBOXassemblagefait
  • AORIENTER
  • FIXMEpasdegpsdata
  • INBOXaassembler
  • INBOXPTOhugin
  • PANORAMAXenvoistodo
  • PANORAMAXenvoisencours
  • PANORAMAXfini

Préparation

  • Avoir une gopro vide de photos et bien chargée.
  • Prévoir un chemin et des zones à capturer.
  • Faire un chemin plus ou moins prévu en évitant de repasser aux mêmes endroits. On met la gorpo sur le casque vélo et zou, on peut faire de la capture à une photo seconde pendant environ 2h50. Y'a de quoi faire énorméments de surface en vélo ou en trottinette avec ça, surtout qu'avec le 360 on a pas besoin de passer dans les deux sens pour voir tous les côtés.

Extraction

  • Extraire les photos en sortant les cartes SD sur mon laptop. ça va bien plus vite que par câble usb-c, WTF.
  • Copier les photos dans ma tour, qui dispose de pas mal de place et d'un dossier dédié aux traitements de gorpo.
  • Remettre les cartes SD dans la GoPro, et formater les deux cartes SD. Mettre en charge la gopro par usb-c.

Traitement

  • Supprimer les mauvaises photos.
  • Lancer la commande pour créer un script d'assemblage pour un dossier contenant des photos nommées au format gopro fusion.

La génération de ce script est très rapide. Si j'ai plusieurs séquences comme souvent, je peux créer tous les scripts avant d'aller plus loin. Exemple pour une séquence "123":

ts-node /home/poule/encrypted/stockage-syncable/www/development/html/scripts/hugin-gopro-fusion/main.ts --goproSubFolder="INBOX_a_assembler/123"

Le script ne va prendre que les photos BACK et FRONT JPG du dossier donné. J'ai fait en sorte de garder une base en chemin absolu et de garder "INBOXaassembler" à préciser pour mieux me rappeller de ce qui est cherché en recherchant la commande en arrière dans mon terminal avec `ctrl+r`.

  • Stitching (couture des photos). Lancer un script qui va faire appel au logiciel Nona, un sous logiciel de Hugin, appelé par huginexecutor, pour faire les assemblages à la chaine. Ce script tolère les interruptions et ne fera les assemblages que si l'image assemblée est absente dans le dossier de conversion.

Cette étape faisant travailler à fond les processeurs de ma tour, j'ai eu parfois droit à des plantages et il était difficile de savoir où relancer le tout. Après quelques essais de détection c'était résolu. Les assemblages rectangulaires vont dans le dossier "huginassemblagesscriptoutput" avec un nom qui reprend le numéro de la photo BACK et FRONT originale. Par exemple: assemblage010500.jpg On est plutôt sur du 10 à 30 secondes par photo selon la complexité des photos avec ma tour. Je ne sais pas pourquoi ma carte graphique n'est pas plus utilisée que ça, mais bon, ça fait tranquillou le boulot.

  • Une fois que la génération des assemblages est faite, ils sont déplacés dans un dossier "AORIENTER" et le dossier qui contient les photos fisheye sont déplacés dans "ASSEMBLAGEFAIT".

Vérification

Je mets les photos assemblées dans JOSM pour vérifier le parcours, et corriger les placements, les orientations. Pour mieux voir sur les côtés de rue dans laquelle je me déplace, j'oriente les objectifs de la gopro sur les côtés, toujours de la même façon. ça permet de mieux lire les détails sur les façades. Dans JOSM je fais une modification des informations exif pour que l'azimut, l'orientation de la photo soit tournée de -90°. Ça permet d'avoir la navigation qui va bien sur panoramax en passant d'une photo à la suivante. D'ailleurs astuce en passant, si vous utilisez la touche "page up" ou "page down" au clavier sur la visionneuse photo, ça gardera l'orientation. Breffe, une fois les orientations et les corrections faites, on va pouvoir envoyer. Mais avec une bonne connexion hein sinon dans 3 ans on y est encore.

Envois

  • Je copie les photos assemblées sur mon ordi portable, dans un dossier `~/Téléchargements/FIBRELAND`.
  • Aller dans un lieu fibré. (tsss)
  • Pour un ensemble de photos, je me place dans le dossier et lance la commande d'envoi vers panoramax dans le terminal:
panoramax --api-url https://panoramax.openstreetmap.fr .
  • Après l'envoi de toutes les séquences et après avoir constaté que les terminaux ne donnent pas d'erreur, je déplace les dossiers envoyés dans `~/Téléchargements/FIBRELAND/fait/`.

Rangement des dossiers photos traités

  • Plus tard, je vérifie que les séquences sont bien présentes dans panoramax, à l'endroit où elels sont censé être.
  • Si tout est bon, je peux enfin mettre les dossiers de séquences faites vers la tour dans `PANORAMAXfini`. ouf!

Bonne capture et bonne visite là où il n'y a pas de routes!

Jeux de données publiés sur DataGouv

C'est difficile de publier des données ?

Pour tester la difficulté de la mise en place de publication de données par les administrations qui manquent 99 fois sur 100 à remplir leurs obligations en matière de publication de données (merci la CADA), j'ai voulu tester moi même. Hé bien c'est vraiment pas compliqué, on a même pas besoin d'avoir de folles compétences informatiques. On crée son compte, on crée un jeu de données, et dans ces jeux de données on dépose des fichiers en décrivant ce que c'est. Et pour les mettre à jour on modifie un fichier et on valide. Et voilà. C'est vraiment pas sorcier, pas plus que de savoir envoyer un email. Hé oui Jammy.

Y'a même des guides et des formations disponibles. https://www.data.gouv.fr/pages/onboarding/producteurs

Souvent cela consiste à partager des infos que l'on a déjà sous forme de tableur, de comptes rendus écrits, ou des photos. C'est ainsi que des municipalités de communes de moins de 300 habitants parviennent à libérer des tas d'infos toutes simples et très utiles à la vie des administrés. Sans oublier que la publication de données publique doit être la base, sans avoir besoin que des gens le réclament, dans un format facilement lisible par des logiciels, dans des standards ouverts, et de façon systématique. Vous pourrez en savoir plus via le forum Team Open Data: https://teamopendata.org ou en consultant la loi Lemaire de 2016, effective depuis bientôt 10 ans à la date où j'écris ces lignes. Détail important, les organismes obligés de publier les données ne doivent pas attendre que les données "présentent bien" ou "soient retravaillées". Beaucoup de gens ne peuvent pas travailler correctement à cause de ce genre de comportement irresponsable.

Ce que je publie

Voici quelques jeux de données issus d'OpenStreetMap publiés sur DataGouv au nom de l'organisation CipherBliss: https://www.data.gouv.fr/fr/organizations/cipherbliss-ei/#/datasets

On y trouve donc plusieurs jeux de données qui sont de simples extractions à l'échelle nationale depuis OpenStreetMap en utilisant Overpass Turbo. Mais aussi des données que je me suis amusé à remplir à partir d'informations librement récupérées sur le wouaibe, et reconstitués à la mano par bibi en ayant parfois un coup de main d'autres généreux bénévoles. Comme par exemple ce jeu de données qui réunit les conférences State Of The Map de 2013 à 2024.

https://www.data.gouv.fr/fr/datasets/conferences-dopenstreetmap-france-sotm-et-ca-openstreetmap-france

Ou encore la liste des fanzines que l'on pouvait trouver sur le site de Meluzine.org, dont j'avais fait la bibliothèque en ligne et une représentation graphique des liens entre ceux ci il y a quelques années.

J'ai pu scripter l'extraction de données depuis overpass turbo et leur conversion en format geojson dans ce dépot: https://forge.chapril.org/tykayn/mapping-geojson-osm

Par exemple pour l'extraction des ponts c'est ce script ci: https://forge.chapril.org/tykayn/mapping-geojson-osm/src/branch/main/mappings/extractors/ponts.sh

Les jeux de données:

Le premier lien mène à la page décrivant le jeu de données pour chacun des ensembles, puis vous avez en détail les différents fichiers en téléchargement direct.

Exports d'OpenStreetMap

Actions féministes

OSM France

Fanzinat

License

Précisez la license dans vos jeux de données, l'Odbl permet une réutilisation vertueuse afin que les données continuent de circuler librement.

Un guide pratique de la fédé des pros est sorti sur le sujet https://fposm.fr/publication-du-guide-pratique-tout-savoir-sur-la-licence-odbl Télécharger le PDF

Vous aussi, publiez vos jeux de données et des réutilisations, go go opendata!