Prévoir ou faire semblant de prévoir

Je faisais un outil interne à la banque ou je bossais, il s'agissait de faire plusieurs trucs autour de la cash balance sheet générale de la banque.

Un jour une fonctionnalité était demandée, pouvoir prévoir l'évolution du pognon dans le temps. Au bout de quelques réunions vite fait, le reste des décisionnaires a fini par comprendre que faire ça allait demander de se poser plein de questions, mais ils n'y avaient pas du tout réfléchi.

A un moment j'ai demandé a d'autres de l'équipe si il était prévu de voir a quel point le modèle prédictif était en accord avec le monde réel en mesurant ce qu'il donnait sur des données historiques. Histoire d'avoir de quoi l'améliorer au fil de l'eau et de savoir a quel point on est a côté de la plaque.

Bof, c'est pas demandé, ni maintenant ni pour plus tard. Ils veulent juste une courbe qui dit en gros comment ça devrait évoluer. le détail, c'était pas prévu.

ça m'avait rappelé quand je bossais dans une startup sur l'éducation faite avec des livres numeriques, il était question a un moment donné de faire un sondage et d'afficher ses résultats. Pareil, devant les subtilités des périmètres, le choix de ce qu'on comptait comme étant une réponse valide ou pas, les proportions, les qualités, savoir ce qui était attendu de la fonctionnalité pour n'en faire qu'une ébauche s'est révélé un choc des cultures.

voir la conférence de Ploum où il détaille des expériences de travail absurdes mais courantes m'a paru incroyablement familier après plus de 10 ans de métier a faire des prestations de développement web. Malgré des prétentions de méthodes de développement agile ou de slogans à base de grande famille, Il est saugrenu de demander des précisions, dans quel but, pourquoi faire ce que l'on fait. Vous n'avez pas le droit de dire pourquoi ou de dénoncer l'absurdité des choses qui se produisent dans le milieu du travail. Ce serait aussi étonnant que si un esclave demandait à ce qu'on lui parle poliment.

"Si je devais noter cette réunion c'est pour moi un zéro sur vingt, une totale perte de temps, pas de résolution de problème, pas de soulèvement des difficultés ou de piste pour avancer, juste de la discussion informelle, la prochaine fois ne m'invitez pas."

J'ai admiré ce collègue qui a sorti ça après une réunion où avec trois personnes de la boite du client du client et nous 4 freelances nous étions déplacés dans les locaux pour finalement ne rien faire avancer. C'était la première fois que je voyais ce genre d'expression de ras le bol en face des employés avec qui on travaillait. Cela n'a bien sûr jamais eu lieu avec des gens hauts placés, ceux ci étant souvent trop occupés à faire autre chose.

"T'es content de toi d'avoir réuni 40 personnes a 700 balles la journée juste pour causer de tout et de rien pendant 2 heures ? Je te raconte pas le gaspillage" Disait un autre très ami avec le manager des équipes, ce qui l'a amusé plus qu'autre chose.

"Cette réunion aurait pu être un mail. " Ce genre de phrase est réapparu pendant le covid où les visios conférences se sont répandues comme une épidémie de sarscov.

puis j'ai lu le livre de david graeber, celui détaillant son travail sur les bullshit jobs qui sont très répandus et méconnus. La productivité par personne ayant grandement augmenté grâce a des tas d'avancées et des luttes pour les droits des travailleurs et travailleuses, le modèle de société du capitalisme ultra libéral tardif n'a lui pas beaucoup changé ses structures d'autorité depuis l'ère industrielle.

Puisqu'il faut beaucoup moins de gens pour subvenir aux besoins de tout le monde et pas seulement de quelques uns, il y a de moins en moins besoin de travail par personne pour que tout le monde vive correctement. Mais il ne faudrait pas non plus que les gens prennent un peu trop de bon temps si ils ne bénéficient pas de privilèges de naissance, sinon on ne saurait plus qui est ce qui est vraiment important, qui est l'élite de la société, celle dont le train de vie doit être absolument au dessus du reste de la plèbe, vous savez bien : des gens qui ne sont rien.

Résultat, les gens sont "libres d'obéir, obligés de réussir" comme le souligne une des variantes du management allemand de 1940.

Les promesses de l'IA générale tardent à se réaliser, écoutez donc les supplices des dirigeants de quelques unes de ces boîtes : allez bro, fais moi confiance on y est presque, donne moi juste 200 trillions de dollars, on va y arriver !

