Another world ‽ - seb35’s blog - Archéo Lex2024-02-11T02:34:29+01:00urn:md5:70dee6f1fc053a5e3374878073ac9f13DotclearArchéo Lex S02E01urn:md5:add6c2893e861d357bd83ee89c3e2ce82018-09-17T00:31:00+02:002018-10-21T17:00:15+02:00Seb35Archéo LexGitlégistique<p>Au départ, Archéo Lex n’était qu’un prototype (voir la première saison <a href="http://blog.seb35.fr/billet/Arch%C3%A9o-Lex,-Pure-Histoire-de-la-Loi-fran%C3%A7aise,-pour-%C3%A9tudier-son-%C3%A9volution" hreflang="fr" title="Archéo Lex, Pure Histoire de la Loi française, pour étudier son évolution">S01E01</a> et <a href="http://blog.seb35.fr/billet/Gen%C3%A8se-d%E2%80%99Arch%C3%A9o-Lex" hreflang="fr" title="Genèse d’Archéo Lex">S01E02</a>). Quatre ans après, beaucoup d’octets ont traversé les internets, Archéo Lex fait désormais partie d’un petit paysage de ce que l’on pourrait appeler la légistique numérique libre ; et si on devait en faire un TrucTech, ça pourrait être “Libre LawTech”. Aujourd’hui, l’ensemble des codes est présent sur le site <a href="https://archeo-lex.fr/codes">archeo-lex.fr</a>, ils sont sont mis à jour quotidiennement et ce site voit son interface simplifée. Par ces trois améliorations, Archéo Lex devient réellement utilisable par les utilisateurs autres que les geeks, et notamment par les juristes et archéologues du droit.</p> <p>Au sens strict, Archéo Lex est le programme qui lit la <a href="https://www.dila.premier-ministre.gouv.fr/repertoire-des-informations-publiques/les-donnees-juridiques">base LEGI</a> et la transforme en dépôts Git, qui est à la fois un format couramment utilisé en informatique pour suivre les différentes versions d’un texte et un ensemble d’outils assez puissants pour suivre les évolutions du texte. Plus exactement, Archéo Lex n’utilise plus directement la base LEGI officielle (au format XML), mais passe par l’intermédiaire du projet <a href="https://github.com/Legilibre/legi.py">legi.py de Changago</a> qui transforme la base LEGI officielle en une base de données SQL – SQLite plus exactement – c’est-à-dire un format déjà beaucoup plus manipulable (<a href="https://github.com/Legilibre/Archeo-Lex/issues/31">discussion sur l’intégration de legi.py</a>). Plus généralement, la base de données SQL créée par legi.py permet de répondre à beaucoup de questions qu’on peut se poser sur les lois, sous réserve toutefois de connaître le language SQL : combien y-a-t-il de lois au total ? combien en vigueur ? combien par type de loi ? combien sur tel intervalle de temps ? combien de sections et d’articles en moyenne ? durée de vie d’une loi ? quelles sont les lois parues un 31 décembre ? etc.</p>
<p>Au sens large, Archéo Lex représente aussi l’interface sur le site <a href="https://archeo-lex.fr/codes">archeo-lex.fr</a>. Cette interface a été conçue à partir d’un logiciel libre de visualisation de dépôts Git, <a href="http://gitlist.org">GitList</a>, à l’origine utilisé pour visualiser du code informatique, transformé pour visualiser des textes de loi. Quoique qu’une première simplification de l’interface ait été faite il y a quatre ans, une deuxième passe a été faite récemment pour encore retirer certaines fonctionnalités peu utiles aux textes de loi.</p>
<p>Dans l’écosystème de la légistique numérique libre, Archéo Lex est désormais au milieu d’une chaîne de traitement des textes de loi : de même que legi.py agit en amont d’Archéo Lex, il y a désormais <a href="https://github.com/Legilibre/SedLex">SedLex</a> qui agit en aval, spécifiquement dans la projection d’amendement sur un texte en vigueur, issu d’Archéo Lex. Pour cette opération, SedLex a besoin d’une certaine qualité sur les textes fournis, notamment sur la numérotation des alinéas.</p>
<p>Avant d’aborder la liste des principales améliorations à Archéo Lex et à l’interface, mentionnons les communautés actuelles autour de la légistique numérique libre :</p>
<ul>
<li><a href="https://legilibre.fr">Légilibre</a> tout d’abord, communauté de personnes et de logiciels qui s’intéressent au traitement numérique de la loi, qui s’est créée fin 2016,</li>
<li><a href="https://www.regardscitoyens.org">Regards Citoyens</a> et notamment le projet <a href="https://www.lafabriquedelaloi.fr">La Fabrique de la Loi</a> qui permet de visualiser la loi en fabrication au Parlement,</li>
<li>le <a href="https://www.parlement-ouvert.fr">Bureau ouvert</a>, rendez-vous informels à l’Assemblée nationale qui permettent (pour résumer rapidement) de discuter de la thématique de la démocratie via les outils numériques.</li>
</ul>
<h3>Améliorations apportées à Archéo Lex</h3>
<p>Dans le programme Python créant les dépôts Git donc.</p>
<ul>
<li>Performance : jusqu’à l’année dernière, les gros codes mettaient jusqu’à 60h à être calculés (=à créer le dépôt Git du code), l’ensemble des 103 codes met désormais 5h30 à être calculé. Cela s’est fait notamment en optimisant les appels SQL et en créant un <a href="https://github.com/Legilibre/Archeo-Lex/issues/32">cache de sections</a> (=par exemple ne pas re-calculer la partie réglementaire si elle n’a pas changé d’une version à l’autre) ;</li>
<li>Formats de texte : il est désormais possible d’enregistrer plusieurs variations d’un même texte dans un même dépôt Git, par exemple une variation avec tout le texte dans un seul fichier et une variation avec un article par fichier (de part la compression, cela ne prend que très peu de place supplémentaire) ;</li>
<li>Abstraction du code d’Archéo Lex : c’est purement informatique, mais cela permet de pouvoir ajouter relativement facilement des variantes, que ce soit avec une syntaxe autre que Markdown ou une autre organisation des fichiers ou même un autre système de gestion de versions ;</li>
<li>Articles manquants : par le jeu des sections / sous-sections ayant des intervalles de vigueur se chevauchant, il est arrivé qu’il manque des articles, c’est désormais réparé ;</li>
<li>Articles et sections morts-nés : ce sont les articles et sections qui devaient entrer en vigueur dans le futur mais qui ont été abrogés avant, et qui n’ont donc jamais été en vigueur ; ceux-ci ont donc une date de début de vigueur postérieure à leur date de fin de vigueur, ce sont des cas particuliers à traiter correctement ;</li>
<li>Dates dans Git : étant donné que Git est à la base un outil informatique, il manipule par défaut des dates entre 1970 et 2100, ce qui est insuffisant pour les textes de loi, surtout pour la période pré-1970 (mais il faut aussi utiliser la date du 22 février 2222 qui signifie « date d’entrée en vigueur future à une date non-déterminée) ; il a fallu gérer dans Archéo Lex <a href="https://github.com/Legilibre/Archeo-Lex/issues/47">l’écriture bas niveau du format Git</a> sans passer par les outils standards (pour écrire un timestamp négatif) ; toutefois les dépôts Git créés ainsi ne sont pas compatibles avec certaines plateformes comme GitHub et cela reste donc une option à activer explicitement ;</li>
<li>Amélioration de la syntaxe et de la typographie : retrait de nombreuses balises HTML qui polluent le texte, normalisation des paragraphes (afin de bien compter les alinéas notamment, quoique cela n’est pas encore garanti), nettoyage des tableaux HTML.</li>
</ul>
<h3>Améliorations apportées à l’interface</h3>
<p>Sur le site <a href="https://archeo-lex.fr/codes">archeo-lex.fr</a> donc.</p>
<ul>
<li>Épuration de l’interface : en plus de la liste des versions et de l’affichage du texte intégral d’une version, seules deux autres fonctions restent : les diffs, principale plus-value de la loi sous Git, et ce que j’ai appelé « texte annoté » (mais je ne suis pas satisfait du nom si vous avez de meilleures propositions) ; cette dernière permet de retrouver quand a eu lieu la dernière modification de chacune des lignes afin de retrouver la date de l’introduction d’une disposition (en informatique, cette fonctionnalité s’appelle « blamer », dans l’idée de retrouver qui a introduit le bug sur telle ligne, je n’aime pas ce nom qui n’est pas des plus positifs) ;</li>
<li>Diffs mot-à-mot : par défaut les diffs créés par Git sont ligne par ligne, c’est bien, mais le mot-à-mot, c’est mieux ; ceci est expérimental et ne fonctionne pas lorsqu’il y a trop de calculs à effectuer ; ces diffs sont créés avec l’algorithme de Ratcliff-Obershelp qui permet de trouver les parties communes à deux textes afin d’avoir des diffs plus lisibles qu’avec d’autres algorithmes ; toutefois certains sont encore difficiles à lire, n’hésitez pas à recenser des exemples et des propositions d’amélioration ;</li>
<li>Dates Git : en cohérence avec les dépôts Git créés avec des dates pré-1970, l’interface comprend ces dates ; c’est donc une des rares interfaces à être compatible avec ces dates.</li>
</ul>
<h3>Prochaines améliorations</h3>
<p>Désormais, les 103 codes (73 en vigueur et 30 abrogés) sont présents sur le site <a href="https://archeo-lex.fr/codes">archeo-lex.fr</a>, dans une qualité très correcte. Les erreurs que j’observe désormais sont plutôt dans les données de la base LEGI que dûes à un mauvais traitement d’Archéo Lex.</p>
<p>Les prochaines améliorations sont :</p>
<ul>
<li>une inscription des métadonnées et variations présente dans chaque dépôt Git afin de faciliter sa gestion,</li>
<li>l’ajout de liens internes voire externes avec la bibliothèque <a href="https://framagit.org/parlement-ouvert/metslesliens">metslesliens</a>,</li>
<li>l’ajout des quelques 3000 lois sur le site archeo-lex.fr, ainsi que de la centaine de lois organiques, de la vingtaine de lois constitutionnelles et de la Constitution,</li>
<li>l’ajout des versions initiales des lois, dont le texte est contenus dans la base JORF et non LEGI.</li>
</ul>
<h3>Utilisation par les juristes</h3>
<p>De part les améliorations sur la qualité et la fréquence de mise à jour, le site est probablement prêt pour être réellement utilisé par les juristes, notamment afin de retrouver quand a été introduite ou modifiée une disposition donnée, en complément de Légifrance.</p>
<p>Les mises à jour sont programmées les jours de semaine vers 21h (la DILA fournit la base LEGI du jour vers 20h30) et, à ce qu’il semble, contiennent les textes consolidés jusqu’au JORF du jour, soit les textes en vigueur à partir du lendemain selon les délais normaux.</p>
<p>Amis juristes, n’hésitez pas à me <a href="https://www.seb35.fr/contact">faire part de vos suggestions</a> pour améliorer l’interface ou pour demander des fonctionnalités nouvelles !</p>//blog.seb35.fr/post/Arch%C3%A9o-Lex-S02E01#comment-form//blog.seb35.fr/feed/atom/comments/14Genèse d’Archéo Lexurn:md5:0dd0fbd95bc45b09680683575261e6bc2014-12-30T17:09:00+01:002015-07-30T15:11:17+02:00Seb35Archéo LexGitlégistique<p>Lorsqu’il fut découvert en août 2014 via Twitter et <a href="http://www.regardscitoyens.org/" hreflang="fr">Regards Citoyens</a>, plusieurs furent intéressés par le concept d’<a href="http://blog.seb35.fr/post/Arch%C3%A9o-Lex%2C-Pure-Histoire-de-la-Loi-fran%C3%A7aise%2C-pour-%C3%A9tudier-son-%C3%A9volution" hreflang="fr">Archéo Lex</a> : « <em>visionner facilement les codes de loi français et leur évolution</em> », avec une traduction en language tech : « <em>versionner sous Git en syntaxe Markdown les codes de loi français</em> ». Je présente dans ce billet la genèse d’Archéo Lex et discuterait dans le prochain billet des évolutions futures possibles.</p> <h5>Naissance de l’idée</h5>
<p>À la base, j’avais personnellement un besoin en tant qu’utilisateur et n’ai pas trouvé d’outil sur internet y répondant : je devais renouveller la police d’assurance de mon appartement et il était écrit dans les petites lignes qu’il serait assuré contre le terrorisme. N’ayant pas envie de l’assurer contre ce risque (position philosophique toussa) et de payer en conséquence, je suis allé voir le <a href="http://legifrance.gouv.fr/affichCode.do?cidTexte=LEGITEXT000006073984" hreflang="fr">code des assurances</a>. Celui-ci stipule, si je comprends bien, qu’il est obligatoire pour les assurances habitation de protéger contre ce risque. Bon, soit, pas moyen d’y échapper.</p>
<p>J’aurai pu en rester là, mais je me suis demandé quand avait eu lieu cette modification. Sur Légifrance, code des assurances, j’ai donc parcouru les articles et sections et navigué entre les différentes versions historiques, et ça n’était pas très pratique. Pour la petite histoire, l’assurance contre le terrorisme est régie par les articles <a href="http://legifrance.gouv.fr/affichCode.do?idSectionTA=LEGISCTA000019113080&cidTexte=LEGITEXT000006073984" hreflang="fr">L422-1 et suivants</a>, coûtait <a href="http://legifrance.gouv.fr/affichTexte.do?cidTexte=LEGITEXT000021200946" hreflang="fr">3,30€ par contrat en 2010</a>, et a été <a href="http://archeo-lex.fr/git/Code_des_assurances/commit/f5d27198438627a5542d02589d274bb463087d24#L364L2189" hreflang="fr">introduite le 20 mars 1988</a> (ce lien mène vers archeo-lex.fr). De là est née l’idée de mettre les codes sur une seule page – pour chercher facilement dans tout le code – et de les versionner – pour suivre leur évolution. Git, pour le versionnement, s’est imposé rapidement (répandu, pratique, loué par tout le monde, et comprend l’outil <code>git blame</code> pour recherche qui a écrit quoi) associé à la syntaxe légère Markdown (lisible et répandue, même si d’autres syntaxe légères existent aussi).</p>
<h5>Réalisation technique du prototype</h5>
<p>J’ai réalisé le prototype d’Archéo Lex fin juillet 2014 en environ 5 jours en y travaillant seul, de la naissance de l’idée au prototype fonctionnel. Si cela a été aussi rapide, c’est que j’ai réutilisé dans ce contexte ce sur quoi j’avais travaillé dix jours auparavant dans un autre contexte.</p>
<p>Cet autre contexte s’appelle <a href="http://www.kiwix.org/" hreflang="fr">Kiwix</a>+<a href="http://www.gutenberg.org/" hreflang="fr">Gutenberg</a>. Sur l’invitation d’Emmanuel Engelhart, créateur de Kiwix, et grâce au soutien de <a href="https://www.wikimedia.ch/fr" hreflang="fr">Wikimedia CH</a>, de la <a href="http://fondationorange.com/" hreflang="fr">Fondation Orange</a> et de <a href="http://framasoft.org/" hreflang="fr">Framasoft</a>, j’avais participé mi-juillet à la création de fichiers ZIM, habituellement utilisés pour contenir tout Wikipédia pour de la lecture hors-ligne, mais cette fois-ci contenant la bibliothèque numérique Gutenberg contenant des textes dans le domaine public. À quatre personnes, dans un studio loué pour l’occasion à Lyon, on a mangé des nouilles (surtout) et codé du Python. Le résultat est désormais publié et accessible, et <a href="http://library.kiwix.org/gutenberg_mul_all_2014-11/A/The%20Children%27s%20Book%20of%20Birds.41141.html" hreflang="en">voici un exemple de livre</a> (il y a des versions epub pour liseuses et des versions ZIM pour Android et ordinateur via Kiwix).</p>
<p>En gros, ce projet Kiwix+Gutenberg lit la base XML de Gutenberg, récupère les métadonnées, les affiche dans une jolie interface, et en parallèle récupère les epub et HTML de Gutenberg, les uniformise et les intègre dans le fichier ZIM. Archéo Lex fait sensiblement la même chose : il lit la base LEGI, récupère les métadonnées, assemble les codes avec un soupçon de Markdown et les intègre ensuite dans Git. Quoique j’ai recommencé <em>from scratch</em> le code Python, on retrouve la même architecture et les mêmes librairies utilisées.</p>
<p>Avec le recul, j’ai beaucoup apprécié de travailler sur ce projet Kiwix+Gutenberg (bénévolement mais tous frais payés) et également de transposer les mêmes méthodes et savoir-faire dans un autre contexte. Cela est dû en grande partie à l’ouverture et à la philosophie du logiciel libre. J’y reviendrai dans le prochain billet, mais j’aimerais beaucoup pouvoir réussir à vivre (juste vivre) grâce à la création de logiciels libres.</p>
<h5>Communication</h5>
<p>En tant que geek et hacker, la communication est un concept que j’aurai fui il y a quelque temps (communication prêt-à-penser, publicité promouvant la consommation, marketing acéré, etc.). Toutefois, depuis Snowden, j’ai revu ma position (et la communauté geek/hacker aussi je crois) : même si les logiciels libres ont plein de qualités (leur sécurité, leur décentralisation, leur philosophie de partage, leurs communautés, etc.), il est une qualité dont ils manquent souvent et qui leur fait défaut pour être plus répandus au sein du grand public : leur beauté extérieure, c’est-à-dire leur design, leur utilisabilité, l’explication de ce qu’ils font exactement, leur promotion, la qualité de leur documentation, etc. Bien sûr, tout cela est en partie fait, mais pas suffisamment pour avoir une bonne image globale et faire que les utilisateurs les choisissent en priorité (dernièrement, j’ai encore rencontré une personne qui a été surprise que mon Linux ne soit pas en ligne de commande).</p>
<p>Pour en revenir à Archéo Lex, j’ai passé une après-midi avec ma sœur, non-technicienne de l’informatique, pour discuter de la façon de présenter les choses et pour choisir un nom. Je lui dois beaucoup pour la clarté et la concision du billet de blog introductif, pour ce qui est directement visible, mais plus globalement pour le discours non-technique de présentation. Et finalement, je suis heureux de voir que cette clarté ait été efficace.</p>
<h5>Futur</h5>
<p>Depuis août, Archéo Lex n’avait pas tellement évolué, mais je m’y remet depuis quelques jours, entre autres à la suite du programme <a href="http://openlaw.fr/" hreflang="fr">OpenLaw</a>, et je viens d’ouvrir le site <a href="http://archeo-lex.fr/" hreflang="fr">archeo-lex.fr</a> qui contiendra à terme tous les codes. Essentiellement, le futur d’Archéo Lex dépendra en grande partie des attentes des utilisateurs (oui, vous! :). J’exposerai les possibilités dans un futur billet, mais n’hésitez pas à <a href="https://github.com/Seb35/Archeo-Lex/issues">ouvrir des discussions</a> sur Github (en attendant d’avoir une liste de discussion dédiée).</p>//blog.seb35.fr/post/Gen%C3%A8se-d%E2%80%99Arch%C3%A9o-Lex#comment-form//blog.seb35.fr/feed/atom/comments/10