En faisant un peu de recherches sur les facettes de la pauvreté ou les causes du plus gros défi du siècle auquel l'humanité doit faire face, le changement climatique, on se rend compte qu'il y a déjà bien assez de choses existantes pour éradiquer la misère humaine ou les, et que ce n'est pas parce qu'on manque d'astuce ou d'information sur comment on doit résoudre ces problèmes pour les résoudre. Il faut des changements dans beaucoup d'endroits, pas seulement dans les pratiques de beaucoup de monde, dans de nombreux angles morts invisibles du grand public, et surtout à des endroits stratégiques gardés par des personnes bourrées de privilèges, de pouvoir, responsables de gros rouages du monde, de chaines d'approvisionnements, de décisions sur les infrastructures, mais pas de chance, ce sont aussi des gens gavés de mépris pour l'humanité dans son ensemble. Donc les choses avancent très lentement, et trop peu rapidement pour éviter les pires catastrophes. Sans doute que certains sont persuadés qu'ils et elles seront bien a l'abri de tout ce que documente l'ensemble de la communauté scientifique dont le GIEC rapporte une synthèse des travaux régulièrement.

Déjà il y a quelques dizaines d'années, l'informatique aurait pu bien plus largement bouleverser la prise de pouvoir et le partage des connaissances, l'autonomie, l'émancipation le lettrisme, l'illectronisme même. Mais qu'observe on ? Pas une émancipation numérique, au contraire. La plupart des gens sont des consommateurs du numérique sans rien y comprendre, avec le moins d'autorisation de modifier ou de partager les choses en dehors des nuages magiques dans la plupart des produits.

C'est pour notre bien, j'imagine, si en plus ces produits numériques se merdifient et servent en plus de centre de renseignements pour des jeux politiques de suprémacistes en tous genre, pas seulement aux USA.

La souveraineté numérique reste une chimère dans les administrations alors que cela fait plus de 10 ans que le terme est incanté et gesticulé comme un rituel pour faire tomber la pluie, tout en mettant un maximum de windows dans les mains de toute personne qui passera un quart de sa vie sur les bancs de l'école.

conférence à la conquête des bornes de recharge électriques

Obtenir des données ouvertes de qualité est souvent un challenge qui s'étale sur des années. Le cas des bornes de recharge pour véhicules électrique permet de mettre en lumière de nombreux aspects du travail de l'ombre des personnes qui contribuent à OpenStreetMap pour faire la mise en qualité données et faire évoluer le modèle attributaire.

https://slides.com/tykayn/irve

SOTM FR 2025 - peertube.openstreetmap.fr À la conquête des bornes de recharge électriques - peertube.openstreetmap.fr

Conférence Wololo! la conversion d'open data vers des tags OpenStreetMap

Il existe 15 façons de convertir des données géolocalisées, il en faut une 16e pour toutes les réunir! Présentation d'un outil de conversion de données ouvertes qui va révolutionner vos workflow de traitement des données. Qu'il s'agisse de préparer des données pour les placer ensuite dans OSM ou pour les sortir d'OSM, vous n'allez pas en croire vos mirettes. Cela résout tous les problèmes de l'open data.

Wololo! Convertissez l'open data vers des tags d'OpenStreetMap - peertube SOTM FR 2025 - peertube.openstreetmap.fr

Conférence être contributrice à OpenStreetMap à 6ans et le rester

Quel est le bon âge pour commencer à contribuer à OpenStreetMap? Comment contrevenir aux problèmes inhérents à tous les projets de logiciels libres du monde qui est des problèmes d'inclusivité vis-à-vis des femmes, des personnes racisées, et des gens de toutes sortes? Quelques éléments de réponse trouvés par le groupe de travail inclusivité dans cette conférence que j'ai réalisé pendant le State Of The Map de Tours en 2025.

contributrice-des-5-ans-et-le-rester

Être contributrice à OpenStreetMap à 6 ans et le rester - peertube.openstreet… SOTM FR 2025 - peertube.openstreetmap.fr France/OSM-FR/Groupes de travail/Inclusivité - OpenStreetMap Wiki

Les boulangers du libre

Nous on aime bien les croissants, et on se demande comment on pourrait faire décroître les inégalités tout en faisant collectivement réduire les émissions de gaz à effet de serre dans le monde. Nous sommes un collectif autogéré de gens proches du libre qui avons suffisamment avancé de façon individuelle pour souhaiter faire les 80% du chemin restant face aux plus grands défis climatiques de ce siècle, la lutte contre le réchauffement climatique global.

La croissance du PIB n’est pas sacrée, elle n’est pas une mesure pertinente du bien être de la société ou même de la qualité de vie issue du travail fait par les gens d’un pays. Parlons alors de démobilité des transports, de mise en commun des biens, de redistribution des richesses, de végétalisation des alimentations, de permettre les entraides, de reprendre aux fraudes patronales, de visions pour faire face aux crises de santé, de logement, de dégradation de la qualité de vie, de renforcement des gardes fous face aux dérives sectaires et autoritaires qui n’ont de cesse de s’amplifier avec les diverses catastrophes naturelles alors que la communauté scientifique sonne l’alarme depuis des dizaines d’années et que le GIEC répète que chaque dixième de degré de réchauffement global complique les conditions de notre survie à toutes et tous à court terme.

Sobres, nous référencons ici en texte simple les diverses initiatives existantes allant dans ce but et les plus proches de l’esprit libriste, pour que chacune et chacun puisse jouer collectif et que cette initiative survive à ses créatrices et créateurs.

  • Pérenniser et vulgariser les connaissances scientifiques.
  • Dénoncer les dominations à grande échelle et l’inaction climatique.
  • Faire éducation populaire à la vie politique.
  • Mettre en pratique la sortie de la financiarisation de tout.
  • Éviter le gâchis des ressources critiques à la sortie de la dépendance aux fossiles.
  • Permettre les alternatives à la médiocrité politicienne.
  • Demandez pourquoi, dénoncez les absurdités, refusez l'intolérable.
  • Nous vous laissons inventer les autres pistes.

https://ploum.net/2023-03-30-tnt23-pourquoi.html

suivi d'écriture de livre avec book generator

Nombreux sont les gens qui écrivent des trucs, avec ou sans utiliser la disposition Ergol ou les fichiers Orgmode. La profusion de textes médiocres et sans personnalité générés par des LLM ont provoqué un enthousiasme pour les écrits organiques de la part de gens plus ou moins habitués à écrire. J'ai participé au mouvement en proposant un outil pour avoir la main sur mes blogs. Comme c'est actuellement l'Inktober et que des gens se mettent à encrer des pixels, je vous propose d'essayer ce petit générateur de livres au format Org ou Markdown fait de quelques scripts Python : https://source.cipherbliss.com/tykayn/book-generator-orgmode

Inspiré des quelques outils libres existant pour aider les écrivains à réaliser leur livres et de ce qui me reste de mes études d'art narratif j'ai composé un ensemble de scripts qui permettent de:

  • suivre les intrigues
  • définir des choses en général pour notre livre, auxquelles se reporter pour retrouver son fil directeur et le faire évoluer si besoin.
  • faire des décomptes de progression et en sortir un graphique
  • se donner des objectifs de nombres de mots par chapitre
  • définir et suivre nos personnages, leurs caractéristiques, ce qu'elles et ils veulent accomplir, leurs évolutions.
  • se noter des choses à retravailler sans que ces tâches soient dans le rendu du livre
  • avoir des rendus graphique de nos arcs narratifs, chronologiquement mais aussi selon la narration qui n'est pas souvent chronologique.
  • estimer notre temps de rédaction et le temps de lecture du livre.
  • corriger des fautes, supprimer les doubles espaces, ajouter des majuscules manquantes, corriger des caractères spéciaux comme les trois points.
  • le tout sans obliger à adopter un autre éditeur de texte que celui que l'on utilise habituellement, donc en conservant des formats textes ouverts: org et md.
  • rendre notre livre dans différents formats: epub, pdf, html.
  • générer un projet de livre avec les différents fichiers, découpés en chapitres et sous chapitres avec des tags par défaut.
  • avoir un script de mise à jour des informations automatiques à mettre en cronjob pour faire le suivi tout seul.
  • garder le tout qui fonctionne localement sur ordi, sans besoin de connection à internet.

Ce dépôt ne s'occupera pas de vos sauvegardes et gestions de versions, pour ça je vous conseille à minima d'utiliser un git add et commit fait par un cronjob pour chacun de vos dossiers de textes, et de sauvegarder ces dossiers sur plusieurs supports externes.

Tout ceci m'a permis d'aller voir des conseils de gens qui écrivent des genres variés, des récits ou des articles de blog, ou qui font du doublage. Ce qui est amusant c'est que tout le monde a ses propres conseils à donner, des exercices à proposer, des consignes qu'elles et ils disent suivre et qui changent avec le temps. Cory Doctorow par exemple conseille de se donner un nombre précis de mots par jour, et de s'arrêter à ce nombre même si on est au milieu d'une phrase, histoire de laisser son esprit le temps de penser. Ploum, que j'ai eu le plaisir de voir en dédicace dans la librairie de Bookynette à Paris, nous raconte aussi que pour écrire il utilise sa machine à penser, qui est une machine à écrire. Ce qui permet de ne pas avoir son attention dispersée par l'interface numérique. Il faut ensuite retaper au clavier les feuilles qui font partie de la sélection (ou faire de l'OCR, why not) pour envoyer à l'éditeur.

Personnellement j'essaie de temps à autre des choses, Changer le thème d'emacs pour avoir une typo qui me plaît, écouter tel ou tel genre de musique, noter des choses au crayon, dessiner des rendus visuels des intrigues, reformuler les choses dites par les personnages pour que tout le monde n'ait pas la même façon de parler, causer avec des gens pour essayer de mieux comprendre leur vision du monde. Chercher de l'inspiration dans des livres ou des lieux que je n'ai jamais fréquenté, voir des vidéos d'artistes, repenser à des situations et des lieux dans des rêves qui ne semblent pas correspondre à des lieux que j'ai visité… faire quelques session de dactylo, et se mettre à écrire. Bref, amusez vous!

https://tykayn.fr/2024/ecrire-une-histoire-et-ses-personnages-toute-une-aventure https://bosiandco.wordpress.com/2022/10/16/et-de-vingt-la-dilution-de-la-fonction-sujet/ https://www.cs.tufts.edu/~nr/cs257/archive/cory-doctorow/cory-doctorow-writing-in-age-of.html

les projets du mois sont de retour

Ces projets "du mois" permettent d'animer la communauté de gens qui contribuent à OpenStreetMap sur des sujets identifiés par les membres afin de favoriser la complétion des donneés ouvertes. Ces projets durent bien sûr plus qu'un mois et le suivi des objets se fait sur plusieurs années.

Vous pouvez tester sur https://projetdumois.fr

créer son blog gemini et https à la fois

petit tuto pour servir un blog gemini avec le serveur agate.

pour conquérir le monde avec vos écrits, et faire votre capsule gemini il vous faudra :

  • un nom de domaine, genre social.cipherbliss.com
  • un ordi relié à internet pour héberger votre site gemini
  • un logiciel de serveur gemini à qui vous direz où sont vos écrits, par exemple agate.
  • un fichier texte index.gmi qui liste d'autres fichiers gmi, mettons un fichier par article.

et voilà, vous pourrez accéder à votre capsule via Firefox si vous y mettez l'extension Geminize, ou via des navigateurs de véritables barbus comme Lagrange, ou le logiciel qui fait tout en ligne de commande, maintenu par le non barbu Ploum: offpunk.

Le meilleur moyen de partager ses écrits étant d'utiliser ce qu'on a déjà écrit dans le passé, il vous faudra trouver un moyen de récupérer vos écrits par un export et une conversion. heureusement il existe pandoc qui fait beaucoup de merveilles. Pour mon usage j'ai développé un dépôt qui me permet d'avoir mes écrits de plusieurs sites au format orgmode ou markdown, et de générer un blog et une capsule gemini à la fois pour chaque blog.

Dans cet outil, les fichiers org sont convertis en markdown via pandoc avant de passer par un reformatage pour bien distinguer les liens puis par md2gemini.

pour faciliter la découverte et la navigation j'ai fait en sorte de détecter les tags, de prendre en compte ceux précisés comme tags, de créer des Indexes listant les articles pour un certain tag, une liste de tous les articles, un flux rss, et de faire des liens en bas d'article pour revenir à l'accueil, inviter à soutenir financièrement mes projets, me contacter, ou suivre des gens que je recommande.

en fait le bon outil pour entretenir votre blog sera celui qui vous permet de facilement le mettre à jour. si c'est trop compliqué ou que vous devez chercher longtemps comment faire à chaque fois vous n'allez pas faire vivre ce site.

pour cela j'ai documenté le tout dans le readme, et créé des scripts pour fabriquer un nouvel article, régénérer les sites sans régénérer les pages qui n'ont pas été modifiées depuis la dernière génération. je me suis amusé avec un peu de scss qui fait du CSS, mais sans aller chercher moult typos et plugins en js, juste de quoi mettre en couleur des portions de code.

havez fun !

Faire une analyse avec Osmose-Backend

Osmose permet d'analyser les données d'OpenStreetMap et de les comparer à des données ouvertes pour proposer de les réunir, le tout avec une pile logicielle libre en python, et une base de données PostgreSQL qui se chargera de stocker les données d'OpenStreetMap.

Il existe un paquet d'analyses permettant de définir des règles de conversion et de vérification pour chaque thématique. Des "Plugins", eux, vont se charger de vérifier la validité des données. Imaginons que nous souhaitons intégrer de l'open data concernant les bornes de recharge électrique à partir du fichier de DataGouv. Il existe une analyse de type Merger, qui permet de fusionner des données avec l'existant de deux façons:

  • proposer l'intégration de données nouvelles
  • corriger les attributs des données existantes

Exemple de ce que donne l'analyse des station de recharge électrique sur Tours dans Osmose-Frontend: https://osmose.openstreetmap.fr/fr/map/#loc=11/47.3998/0.7302&item=8410%2C8411%2C8412&level=1%2C2%2C3

Choisir une analyse à faire fonctionner

Osmose propose plus de 90 analyses différentes. Pour avoir la liste de leurs noms lancez cette commande:

sudo service docker start

cd osmose-backend/docker

cd docker
docker-compose --project-name essonne run --rm backend ./osmose_run.py --list-analyser

Vous verrez que plusieurs analyses ont des noms très similaires, ils diffèrent par leur zone géographique car on valide différemment des données selon leur production, qui se fait souvent par zones et par des gens dont l'informatique n'est (généralement) pas du tout le métier. C'est pourquoi concernant la catégorie défibrilateurs vous avez ceci:

mergedefibrillatorsFR mergedefibrillatorsFRaedmap mergedefibrillatorsFRhautesalpes mergedefibrillatorsFRissylesmoulineaux mergedefibrillatorsFRlorient mergedefibrillatorsFRmontfort mergedefibrillatorsFRparis mergedefibrillatorsFRsaintmalo mergedefibrillatorsFRtoulouse

Vous pouvez faire une analyse qui incluera toutes les validation des zones à la fois de cette thématique, ou plus précisément en ne demandant qu'une validation spécifique à une zone, mais pas forcément sur cette zone. Sauf que vous risquez de ne pas avoir de données à comparer.

Avant de vous lancer dans un long travail de contribution à un logiciel libre, je ne peux que vous conseiller de causer sur le forum OSM France pour savoir si ce n'est pas déjà prévu, trouver de la documentation à lire, des gens à qui causer en cas de problème, breffe, les besoins de base pour toute contribution. https://forum.openstreetmap.fr

https://www.cipherbliss.com/2025/contribuer-%c3%a0-un-projet-libre/

Avant d'aller vraiment modifier une analyse, on va faire tourner le projet sur son propre ordi et voir ce qui se passe dans une analayse simple.

Analyser une zone localement

Disons que l'on veut modifier le Merger `mergechargingstationFR`, et que l'on veut voir ce que donne nos modifications en lançant une analyse. Pour éviter que cela prenne toute la journée, nous allons restreindre le champ d'analyse au patelin perdu de Monaco. Après une installation locale avec docker-compose du dépot osmose-backend, nous pouvons lancer cette commande qui va demander au point d'entrée principal de faire marcher l'analyse `mergechargingstationFR` sur la zone `monaco`, sans supprimer les données en base si elles existent déjà:

# je vous passe l'installation de docker et docker-compose
git clone https://github.com/osm-fr/osmose-backend 
cd osmose-backend/docker
docker-compose --project-name monaco-irve run --rm backend ./osmose_run.py --country=monaco --no-clean --analyser=merge_charging_station_FR

Sur ma tour cela prend autour de 15 secondes.

Cela va créer un fichier xml dans le dossier "docker/work/results" listant les alertes détectées par notre analyseur. Ce sont ces alertes qui permettent d'afficher les punaises de couleur sur la carte du frontend. Elles contiennent les informations traduites dans plusieurs langues des problèmes rencontrés, les tags à ajouter ou enlever, etc…

Votre terminal vous listera le déroulement de l'analyse, la mise à jour ou non de la base de données sur la zone concernée, les passes de conversion et de vérification.

Exemple d'un Analyser

Voici l'analyse des stations de recharge électrique en France: https://github.com/osm-fr/osmose-backend/blob/dev/analysers/analyser_merge_charging_station_FR.py

Ce Merger va récupérer les données depuis datagouv, puis convertir les données selon un ensemble de règles en liste blanche. On définit la documentation qui apparaîtra dans le frontend, l'url du fichier open data, la façon dont on détermine les positions des objets, et la correspondance entre les définition des propriétés des objets et les tags OSM. Ces correspondances ont été choisies par la communauté avant d'atterir dans une analyse Osmose. Tous les champs du fichier opendata ne sont pas forcément utilisés, certains n'ont pas de tag, certains identifiants n'ont pas de sens en dehors des logiciels persos des producteurs, certains demanderaient de créer des objets séparés, certaines informations doivent être regroupées ou reformatées, certaines sont trop vagues pour être qualifiées correctement, bref c'est festival.

https://wiki.openstreetmap.org/wiki/France/data.gouv.fr/Bornes_de_Recharge_pour_V%C3%A9hicules_%C3%89lectriques#Tableau_de_correspondance

L'analyse de l'open data utilise d'ailleurs un csv qui fait suite à un retraitement des données initiales, mis à jour quotidiennement sur datagouv par JungleBus, et vous trouverez ici le détail de l'opération: https://github.com/Jungle-Bus/ref-EU-EVSE

La conversion que je fais de ce jeu de données dans Wololo est différente et ne regroupe pas les totems en stations.

Mais revenons à l'analyse.

Par exemple dans l'Analyser on a une ligne de mapping qui dit que l'on prend la valeur de "datemiseenservice" pour en faire un tag "startdate", c'est la conversion la plus simple:

"start_date": "date_mise_en_service",

Des fonctions lambda sont utilisées pour des conversions un peu plus complexes.

"bicycle": lambda fields: "yes" if fields["station_deux_roues"] == "true" else None,

On a aussi une conversion pour les items wikidata qui dépendent du nom de l'opérateur:

# au début de la classe Analyser
    WIKIDATA_MAP = {
        "ionity": "Q42717773",
        "bouygues": "Q3046208",
        "freshmile": "Q111209120",
        "lidl": "Q115764851",
        "Electra": "Q128592938",
        "TotalEnergies Charging Services": "Q154037",
        "Last Mile Solutions": "Q109733858",
        "Izivia": "Q86671322",
    }
# ......  et plus loin dans la définition des mappings, on utilise ce dictionnaire
           "wikimedia:network": lambda fields: self.WIKIDATA_MAP.get(fields["nom_enseigne"].lower(), None) if fields["nom_enseigne"] != "0" else None,

Ce genre de conversion simple suffit pour la plupart des jeux de données ouverts. Pour des exepples plus complexes vous trouverez des requêtes SQL spatiales dans d'autres analyses, comme par exemple pour les façons de qualifier les attaches des câbles télécom ou électriques sur les pylônes.

N'oubliez pas de faire des tests unitaires sur vos Analysers.

Si vous êtes prêts à passer à une zone plus grande, changez la valeur de "country". Les noms des countries sont un enchaînement de zones séparées par des soulignés.

docker-compose --project-name essonne run --rm backend ./osmose_run.py --country=france_ile_de_france_essonne --no-clean --analyser=merge_charging_station_FR

Pour bricoler vos analyses je ne peux que vous conseiller de lire la documentation dans le dossier "doc" du dépot osmose-backend. Le wiki d'OSM est un complément mais beaucoup moins exhaustif.

Bon amusement!

  • La documentation dans le wiki OSM:

https://wiki.openstreetmap.org/wiki/Osmose

  • Le site web d'osmose pour voir les alertes:

https://osmose.openstreetmap.fr/fr/map/

  • Des conférences sur le sujet:

https://peertube.openstreetmap.fr/search?search=osmose&searchTarget=local

  • Les sources du backend:

https://github.com/osm-fr/osmose-backend

  • La documentation du frontend:

https://github.com/osm-fr/osmose-frontend

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!