Bloghttps://yaal.coop/blog/2024-03-21T00:00:00+01:00Contributions à des logiciels libres par l'équipe Yaal Coop durant l'hiver 20242024-03-21T00:00:00+01:002024-03-21T00:00:00+01:00Éloi Rivard <eloi@yaal.coop>tag:yaal.coop,2024-03-21:/blog/dernieres-contributions-logiciels-libres-hiver-2024<p>Les dernières contributions à des logiciels libres par l'équipe Yaal Coop pendant l'hiver 2024.</p><h2>Mécénat</h2>
<ul>
<li><a href="https://github.com/sponsors/lubber-de">Marco 'Lubber' Wienkoop</a> pour son travail sur <a href="https://fomantic-ui.com">Fomantic-UI</a>, un chouette framework CSS que nous utilisons dans <a href="https://gitlab.com/yaal/canaille">canaille</a>. Fomantic-UI est aussi utilisé par d'autres outils sur lesquels nous comptons, comme <a href="https://forgejo.org">Forgejo</a>.</li>
<li><a href="https://github.com/sponsors/lepture">Hsiaoming Yang</a> pour son travail sur <a href="https://authlib.org">authlib</a>, une bibliothèque python d'authentification que nous utilisons dans <a href="https://gitlab.com/yaal/canaille">canaille</a>.</li>
</ul>
<h2><a href="https://gitlab.com/sblondon/mozsearch-pypi">PyPI search</a></h2>
<p><em>Greffon Firefox pour chercher des bibliothèques Python hébergées par PyPI (pypi.org)</em></p>
<ul>
<li>Remplacement des occurences de « Pypi » par « PyPI »</li>
<li>Publication d'une nouvelle version (1.0.1)</li>
</ul>
<h2><a href="https://github.com/sharkdp/bat">Bat</a></h2>
<p><em>Un clone de cat(1) avec coloration syntaxique et intégration Git</em></p>
<ul>
<li><a href="https://github.com/sharkdp/bat/pull/2838">Affiche quel est le thème par défaut</a> lors de l'utilisation du paramètre <code>--list-themes</code></li>
<li>Ajout d'une capture d'écran sur <a href="https://screenshots.debian.net/package/bat">screenshots.debian.net</a> illustrant l'utilisation du paramètre <code>--list-themes</code></li>
</ul>
<h2><a href="https://github.com/jhunt/hatop">HATop</a></h2>
<p><em>Un client ncurses interactif pour HAProxy</em></p>
<ul>
<li><a href="https://github.com/jhunt/hatop/pull/17">Correction d'une alerte sur la syntaxe</a> survenant avec Python 3.12, basé sur un <a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1061802">rapport de bogue Debian</a></li>
</ul>
<h2><a href="https://virt-manager.org/">Virt-Manager</a></h2>
<p><em>Client lourd pour gérer des machines virtuelles</em></p>
<ul>
<li>Correction et ajouts de traduction en français sur <a href="https://translate.fedoraproject.org/projects/virt-manager/virt-manager/">https://translate.fedoraproject.org/projects/virt-manager/virt-manager/</a></li>
</ul>
<h2><a href="https://github.com/wtforms/wtforms">wtforms</a></h2>
<p><em>Bibliothèque python de gestion de formulaires web</em></p>
<ul>
<li><a href="https://github.com/wtforms/wtforms/pull/823">Correctif sur la coercition de SelectField</a></li>
<li><a href="https://github.com/wtforms/wtforms/pull/824">Correctif pour la compatibilité avec Babel 2.14</a></li>
<li><a href="https://github.com/wtforms/wtforms/pull/830">Conciergerie</a></li>
</ul>
<h2><a href="https://github.com/lepture/authlib">authlib</a></h2>
<p><em>Bibliothèque python de gestion des identités et des accès</em></p>
<ul>
<li><a href="https://github.com/lepture/authlib/pull/614">Améliorations sur la documentation de RFC7523</a></li>
</ul>
<h2><a href="https://gitlab.com/yaal/canaille">canaille</a></h2>
<p><em>Serveur OpenID Connect simpliste, basé sur OpenLDAP</em></p>
<ul>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/164">Implémentation de la souscription d’utilisateurs par OIDC</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/165">Configuration de la journalisation au format de Python</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/166">Mise à jour vers HTMX 1.9.11</a></li>
</ul>
<h2><a href="https://matrix.org">Matrix</a></h2>
<p><em>Une nouvelle base de communication ouverte, intéropérable, décentralisée et en temps réeel</em></p>
<ul>
<li><a href="https://github.com/matrix-org/matrix-spec-proposals/pull/4098">Proposition de MSC4098 pour le support de SCIM</a></li>
</ul>Winter 2024 FOSS contributions from by the Yaal Coop team2024-03-21T00:00:00+01:002024-03-21T00:00:00+01:00Éloi Rivard <eloi@yaal.coop>tag:yaal.coop,2024-03-21:/blog/en/dernieres-contributions-logiciels-libres-hiver-2024<p>The last free and open-source software contributions from the Yaal Coop team during winter 2024.</p><h2>Sponsoring</h2>
<ul>
<li><a href="https://github.com/sponsors/lubber-de">Marco 'Lubber' Wienkoop</a> for his work on <a href="https://fomantic-ui.com">Fomantic-UI</a>, a nice CSS framework we use in <a href="https://gitlab.com/yaal/canaille">canaille</a>. Fomantic-UI is used on other tools we rely on, like <a href="https://forgejo.org">Forgejo</a>.</li>
<li><a href="https://github.com/sponsors/lepture">Hsiaoming Yang</a> for his work on <a href="https://authlib.org">authlib</a>, a python authentication library we use in <a href="https://gitlab.com/yaal/canaille">canaille</a>.</li>
</ul>
<h2><a href="https://gitlab.com/sblondon/mozsearch-pypi">PyPI search</a></h2>
<p><em>Firefox plug-in to search Python libraries hosted at PyPI (pypi.org)</em></p>
<ul>
<li>Replace Pypi occurences by PyPI one</li>
<li>Release a new version (1.0.1)</li>
</ul>
<h2><a href="https://github.com/sharkdp/bat">Bat</a></h2>
<p><em>A cat(1) clone with syntax highlighting and Git integration</em></p>
<ul>
<li><a href="https://github.com/sharkdp/bat/pull/2838">Display which theme is the default one</a> with <code>--list-themes</code> parameter</li>
<li>Add a screenshot about the <code>--list-themes</code> parameter usage on <a href="https://screenshots.debian.net/package/bat">screenshots.debian.net</a></li>
</ul>
<h2><a href="https://github.com/jhunt/hatop">HATop</a></h2>
<p><em>An Interactive ncurses Client for HAProxy</em></p>
<ul>
<li><a href="https://github.com/jhunt/hatop/pull/17">Fix syntax warning</a> occuring with Python 3.12, based on a <a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1061802">Debian bug report</a></li>
</ul>
<h2><a href="https://virt-manager.org/">Virt-Manager</a></h2>
<p><em>Desktop user interface for managing virtual machines</em></p>
<ul>
<li>Fix and add french translations on <a href="https://translate.fedoraproject.org/projects/virt-manager/virt-manager/">https://translate.fedoraproject.org/projects/virt-manager/virt-manager/</a></li>
</ul>
<h2><a href="https://github.com/wtforms/wtforms">wtforms</a></h2>
<p><em>A flexible forms validation and rendering library for Python.</em></p>
<ul>
<li><a href="https://github.com/wtforms/wtforms/pull/823">SelectField coercion fix</a></li>
<li><a href="https://github.com/wtforms/wtforms/pull/824">Babel 2.14 compatibility fix</a></li>
<li><a href="https://github.com/wtforms/wtforms/pull/830">Janitoring</a></li>
</ul>
<h2><a href="https://github.com/lepture/authlib">authlib</a></h2>
<p><em>Identity and Access management library for python</em></p>
<ul>
<li><a href="https://github.com/lepture/authlib/pull/614">RFC7523 documentation improvements</a></li>
</ul>
<h2><a href="https://gitlab.com/yaal/canaille">canaille</a></h2>
<p><em>Simplistic OpenID Connect provider over OpenLDAP</em></p>
<ul>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/164">OIDC User registration implementation</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/165">Python logging configuration format support</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/166">HTMX 1.9.11 upgrade</a></li>
</ul>
<h2><a href="https://matrix.org">Matrix</a></h2>
<p><em>A new basis for open, interoperable, decentralised real-time communication</em></p>
<ul>
<li><a href="https://github.com/matrix-org/matrix-spec-proposals/pull/4098">MSC4098 proposal for SCIM support</a></li>
</ul>Contributions à des logiciels libres par l'équipe Yaal Coop durant l'automne 20232023-12-21T00:00:00+01:002023-12-21T00:00:00+01:00Éloi Rivard <eloi@yaal.coop>tag:yaal.coop,2023-12-21:/blog/dernieres-contributions-logiciels-libres-automne-2023<p>Les dernières contributions à des logiciels libres par l'équipe Yaal Coop pendant l'automne 2023.</p><h2>Mécénat</h2>
<ul>
<li><a href="https://github.com/sponsors/lubber-de">Marco 'Lubber' Wienkoop</a> pour son travail sur <a href="https://fomantic-ui.com">Fomantic-UI</a>, un chouette framework CSS que nous utilisons dans <a href="https://gitlab.com/yaal/canaille">canaille</a>. Fomantic-UI est aussi utilisé par d'autres outils sur lesquels nous comptons, comme <a href="https://forgejo.org">Forgejo</a>.</li>
<li><a href="https://github.com/sponsors/lepture">Hsiaoming Yang</a> pour son travail sur <a href="https://authlib.org">authlib</a>, une bibliothèque python d'authentification que nous utilisons dans <a href="https://gitlab.com/yaal/canaille">canaille</a>.</li>
</ul>
<h2><a href="https://gitlab.com/yaal/canaille">canaille</a></h2>
<p><em>Serveur OpenID Connect simpliste, basé sur OpenLDAP</em></p>
<ul>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/153">Correction d'un bug sur la suppression d'utilisateurs</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/154">Mise à jour vers htmx 1.9.6</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/155">Support de Python 3.12</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/156">Cardinalité des modèles basée sur la norme SCIM</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/157">Méthodes additionnelles d’identification pour les jetons de rafraîchissement OIDC</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/158">Support des bases de données SQL</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/159">Mise à jour vers htmx 1.9.9</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/160">Désactivation de htmx lors de l’authentification OIDC</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/161">Gestion des pages d’erreur avec htmx</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/162">Conversion des images en webp</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/163">Mise à jour vers Flask 3</a></li>
</ul>
<h2><a href="https://github.com/wtforms/wtforms">wtforms</a></h2>
<p><em>Bibliothèque python de gestion de formulaires web</em></p>
<ul>
<li><a href="https://github.com/wtforms/wtforms/pull/739">Réusinage de <code>SelectField</code></a></li>
<li><a href="https://github.com/wtforms/wtforms/pull/797">Implementation de validateurs <code>readonly</code> et <code>disabled</code></a></li>
<li><a href="https://github.com/wtforms/wtforms/pull/798">Migration de setuptools à hatch</a></li>
<li><a href="https://github.com/wtforms/wtforms/pull/808">Affichage des valeurs dans la représentation de Flags</a></li>
<li><a href="https://github.com/wtforms/wtforms/pull/812">Corrections sur des exemples en documentation</a></li>
<li><a href="https://github.com/wtforms/wtforms/pull/812">Réusinage de tests unitaires</a></li>
<li><a href="https://github.com/wtforms/wtforms/pull/818">Support de python 3.12</a></li>
</ul>
<h2><a href="https://github.com/wtforms/flask-wtf">flask-wtf</a></h2>
<p><em>Intégration de WTForms dans Flask</em></p>
<ul>
<li><a href="https://github.com/wtforms/flask-wtf/pull/573">Correction de la protection CSRF sur les blueprints imbriqués</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/pull/576">Migration de setuptools à hatch</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/releases/tag/v1.1.2">Publication de la version 1.1.2</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/releases/tag/v1.2.0">Publication de la version 1.2.0</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/pull/578">Corrections d'un bug sur les validateurs de champs de fichiers</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/releases/tag/v1.2.1">Publication de la version 1.2.1</a></li>
</ul>
<h2><a href="https://anymail.dev/">django-anymail</a></h2>
<p><em>Anymail: Intégration de fournisseurs d'e-mails transactionnels dans Django</em></p>
<ul>
<li><a href="https://github.com/anymail/django-anymail/pull/321">Mise-à-jour du fournisseur Brevo.com provider (précédemment Sendinblue)</a></li>
</ul>
<h2><a href="https://github.com/spiral-project/ihatemoney">ihatemoney</a></h2>
<p><em>Une application web simple de gestion de budget</em></p>
<ul>
<li><a href="https://github.com/spiral-project/ihatemoney/pull/1243">Migration de <code>setup.cfg</code> à <code>pyproject.toml</code></a></li>
<li><a href="https://github.com/spiral-project/ihatemoney/pull/1248">Support de WTForms 3.1</a></li>
<li><a href="https://github.com/spiral-project/ihatemoney/pull/1255">Support de Python 3.12</a></li>
<li><a href="https://github.com/spiral-project/ihatemoney/pull/1258">Migration de setuptools vers hatch</a></li>
</ul>
<h1><a href="https://github.com/lepture/authlib">authlib</a></h1>
<p><em>Bibliothèque python de gestion des identités et des accès</em></p>
<ul>
<li><a href="https://github.com/lepture/authlib/pull/590">Support de python 3.12</a></li>
</ul>
<h2><a href="https://github.com/level12/flask-webtest">flask-webtest</a></h2>
<p><em>Utilitaires de test d'applications Flask avec WebTest</em></p>
<ul>
<li><a href="https://github.com/level12/flask-webtest/pull/21/">Améliorations sur la documentation</a></li>
</ul>Autumn 2023 FOSS contributions from by the Yaal Coop team2023-12-21T00:00:00+01:002023-12-21T00:00:00+01:00Éloi Rivard <eloi@yaal.coop>tag:yaal.coop,2023-12-21:/blog/en/dernieres-contributions-logiciels-libres-automne-2023<p>The last free and open-source software contributions from the Yaal Coop team during autumn 2023.</p><h2>Sponsoring</h2>
<ul>
<li><a href="https://github.com/sponsors/lubber-de">Marco 'Lubber' Wienkoop</a> for his work on <a href="https://fomantic-ui.com">Fomantic-UI</a>, a nice CSS framework we use in <a href="https://gitlab.com/yaal/canaille">canaille</a>. Fomantic-UI is used on other tools we rely on, like <a href="https://forgejo.org">Forgejo</a>.</li>
<li><a href="https://github.com/sponsors/lepture">Hsiaoming Yang</a> for his work on <a href="https://authlib.org">authlib</a>, a python authentication library we use in <a href="https://gitlab.com/yaal/canaille">canaille</a>.</li>
</ul>
<h2><a href="https://gitlab.com/yaal/canaille">canaille</a></h2>
<p><em>Simplistic OpenID Connect provider over OpenLDAP</em></p>
<ul>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/153">Fix user deletion bug</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/154">Bump to htmx 1.9.6</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/155">Python 3.12 support</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/156">Model cardinality based on SCIM specifications</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/157">Additional refresh token grant authentication methods</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/158">SQL backend implementation</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/159">Bump to htmx 1.9.9</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/160">Disable htmx during OIDC authentication</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/161">Handle error pages with htmx</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/162">Convert images in webp</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/163">Update to Flask 3</a></li>
</ul>
<h2><a href="https://github.com/wtforms/wtforms">wtforms</a></h2>
<p><em>A flexible forms validation and rendering library for Python.</em></p>
<ul>
<li><a href="https://github.com/wtforms/wtforms/pull/739"><code>SelectField</code> refactoring</a></li>
<li><a href="https://github.com/wtforms/wtforms/pull/797">Implementation of <code>readonly</code> and <code>disabled</code> validators</a></li>
<li><a href="https://github.com/wtforms/wtforms/pull/798">Migrate from setuptools to hatch</a></li>
<li><a href="https://github.com/wtforms/wtforms/pull/808">Display values in Flag repr</a></li>
<li><a href="https://github.com/wtforms/wtforms/pull/812">Fix documentation examples</a></li>
<li><a href="https://github.com/wtforms/wtforms/pull/812">Unit test refactoring</a></li>
<li><a href="https://github.com/wtforms/wtforms/pull/818">Python 3.12 support</a></li>
</ul>
<h2><a href="https://github.com/wtforms/flask-wtf">flask-wtf</a></h2>
<p><em>Simple integration of Flask and WTForms, including CSRF, file upload and Recaptcha integration.</em></p>
<ul>
<li><a href="https://github.com/wtforms/flask-wtf/pull/573">Fix CSRF protection on nested blueprints</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/pull/576">Migrate from setuptools to hatch</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/releases/tag/v1.1.2">Release 1.1.2</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/releases/tag/v1.2.0">Release 1.2.0</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/pull/578">Fix a file validator bug</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/releases/tag/v1.2.1">Release 1.2.1</a></li>
</ul>
<h2><a href="https://anymail.dev/">django-anymail</a></h2>
<p><em>Anymail: Django email integration for transactional ESPs</em></p>
<ul>
<li><a href="https://github.com/anymail/django-anymail/pull/321">Update brevo.com provider (formerly Sendinblue)</a></li>
</ul>
<h2><a href="https://github.com/spiral-project/ihatemoney">ihatemoney</a></h2>
<p><em>A simple shared budget manager web application</em></p>
<ul>
<li><a href="https://github.com/spiral-project/ihatemoney/pull/1243"><code>setup.cfg</code> to <code>pyproject.toml</code> migration</a></li>
<li><a href="https://github.com/spiral-project/ihatemoney/pull/1248">WTForms 3.1 support</a></li>
<li><a href="https://github.com/spiral-project/ihatemoney/pull/1255">Python 3.12 support</a></li>
<li><a href="https://github.com/spiral-project/ihatemoney/pull/1258">Setuptools to hatch migration</a></li>
</ul>
<h2><a href="https://github.com/lepture/authlib">authlib</a></h2>
<p><em>Identity and Access management library for python</em></p>
<ul>
<li><a href="https://github.com/lepture/authlib/pull/590">Python 3.12 support</a></li>
</ul>
<h2><a href="https://github.com/level12/flask-webtest">flask-webtest</a></h2>
<ul>
<li>
<p>Utilities for testing Flask applications with WebTest*</p>
</li>
<li>
<p><a href="https://github.com/level12/flask-webtest/pull/21/">Documentation improvements</a></p>
</li>
</ul>Canaille, un système léger de gestion d’identité et d’accès2023-11-29T00:00:00+01:002023-11-29T00:00:00+01:00Éloi Rivard <eloi@yaal.coop>tag:yaal.coop,2023-11-29:/blog/canaille-nlnet-pytest-iam<p>Grâce au soutien de la fondation NLNet, Yaal Coop a pu financer d’importants développements dans Canaille, un logiciel léger de gestion d’identité et d’accès.</p><p>Depuis un certain temps l’équipe de Yaal Coop travaille sur Canaille, un logiciel de gestion d’identité et d’accès.
Nous profitons de la fin de travaux financés par la fondation NLNet pour vous raconter l’histoire autour de Canaille.</p>
<p><a href="https://canaille.yaal.coop"><img alt="Canaille" src="/media/img/canaille.webp"></a></p>
<h2>Au début étaient les annuaires</h2>
<p>À Yaal Coop (comme presque partout ailleurs) nous utilisons une palette d’outils qui nous permettent de travailler ensemble.
Emails, fichiers, carnets de contacts, gestion de projet, suivi du temps, comptabilité, intégration continue, collecte de rapports de bugs… la liste est longue.
Pour des raisons de praticité (et de sécurité) on cherche généralement à connecter une telle collection d’outils à un logiciel central qui se charge de la gestion des utilisateur·ices et de leurs accès.
Traditionnellement, c’est LDAP<sup id="sf-canaille-nlnet-pytest-iam-1-back"><a href="#sf-canaille-nlnet-pytest-iam-1" class="simple-footnote" title="enfin, un logiciel qui implémente LDAP, ici je parle indifféremment du protocole ou de ses implémentations">1</a></sup> qui est utilisé pour cet usage, on parle alors d’annuaire.</p>
<p>Si un outil est connecté à un annuaire, vous n’avez pas besoin de vous y créer un compte, vous pouvez vous connecter en utilisant votre mot de passe habituel, celui que vous avez renseigné dans l’annuaire.
C’est pratique pour vous puisque vous n’avez qu’un unique mot de passe à retenir <em>(ou à oublier)</em>, on parle généralement d’inscription unique <em>ou Single Sign On (<abbr>SSO</abbr>)</em>.
C’est aussi pratique pour les personnes qui gèrent les comptes dans votre organisation, puisqu’elles peuvent créer et révoquer des comptes utilisateur·ices une seule fois pour tous les outils à la fois.</p>
<p>LDAP, c’est vieux et c’est robuste. Pour des logiciels, ce sont des qualités.
Les quelques décennies d’expérience de LDAP en font une technologie éprouvée et compatible avec un énorme choix de logiciels.</p>
<p>Mais LDAP, c’est aussi compliqué et austère.
C’est une base de donnée <em>en arbre</em> qui ressemble à peu d’autres choses, la documentation est éparse et absconse, les conventions sont curieuses, pleines d’acronymes angoissants, l’outillage est rare…
Et puis c’est conçu pour les données qui sont lues souvent mais écrites rarement.
Les modèles de données utilisables dans LDAP sont eux aussi peu évolutifs.
Généralement quelques uns sont fournis d’office et permettent de manipuler des attributs de base sur des utilisateur·ices et des groupes.
Et si on veut que son système puisse gérer d’autres attributs comme les couleurs préférées, alors il faut écrire ses propres modèles de données, et on a intérêt à être sûr de soi puisqu’aucun mécanisme de mise à jour des schémas ou de migration des données n’est prévu<sup id="sf-canaille-nlnet-pytest-iam-2-back"><a href="#sf-canaille-nlnet-pytest-iam-2" class="simple-footnote" title="du moins avec OpenLDAP">2</a></sup>.
Si on souhaite ensuite partager ces modèles de données, alors il est conseillé de s’enregistrer à l’<a href="https://iana.org">IANA</a><sup id="sf-canaille-nlnet-pytest-iam-3-back"><a href="#sf-canaille-nlnet-pytest-iam-3" class="simple-footnote" title="ce que nous avons fait, notre numéro à l’IANA est le 56207">3</a></sup>, et de fournir une référence en ligne de ses schémas.
Quand on se plonge dans l’univers de LDAP, on a l’impression qu’une fois mises en place, les installations ne bougent pas pendant des années ;
et donc les personnes qui ont la connaissance fuient l’austérité de cette technologie sans avoir à s’y ré-intéresser (puisque <em>ça fonctionne</em>), et sans trop documenter leurs aventures.
J’exagère à peine, si on compare<sup id="sf-canaille-nlnet-pytest-iam-4-back"><a href="#sf-canaille-nlnet-pytest-iam-4" class="simple-footnote" title="d’accord, la comparaison est fallacieuse puisque ces différentes bases de données ne répondent pas aux mêmes besoins, mais l’ordre de grandeur est révélateur de l’intérêt autour de ces technologies">4</a></sup> le nombre de questions sur <a href="https://stackoverflow.com">stackoverflow</a>, pour <a href="https://stackoverflow.com/questions/tagged/ldap">ldap</a> on en dénombre environ 1000 tandis que <a href="https://stackoverflow.com/questions/tagged/postgresql">postgresql</a> ou <a href="https://stackoverflow.com/questions/tagged/mongodb">mongodb</a> en comptent environ 14 000 et <a href="https://stackoverflow.com/questions/tagged/mysql">mysql</a> 45 000.</p>
<h2>Puis vint l’authentification unique</h2>
<p>Lors de temps de bénévolat à <a href="https://supercoop.fr">Supercoop</a><sup id="sf-canaille-nlnet-pytest-iam-5-back"><a href="#sf-canaille-nlnet-pytest-iam-5" class="simple-footnote" title="le supermarché coopératif de l’agglomération bordelaise">5</a></sup>, nous avons notamment travaillé à installer, comme pour chez nous, plusieurs outils numériques de collaboration.
Évidemment tous les outils étaient branchés sur un annuaire LDAP.
Nous nous sommes rendus compte que l’équipe dite de <em>gestion des membres</em>, passait un certain temps à traiter des demandes de réinitialisation de mot de passe, à aider des personnes qui échouaient à utiliser les outils dès les premières étapes de connexion.
Ce constat nous a donc poussé à chercher des outils (libres, évidemment) d’authentification unique et de gestion d’utilisateur·ices, en complément ou remplacement de l’annuaire.
Ce que l’authentification unique <em>ou Single Login Identification (<abbr>SLI</abbr>)</em> apporte au SSO fourni par LDAP, c’est que les utilisateur·ices peuvent naviguer entre les outils sans avoir à s’identifier à nouveau.
On peut passer de l’interface mail à son calendrier en ligne sans repasser par l’écran d’identification, tandis qu’avec un simple annuaire, il aurait été nécessaire d’entrer son mot de passe une fois pour chaque outil.
Pour un public non technophile, c’est l’opportunité de se passer de quelques écrans techniques, et limiter les sources d’erreur et de frustration.</p>
<p>Actuellement les protocoles de prédilection pour faire du SLI sont OAuth2 et OpenID Connect (<abbr>OIDC</abbr>)<sup id="sf-canaille-nlnet-pytest-iam-6-back"><a href="#sf-canaille-nlnet-pytest-iam-6" class="simple-footnote" title="par abus de langage, je dirai simplement OIDC">6</a></sup>. On note qu’il existe d’autres standards, plus historiques ou bien plus orientés vers les grosses organisations, tels <a href="https://fr.wikipedia.org/wiki/Security_assertion_markup_language">SAML</a> ou <a href="https://fr.wikipedia.org/wiki/Central_Authentication_Service">CAS</a>.
Les normes OAuth2 et OIDC sont modernes mais bénéficient d’une dizaine d’années de retours d’expérience.
Les outils et les documentations sont nombreuses, la communauté est active, et les standards évoluent en ce moment même grâce au <a href="https://datatracker.ietf.org/wg/oauth/about/">groupe de travail <em>oauth</em></a> de l’<abbr>IETF</abbr><sup id="sf-canaille-nlnet-pytest-iam-7-back"><a href="#sf-canaille-nlnet-pytest-iam-7" class="simple-footnote" title="l’« Internet Engineering Task Force » un organsime étasunien de développement et de promulgation de standards">7</a></sup>.
Mais là encore tout n’est pas rose et OIDC vient avec son lot de difficultés.</p>
<p>Tout d’abord, OAuth2 et OIDC c’est environ <a href="https://canaille.readthedocs.io/en/latest/specifications.html#state-of-the-specs-in-Canaille">30 standards complémentaires</a>, dont certains contredisent et apportent des corrections sur des standards antérieurs.
Tous ne sont pas pertinents dans l’usage que nous visons, mais ne serait-ce que simplement <em>comprendre</em> le fonctionnement de ceux qui nous intéressent demande déjà du temps et de la réflexion.
Les implémentations d’OIDC — par les logiciels de gestions d’utilisateur·ices, ou par les outils qui s’y branchent — sont généralement partielles, et parfois bugguées.
Pour ne rien arranger, les gros acteurs de l’industrie prennent délibérément des libertés avec les standards et forcent le développement de spécificités pour être compatibles avec leurs logiciels.<sup id="sf-canaille-nlnet-pytest-iam-8-back"><a href="#sf-canaille-nlnet-pytest-iam-8" class="simple-footnote" title="Ils peuvent aussi êtres moteurs de nouvelles améliorations, comme RFC7628 ou RFC9068 qui furent des usages avant d’être des standards.">8</a></sup></p>
<p>Mais revenons à nos moutons. Pour Supercoop nous souhaitions trouver un outil qui soit d’une grande simplicité à plusieurs points de vue :</p>
<ul>
<li>pour les utilisateur·ices : les coopérateur·ices du magasin. L’utilisation doit se faire sans aucune connaissance technique préalable, et sans assistance ;</li>
<li>pour l’équipe de <em>gestion des membres</em> du magasin. Nous voulions un outil simple à prendre en main.
Un apprentissage de l’outil est envisageable mais non souhaitable.
En effet le magasin fonctionnant grâce à la participation de bénévoles, il y a un enjeu à ce que le temps passé soit le moins rébarbatif possible, afin de ne décourager personne.</li>
<li>enfin pour l’équipe <em>informatique</em>, il y a là aussi un enjeu de simplicité.
Si les outils déployés pour le magasin requièrent trop de connaissances, nous aurons des problèmes pour trouver des gens compétents pour nous aider.
Et la nature de la participation du magasin fait que les coopérateur·ices contribuent ponctuellement, tournent souvent, et n’ont pas nécessairement le temps d’apprendre toute la pile technique mise en œuvre.
Idéalement, l’équipe informatique devrait pouvoir administrer l’outil que nous recherchons avec une connaissance superficielle des protocoles concernés.
<em>Et vues les descriptions que j’ai faites de LDAP et OIDC, vous commencez à cerner une partie du problème</em>.</li>
</ul>
<p><a href="https://canaille.readthedocs.io/en/latest/specifications.html#comparison-with-other-providers">Notre recherche</a> nous a montré qu’il existait une quinzaine d’outils pouvant répondre aux besoins que nous avons identifiés.
Pour autant, aucun outil ne nous semblait cocher toutes les cases.
En fait, par leur nature, les outils de gestion d’identité et d’autorisations <em>ou Identity and Authorization Management (<abbr>IAM)</abbr></em> sont destinés à de grosses organisations, qui peuvent donc s’offrir les services de personnes qualifiées pour s’en occuper.
Ce sont donc des logiciels lourds mais puissants, supportant beaucoup de protocoles qui ne nous concernent pas, requiérant une certaine technicité pour l’installation, la maintenance ou la gestion.
Motivés par notre curiosité nous avons fini par bricoler quelque chose dans notre coin.</p>
<h2>Canaille</h2>
<p>Quelques temps après, notre prototype a grossi et a donné <a href="https://canaille.yaal.coop">Canaille</a>.</p>
<h3>Les fonctionnalités</h3>
<p>Canaille est un logiciel qui permet de gérer des utilisateur·ices et des groupes d’utilisateur·ices, de créer, modifier et administrer des comptes, de réinitialiser des mots de passes perdus, d’inviter des nouveaux utilisateur·ices.
En plus de ça, Canaille implémente OIDC et fournit donc une authentification unique aux utilisateur·ices vers d’autres outils. Son interface est personnalisable et … c'est tout.
Nous tâchons de garder le périmètre fonctionnel de Canaille assez restreint pour qu'il reste simple.</p>
<p>Canaille peut être utilisé pour :</p>
<ul>
<li>apporter une interface web épurée de gestion des comptes utilisateur·ices au dessus d’un annuaire LDAP.
L’outillage autour de LDAP étant comme on l’a dit plutôt épars, Canaille peut être utilisé pour modifier facilement un profil utilisateur·ice ou réinitialiser un mot de passe perdu.</li>
<li>amener du SLI sur un annuaire LDAP.
Si vous avez historiquement un annuaire LDAP et que vous voulez moderniser votre pile logicielle avec une couche d’authentification unique, Canaille peut s’intégrer discrètement au-dessus de votre installation existante sans rien modifier,
et vous laisser le temps de prévoir – ou pas – une migration.</li>
<li>développer des applications utilisant OIDC.
Si, comme nous, vous faites du développement logiciel et travaillez régulièrement sur des applications nécessitant une connexion OIDC, alors vous pouvez utiliser Canaille dans votre environnement de développement.
Canaille étant très léger, c'est désormais pour nous la solution de choix comme IAM pour travailler sur nos applications.</li>
<li>tester des applications utilisant OIDC.
Nous utilisons aussi Canaille dans des suites de tests unitaires python, grâce à <a href="https://pytest-iam.readthedocs.io/en/latest/">pytest-iam</a>.
Ce greffon de pytest embarque Canaille, le prépare et l’instancie pour que vos suites de tests puissent effectuer une réelle connexion OIDC.</li>
</ul>
<h3>Les choix techniques</h3>
<p>Canaille est un logiciel écrit en python, avec <a href="https://flask.palletsprojects.com/en/3.0.x/">flask</a> pour le côté serveur et <a href="https://fomantic-ui.com/">fomantic-ui</a> et <a href="https://htmx.org">htmx</a> pour la partie client utilisateur·ice.
Nous apprécions la simplicité de python et celle de flask et croyons sincèrement que ce sont autant de freins en moins à la participation d’éventuels contributeur·ices.
Nous avons été sidérés par notre découverte récente de HTMX, qui en deux mots nous permet de créer des pages web dynamiques sans plus écrire de Javascript.
Un langage en moins dans un projet c'est autant de complexité en moins.</p>
<p>Sous le capot, Canaille peut se brancher au choix à un annuaire LDAP ou à une base de données SQL.</p>
<h3>Les techniques de développement</h3>
<p>Nous utilisons Canaille en production, à Supercoop donc où il est utilisé pour gérer environ 1800 membres, mais aussi chez nous à Yaal Coop et au sein de notre offre mutualisée de services <a href="https://nubla.fr">Nubla</a>, et sur des instances dédiées Nubla Pro.
Cette large base d’utilisateur·ices nous permet de récolter des retours d’expérience, et nous améliorons le logiciel au fur et à mesure des besoins.</p>
<p>Canaille suit le principe du développement dirigé par les tests, <em>ou Test Driven Development (TDD)</em>, dans la mesure du possible.
<a href="https://fr.wikipedia.org/wiki/Couverture_de_code">La couverture du code</a> est de 100% <em>(branches comprises)</em>, et c’est un pré-requis pour toute contribution.
En plus d’avoir confiance dans nos tests, cela nous a permis à plusieurs reprises de simplement supprimer du code qui n’était plus utilisé, et simplifier d’autant le projet.
On débusque plus facilement les bugs quand il y a moins de code.</p>
<p>Canaille utilise tous les analyseurs et formatteurs de code source modernes, au sein de <a href="https://gitlab.com/yaal/Canaille/-/blob/main/.pre-commit-config.yaml">pre-commit</a>, et les test unitaires sont joués sur toutes les versions de Python officiellement supportées.</p>
<p>Enfin la traduction de l’interface de Canaille se fait de manière communautaire sur <a href="https://hosted.weblate.org/engage/Canaille/?utm_source=widget">weblate</a>.</p>
<h3>Contributions</h3>
<p>Comme la plupart des logiciels modernes, Canaille réutilise des bibliothèques logicielles existantes pour que nous n’ayions pas à ré-inventer ce que d’autres ont déjà fait.</p>
<p>Lorsque nous rencontrons des erreurs dans ces bibliothèques, nous suivons une stratégie qui consiste à implémenter les corrections à la fois dans Canaille et dans les logiciels.
D’une part nous amenons donc les corrections dans Canaille, de manière temporaire et efficace.
Mais tout ce code que nous écrivons nous-même est un fardeau de maintenance à venir, nous tâchons donc en parallèle de proposer des solutions mieux conçues aux mainteneur·euses desdites bibliothèques, en discutant avec eux en amont.
C'est pour nous la garantie que les briques logicielles sur lesquelles nous nous appuyons sont pérennes, et c’est un moyen de contribuer à cet écosystème nécessaire qu’est celui du logiciel libre.</p>
<p>Par ailleurs lorsque nous souhaitons des fonctionnalités supplémentaires dans ces bibliothèques, nous expliquons nos motivations aux mainteneur·euses et parfois proposons des implémentations. Nous avons par exemple développé le support des spécifications OIDC <a href="https://github.com/lepture/authlib/pull/505">RFC7591</a> et <a href="https://github.com/lepture/authlib/pull/586">RFC9068</a> dans <a href="https://github.com/lepture">authlib</a>, une brique utilisée pour la partie OIDC de Canaille.</p>
<p>Le résultat de ces efforts est visible dans <a href="https://yaal.coop/blog/tag/contributions">nos articles trimestriels</a> de contributions à des logiciels libres.</p>
<p>Le hasard des contributions nous a amené à partager la maintenance de certaines des bibliothèques que nous utilisons, comme <a href="https://github.com/wtforms/wtforms">wtforms</a> qui permet de gérer les formulaires dans Canaille, ou encore <a href="https://github.com/pulsejet/nextcloud-oidc-login">nextcloud-oidc-login</a> et <a href="https://github.com/jumbojett/OpenID-Connect-PHP">OpenIDConnect-PHP</a> qui permettent à <a href="https://nextcloud.com">nextcloud</a> (le gestionnaire de fichiers proposé par Nubla) de se connecter à Canaille.</p>
<p>Nous sponsorisons aussi modestement tous les mois les mainteneur·ices de <a href="https://github.com/lubber-de">fomantic-ui</a> et <a href="https://github.com/lepture">authlib</a>.</p>
<h2>L’aide de la fondation NLNet</h2>
<p>Canaille a été développé pour répondre aux besoins spécifiques que nous avons rencontrés : à l’origine Canaille s’interfaçait donc seulement avec des annuaires LDAP.
L’écosystème évoluant, nous nous sommes aperçus que de plus en plus de logiciels étaient capables de communiquer avec OIDC en plus de LDAP.
In fine, si plus aucun des logiciels que nous utilisons ne dépend directement de LDAP, alors nous pouvons envisager un outil de remplacement avec lequel nous nous sentons plus à l’aise.
Pour aller dans cette direction, nous avons sollicité fin 2022 l’aide de 7 000€ au fond <strong>NGI Zero Entrust</strong> de la <a href="https://nlnet.nl">fondation NLNet</a> pour financer le support de travaux dans Canaille :</p>
<ul>
<li><a href="https://gitlab.com/yaal/Canaille/-/merge_requests/149">la généricisation de la connexion aux bases de données</a>. Ce furent des travaux préparatoires au branchement de bases de données différentes de LDAP ;</li>
<li><a href="https://gitlab.com/yaal/Canaille/-/merge_requests/158">la connexion à des bases de données SQL</a>, qui permet à Canaille de s’interfacer avec un bon nombre de systèmes de bases de données répandus ;</li>
<li><a href="https://pytest-iam.readthedocs.io">pytest-iam</a>, un outil qui permet de préparer et lancer une instance de Canaille, afin d'être utilisée dans des suites de tests unitaires avec <a href="http://pytest.org">pytest</a>.</li>
</ul>
<p><a href="https://nlnet.nl"><img alt="Canaille" src="/media/img/logo_nlnet.svg"></a></p>
<p>Ces développements ont été achevés fin novembre 2023, et ont été la source de nombreux réusinages, de nombreuses corrections de bogues, et plus généralement d’une meilleure conception et d’une meilleure fiabilité de Canaille.
Nous sommes particulièrement reconnaissant·es à la fondation NLNet de nous avoir permis de travailler sur notre outil, et de nous aider à contribuer à notre échelle à l’écosystème du logiciel libre.</p>
<h2>Et la suite ?</h2>
<h3>Passer en version bêta</h3>
<p>Nous avons depuis le début gardé Canaille en version <em>alpha</em>, nous sommes à l’heure actuelle à la version <code>0.0.35</code>.
Nous indiquions que le logiciel était impropre aux environnements de production.
C’était pour nous un moyen de pouvoir expérimenter dans notre coin sans avoir à se soucier de rétrocompatibilité.
Nous souhaitons sévir une dernière fois en <a href="https://gitlab.com/yaal/Canaille/-/issues/138">remettant à plat la manière de configurer Canaille</a> avant de passer Canaille en <em>bêta</em>, et lever les mises en garde d’usage.</p>
<p>Nous regroupons les tickets pour le passage en version bêta de Canaille dans <a href="https://gitlab.com/yaal/canaille/-/milestones/1">ce jalon</a>.</p>
<h3>Passer en version stable</h3>
<p>Les travaux que nous immaginons réaliser pour passer d’une version bêta à une version finale sont principalement des efforts de documentation, d’installation et de prise en main de Canaille.
L’objectif est pour nous de rendre Canaille facile d’accès, afin de créer de l’usage et collecter des retours utilisateurs.</p>
<p>Nous regroupons les tickets pour le passage en version stable de Canaille dans <a href="https://gitlab.com/yaal/canaille/-/milestones/2">ce jalon</a>.</p>
<h3>Et au-delà…</h3>
<p>Pour l’avenir nous souhaitons travailler sur le <a href="https://fr.wikipedia.org/wiki/Provisionnement">provisionnement</a>, en implémentant la norme <a href="https://www.rfc-editor.org/rfc/rfc7642.html">SCIM</a>.
Ce travail permettra de découpler l’authentification des utilisateur·ices et la création des comptes utilisateur·ices.
En effet aujourd’hui dans les outils externes que nous avons branchés à Canaille, les comptes des utilisateur·ices sont créés à la première connexion.
Cela peut s’avérer problématique dans certaines situations : par exemple si l’on veut partager des fichiers dans Nextcloud avec un utilisateur·ice qui ne s’est encore jamais connecté.
SCIM permet aussi de supprimer des comptes utilisateur·ices sur ces outils externes, tâche qui doit être réalisée plus ou moins manuellement à l’heure actuelle.</p>
<p>Parmi les chantiers à venir, nous voyons aussi <a href="https://gitlab.com/yaal/Canaille/-/issues/155">le travail sur la déconnexion unique</a>, ou <em>Single Log-Out (<abbr>SLO</abbr>)</em>.
C’est un développement qui devra être réalisé en premier lieu dans authlib, et qui permettra aux utilisateur·ices de se déconnecter de tous les outils en une seule action.
C’est une fonctionnalité qui apportera de la sécurité et du confort d’utilisation.</p>
<p>Enfin, nous aimerions travailler sur une gestion avancée des groupes d’utilisateur·ices et des droits, ainsi que sur des mécanismes d’<a href="https://fr.wikipedia.org/wiki/Double_authentification">authentification multi-facteurs</a>.</p>
<p>Si tout cela vous intéresse, vous pouvez tester Canaille immédiatement sur <a href="https://canaille.yaal.coop">notre interface de demo</a>. Canaille est évidemment ouvert aux contributions, alors si vous souhaitez nous aider dans tout ça, <a href="https://gitlab.com/yaal/canaille">la porte est ouverte</a> !</p><ol class="simple-footnotes"><li id="sf-canaille-nlnet-pytest-iam-1">enfin, un logiciel qui <em>implémente</em> LDAP, ici je parle indifféremment du protocole ou de ses implémentations <a href="#sf-canaille-nlnet-pytest-iam-1-back" class="simple-footnote-back">↩</a></li><li id="sf-canaille-nlnet-pytest-iam-2">du moins avec OpenLDAP <a href="#sf-canaille-nlnet-pytest-iam-2-back" class="simple-footnote-back">↩</a></li><li id="sf-canaille-nlnet-pytest-iam-3">ce que nous avons fait, notre numéro à l’IANA est le <a href="https://www.iana.org/assignments/enterprise-numbers/?q=yaal">56207</a> <a href="#sf-canaille-nlnet-pytest-iam-3-back" class="simple-footnote-back">↩</a></li><li id="sf-canaille-nlnet-pytest-iam-4">d’accord, la comparaison est fallacieuse puisque ces différentes bases de données ne répondent pas aux mêmes besoins, mais l’ordre de grandeur est révélateur de l’intérêt autour de ces technologies <a href="#sf-canaille-nlnet-pytest-iam-4-back" class="simple-footnote-back">↩</a></li><li id="sf-canaille-nlnet-pytest-iam-5">le supermarché coopératif de l’agglomération bordelaise <a href="#sf-canaille-nlnet-pytest-iam-5-back" class="simple-footnote-back">↩</a></li><li id="sf-canaille-nlnet-pytest-iam-6">par abus de langage, je dirai simplement <em>OIDC</em> <a href="#sf-canaille-nlnet-pytest-iam-6-back" class="simple-footnote-back">↩</a></li><li id="sf-canaille-nlnet-pytest-iam-7">l’« Internet Engineering Task Force » un organsime étasunien de développement et de promulgation de standards <a href="#sf-canaille-nlnet-pytest-iam-7-back" class="simple-footnote-back">↩</a></li><li id="sf-canaille-nlnet-pytest-iam-8">Ils peuvent aussi êtres moteurs de nouvelles améliorations, comme <a href="https://www.rfc-editor.org/rfc/rfc7628.html">RFC7628</a> ou <a href="https://www.rfc-editor.org/rfc/rfc9068.html">RFC9068</a> qui furent des usages avant d’être des standards. <a href="#sf-canaille-nlnet-pytest-iam-8-back" class="simple-footnote-back">↩</a></li></ol>Canaille, a lightweight identity and autorization management software2023-11-29T00:00:00+01:002023-11-29T00:00:00+01:00Éloi Rivard <eloi@yaal.coop>tag:yaal.coop,2023-11-29:/blog/en/canaille-nlnet-pytest-iam<p>With the support of the NLNet foundation, Yaal Coop was able to implement important features in Canaille, a lightweight identity and autorization management software</p><p>Since a while, the Yaal Coop team is working on Canaille, an identity and authorization management software <em>(or <abbr>IAM</abbr>)</em>.
At the occasion of the end of an endeavour that benefited the help of the NLNet foundation, we want to tell the history around Canaille.</p>
<p><a href="https://canaille.yaal.coop"><img alt="Canaille" src="/media/img/canaille.webp"></a></p>
<h2>At first was the Single Sign On</h2>
<p>At Yaal Coop (like anywhere else) we use a bunch of tools to work together as a team.
Emails, files, address book, project management, time tracking, accountability, continuous integration, bug reporting… and the list goes on.
For the comfort of use (and for security), those tools are generally plugged to a central software that manages user accounts and accesses.
Usually, LDAP[ref]or more exactly, a software implementing the LDAP protocol[/ref] is used for that, and this is called a directory.
If a service is connected to a directory, you do not need to register to that service, you can just use your usual password, the one you set in the directory.
It is convenient for you since you just have one single password to remember <em>(or to forget)</em>. This is what is called <em>Single Sign On (<abbr>SSO</abbr>)</em>.
It is also convenient for people managing the user accounts in your organization, as they can create and revoke accounts for all the plugged services at a time.</p>
<p>LDAP is old and robust, and for software those are qualities.
The few decades of experience behind LDAP make it a battle-tested technology compatible with a large selection of services.
But unfortunately LDAP is also complicated and abstruse.</p>
<p>Its <em>tree</em> model looks like few other things you might know, the documentation is rare and obscure, conventions are intriguing, with a lot of distressing acronyms, tooling is sparse…
Also, this was made for data oftenly read but rarely written.
The data models LDAP offers cannot easily evolve.
Generally, the provided ones allow to handle basic attributes on users and groups.
If you want to manage more advanced aspects like the favourite color of users, then you need to write your own data models[ref]that are called <em>schemas</em>[/ref].
And you'd better be confident when you do it, because no update mechanism is provided for neither data nor data models[ref]at least with OpenLDAP[/ref].
Then, if you wish to share your data models with the world, it is advised that your register at the <a href="https://iana.org">IANA</a>[ref]what we did, our IANA number is <a href="https://www.iana.org/assignments/enterprise-numbers/?q=yaal">56207</a>[/ref], and provide an online reference of your schemas.</p>
<p>When we took a close look at the LDAP universe, we had the impression that once set up, LDAP installation were left alone for years ;
like if people who might had knowledge to share had flew the austerity of that technology without documenting their adventures, and without need to returning to it because it <em>just works</em>.
I am barely exagerating, if we have a look[ref]OK, the comparison has limits since those different databases are not used for the same needs, but the magnitude of the numbers says something about the interest around those technologies[/ref] at the number of questions in <a href="https://stackoverflow.com">stackoverflow</a>, <a href="https://stackoverflow.com/questions/tagged/ldap">ldap</a> has approximately 1000 questions, while <a href="https://stackoverflow.com/questions/tagged/postgresql">postgresql</a> or <a href="https://stackoverflow.com/questions/tagged/mongodb">mongodb</a> have around 14.000, and <a href="https://stackoverflow.com/questions/tagged/mysql">mysql</a> has 45.000.</p>
<h2>Then came the Single Log In</h2>
<p>During our volunteer time at <a href="https://supercoop.fr">Supercoop</a>[ref]a cooperative supermarket near Bordeaux, France[/ref], among other tasks, we worked to install collaboration software, like we did for ourselves.
Obviously, those tools were plugged on a LDAP directory.
We noticed that the <em>members management</em> team of the supermarket was spending a certain amount of time dealing with user support, notably with password reset demands.
People were failing to use the tools we deployed for them as soon as the first login step.
This verdict pushed us to look for <em>Single Login Identification (<abbr>SLI</abbr>)</em> software (free and open-source, obviously), in replacement or in addition to our historical directory.
What SLI brings, is that users can navigate between services without having to sign in every time.
They can switch from the webmail interface to the calendar without having to make a step by the authentication screen, while with a simple directory, they would have to enter their password once for each service.
For a non tech-savvy public, this is the opportinity to get rid of several technical screens, limit the error sources and the frustration.</p>
<p>Currently the predilection protocols for SLI are OAuth2 and OpenID Connect <em>(<abbr>OIDC</abbr>)</em>[ref]for sake of simplicity, I will keep to <em>OIDC</em>[/ref].
(There are other existing standards, more historical or more focused towards big organizations, like <a href="https://fr.wikipedia.org/wiki/Security_assertion_markup_language">SAML</a> or <a href="https://fr.wikipedia.org/wiki/Central_Authentication_Service">CAS</a>.)
The OAuth2 and OIDC specifications are <em>recent</em> but they still benefit from a decade of feedback.
Tooling and documentation are numerous, the community is alive and active, and standards are still evolving at this day with the work of the <abbr>IETF</abbr> <a href="https://datatracker.ietf.org/wg/oauth/about/"><em>oauth</em> workgroup</a>.
But here again, everything is not perfect and OIDC comes with its difficulties.
First of all, OAuth2 and OIDC make about <a href="https://canaille.readthedocs.io/en/latest/specifications.html#state-of-the-specs-in-Canaille">30 different standards</a>, some of which contradicting or bringing corrections upon prior standards.
All of those are not pertinent for what we want to do, but simply understanding how work the few standards that actually interests us already requires a certain amount of time and work.
The OIDC implementations – by the IAMs or the services connected to IAMs – are sometimes partial or bugged.
To make nothing better, big industry actors sometimes deliberately take some liberties with the standards, and make some additional developments a requirements to be compatible with their software.[ref]They can also be a driving force for new features, like <a href="https://www.rfc-editor.org/rfc/rfc7628.html">RFC7628</a> or <a href="https://www.rfc-editor.org/rfc/rfc9068.html">RFC9068</a> that were commonly used before they became standards.[/ref]</p>
<p>Let's get back on topic. For Supercoop, we wanted to find a tool that would be utterly simple from several point of views:</p>
<ul>
<li>for the final users: the volunteers of the shop.
They must be able to use the tool without any prior technical knowledge, and without help;</li>
<li>for the <em>members management team</em>.
We wanted a relatively simple tool where a little bit of learning would be acceptable but not desirable.
As the cooperative supermarket operates with benevolent labour, we want to take care of the volunteer time and avoid disagreeable tasks.</li>
<li>for the <em>IT team</em>.
Here again simplicity is at stake.
If there is a too steep learning curve on the tools the supermarket uses, there will be an issue for recruiting competent people to help us.
The nature of the benevolent participation of the shop make that volunteers are helping punctually, and rarely engage for years, so they do not always have the time to learn the whole technical stack.
Ideally the IT team should be able to administrate the tool we are seeking with a superficial knowledge of the underlying protocols.
<em>And with the descriptions I made of LDAP and OIDC, you start to make an idea of the problem we have</em>.</li>
</ul>
<p><a href="https://canaille.readthedocs.io/en/latest/specifications.html#comparison-with-other-providers">Our search</a> showed us that there was a dozen of tools that could answer our needs.
However, none was fitting all our expectations.
Actually, by their very nature, the IAM softwares are intended to big organizations, that consequently can afford to hire competent people to administrate them, so complexity is not really an issue.
Those are mostly big powerful software, with a large protocol compatibility not pertinent for us, and requiring some technical knowledge for installation, maintainance and administration.
Pushed by our curiosity, we finally hacked something on our side.</p>
<h2>Canaille</h2>
<p>A few times later, our prototype had grown bigger and became <a href="https://canaille.yaal.coop">Canaille</a>.</p>
<h3>The features</h3>
<p>Canaille is a user and group management software that allows account creation, edition, administration, registration, forgotten password reset, user invitation etc.
In addition, Canaille implements OIDC and provide a SLI layer for other services. Its interface is customizable and… that's all.
We try to keep the functionnal scope tight so Canaille can stay simple to maintain and to operate.</p>
<p>Canaille can be used for:</p>
<ul>
<li>bringing an account edition interface on top of a LDAP directory.
The tooling around LDAP being quite sparse, Canaille can be a convenient option and allow utilities like password reset.</li>
<li>bringing a SLI layer on top of a LDAP directory.
If your organization has a historical LDAP directory and you want to modernize your stack with SLI, Canaille can discretely integrate your existing stack (almost) without modifying anything, and let you the time to prepare (or not) a migration.</li>
<li>develop applications relying upon an OIDC server.
If, like us, you are doing software development and regularly work on applications that needs to connect to a OIDC server, then you can use Canaille in your development environment.
Canaille being very light, this is now our tool of choice to work on client applications.</li>
<li>test applications relying upon an OIDC server.
We also use canaille in unit tests suites, with <a href="https://pytest-iam.readthedocs.io/en/latest/">pytest-iam</a>.
This is a pytest plugin that configures and run a Canaille instance so your unit tests suite can achieve actual OIDC connections.</li>
</ul>
<h3>The technical choices</h3>
<p>Canaille is written in Python, with <a href="https://flask.palletsprojects.com/en/3.0.x/">Flask</a> for the backend and <a href="https://fomantic-ui.com/">fomantic-ui</a> and <a href="https://htmx.org">htmx</a> for the frontend.
We like the simplicity of Python and Flask, and strongly believe those are arguments that make contributions easier and increase software longevity.
We have been shocked by our discovery of HTMX earlier this year, that in short allows us to build dynamical pages without writting Javascript.
One language less is as much less complexity in the project.</p>
<p>Under the hood, Canaille can be plugged to a LDAP directory or a SQL database.</p>
<h3>The development techniques</h3>
<p>We use Canaille in production, at Supercoop where it is used to manage 1800 users, but also in our own stack in our <a href="https://nubla.fr">Nubla</a> mutualized cloud services, and on dedicated Nubla Pro instances.
That large userbase allows us to collect user feedback, and we improve Canaille gradually in reaction to demands and according to our roadmap.</p>
<p>Cannaille development follows the principles of the <em>Test Driven Development (TDD)</em> when possible.
The <a href="https://en.wikipedia.org/wiki/Code_coverage">code coverage</a> reaches 100% <em>(including branches)</em>, and this is a prerequisite for new contributions.
In addition to giving us confidence in our tests, this allowed us to simply delete unused pieces of code.
Bugs are easier to find when there is less code to search them into.</p>
<p>Canaille uses all the modern Python source code linters and formatters, with <a href="https://gitlab.com/yaal/Canaille/-/blob/main/.pre-commit-config.yaml">pre-commit</a>, and the unit tests are run on all the officially supported Python versions.</p>
<p>Finally, the translation of Canaille is done by the community with <a href="https://hosted.weblate.org/engage/Canaille/?utm_source=widget">Weblate</a>.</p>
<h3>Contributions</h3>
<p>Like most of modern software, Canaille relies on libraries so we don't have to re-invent what is already existing.</p>
<p>At Yaal Coop for all our projects, when we find bugs in libraries, we follow a strategy that consists in implementing fixes both in our code and the libraries at the same time.
At first we patch our code with temporary but functional fixes.
However all that code we write is a maintenance burden to come, so in parallel we discuss with the maintainers of those libraries, and propose better conceived long term fixes.
This is for us a guarantee of the sustainability of those pieces of software we rely upon, and this is a way to contribute to that necessary FLOSS ecosystem.
Once the upstream library is patched, we delete our quick fix.</p>
<p>In the same fashion when we wish additional features in libraries, we discuss our motivations with maintainers and sometimes provide implementations.
We have for instance developped the OIDC specifications <a href="https://github.com/lepture/authlib/pull/505">RFC7591</a> and <a href="https://github.com/lepture/authlib/pull/586">RFC9068</a> in <a href="https://github.com/lepture">authlib</a>, a library Canaille uses to deal with OIDC.</p>
<p>The results of those efforts can be seen in our <a href="https://yaal.coop/blog/en/tag/contributions">seasonal blogposts</a> about our FLOSS contributions.</p>
<p>The chance of the contributions brought us to share the maintenance of certain libraries we rely upon, like <a href="https://github.com/wtforms/wtforms">wtforms</a> that is a form management tool, or <a href="https://github.com/pulsejet/nextcloud-oidc-login">nextcloud-oidc-login</a> and the underlying <a href="https://github.com/jumbojett/OpenID-Connect-PHP">OpenIDConnect-PHP</a> that allow <a href="https://nextcloud.com">nextcloud</a> (the file manager integrated in Nubla) to connect with Canaille.</p>
<p>We also modestly sponsor the maintainers of <a href="https://github.com/lubber-de">fomantic-ui</a> and <a href="https://github.com/lepture">authlib</a> on a monthly basis.</p>
<h2>The help of the NLNet foundation</h2>
<p>Canaille has been developped to answer specific needs we met: initially Canaille was only made to work with LDAP directories.
Watching the ecosystem, we noticed that more and more software became compatible with OIDC in addition to LDAP.
Ultimately, if no service we use directly rely upon LDAP, then we could consider a replacement database with which we feel more comfortable.
In addition to this, it is more likely that people interested by the Canaille approach will have experience with things like SQL than with LDAP.
To go towards this directory, we sollicitated the <strong>NGI Zero Entrust</strong> fund of the <a href="https://nlnet.nl">NLNet foundation</a> in the late 2022, for a amount of 7.000€, to help us realize tasks on Canaille (and around):</p>
<ul>
<li><a href="https://gitlab.com/yaal/Canaille/-/merge_requests/149">database connection genericity</a>.
This was a mandatory preparatory step to plugging additional databases than LDAP;</li>
<li><a href="https://gitlab.com/yaal/Canaille/-/merge_requests/158">SQL databases support</a>.
This allows Canaille to connect to a lot of widespread databases like postgresql, mariadb and sqlite, thanks to <a href="https://www.sqlalchemy.org">sqlalchemy</a>.</li>
<li><a href="https://pytest-iam.readthedocs.io">pytest-iam</a>.
This is a tool that can prepare and run a Canaille instance in the purpose of unit testing Python applications with <a href="http://pytest.org">pytest</a>.</li>
</ul>
<p><a href="https://nlnet.nl"><img alt="Canaille" src="/media/img/logo_nlnet.svg"></a></p>
<p>Those developments have been achieved in november 2023, and have implied numerous refactoring, bugfixes, and better conception and reliability on Canaille.
We are very grateful towards the NLNet foundation for having allowed us to work on our tool, and help at our scale to contribute to the free and open source ecosystem.</p>
<h2>What's next?</h2>
<h3>Go in beta version</h3>
<p>From the beggining we have kept Canaille in <em>alpha</em>, we are currently at version <code>0.0.35</code>.
We advise in the documentation that the software is still not suited for production environments.
This was for us a way to experiment and break things without having to be worried about compatibility.
We would like to break one last little thing by <a href="https://gitlab.com/yaal/Canaille/-/issues/138">re-thinking the configuration files</a> before we let Canaille go in <em>bêta</em>, and remove usage warnings.</p>
<p>We track the beta version tasks in <a href="https://gitlab.com/yaal/canaille/-/milestones/1">this milestone</a>.</p>
<h3>Go in stable version</h3>
<p>The work we intend to realize to go from a bêta version to a finale version will essentially consists in documentation efforts and ease of installation and usage of Canaille.
The goal is to make Canaille really easy to access, in order to create usage and collect more user feedback.</p>
<p>We track the finale version tasks in <a href="https://gitlab.com/yaal/canaille/-/milestones/2">this milestone</a>.</p>
<h3>And beyond…</h3>
<p>In the future, we would like to work on <a href="https://en.wikipedia.org/wiki/Provisioning_(technology)#User_provisioning">provisioning</a>, by implementing the <a href="https://www.rfc-editor.org/rfc/rfc7642.html">SCIM</a> specification.
This will allow to decouple user authentication and account creation.
Indeed, at the moment user accounts are created the first time users log in at our services.
This can raise issues in some situations: for instance one cannot share files in Nextcloud with users who have not log in yet.
SCIM also provides a mechanism to delete user accounts in those services, that is a thing we do more or less manually at the moment.</p>
<p>Among the things we look forward to implement, there are also the <em><a href="https://gitlab.com/yaal/Canaille/-/issues/155">Single Log-Out</a> (<abbr>SLO</abbr>)</em> OIDC specifications.
This will allow users to disconnect from all the services in a single action.
SLO is a feature that will bring security and comfort of use.
This will need to be developped in authlib in a first time.</p>
<p>At last, we would like to work on advanced group management and permissions, and on <a href="https://en.wikipedia.org/wiki/Multi-factor_authentication">multi-factor authentication</a> to bring even more flexibility and security in Canaille.</p>
<p>Canaille is open to contributions, if you want to help us in this endeavour, <a href="https://gitlab.com/yaal/canaille">the door is open</a>!</p>Contributions à des logiciels libres par l'équipe Yaal Coop durant l'été 20232023-09-23T00:00:00+02:002023-09-23T00:00:00+02:00Éloi Rivard <eloi@yaal.coop>tag:yaal.coop,2023-09-23:/blog/dernieres-contributions-logiciels-libres-ete-2023<p>Les dernières contributions à des logiciels libres par l'équipe Yaal Coop pendant l'été 2023.</p><p>Cet été nous avons décidé de sponsoriser deux auteurs d'outils desquels nous dépendons. C'est un petit montant pour le moment, mais nous espérons qu'à l'avenir il augmentera ou que la liste des récipiendaires s'élargira.</p>
<p>Nous avons mis une partie de notre énergie sur Canaille, en implémentant le gros morceau de notre engagement à la subvention NLNet, à savoir la généricité des backends de base de données. L'implémentation de la <a href="https://gitlab.com/yaal/canaille/-/merge_requests/149">base de données en mémoire</a> nous a permis d'utiliser Canaille dans <a href="https://pytest-iam.readthedocs.io/en/latest/">pytest-iam</a>, un outil qui permet de lancer un serveur OpenID Connect dans des tests unitaires.</p>
<h2>Mécénat</h2>
<ul>
<li><a href="https://github.com/sponsors/lubber-de">Marco 'Lubber' Wienkoop</a> pour son travail sur <a href="https://fomantic-ui.com">Fomantic-UI</a>, un chouette framework CSS que nous utilisons dans <a href="https://gitlab.com/yaal/canaille">canaille</a>. Fomantic-UI est aussi utilisé par d'autres outils sur lesquels nous comptons, comme <a href="https://forgejo.org">Forgejo</a>.</li>
<li><a href="https://github.com/sponsors/lepture">Hsiaoming Yang</a> pour son travail sur <a href="https://authlib.org">authlib</a>, une bibliothèque python d'authentification que nous utilisons dans <a href="https://gitlab.com/yaal/canaille">canaille</a>.</li>
</ul>
<h2><a href="https://gitlab.com/yaal/canaille">canaille</a></h2>
<p><em>Serveur OpenID Connect simpliste, basé sur OpenLDAP</em></p>
<ul>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/136">Support des champs de formulaire multiples</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/137">Les pages web sont boostées avec HTMX</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/138">jquery 3.7.0</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/139">Correction des identifiants utilisateur dans les URL</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/141">Ajout d'une option de configuration pour désactiver javascript</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/142">Le paramètre <code>USER_FILTER</code> est analysé avec jinja</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/143">Ajout d'un paramètre <code>OIDC.REQUIRE_NONCE</code></a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/144">Les fenêtres modales sont en HTML plutôt qu'en JS</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/145">Correction sur la dépedance à Babel</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/146">Validation des numéros de téléphone</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/147">Confirmation des adresses email</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/148">Page d'inscription</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/149">Implémentation d'un backend en mémoire</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/150">Configuration de packages <code>extras</code> pour des installations dans différents contextes</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/151">L'écran de connexion principal et OIDC sont fusionnés</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/152">fomantic-ui 2.9.3</a></li>
</ul>
<h2><a href="https://github.com/wtforms/wtforms">wtforms</a></h2>
<p><em>Bibliothèque python de gestion de formulaires web</em></p>
<ul>
<li><a href="https://github.com/wtforms/wtforms/pull/794">Arrêt du support de python 3.7</a></li>
<li><a href="https://github.com/wtforms/wtforms/pull/795">Correction d'avertissements de style</a></li>
<li><a href="https://github.com/wtforms/wtforms/pull/796">Améliorations sur la documentation</a></li>
</ul>
<h2><a href="https://github.com/wtforms/flask-wtf">flask-wtf</a></h2>
<p><em>Intégration de WTForms dans Flask</em></p>
<ul>
<li><a href="https://github.com/wtforms/flask-wtf/pull/571">Corrections sur les tests unitaires</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/pull/572">Conciergerie</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/pull/574">Arrêt du support de python 3.7</a></li>
</ul>
<h2><a href="https://github.com/spiral-project/ihatemoney">ihatemoney</a></h2>
<p><em>Une application web simple de gestion de budget</em></p>
<ul>
<li><a href="https://github.com/spiral-project/ihatemoney/pull/1158">Flux RSS</a></li>
<li><a href="https://github.com/spiral-project/ihatemoney/pull/1203">Corrections sur les tests unitaires</a></li>
<li><a href="https://github.com/spiral-project/ihatemoney/pull/1211">Année dynamique dans la documentation</a></li>
<li><a href="https://github.com/spiral-project/ihatemoney/pull/1213">Migration à pytest</a></li>
<li><a href="https://github.com/spiral-project/ihatemoney/pull/1215">Amélioration de la vitesse d'exécution des tests unitaires</a></li>
<li><a href="https://github.com/spiral-project/ihatemoney/pull/1216">Conciergerie</a></li>
</ul>
<h2><a href="https://github.com/python-ldap/python-slapd">python-slapd</a></h2>
<p><em>Interface pythonique pour contrôler un serveur OpenLDAP</em></p>
<ul>
<li><a href="https://github.com/python-ldap/python-slapd/pull/8">Utilitaire d'initialisation de l'arbre LDAP</a></li>
</ul>
<h2><a href="https://github.com/lepture/authlib">authlib</a></h2>
<p><em>Bibliothèque python de gestion des identités et des accès</em></p>
<ul>
<li><a href="https://github.com/lepture/authlib/pull/570">Arrêt du support de python 3.7</a></li>
<li><a href="https://github.com/lepture/authlib/pull/571">Passage d'options de tox à pytest</a></li>
<li><a href="https://github.com/lepture/authlib/pull/572">Utilisation d'une base de données Django en mémoire dans les tests unitaires</a></li>
<li><a href="https://github.com/lepture/authlib/pull/574">Corrections d'avertissements de SQLAlchemy</a></li>
<li><a href="https://github.com/lepture/authlib/pull/575">Corrections d'avertissements dans les tests unitaires</a></li>
<li><a href="https://github.com/lepture/authlib/pull/576">Différents points d'accès de même type peuvent être enregistrés</a></li>
</ul>
<h2><a href="https://gitlab.com/yaal/pytest-iam">pytest-iam</a></h2>
<p><em>Serveur OAuth2/OIDC léger pour vos tests unitaires</em></p>
<ul>
<li><a href="https://pytest-iam.readthedocs.io">Premières publications et documentation</a></li>
</ul>
<h2>Debian</h2>
<ul>
<li><a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=915583#30">Nouvelle proposition de style</a> pour les documentation Sphinx, qui est utilisé actuellement pour <a href="https://www.debian.org/doc/debian-policy/">debian-policy</a> et potentiellement demain pour les <a href="https://salsa.debian.org/holgerw/release-notes/-/merge_requests/4">notes de publication</a></li>
<li><a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=927228">Enquête sur un rapport de bogue concernant Supervisor</a></li>
</ul>Summer 2023 FOSS contributions by the Yaal Coop team2023-09-23T00:00:00+02:002023-09-23T00:00:00+02:00Éloi Rivard <eloi@yaal.coop>tag:yaal.coop,2023-09-23:/blog/en/dernieres-contributions-logiciels-libres-ete-2023<p>The last free and open-source software contributions from the Yaal Coop team during summer 2023.</p><p>This summer we decided to sponsor two authors of tools we are depending on. This is a small amount for the moment, but hopefuly this will grow or we add more recipients to the list.</p>
<p>We spent a bit of energy on Canaille, and implementing the big part of our NLNet subsidy, that is the database backend genericity. The <a href="https://gitlab.com/yaal/canaille/-/merge_requests/149">inmemory backend</a> allowed us to use canaille in <a href="https://pytest-iam.readthedocs.io/en/latest/">pytest-iam</a>, a tool that bring a lightweight OpenID Connect provider to be used in your unit tests.</p>
<h2>Sponsoring</h2>
<ul>
<li><a href="https://github.com/sponsors/lubber-de">Marco 'Lubber' Wienkoop</a> for his work on <a href="https://fomantic-ui.com">Fomantic-UI</a>, a nice CSS framework we use in <a href="https://gitlab.com/yaal/canaille">canaille</a>. Fomantic-UI is used on other tools we rely on, like <a href="https://forgejo.org">Forgejo</a>.</li>
<li><a href="https://github.com/sponsors/lepture">Hsiaoming Yang</a> for his work on <a href="https://authlib.org">authlib</a>, a python authentication library we use in <a href="https://gitlab.com/yaal/canaille">canaille</a>.</li>
</ul>
<h2><a href="https://gitlab.com/yaal/canaille">canaille</a></h2>
<p><em>Simplistic OpenID Connect provider over OpenLDAP</em></p>
<ul>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/136">Multiple form fields support</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/137">Pages are boosted with HTMX</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/138">Bump to jquery 3.7.0</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/139">Fix user identification in URLs</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/141">Configuration option to disable javascript</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/142"><code>USER_FILTER</code> configuration is parsed with jinja</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/143"><code>OIDC.REQUIRE_NONCE</code> configuration parameter</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/144">Modals are HTML pages instead of JS elements</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/145">Fix Babel requirement</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/146">Phone number validation</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/147">Email confirmation</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/148">User registration</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/149">Alternative inmemory backend</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/150">Installation extra packages</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/151">Merged the core and OIDC login screens</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/152">Bump to fomantic-ui 2.9.3</a></li>
</ul>
<h2><a href="https://github.com/wtforms/wtforms">wtforms</a></h2>
<p><em>A flexible forms validation and rendering library for Python.</em></p>
<ul>
<li><a href="https://github.com/wtforms/wtforms/pull/794">Stop python 3.7 support</a></li>
<li><a href="https://github.com/wtforms/wtforms/pull/795">Fix style warnings</a></li>
<li><a href="https://github.com/wtforms/wtforms/pull/796">Documentation improvements</a></li>
</ul>
<h2><a href="https://github.com/wtforms/flask-wtf">flask-wtf</a></h2>
<p><em>Simple integration of Flask and WTForms, including CSRF, file upload and Recaptcha integration.</em></p>
<ul>
<li><a href="https://github.com/wtforms/flask-wtf/pull/571">Unit test fixes</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/pull/572">Janitoring</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/pull/574">Stop python 3.7 support</a></li>
</ul>
<h2><a href="https://github.com/spiral-project/ihatemoney">ihatemoney</a></h2>
<p><em>A simple shared budget manager web application</em></p>
<ul>
<li><a href="https://github.com/spiral-project/ihatemoney/pull/1158">RSS feeds</a></li>
<li><a href="https://github.com/spiral-project/ihatemoney/pull/1203">Unit test fixes</a></li>
<li><a href="https://github.com/spiral-project/ihatemoney/pull/1211">Dynamic year in the documentation</a></li>
<li><a href="https://github.com/spiral-project/ihatemoney/pull/1213">Pytest migration</a></li>
<li><a href="https://github.com/spiral-project/ihatemoney/pull/1215">Unit test speed-up</a></li>
<li><a href="https://github.com/spiral-project/ihatemoney/pull/1216">Janitoring</a></li>
</ul>
<h2><a href="https://github.com/python-ldap/python-slapd">python-slapd</a></h2>
<p><em>Controls a slapd process in a pythonic way</em></p>
<ul>
<li><a href="https://github.com/python-ldap/python-slapd/pull/8">LDAP tree initialization utility</a></li>
</ul>
<h2><a href="https://github.com/lepture/authlib">authlib</a></h2>
<p><em>Identity and Access management library for python</em></p>
<ul>
<li><a href="https://github.com/lepture/authlib/pull/570">Stop python 3.7 support</a></li>
<li><a href="https://github.com/lepture/authlib/pull/571">tox option to pass arguments to pytest</a></li>
<li><a href="https://github.com/lepture/authlib/pull/572">Django in-memory database usage in unit tests</a></li>
<li><a href="https://github.com/lepture/authlib/pull/574">SQLAlchemy warning fix</a></li>
<li><a href="https://github.com/lepture/authlib/pull/575">Unit test warning fix</a></li>
<li><a href="https://github.com/lepture/authlib/pull/576">Multiple endpoints of a kind can be registered</a></li>
</ul>
<h2><a href="https://gitlab.com/yaal/pytest-iam">pytest-iam</a></h2>
<p><em>A lightweight OAuth2/OIDC server to be used in your test suite</em></p>
<ul>
<li><a href="https://pytest-iam.readthedocs.io">First releases and documentation</a></li>
</ul>
<h2>Debian</h2>
<ul>
<li><a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=915583#30">New style proposal</a> for Sphinx documentations, which is currently used for <a href="https://www.debian.org/doc/debian-policy/">debian-policy</a> and could be used in the future for the <a href="https://salsa.debian.org/holgerw/release-notes/-/merge_requests/4">release notes</a></li>
<li><a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=927228">Search on the Supervisor bug report</a></li>
</ul>Contributions à des logiciels libres par l'équipe Yaal Coop durant le printemps 20232023-06-21T00:00:00+02:002023-06-21T00:00:00+02:00Éloi Rivard <eloi@yaal.coop>tag:yaal.coop,2023-06-21:/blog/dernieres-contributions-logiciels-libres-printemps-2023<p>Les dernières contributions à des logiciels libres par l'équipe Yaal Coop pendant le printemps 2023.</p><h2><a href="https://addons.mozilla.org/fr/firefox/addon/html-rfc/">htmlRFC</a></h2>
<p><em>Greffon Firefox affichant un lien des RFC au format texte brut vers une version au format HTML</em></p>
<ul>
<li>Acceptation des RFC du site web <a href="https://rfc-editor.org">rfc-editor.org</a> : <a href="https://gitlab.com/sblondon/htmlrfc/-/commit/2db775f4193b9eb5d645e67b28cb01fdb79e3d8f">greffon activé sur le site rfc-editor.org</a> et <a href="https://gitlab.com/sblondon/htmlrfc/-/commit/dff78979003de97bddc7b41dd0cdfa5c7f4cea39">redirection vers rfc-editor</a></li>
<li>Publication d'une version 1.2</li>
</ul>
<h2>Debian</h2>
<ul>
<li>Amélioration de la page de manuel de <a href="https://salsa.debian.org/games-team/blastem/-/merge_requests/2">BlastEm</a></li>
<li>Pour la migration des notes de publication de DocBook à Sphinx : <a href="https://salsa.debian.org/holgerw/release-notes/-/merge_requests/2">coloration syntaxique des commandes et exemples de configuration</a>, <a href="https://salsa.debian.org/holgerw/release-notes/-/merge_requests/3">disparition du texte 'Created using Sphinx'</a> dans le pied-de-page, <a href="https://salsa.debian.org/holgerw/release-notes/-/merge_requests/4">ajout d'un fichier CSS to correspondre au style de Debian</a></li>
</ul>
<h2>Logrotate</h2>
<p><em>Outil Unix pour administrer les journaux sur un système produisant de nombreux journaux</em></p>
<ul>
<li><a href="https://github.com/logrotate/logrotate/pull/508">Passage du code de sortie à 0</a> quand l'erreur provoque l'arrêt de l'exécution du programme. Cela correspond au comportement attendu d'un utilitaire Unix.</li>
<li>Amélioration mineure de la <a href="https://github.com/logrotate/logrotate/pull/509">documentation</a>.</li>
</ul>
<h2><a href="https://github.com/bebleo/smtpdfix">smtpdfix</a></h2>
<p><em>Un serveur SMTP pour pytest avec encryption et authentification.</em></p>
<ul>
<li><a href="https://github.com/bebleo/smtpdfix/pull/306">Utilisation d'un port aléatoire par défaut au lieu de 8025</a></li>
</ul>
<h2><a href="https://github.com/TkTech/flask-themer">flask-themer</a></h2>
<p><em>Support simple de thèmes dans les applications flask</em></p>
<ul>
<li><a href="https://github.com/TkTech/flask-themer/pull/4">Étendre un template depuis un autre thème</a></li>
</ul>
<h2><a href="https://github.com/Pylons/zodburi/">zodburi</a></h2>
<p><em>Construit des storage ZODB à partir d'URIs.</em></p>
<ul>
<li><a href="https://github.com/Pylons/zodburi/pull/32">Arrêt du support de ZODB4 et de python<3.7, ajout de l'intégration continue Github Actions</a></li>
</ul>
<h2><a href="https://gitlab.com/yaal/canaille">canaille</a></h2>
<p><em>Serveur OpenID Connect simpliste, basé sur OpenLDAP</em></p>
<ul>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/118">Expiration des comptes</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/119">Protection CSRF sur tous les formulaires</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/120">Validation dynamique des formulaires avec HTMX</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/121">Améliorations sur le thème sombre</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/123">Conventions de nommage de SCIM</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/124">Mise à jour vers 1.9.0</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/125">Correctif sur la validation de champs vides</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/126">Filtres d'ACL génériques</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/127">Mise à jour vers htmx 1.9.2</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/128">Correctif sur les destinataires des emails d'initalisation de mots de passe</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/129">Affichage du bouton de récupération de mot de passe sur la page d'identification OIDC</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/130">Les dates sont enregistrées en UTC</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/131">Arrêt du support de python 3.7</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/132">Tests unitaires sur les backends génériques</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/134">Les options de configurations peuvent êtres des chemins de fichier</a></li>
</ul>
<h2><a href="https://anymail.dev/">django-anymail</a></h2>
<p><em>Intégration des e-mails dans Django pour les fournisseurs d'e-mails transactionels</em></p>
<ul>
<li><a href="https://github.com/anymail/django-anymail/pull/321">Mise-à-jour du domaine utilisé par l'API, de tests unitaires et de la documentation</a> suite au renommage de Sendinblue en Brevo</li>
</ul>
<h2><a href="https://github.com/pstanoev/simple-svelte-autocomplete">simple-svelte-autocomplete</a></h2>
<p><em>Composant svelte de suggestion d'éléments dans une liste déroulante</em></p>
<ul>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/197">Appel de la fonction personnalisée de tri lors du focus sur le champ</a></li>
</ul>FOSS contributions from the Yaal Coop team during spring 20232023-06-21T00:00:00+02:002023-06-21T00:00:00+02:00Éloi Rivard <eloi@yaal.coop>tag:yaal.coop,2023-06-21:/blog/en/dernieres-contributions-logiciels-libres-printemps-2023<p>The last free and open-source software contributions from the Yaal Coop team during spring 2023.</p><h2><a href="https://addons.mozilla.org/fr/firefox/addon/html-rfc/">htmlRFC</a></h2>
<p><em>Firefox plug-in displaying a link for RFCs in plain text format to HTML one</em></p>
<ul>
<li>Accept RFCs on <a href="https://rfc-editor.org">rfc-editor.org</a> website: <a href="https://gitlab.com/sblondon/htmlrfc/-/commit/2db775f4193b9eb5d645e67b28cb01fdb79e3d8f">plugin enabled on rfc-editor.org site</a> and <a href="https://gitlab.com/sblondon/htmlrfc/-/commit/dff78979003de97bddc7b41dd0cdfa5c7f4cea39">redirect to rfc-editor</a></li>
<li>Release v.1.2</li>
</ul>
<h2>Debian</h2>
<ul>
<li>Improve <a href="https://salsa.debian.org/games-team/blastem/-/merge_requests/2">BlastEm</a> manpage</li>
<li>During release notes migration from DocBook to Sphinx: <a href="https://salsa.debian.org/holgerw/release-notes/-/merge_requests/2">highlight command line and configuration examples</a>, <a href="https://salsa.debian.org/holgerw/release-notes/-/merge_requests/3">hide 'Created using Sphinx' text</a> in the footer, <a href="https://salsa.debian.org/holgerw/release-notes/-/merge_requests/4">add CSS file to fit Debian style</a></li>
</ul>
<h2>Logrotate</h2>
<p><em>Unix tool for administration of log files on a system which generates a lot of log files</em></p>
<ul>
<li><a href="https://github.com/logrotate/logrotate/pull/508">Turn exit code to 0</a> when the raised error stops the execution. It fits expected behavior for Unix tools.</li>
<li>Minor <a href="https://github.com/logrotate/logrotate/pull/509">documentation</a> improvement.</li>
</ul>
<h2><a href="https://github.com/bebleo/smtpdfix">smtpdfix</a></h2>
<p><em>A SMTP server for use as a pytest fixture that implements encryption and authentication.</em></p>
<ul>
<li><a href="https://github.com/bebleo/smtpdfix/pull/306">Use a random port instead of 8025 by default</a></li>
</ul>
<h2><a href="https://github.com/TkTech/flask-themer">flask-themer</a></h2>
<p><em>Simple theming support for Flask apps.</em></p>
<ul>
<li><a href="https://github.com/TkTech/flask-themer/pull/4">Extend a template from another theme</a></li>
</ul>
<h2><a href="https://github.com/Pylons/zodburi/">zodburi</a></h2>
<p><em>Construct ZODB storage instances from URIs.</em></p>
<ul>
<li><a href="https://github.com/Pylons/zodburi/pull/32">Remove support for ZODB4 and python<3.7</a></li>
</ul>
<h2><a href="https://gitlab.com/yaal/canaille">canaille</a></h2>
<p><em>Simplistic OpenID Connect provider over OpenLDAP</em></p>
<ul>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/118">Account expiration</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/119">CSRF protection on every forms</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/120">Dynamic form validation with HTMX</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/121">Dark theme improvements</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/123">SCIM naming convention</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/124">Bump to htmx 1.9.0</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/125">Empty field validation fix</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/126">Generic ACL filters</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/127">Bump to htmx 1.9.2</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/128">Password initalization mail recipient bugfix</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/129">Display password recovery button on OIDC login page</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/130">Dates are saved in UTC</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/131">Stop support for python 3.7</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/132">Generic backend unit tests</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/134">File-path configuration entries</a></li>
</ul>
<h2><a href="https://anymail.dev/">django-anymail</a></h2>
<p><em>Django email integration for transactional ESPs</em></p>
<ul>
<li><a href="https://github.com/anymail/django-anymail/pull/321">Update domain used by the API, unit tests and documentation</a> due to Sendinblue rebranding to Brevo</li>
</ul>
<h2><a href="https://github.com/pstanoev/simple-svelte-autocomplete">simple-svelte-autocomplete</a></h2>
<p><em>Simple Autocomplete / typeahead component for Svelte</em></p>
<ul>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/197">Call custom ordering functions when opening the menu with an empty input</a></li>
</ul>Chapitre 20222023-06-12T00:00:00+02:002023-06-12T00:00:00+02:00Camille Daniel <camille@yaal.coop>tag:yaal.coop,2023-06-12:/blog/chapitre-2022<p>Quelques nouvelles de notre projet coopératif dans notre rapport de gestion 2022.</p><p>Cela commence à faire pas mal de temps qu'on ne vous a pas raconté ce que devenait notre projet coopératif ! En fait on n'a pas vraiment pris le temps d'en discuter publiquement depuis le 24 septembre 2021 dans notre article de blog <a href="https://yaal.coop/blog/de-yaal-a-yaal-coop">De Yaal à Yaal Coop</a> qui raconte la genèse de Yaal Coop 🙈.</p>
<p>Pour remédier à ça, on a décidé de publier ici notre <strong>rapport de gestion 2022</strong>. Le rapport de gestion, rédigé annuellement à l'intention des associé·es avant l'Assemblée Générale Ordinaire (AGO) validant les comptes annuels, permet de faire le point sur la situation de l'entreprise durant l'exercice écoulé et de mettre en perspective celui à venir. On n'est pas encore rompu à l'exercice mais on s'est dit que c'était une bonne idée de le partager avec vous 🙌.</p>
<p>Notre AGO (la deuxième seulement depuis le début de l'aventure !) s'est déroulée mi-mai, en présence de tous nos associés, ou presque (quelle idée aussi d'avoir tenté un vol plané à vélo pendant mes vacances une semaine plus tôt 🤕😗🎶). L'AGO, au-delà de son caractère officiel et obligatoire, est surtout pour nous l'occasion de <strong>faire un pas de côté</strong>, regarder le chemin parcouru et vérifier qu'on ne s'est pas perdu en route. En discuter avec les associé·es non salarié·es qui ne vivent pas notre projet au quotidien est aussi très salutaire ! L'occasion d'échanger sur les bonnes (ou moins bonnes) pratiques, s'inspirer... En buvant quelques bières 🍻 !</p>
<p>Sans plus de transition, voici le rapport que nous leur avons adressé.</p>
<p>N'hésitez pas à <a href="https://yaal.coop/#contact">passer nous voir</a> pour en discuter plus largement si vous le souhaitez ! (Mais toujours pas le mercredi, c'est resté le jour du télétravail collectif 😉)</p>
<hr>
<p>Cher·e sociétaire,</p>
<p>Nous avons l’honneur de vous présenter notre rapport sur les opérations de l’exercice clos le 31 décembre 2022, ainsi que sur les comptes annuels dudit exercice soumis aujourd’hui à votre approbation. Ce rapport a été rédigé collectivement par le collège des salarié·es de Yaal Coop.</p>
<h2>Un peu d'histoire : les faits marquants de l'année 2022</h2>
<ul>
<li>janvier : Yaal Coop obtient <a href="https://www.entreprises.gouv.fr/fr/entrepreneuriat/aides-et-financement/l-agrement-au-credit-impot-innovation">l'agrément CII</a> : toutes nos prestations liées au développement de prototypes et aux installations pilotes de nouveaux produits sont dorénavant éligibles au CII (Crédit d'Impôt Innovation) pour nos clients. Janvier marque aussi le début d'une mission pour <a href="https://telecoop.fr/">Telecoop</a>, premier opérateur télécom coopératif, d'assistance et développement de nouveaux outils sur quelques jours par mois.</li>
<li>février : Nous démarrons une prestation pour le Ministère de l'Éducation nationale afin de remettre à niveau et poursuivre le développement de leur projet informatique B3Desk (frontal OpenIDConnect de gestion simplifiée des visioconférences BigBlueButton de l'Éducation nationale et des agents de l'État).</li>
<li>mars : Un gros chantier de séparation de l'infrastructure technique de Yaal Coop et Yaal SAS est mené à l'occasion d'une migration de serveurs de notre hébergeur historique Scaleway. On bascule alors notre infrastructure interne sur nos serveurs hébergés chez notre hébergeur associatif local <a href="https://www.aquilenet.fr/">Aquilenet</a> sur lesquels nous gérons un cluster lxc/lxd de conteneurs linux. Yaal SAS devient par la même occasion le premier client officiel de <a href="https://nubla.fr/offre">notre offre Nubla Pro</a> !</li>
<li>avril : Nous réalisons une journée de formation en équipe sur le DDD (Domain Driven Design), une technique de conception logicielle orientée métier, animée par Bertrand Bougon.</li>
<li>mai : Un temps fort de la vie coopérative de Yaal Coop, c'est l'heure de sa toute première Assemblée Générale Ordinaire, en présence de l'ensemble de ses associé·es. 🎉</li>
<li>juin : Une petite mission démarre avec <a href="https://www.freexian.com/fr/">Freexian</a> pour retravailler son identité graphique et refondre ses deux sites web statiques ainsi que son fil d'actualités.</li>
<li>août : C'est la fin de notre mission régulière pour Sinch sur Myelefant, le projet historique de Yaal SAS racheté en 2019. Yaal Coop vole maintenant complètement de ses propres ailes !</li>
<li>septembre : Notre associé Yaal SAS est remplacé par Gruyère SAS (formé d'un sous ensemble plus réduit des anciens associés de Yaal SAS) dans le collège des investisseurs de Yaal Coop. C'est aussi le début de notre intervention sur la startup d'État <a href="https://beta.gouv.fr/startups/plateforme.impact.html">Projet Impact</a> pour lancer le développement d'une plateforme française d'aide aux entreprises à satisfaire leurs obligations réglementaires en matière de performance extra-financière.</li>
<li>octobre : Une petite mission est réalisée pour <a href="https://podeduc.apps.education.fr/">PodEduc</a>, une plateforme vidéo pour les agents de l'Éducation nationale, via deux contributions au logiciel libre Esup-Pod.</li>
<li>novembre : Notre projet interne <a href="https://canaille.yaal.coop/">Canaille</a>, logiciel libre de gestion d'identité et d'autorisations, obtient un financement de la fondation NLNet d'un montant de 7 000€ pour développer quelques fonctionnalités prévues en 2023.</li>
<li>décembre : <a href="https://nubla.fr/accueil">Nubla</a>, notre service d'hébergement e-mail et cloud, fait officiellement partie des 6 nouveaux CHATONS du Collectif des Hébergeurs Alternatifs, Transparents, Ouverts, Neutres et Solidaires ! Nos services sont disponibles gratuitement sur demande aux premiers beta-testeurs. Enfin, nous préparons l'embauche de Julien qui rejoint la coopérative à la toute fin du mois pour travailler sur une mission avec NEHS Digital, éditeur de solutions santé pour améliorer l'efficience du parcours de soin.</li>
</ul>
<hr>
<h2>Notre projet coopératif</h2>
<h3>Sociétariat</h3>
<p>Excepté Julien, arrivé le 27 décembre 2022, tous·tes les salarié·es sont également associé·es au sein de Yaal Coop sur l'année 2022 et détiennent chacun·e une voix égale au sein du collège des salarié·es, conformément à nos statuts.</p>
<p>Seul changement notable au sein des autres collèges : Yaal SAS est remplacé par Gruyère SAS dans le collège des investisseurs en septembre 2022, ce qui ne modifie pas le capital social de la coopérative.</p>
<p>Nous proposons à Colin Garriga-Salaün, le Président de Yaal SAS, de devenir associé en son nom propre dans le collège des observateurs. Celui-ci accepte en avril 2023.</p>
<p>La composition des collèges en date du 9 mai 2023 est la suivante :</p>
<ul>
<li>Collège des salariés - 50% des droits de vote</li>
</ul>
<table>
<thead>
<tr>
<th>Prénom NOM / RAISON SOCIALE </th>
<th>Nombre de parts</th>
</tr>
</thead>
<tbody>
<tr>
<td>Brunélie LAURET</td>
<td>100</td>
</tr>
<tr>
<td>Camille DANIEL</td>
<td>100</td>
</tr>
<tr>
<td>Loan ROBERT</td>
<td>100</td>
</tr>
<tr>
<td>Stéphane BLONDON</td>
<td>100</td>
</tr>
<tr>
<td>Éloi RIVARD</td>
<td>100</td>
</tr>
</tbody>
</table>
<ul>
<li>Collège des investisseurs - 16,66% des droits de vote</li>
</ul>
<table>
<thead>
<tr>
<th>Prénom NOM / RAISON SOCIALE </th>
<th>Nombre de parts</th>
</tr>
</thead>
<tbody>
<tr>
<td>GRUYERE</td>
<td>50 000</td>
</tr>
</tbody>
</table>
<ul>
<li>Collège des bénéficiaires - 16,66% des droits de vote</li>
</ul>
<table>
<thead>
<tr>
<th>Prénom NOM / RAISON SOCIALE </th>
<th>Nombre de parts</th>
</tr>
</thead>
<tbody>
<tr>
<td>FINACOOP NOUVELLE-AQUITAINE</td>
<td>100</td>
</tr>
</tbody>
</table>
<ul>
<li>Collège des observateurs - 16,66% des droits de vote</li>
</ul>
<table>
<thead>
<tr>
<th>Prénom NOM / RAISON SOCIALE </th>
<th>Nombre de parts</th>
</tr>
</thead>
<tbody>
<tr>
<td>Arthur LEDARD</td>
<td>100</td>
</tr>
<tr>
<td>Colin GARRIGA-SALAÜN</td>
<td>100</td>
</tr>
</tbody>
</table>
<p>(sous réserve de validation de l'entrée de Colin GARRIGA-SALAÜN par la prochaine Assemblée Générale)</p>
<h3>Favoriser une organisation horizontale</h3>
<h4>Mise en place d'une forme d'holacratie dans Yaal Coop</h4>
<p>Après quelques discussions et ateliers organisés en interne, nous avons décidé de nous inspirer de l'<a href="https://fr.wikipedia.org/wiki/Holacratie">holacratie</a> pour définir des rôles tournants permettant d'assurer la prise en main commune de la gouvernance de la coopérative par les salarié·es. Ces rôles nous donnent un cadre pour protéger le fonctionnement horizontal souhaité dans Yaal Coop et nous protéger de la spécialisation des associé·es salarié·es.</p>
<p>Le système, la pertinence et la répartition des rôles sont améliorés au fil du temps, à chaque nouvelle réunion de gouvernance du collège des salarié·es, actuellement organisée tous les 3 mois.</p>
<p>Depuis sa mise en place, nous avons notamment fait la révision de la durée de certains rôles (pouvant aller de 2 semaines pour le rôle de Facteur·rice 💌 -<em>qui relève le courrier entrant sur nos différentes boîtes aux lettres</em>- ou Sentinelle 📟 -<em>qui surveille et réagit aux alertes de monitoring</em>-, à 2 ans avec backup pour le rôle d'Argentier·e 🪙 -<em>qui met à jour et surveille la trésorerie</em>-). Nous avons également ajouté des précisions sur les attentes d'autres rôles lors de ces réunions, en questionnant les manquements auxquels nous avons pu faire face.</p>
<p>Ces réunions de gouvernance viennent en complément de nos réunions de suivi hebdomadaire lors desquelles nous faisons le point sur l'ensemble des tâches et projets en cours dans la coopérative.</p>
<p>Enfin des réunions de stratégie sur l'investissement réunissent également le collège des salarié·es tous les 3 mois pour faire le bilan de l'investissement réalisé au trimestre précédent et fixer les priorités du trimestre suivant.</p>
<h4>Changement de présidence proposé en 2023</h4>
<p>Les mandats concernant la présidence et la direction générale de la coopérative sont établis statutairement pour une durée de 4 ans. Nous avons décidé de mettre fin prématurément à ceux courant depuis le lancement de la coopérative en septembre 2020 afin de renforcer une représentativité et une responsabilité tournante au sein de Yaal Coop. Nous vous proposons donc d'élire notre nouvelle Présidente, Brunélie, dès la prochaine AGO !</p>
<h3>Favoriser l'activité et les acteurs ayant un impact social ou environnemental, de préférence locaux</h3>
<h4>Investissement technique</h4>
<p>Nous sommes toujours associés avec <a href="https://lum1.fr/">Lum1</a>, premier annuaire collaboratif dédié et réservé aux professionnels du social et de la santé, projet pour lequel nous effectuons du développement en continu, à un rythme plus réduit que lors du développement intensif de la deuxième version de la plateforme l'année précédente.</p>
<p>En 2022, nous n'avons pas signé de nouveau projet associé, toutefois certains de nos prospects montrent de l'intérêt pour cette forme de coopération qui permet d'aller au delà du lien unissant prestataire et client.</p>
<h4>Investissement interne</h4>
<p>Notre projet <a href="https://nubla.fr/a-propos">Nubla</a>, développé en interne, est un service d'hébergement cloud membre des CHATONS (Collectif des Hébergeurs Alternatifs, Transparents, Ouverts, Neutres et Solidaires) depuis décembre 2022. Son ambition est de proposer un service basé sur des solutions libres pour permettre à tous et toutes de se libérer des géants du web afin de mieux maîtriser l'utilisation de ses données et de soutenir l'écosystème numérique local.</p>
<h4>Économie Sociale et Solidaire (ESS)</h4>
<p>Parmi nos clients, conformément à nos engagements en tant que SCIC, figurent des acteurs de l'économie solidaire et sociale comme Telecoop.</p>
<p>Nous avons également été en contact et en discussion avec d'autres acteur·ices de ce milieu comme prospects, sans forcément aboutir à une prestation.</p>
<p>En 2022 nous avons souscrit des parts chez plusieurs de nos fournisseurs coopératifs : notre banque Crédit Coopératif et notre cabinet de paie <a href="https://www.assistea-paie.com/">Assistea</a>, ainsi que <a href="https://telecoop.fr/">Telecoop</a>, notre fournisseur téléphonique mobile et notre client sur une mission du premier semestre 2022.</p>
<h4>BetaGouv et direction du numérique pour l'éducation</h4>
<p>Toutes nos prestations ne sont pas du domaine de l'ESS, mais en 2022, nous avons multiplié les prestations pour des projets de l'État (La startup d'État <a href="https://beta.gouv.fr/startups/plateforme.impact.html">Projet Impact</a> développée par la direction générale des entreprises en lien avec BetaGouv, le <a href="https://webinaire.numerique.gouv.fr/home">frontal de visioconférence B3Desk</a> et la plateforme de vidéos <a href="https://podeduc.apps.education.fr/">PodEduc</a> portés par la direction du numérique pour l'éducation).</p>
<p>Via ces missions, nous pouvons espérer participer à l'amélioration des services publics impactés par ces réalisations, sur du code source libre.</p>
<p>Ces missions qui se poursuivent en 2023 nous permettent en outre d'assurer une certaine pérennité dans l'activité et les revenus de Yaal Coop, et participent à l'étendue de notre réseau de clients et au rayonnement de la coopérative dans le milieu.</p>
<h4>Acteurs locaux</h4>
<p>Tous nos clients et prospects ne sont pas des acteurs locaux, mais une partie sont bien basés à Bordeaux. Notre client Lum1 et plusieurs de nos prospects sur l'année étaient des organismes bordelais ou girondins.</p>
<p>Nubla, notre service d'hébergement cloud membre des CHATONS, voit une bonne part de ses utilisateurs situés dans la région, que ce soit sur l'offre publique ou sur l'offre Pro. Notre communication et nos ambitions s'orientent en partie sur son aspect local et souverain.</p>
<h4>Impact environnemental</h4>
<p>Comme beaucoup, nous sommes sensibles aux enjeux environnementaux et tentons de limiter à notre échelle l'impact environnemental de la coopérative.</p>
<p>La question du numérique soutenable est une question de plus en plus posée. En tant que société informatique, nous sommes évidemment concernés. Plutôt qu'un greenwashing de façade, nous nous concentrons aujourd'hui sur des actions concrètes :</p>
<ul>
<li>le choix des projets sur lesquels nous travaillons, qu'on souhaite le plus possible porteurs de sens et proches des valeurs que nous défendons. Le premier levier pour diminuer l'impact environnemental du numérique est avant tout de ne PAS construire des produits ou des fonctionnalités inutiles, irresponsables, ou incompatibles avec le matériel existant.</li>
<li>limiter le renouvellement de notre matériel informatique en privilégiant en 2022 la réparation d'un de nos ordinateurs plutôt que son remplacement, l'achat d'un serveur d'occasion pour compléter notre infrastructure et le remplacement de ventilateurs défectueux par du matériel d'occasion sur un serveur existant.</li>
</ul>
<p>La séance de projection du documentaire libre <a href="https://naos-cluster.com/2022/07/08/sortie-officielle-du-documentaire-responsables-du-numerique/">"Responsables du Numérique"</a> produit par Nouvelle-Aquitaine Open Source (NAOS) en juillet 2022 nous a confortés dans l'importance de ces choix et le rôle à jouer du logiciel libre.</p>
<h4>Réseau Libre Entreprise</h4>
<p>Le réseau <a href="https://www.libre-entreprise.org/">Libre-entreprise</a> regroupe des entreprises à taille humaine ayant des spécialités proches ou complémentaires dans le domaine du logiciel libre. Ces entreprises partagent des valeurs et modes de fonctionnement proches des nôtres, basés sur la démocratie d'entreprise, la transparence et la compétence. C'est pourquoi nous avons candidaté à les rejoindre dans l'espoir de pouvoir s'aider mutuellement. Nous sommes actuellement en période d'observation. Cette période est un préalable obligatoire avant d'être validé par les membres du réseau Libre-entreprise.</p>
<h3>Favoriser l'utilisation et le développement de logiciels libres</h3>
<p>L'ensemble de nos contributions à des logiciels libres sont visibles sur ces différents articles de blog, publiés de façon saisonnière :</p>
<ul>
<li><a href="https://yaal.coop/blog/dernieres-contributions-logiciels-libres-debut-2022">Contributions début 2022</a></li>
<li><a href="https://yaal.coop/blog/dernieres-contributions-logiciels-libres-ete-2022">Contributions été 2022</a></li>
<li><a href="https://yaal.coop/blog/dernieres-contributions-logiciels-libres-automne-2022">Contributions automne 2022</a></li>
</ul>
<p>Au delà de ces contributions, la valorisation du logiciel libre est une valeur forte de la coopérative, que ce soit dans le choix même de nos missions de prestation (BetaGouv, Freexian, etc.) ou le développement de notre projet interne Nubla.</p>
<p>Pour appuyer cet attachement, nous avons adhéré en juillet 2022 à <a href="https://naos-cluster.com/">Nouvelle-Aquitaine Open Source (NAOS)</a>, un pôle de compétences régional en logiciels et technologies libres et open source.
Son objectif est de promouvoir le développement d’une filière économique pour les technologies libres et open source sur le territoire de la région Nouvelle-Aquitaine.</p>
<p>Enfin en novembre 2022, nous avons contribué financièrement à hauteur de 500€ à l'<a href="https://www.afpy.org/">AFPy (Association Francophone Python)</a> pour sponsoriser l'organisation de l'édition 2023 de la PyconFR qui a eu lieu du 16 au 19 février 2023 à Bordeaux. La PyconFR est une conférence nationale gratuite dédiée au regroupement des personnes intéressées par le langage de programmation Python, principal langage utilisé au sein de la coopérative.</p>
<hr>
<h2>Bilan financier et compte de résultat 2022</h2>
<p>Comme nous nous y attendions, le résultat du bilan 2022 est nettement en deça de celui du premier exercice comptable de 2020-2021 avec un chiffre d'affaires de 220 028€. La fin du contrat avec Sinch, le ralentissement du rythme de développement de Lum1 et la plus petite durée de l'exercice comptable (12 mois versus 16, dont 14 mois d'activité lors du précédent exercice) en sont les principales raisons.</p>
<p>Il est tout de même excédentaire avec un résultat net comptable de 46 987€. Ce bénéfice est toutefois à nuancer par l'annulation de 42 492€ de produits constatés d'avance de l'exercice précédent (règlements perçus d'avance lors de l'exercice précédent et comptabilisés en 2022). Nous n'avons pas enregistré de nouveaux produits constatés d'avance pour le prochain exercice. Sur la base de ce résultat encore fragile, nous n'avons pas jugé raisonnable d'augmenter les salaires comme nous avions envisagé de le faire, et ce malgré l'inflation.</p>
<p>Le détail du bilan est disponible dans les comptes annuels 2022 rédigés par notre cabinet d'expertise comptable Finacoop.</p>
<p>Conformément à la dernière décision d'Assemblé Générale, l'intégralité du bénéfice 2022 est affecté aux réserves impartageables de la coopérative, dont 15% à la réserve légale.</p>
<p>Aucun dividende n'a été versé depuis le premier exercice comptable de Yaal Coop et les dirigeants ne touchent aucune rémunération liée à leur statut de dirigeant.</p>
<hr>
<h2>Perspectives</h2>
<p>L'exercice 2023 a commencé et devrait se poursuivre en continuité avec la fin de l'exercice 2022 : les principales missions pour l'État ont été reconduites (Projet Impact, B3Desk) et le développement de Lum1 se poursuit à un rythme plus réduit. En parallèle des discussions s'engagent ou se poursuivent avec plusieurs prospects.</p>
<p>Le financement de NLNet pour le développement de notre logiciel libre Canaille va nous permettre de le faire évoluer pour favoriser son adoption par d'autres acteurs. Nous sommes également en recherche de financement pour finaliser notre solution Nubla et son ouverture au grand public !</p>
<p>Le déménagement de Yaal Coop dans <a href="https://yaal.coop/local">nos futurs locaux</a> à Bègles est prévu pour l'été 2023 ! La gestion des travaux et la recherche de futurs colocataires se poursuivent.</p>
<p>Enfin, nous avons l'ambition d'un meilleur résultat pour 2023, en vue d'augmenter collectivement les salaires, sans quoi nous mettrions en doute la réussite de notre projet coopératif.</p>
<hr>
<h2>Conclusion</h2>
<p>Nous espérons que les résolutions qui vous sont proposées recevront votre agrément et que vous voudrez bien donner au Président et à la Directrice Générale quitus de leur gestion pour l’exercice écoulé.</p>
<p>Rédigé collectivement par l'équipe salariée de Yaal Coop,
Signé par Éloi Rivard, Président de Yaal Coop, et Camille Daniel, Directrice Générale de Yaal Coop.</p>Visite à la PyConFR 20232023-04-11T00:00:00+02:002023-04-11T00:00:00+02:00Stéphane Blondon <stephane@yaal.coop>tag:yaal.coop,2023-04-11:/blog/pyconfr-2023<p>La conférence PyConFR a eu lieu du 16 au 19 février 2023 à Bordeaux. Organisée par l'AFPy, cette conférence est gratuite, entièrement gérée par des bénévoles et dédiée au regroupement des personnes intéressées par le langage de programmation Python.</p><p><a href="https://www.pycon.fr/2023/">La conférence PyConFR</a> est constituée de deux jours de sprints puis deux jours de conférences. Cette année elle a eu lieu à Bordeaux, l'occasion pour Yaal Coop de s'y rendre à plusieurs et de sponsoriser l'évènement pour soutenir l'organisation.</p>
<p>Les sprints sont l'occasion de découvrir des projets écrits en Python, mettre le pied à l'étrier pour les utiliser, idéalement, réussir à faire quelques contributions dessus. Ce fut l'occasion de tester <a href="https://github.com/cgwire/zou">zou</a> ainsi qu'avoir une Pull Request acceptée sur cpython (merci à <a href="https://mdk.fr/">Julien Pallard</a>) et d'en faire une autre, suite à la précédente. :)</p>
<p>C'est aussi l'occasion de rencontrer et discuter dans les allées avec d'autres pythonistes.</p>
<p>Lors de la seconde partie de la PyCon, plusieurs conférences se déroulaient en même temps, dans les amphithéatres différents. Parmi celles que nous avons vues:</p>
<h2>Django Admin comme framework pour développer des outils internes</h2>
<p>Il est possible d'adapter l'interface d'admin de django pour créer des applications CRUD pour un usage interne. L'intérêt est de gagner du temps en utilisant la capacité de django-admin à produire des interfaces listant et modifiant des objets rapidemment. Parmi les astuces et personnalisation, on notera :</p>
<ul>
<li>la possibilité de modifier le nom 'Django admin' dans l'interface de connexion pour rassurer les utilisateurs</li>
<li>l'utilisation de 'create views' dans un script de migration permettant de faire des visualisations en lecture seule.</li>
</ul>
<p>Le présentateur indique que, si le besoin devient plus complexe par la suite, la solution est de passer au developpement classique d'un service django.</p>
<h2>Uncovering Python’s surprises: a deep dive into gotchas</h2>
<p>Une présentation en anglais montrant des curiosités plus ou moins connues du langage. Une partie des exemples sont issus de <a href="https://github.com/satwikkansal/wtfpython#structure-of-the-examples">wtfpython</a>.</p>
<h2>Faire du Python professionnel</h2>
<p>Typer ou ne pas typer en python, telle est la question... Plusieurs conférences ont abordé le sujet, dont celle-ci. Globalement ses avantages semblent faire de plus en plus consensus au sein de la communauté. Une référence d'<a href="https://dev.to/etenil/why-i-stay-away-from-python-type-annotations-2041">article de blog</a> intéressante néanmoins, avec des arguments contre les annotations de type.</p>
<p>Et un conseil pertinent : ne pas faire d'annotation sans mettre en place un outil (type mypy) dans la CI pour les vérifier. 😇</p>
<h2>Portage Python sur Webassembly</h2>
<p>WebAssembly est un langage fonctionnant dans les navigateurs. Il est possible d'écrire du code Python et de le convertir en WebAssembly. Arfang3d est un moteur 3D qui fonctionne ainsi.</p>
<p>python -m asyncio -> pour avoir un shell python asynchone</p>
<p>C'est aussi un moyen de convertir des jeux écrits avec pygame pour les exécuter dans un navigateur. Une liste de jeu compatible est disponible sur <a href="https://pygame-web.github.io/">pygame-web.github.io</a>.</p>
<h2>Fear the mutants. Love the mutants.</h2>
<p>Comment être sûr que les tests vérifient bien ce qu'ils sont censés vérifier ?
<a href="https://pypi.org/project/mutmut/">mutmut</a> modifie le code source à tester et vérifie que les tests sont en erreur après la modification. La commande principale est <code>mutmut run</code>.
Pour changer le comportement du code, <code>mutmut</code> accède et modifie l'AST (<strong>Abstact Syntax Tree</strong>) grâce à la bibliothèque <a href="https://pypi.org/project/parso/">parso</a>.</p>
<h2>Python moderne et fonctionnel pour des logiciels robustes</h2>
<p>Il s'agissait ici de s'inspirer de quelques principes et règles souvent utilisées dans le fonctionnel pour pouvoir coder en python de façon plus propre des services plus résistants et moins endettés.</p>
<p>Il a été question de typage avec les hints de Mypy mais aussi avec <a href="https://github.com/microsoft/pyright">Pyright</a>, moins permissif et donc contraignant à des règles de propreté. Avec Python3.8 sont arrivés les Protocols, un cas spécifique d'utilisation des Abstract Base Classes sans héritage où il suffit de reproduire une signature.</p>
<p>Faire remonter les impuretés et les effets de bord a également été abordé avec l'architecture en oignon (comme la connexion à la persistance, les modifications à sauvegarder, les configurations, etc.) avec l'idée de pouvoir tester le cœur de son code sans dépendre de tout un environnement.</p>
<p>Le paramètre <code>frozen</code> du décorateur <code>@dataclass(frozen=True)</code> permet de rendre les instances immutables.</p>
<p>La classe <code>typing.Protocol</code>, décrite dans la <a href="https://peps.python.org/pep-0544/">PEP 544</a> et introduite dans Python 3.8 permet de définir des interfaces.</p>
<p>Une recommandation de vidéo : <a href="https://www.youtube.com/watch?v=US8QG9I1XW0">Functional architecture - The pits of success - Mark Seemann</a></p>
<h2>Accessibilité numérique : faire sa part quand on est développeur·euse backend</h2>
<p>Une introduction aux problématiques de l'accessibilité avec une <a href="https://www.youtube.com/watch?v=EtVCVu8E0ng">démo percutante en vidéo</a> de l'expérience que peut avoir une personne aveugle en naviguant sur internet.
Saviez vous qu'aujourd'hui, 1 personne sur 5 était en situation de handicap ?
L'objectif était ici de sensibiliser le public, en majorité des développeurs back-end, aux questions d'accessibilité, et d'appuyer le fait que ce n'était pas qu'une question réservée aux design ou au front.</p>
<p>Quelques petites choses glanées :</p>
<ul>
<li>quand on construit une plateforme diffusant du contenu utilisateur, prévoir l'ajout possible d'un texte alternatif/de sous titres à stocker avec l'image/la vidéo de l'utilisateur</li>
<li>se méfier des inputs utilisateurs que certains arriveront à détourner pour mettre du contenu en forme (des émojis, des caractères mathématiques...) qui sera ensuite illisible pour les lecteurs d'écrans</li>
<li>l'attribut html <code>lang</code> peut être utilisé avec n'importe quelle balise, pas seulement dans l'en-tête de la page, pour signaler une citation dans une langue étrangère par exemple ! Cela permet aux logiciels de lecture d'écran d'adopter la bonne prononciation 🤯</li>
<li>préferer le server side rendering et faire de la mise en cache pour accélerer l'affichage : un loader à l'écran n'est pas forcément explicite pour tous les utilisateurs (ou lecteurs...)</li>
<li>FALC (Facile à lire et à comprendre) est une méthode/un ensemble de règles ayant pour finalité de rendre l'information facile à lire et à comprendre, notamment pour les personnes en situation de handicap mental</li>
</ul>
<p>Sensibiliser les producteurs d'une part significative des mediums d'information est toujours une bonne chose.</p>
<h2>Interactive web pages with Django or Flask, without writing JavaScript</h2>
<p><a href="https://htmx.org/">htmx</a> est une bibliothèque javascript dont le but est de permettre la fourniture de code HTML qui sera intégré dans le DOM. L'idée est de remplacer le code javascript as-hoc et les transferts en JSON (ou autre). Si le principe semble adapté à certains cas, il ne remplacera pas de gros framework produisant des Single Page App.</p>
<p><a href="https://docs.pyscript.net/">pyScript</a> est un projet encore très jeune qui permet l'exécution de code Python dans le navigateur.</p>
<p>Merci à l'équipe de bénévoles pour l'organisation de la conférence. À l'année prochaine !</p>Contributions à des logiciels libres par l'équipe Yaal Coop durant l'hiver 20232023-03-21T00:00:00+01:002023-03-21T00:00:00+01:00Éloi Rivard <eloi@yaal.coop>tag:yaal.coop,2023-03-21:/blog/dernieres-contributions-logiciels-libres-hiver-2023<p>Les dernières contributions à des logiciels libres par l'équipe Yaal Coop pendant l'hiver 2023.</p><p>Cet hiver nous avons surtout travaillé sur <a href="https://canaille.yaal.coop">Canaille</a> pour préparer l'implémentation de fonctionnalités sponsorisées par la <a href="https://nlnet.nl/">fondation NLNet</a>.</p>
<h2>Documentation</h2>
<ul>
<li>Python : <a href="https://github.com/python/cpython/pull/101963">suppression ou mise-à-jour de liens vers bitbucket.org</a></li>
<li>Celery : corrections d'URL (<a href="https://github.com/celery/celery/pull/8111">1</a> et <a href="https://github.com/celery/celery/pull/8112">2</a>)</li>
</ul>
<h2><a href="https://github.com/EsupPortail/Esup-Pod">Esup-Pod</a></h2>
<p><em>Plateforme de partage vidéo pensée pour l'enseignement et la recherche</em></p>
<p>Contributions financées par la <a href="https://www.education.gouv.fr/direction-du-numerique-pour-l-education-dne-9983">Direction du Numérique pour l'Éducation</a> (pôle <a href="https://foad.phm.education.gouv.fr/fr">Formation Ouverte et A Distance</a>)</p>
<ul>
<li><a href="https://github.com/EsupPortail/Esup-Pod/pull/693">Proxy configurable par variable d'environnement</a></li>
<li><a href="https://github.com/EsupPortail/Esup-Pod/pull/694">Configuration d'une affiliation pour les utilisateurs connectés par OIDC</a></li>
</ul>
<h2><a href="https://www.systeme-de-design.gouv.fr/">DSFR</a></h2>
<p><em>Système de design de l’État</em></p>
<ul>
<li><a href="https://github.com/GouvernementFR/dsfr/pull/518">Rend le composant Interrupteur compatible avec vite+svelte</a></li>
</ul>
<h2><a href="https://gitlab.com/yaal/canaille">canaille</a></h2>
<p><em>Serveur OpenID Connect simpliste, basé sur OpenLDAP</em></p>
<ul>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/82">Correction d'un paramètre de retour lors de la déconnexion OIDC</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/83">Cohérence des valeurs entre les claims OIDC et JWT</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/86">Formulations et ponctuations</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/87">Correction de l'attribut HTML de langue</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/89">Mail de test de connectivité</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/90">Mise à jour des dépendances Javascript</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/91">Suppression automatiques des espaces autour des phrases de traductions</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/92">Réusinages du modèle de données LDAP</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/">Corrections relative à l'enregistrement automatique de clients</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/98">La supression de clients supprime les objets liés</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/100">Suppression des jetons</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/102">Liens vers les pages légales sur les consentements des utilisateurs</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/103">Correction d'un message dans le script de lancement de la démo</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/104">Affichage des applications pré-autorisées</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/106">Commande de génération de groupes et d'utilisateurs aléatoires</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/109">D'autres réusinages du modèle de données LDAP</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/111">Pagination et recherche côté serveur</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/112">Support de l'édition des adresses</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/113">Support de l'édition du champ « titre »</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/114">Ajout d'un sous-menu</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/116">Support de l'édition du champ « organization »</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/117">Mise en cache des avatars</a></li>
</ul>
<h2><a href="https://github.com/pulsejet/nextcloud-oidc-login">nextcloud-oidc-login</a></h2>
<p><em>Plugin OpenID Connect pour nextcloud</em></p>
<ul>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/220">Pas de téléchargement des avatars s'ils n'ont pas été modifiés</a></li>
</ul>
<h2><a href="https://github.com/azmeuk/flask-shell-ptpython">flask-shell-ptpython</a></h2>
<p><em>Utilisation de l'interpréteur de commandes ptpython dans flask</em></p>
<ul>
<li><a href="https://github.com/jacquerie/flask-shell-ptpython/issues/18">Fork (temporaire) du projet pour cause d'abandon</a></li>
</ul>
<h2><a href="https://github.com/lepture/authlib">authlib</a></h2>
<p><em>Bibliothèque python de gestion des identités et des accès</em></p>
<ul>
<li><a href="https://github.com/lepture/authlib/pull/514">Suppression de code inutilisé</a></li>
</ul>
<h2><a href="https://github.com/wtforms/wtforms">wtforms</a></h2>
<p><em>Bibliothèque python de gestion de formulaires web</em></p>
<ul>
<li><a href="https://github.com/wtforms/wtforms/pull/763">Mise à jour de pre-commit</a></li>
<li><a href="https://github.com/wtforms/wtforms/pull/764">Support de python 3.11</a></li>
</ul>
<h2><a href="https://github.com/wtforms/flask-wtf">flask-wtf</a></h2>
<p><em>Intégration de WTForms dans Flask</em></p>
<ul>
<li><a href="https://github.com/wtforms/flask-wtf/pull/539">Correction des tests unitaires</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/pull/540">Arrêt du support de flask-babelx</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/pull/541">Mise à jour de pre-commit</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/pull/542">Support de python 3.11</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/pull/546">Publication de la version 1.1.0</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/pull/549">Correction des tests unitaires avec Flask-Babel 3</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/pull/550">Ignore d'avertissements avec flake8</a></li>
</ul>
<h2><a href="https://github.com/python-caldav/caldav">python-caldav</a></h2>
<p><em>Bibliothèque python pour le protocole CalDAV</em></p>
<ul>
<li><a href="https://github.com/python-caldav/caldav/pull/242">Support de python 3.11</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/pull/546">Support de l'authentification par jeton</a></li>
</ul>
<h2><a href="https://github.com/bamthomas/aioimaplib">aioimaplib</a></h2>
<p><em>Bibliothèque python asyncio IMAP4rev1</em></p>
<ul>
<li><a href="https://github.com/bamthomas/aioimaplib/pull/86">Migration de <code>setup.py</code> à <code>setup.cfg</code></a></li>
<li><a href="https://github.com/bamthomas/aioimaplib/pull/88">Assertions pythoniques dans les tests unitaires</a></li>
</ul>
<h2><a href="https://github.com/pstanoev/simple-svelte-autocomplete">simple-svelte-autocomplete</a></h2>
<p><em>Composant svelte de suggestion d'éléments dans une liste déroulante</em></p>
<ul>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/197">Le menu reste fermé quand le champ est verrouillé</a></li>
</ul>
<h2><a href="https://github.com/python-ldap/python-slapd">python-slapd</a></h2>
<p><em>Interface pythonique pour contrôler un serveur OpenLDAP</em></p>
<ul>
<li><a href="https://github.com/python-ldap/python-slapd/pull/6">Support de python 3.11</a></li>
<li><a href="https://github.com/python-ldap/python-slapd/pull/7">Augmentation par défaut de la taille de la base de données</a></li>
</ul>
<h2><a href="http://supervisord.org/">supervisord</a></h2>
<p><em>Un gestionnaire de processus écrit en Python</em></p>
<ul>
<li><a href="https://github.com/Supervisor/supervisor/pull/1583">Suppression d'une condition python3.3</a></li>
</ul>FOSS contributions from the Yaal Coop team during winter 20232023-03-21T00:00:00+01:002023-03-21T00:00:00+01:00Éloi Rivard <eloi@yaal.coop>tag:yaal.coop,2023-03-21:/blog/en/dernieres-contributions-logiciels-libres-hiver-2023<p>The last free and open-source software contributions from the Yaal Coop team during winter 2023.</p><p>This winter we have mainly worked on <a href="https://canaille.yaal.coop">Canaille</a> in order to prepare the implementation of features sponsored by the <a href="https://nlnet.nl/">NLNet foundation</a>.</p>
<h2>Documentation</h2>
<ul>
<li>Python : <a href="https://github.com/python/cpython/pull/101963">remove or update bitbucket.org links</a></li>
<li>Celery : URLs fixed (<a href="https://github.com/celery/celery/pull/8111">1</a> et <a href="https://github.com/celery/celery/pull/8112">2</a>)</li>
</ul>
<h2><a href="https://github.com/EsupPortail/Esup-Pod">Esup-Pod</a></h2>
<p><em>Video sharing website aimed at education and research</em></p>
<p>Contributions funded by the <a href="https://www.education.gouv.fr/direction-du-numerique-pour-l-education-dne-9983">Direction du Numérique pour l'Éducation</a> (<a href="https://foad.phm.education.gouv.fr/fr">Formation Ouverte et A Distance</a> service)</p>
<ul>
<li><a href="https://github.com/EsupPortail/Esup-Pod/pull/693">Configurable proxy environment variable</a></li>
<li><a href="https://github.com/EsupPortail/Esup-Pod/pull/694">Configurable default affiliation for OIDC authentication</a></li>
</ul>
<h2><a href="https://www.systeme-de-design.gouv.fr/">DSFR</a></h2>
<p><em>French State design system</em></p>
<ul>
<li><a href="https://github.com/GouvernementFR/dsfr/pull/518">Fix Toggle component compatibility with vite+svelte</a></li>
</ul>
<h2><a href="https://gitlab.com/yaal/canaille">canaille</a></h2>
<p><em>Simplistic OpenID Connect provider over OpenLDAP</em></p>
<ul>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/82">Fixed a OIDC logout parameter</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/83">Audience congruency between OIDC and JWT</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/86">Wording and punctuation</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/87">Fixed the HTML language attribute</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/89">Connectivity test mail</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/90">Updated Javascript dependencies</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/91">Trimmed translatable strings</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/92">LDAP model object refactoring</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/">Dynamic client registration fixes</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/98">Deleting clients also delete linked attributes</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/100">Admin token deletion</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/102">Display policy and TOS link on the user consents page</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/103">Fixed demo script messages</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/104">Display pre-authorized clients to users</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/106">User and group population command</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/109">More LDAP model object refactoring</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/111">Server-side search and pagination</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/112">Address field edition support</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/113">Title field edition support</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/114">Sub-menu and UX work</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/116">Organization edition support</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/117">Avatar HTTP headers for caching</a></li>
</ul>
<h2><a href="https://github.com/pulsejet/nextcloud-oidc-login">nextcloud-oidc-login</a></h2>
<p><em>Nextcloud login via a single OpenID Connect 1.0 provider</em></p>
<ul>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/220">Avoid avatar download when unnecessary</a></li>
</ul>
<h2><a href="https://github.com/azmeuk/flask-shell-ptpython">flask-shell-ptpython</a></h2>
<p><em>Ptpython shell for flask</em></p>
<ul>
<li><a href="https://github.com/jacquerie/flask-shell-ptpython/issues/18">(hopefully temporary) fork while the project is abandonned</a></li>
</ul>
<h2><a href="https://github.com/lepture/authlib">authlib</a></h2>
<p><em>Identity and Access management library for python</em></p>
<ul>
<li><a href="https://github.com/lepture/authlib/pull/514">Useless code removal</a></li>
</ul>
<h2><a href="https://github.com/wtforms/wtforms">wtforms</a></h2>
<p><em>A flexible forms validation and rendering library for Python.</em></p>
<ul>
<li><a href="https://github.com/wtforms/wtforms/pull/763">pre-commit update</a></li>
<li><a href="https://github.com/wtforms/wtforms/pull/764">python 3.11 support</a></li>
</ul>
<h2><a href="https://github.com/wtforms/flask-wtf">flask-wtf</a></h2>
<p><em>Simple integration of Flask and WTForms, including CSRF, file upload and Recaptcha integration.</em></p>
<ul>
<li><a href="https://github.com/wtforms/flask-wtf/pull/539">Unit tests fixes</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/pull/540">Stop flask-babelx support</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/pull/541">pre-commit update</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/pull/542">python 3.11 support</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/pull/546">1.1.0 release</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/pull/549">Fixed unit tests with Flask-Babel 3</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/pull/550">Ignore some flake8 warnings</a></li>
</ul>
<h2><a href="https://github.com/python-caldav/caldav">python-caldav</a></h2>
<p><em>Python CalDAV library</em></p>
<ul>
<li><a href="https://github.com/python-caldav/caldav/pull/242">3.11 support</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/pull/546">Bearer authentication support</a></li>
</ul>
<h2><a href="https://github.com/bamthomas/aioimaplib">aioimaplib</a></h2>
<p><em>Python asyncio IMAP4rev1 client library</em></p>
<ul>
<li><a href="https://github.com/bamthomas/aioimaplib/pull/86">Move from <code>setup.py</code> to <code>setup.cfg</code></a></li>
<li><a href="https://github.com/bamthomas/aioimaplib/pull/88">Pythonic assertions in the unit tests</a></li>
</ul>
<h2><a href="https://github.com/pstanoev/simple-svelte-autocomplete">simple-svelte-autocomplete</a></h2>
<p><em>Simple Autocomplete / typeahead component for Svelte</em></p>
<ul>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/197">Menu stays closed when field is locked</a></li>
</ul>
<h2><a href="https://github.com/python-ldap/python-slapd">python-slapd</a></h2>
<p><em>Controls a slapd process in a pythonic way</em></p>
<ul>
<li><a href="https://github.com/python-ldap/python-slapd/pull/6">python 3.11 support</a></li>
<li><a href="https://github.com/python-ldap/python-slapd/pull/7">Increased the default database size</a></li>
</ul>
<h2><a href="http://supervisord.org/">supervisord</a></h2>
<p><em>A Process Control System written in Python</em></p>
<ul>
<li><a href="https://github.com/Supervisor/supervisor/pull/1583">Remove python3.3 case</a></li>
</ul>Dernières contributions à des logiciels libres par l'équipe Yaal Coop (automne 2022)2022-12-21T00:00:00+01:002022-12-21T00:00:00+01:00Éloi Rivard <eloi@yaal.coop>tag:yaal.coop,2022-12-21:/blog/dernieres-contributions-logiciels-libres-automne-2022<p>Les dernières contributions à des logiciels libres par l'équipe Yaal Coop dans l'automne 2022.</p><h1><a href="https://github.com/csernazs/pytest-httpserver">pytest-httpserver</a></h1>
<p><em>Serveur HTTP pour pytest</em></p>
<ul>
<li><a href="https://github.com/csernazs/pytest-httpserver/pull/185">Exemples de code pour la connection HTTPS</a></li>
<li><a href="https://github.com/csernazs/pytest-httpserver/pull/186">Fixtures de serveurs n'écoutant exclusivement qu'en IPV6 ou en IPV4</a></li>
<li><a href="https://github.com/csernazs/pytest-httpserver/pull/187">Implémentation de <code>BaseHTTPServer.__repr__</code></a></li>
</ul>
<h1><a href="https://github.com/samuelcolvin/dnserver">dnserver</a></h1>
<p><em>Serveur DNS simpliste pour le développement</em></p>
<ul>
<li><a href="https://github.com/samuelcolvin/dnserver/pull/13">Exemples d'enregistrements SRV</a></li>
<li><a href="https://github.com/samuelcolvin/dnserver/pull/15">Mise à jour à chaud des zones</a></li>
<li><a href="https://github.com/samuelcolvin/dnserver/pull/16">Initialisation de la classe DNSServer sans zone</a></li>
</ul>
<h1><a href="https://gitlab.com/yaal/canaille">canaille</a></h1>
<p><em>Serveur OpenID Connect simpliste, basé sur OpenLDAP</em></p>
<ul>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/59">Support basique de WebFinger</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/60">Implémentation de l'enregistrement dynamique des clients</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/61">Support de Python 3.11</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/64">Corrections sur l'intégration continue de Gitlab</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/66">Instructions de configuration d'apparmor dans la documentation</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/69">Divers réusinages</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/70">Correction du traîtement de <code>software_statement</code> du RFC7591</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/71">Génération dynamique des métadonnées OAuth2/OIDC du serveur</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/72">Correction de la désactivation du pré-consentement des clients</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/73">L'option de configuration <code>FROM_ADDR</code> devient facultative</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/74">L'option de configuration <code>JWT.ISS</code> devient facultative</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/75">Les utilisateurs peuvent choisir leur langage favori</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/76">Rajout d'un lien vers le dépôt dans la documentation</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/77">Les utilisateurs peuvent choisir leur nom d'affichage</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/78">Mise à jour vers authlib 1.2</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/79">Implémentation du point d'accès de modification des clients RFC7592</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/80">Correction du bouton de suppression des groupes</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/81">Correction du bug généré par des requêtes POST sur la page d'administration des clients</a></li>
</ul>
<h1><a href="https://github.com/zopefoundation/ZEO">ZEO</a></h1>
<p><em>Serveur de base de données pour ZODB</em></p>
<ul>
<li><a href="https://github.com/zopefoundation/ZEO/pull/215">Valeur de sortie à 1 si toutes les connexions serveur finissent en échec</a></li>
</ul>
<h1><a href="https://github.com/pulsejet/nextcloud-oidc-login">nextcloud-oidc-login</a></h1>
<p><em>Plugin OpenID Connect pour nextcloud</em></p>
<ul>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/191">Mise à jour vers OpenID-Connect-PHP 0.9.10</a></li>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/192">Documentation pour le paramètre <code>oidc_login_disable_registration</code></a></li>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/193">Amélioration de la documentation dans le README</a></li>
</ul>
<h1><a href="https://github.com/lepture/authlib">authlib</a></h1>
<p><em>Bibliothèque python de gestion des identités et des accès</em></p>
<ul>
<li><a href="https://github.com/lepture/authlib/pull/505">Implémentation de RFC7592 permettant la configuration dynamique de clients OpenID Connect</a></li>
<li><a href="https://github.com/lepture/authlib/pull/506">Support de Python 3.11</a></li>
<li><a href="https://github.com/lepture/authlib/pull/513">Suppression des références à une fonction inutilisée</a></li>
</ul>
<h1><a href="https://github.com/bamthomas/aioimaplib">aioimaplib</a></h1>
<p><em>Bibliothèque python asyncio IMAP4rev1</em></p>
<ul>
<li><a href="https://github.com/bamthomas/aioimaplib/pull/81">Tests unitaires avec pytest, tox et Github Actions</a></li>
</ul>
<h1><a href="https://msgpack.org">MessagePack</a></h1>
<p><em>Format de sérialisation binaire efficace (bibliothèque python)</em></p>
<ul>
<li><a href="https://github.com/msgpack/msgpack-python/pull/519">Nouvelles modifications suite à une revue de code</a></li>
</ul>
<h1><a href="https://github.com/pstanoev/simple-svelte-autocomplete">simple-svelte-autocomplete</a></h1>
<p><em>Composant svelte de suggestion d'éléments dans une liste déroulante</em></p>
<ul>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/185">Corrections d'avertissements d'accessibilité</a></li>
</ul>
<h1><a href="https://www.dnspython.org">dnspython</a></h1>
<p><em>outils DNS pour Python</em></p>
<ul>
<li>Nettoyage de code : <a href="https://github.com/rthalley/dnspython/pull/871">test</a> et <a href="https://github.com/rthalley/dnspython/pull/873">commentaire</a> obsolètes</li>
</ul>Last FOSS contributions from the Yaal Coop team (automn 2022)2022-12-21T00:00:00+01:002022-12-21T00:00:00+01:00Éloi Rivard <eloi@yaal.coop>tag:yaal.coop,2022-12-21:/blog/en/dernieres-contributions-logiciels-libres-automne-2022<p>The last free and open-source software contributions from the Yaal Coop team during autumn 2022.</p><h1><a href="https://github.com/csernazs/pytest-httpserver">pytest-httpserver</a></h1>
<p><em>Http server for pytest to test http clients</em></p>
<ul>
<li><a href="https://github.com/csernazs/pytest-httpserver/pull/185">HTTPS client code samples</a></li>
<li><a href="https://github.com/csernazs/pytest-httpserver/pull/186">IPV6-only and IPV4-only server fixtures</a></li>
<li><a href="https://github.com/csernazs/pytest-httpserver/pull/187"><code>BaseHTTPServer.__repr__</code> implementation</a></li>
</ul>
<h1><a href="https://github.com/samuelcolvin/dnserver">dnserver</a></h1>
<p><em>Simple development DNS server</em></p>
<ul>
<li><a href="https://github.com/samuelcolvin/dnserver/pull/13">Added a SRV record examples</a></li>
<li><a href="https://github.com/samuelcolvin/dnserver/pull/15">Hot zones update</a></li>
<li><a href="https://github.com/samuelcolvin/dnserver/pull/16">DNSServer initialization without zones</a></li>
</ul>
<h1><a href="https://gitlab.com/yaal/canaille">canaille</a></h1>
<p><em>Simplistic OpenID Connect provider over OpenLDAP</em></p>
<ul>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/59">Basic WebFinger support</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/60">Dynamic Client Registration support</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/61">Python 3.11 support</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/64">Gitlab CI fixes</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/66">Apparmor configuration instructions</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/69">Miscellaneous refactoring</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/70">Fixed RFC7591 <code>software_statement</code> claim handling</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/71">Dynamic OAuth2/OIDC metadata generation</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/72">Fixed client preconsent disabling</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/73"><code>FROM_ADDR</code> configuration parameter is optional</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/74"><code>JWT.ISS</code> configuration parameter is optional</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/75">Users can chose their favorite language</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/76">Added a link to the repository in the documentation</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/77">Users can choose their favourite display name</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/78">Upgrade to authlib 1.2</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/79">Implemented RFC7592 OAuth Client Registration Management</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/80">Fixed the group deletion button</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/81">Fixed a bug related to POST requests on the client administration pages</a></li>
</ul>
<h1><a href="https://github.com/zopefoundation/ZEO">ZEO</a></h1>
<p><em>ZODB Client-Server framework</em></p>
<ul>
<li><a href="https://github.com/zopefoundation/ZEO/pull/215">Exit value is 1 if all connections fail</a></li>
</ul>
<h1><a href="https://github.com/pulsejet/nextcloud-oidc-login">nextcloud-oidc-login</a></h1>
<p><em>Nextcloud login via a single OpenID Connect 1.0 provider</em></p>
<ul>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/191">Updated OpenID-Connect-PHP to 0.9.10</a></li>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/192"><code>oidc_login_disable_registration</code> parameter documentation</a></li>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/193">README documentation improvements</a></li>
</ul>
<h1><a href="https://github.com/lepture/authlib">authlib</a></h1>
<p><em>Identity and Access management library for python</em></p>
<ul>
<li><a href="https://github.com/lepture/authlib/pull/505">Implemented RFC7592 Dynamic Client Registration Management Protocol</a></li>
<li><a href="https://github.com/lepture/authlib/pull/506">Python 3.11 support</a></li>
<li><a href="https://github.com/lepture/authlib/pull/513">Unused method removal</a></li>
</ul>
<h1><a href="https://github.com/bamthomas/aioimaplib">aioimaplib</a></h1>
<p><em>Python asyncio IMAP4rev1 client library</em></p>
<ul>
<li><a href="https://github.com/bamthomas/aioimaplib/pull/81">Unit tests with pytest, tox and Github Actions</a></li>
</ul>
<h1><a href="https://msgpack.org">MessagePack</a></h1>
<p><em>Efficient binary serialization format (python implementation)</em></p>
<ul>
<li><a href="https://github.com/msgpack/msgpack-python/pull/519">New patches after code review</a></li>
</ul>
<h1><a href="https://github.com/pstanoev/simple-svelte-autocomplete">simple-svelte-autocomplete</a></h1>
<p><em>Simple Autocomplete / typeahead component for Svelte</em></p>
<ul>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/185">Fixed some accessibility warnings</a></li>
</ul>
<h1><a href="https://www.dnspython.org">dnspython</a></h1>
<p><em>DNS toolkit for Python</em></p>
<ul>
<li>Code cleaning: obsolete <a href="https://github.com/rthalley/dnspython/pull/871">test</a> and <a href="https://github.com/rthalley/dnspython/pull/873">comment</a></li>
</ul>Dernières contributions à des logiciels libres par l'équipe Yaal Coop (été 2022)2022-09-22T00:00:00+02:002022-09-22T00:00:00+02:00Éloi Rivard <eloi@yaal.coop>tag:yaal.coop,2022-09-22:/blog/dernieres-contributions-logiciels-libres-ete-2022<p>Les dernières contributions à des logiciels libres par l'équipe Yaal Coop dans l'été 2022.</p><h1><a href="https://gitlab.gnome.org/World/Phosh/squeekboard/">squeekboard</a></h1>
<p><em>Un clavier virtuel pour Wayland</em></p>
<ul>
<li><a href="https://gitlab.gnome.org/World/Phosh/squeekboard/-/commit/b54922b021ad3c326a5de74dfba1e3ea3b7c32f5">Traduction française</a></li>
</ul>
<h1><a href="https://gitlab.gnome.org/World/Phosh/libcall-ui">libcall-ui</a></h1>
<p><em>Interface utilisateur pour les appels téléphoniques sous Linux</em></p>
<ul>
<li><a href="https://gitlab.gnome.org/World/Phosh/libcall-ui/-/commit/7cd3cfdd2ce1fe3e72614928f46c6376c226b1a7">Traduction française</a></li>
</ul>
<h1><a href="https://developer.mozilla.org/fr/">Mozilla Web Docs</a></h1>
<p><em>Documentation sur les technologies du web, dont CSS, HTML et Javascript</em></p>
<ul>
<li><a href="https://github.com/mdn/content/pull/16769">Ajout d'une alerte</a> à propos de la fonctionnalité dépréciée <a href="https://developer.mozilla.org/en-US/docs/Web/OpenSearch">OpenSearch</a> pour les greffons Firefox.</li>
</ul>
<h1><a href="https://gitlab.com/yaal/canaille">canaille</a></h1>
<p><em>Serveur OpenID Connect simpliste, basé sur OpenLDAP</em></p>
<ul>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/54">Déconnexions initiées par les clients</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/55">Instance de démo en ligne</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/56">Correction d'un bug où les scopes était trop permissifs</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/57">Ajout d'un thème sombre</a></li>
</ul>
<h1><a href="https://python.org">Python</a></h1>
<ul>
<li>Documentation : <a href="https://github.com/python/cpython/pull/93574">remplacement de noms de domaine non contrôlés par la PSF</a> par python.org et des noms de domaines qui sont clairement des exemple (cf. <a href="https://github.com/python/cpython/issues/93573">signalement</a>) dans la documentation</li>
</ul>
<h1><a href="https://github.com/python-caldav/caldav">python-caldav</a></h1>
<ul>
<li><a href="https://github.com/python-caldav/caldav/pull/193">Support pour les serveurs supportant plusieurs méthodes d'authentification</a></li>
<li><a href="https://github.com/python-caldav/caldav/pull/194">Configuration tox</a></li>
<li><a href="https://github.com/python-caldav/caldav/pull/195">Configuration de l'intégration continue avec Github Actions</a></li>
<li><a href="https://github.com/python-caldav/caldav/pull/197">Migration vers pytest</a></li>
<li><a href="https://github.com/python-caldav/caldav/pull/198">Construction de la documentation avec tox</a></li>
<li><a href="https://github.com/python-caldav/caldav/pull/199">Installation de pre-commit</a></li>
</ul>
<h1>Debian Archive Kit (dak)</h1>
<p><em>Programmes utilisés pour maintenir les archives du projet Debian</em></p>
<ul>
<li><a href="https://salsa.debian.org/ftp-team/dak/-/merge_requests/254">Correction des erreurs flake8 E123</a>. Le code E123 concerne des parenthèses fermantes ne correspondant pas à l'indentation des parenthèses ouvrantes.</li>
</ul>
<h1>Python2 finira par disparaître</h1>
<ul>
<li>Suppression d'un contournement pour les version antérieures à 2.6 dans <a href="https://github.com/Pylons/webtest/pull/244">Webtest</a></li>
<li>Documentation : suppression d'un exemple basé sur python2 dans <a href="https://github.com/nickstenning/honcho/pull/235">Honcho</a></li>
<li>Suppression de cas spécifiques à python2.7 dans <a href="https://github.com/pypa/setuptools/pull/3564">setuptools</a></li>
<li>Suppression de python2 dans <a href="https://github.com/msgpack/msgpack-python/pull/519">msgpack</a></li>
</ul>
<h1><a href="https://gitlab.gnome.org/GNOME/tracker-miners/">tracker-miners</a></h1>
<p><em>Collecteurs de données pour GNOME Tracker</em></p>
<ul>
<li><a href="https://gitlab.gnome.org/GNOME/tracker-miners/-/merge_requests/395">Ajout d'options CLI pour l'ajout et la suppression de flux RSS</a></li>
</ul>
<h1><a href="https://python-poetry.org/docs/">poetry</a></h1>
<p><em>Outil pour la gestion des dépendances et des paquets en Python</em></p>
<ul>
<li><a href="https://github.com/python-poetry/poetry/pull/3995">Ajout d'une alerte si des identifiants sont écrits dans le fichier poetry.lock</a></li>
<li><a href="https://github.com/python-poetry/poetry-plugin-export/pull/93">Ajout d'un attribut privé pour correspondre à l'implémentation d'une classe fictive (mock)</a> (nécessaire pour le correctif précédent)</li>
</ul>
<h1><a href="https://github.com/migraf/fhir-kindling">fhir-kindling</a></h1>
<p><em>Brique de connexion à des serveurs de ressources FHIR</em></p>
<ul>
<li><a href="https://github.com/migraf/fhir-kindling/pull/99">Correctif pour le support des serveurs proxy</a></li>
<li><a href="https://github.com/migraf/fhir-kindling/pull/105">Correctif pour le support des entêtes personnalisées</a></li>
</ul>
<h1><a href="https://github.com/nazarewk/keyring_pass">keyring_pass</a></h1>
<p><em>Connecteur Password Store (pass) pour python-keyring</em></p>
<ul>
<li><a href="https://github.com/nazarewk/keyring_pass/pull/2">Améliorations de la documentation</a></li>
<li><a href="https://github.com/nazarewk/keyring_pass/pull/6">Correction de dépréciations</a></li>
</ul>
<h1><a href="https://github.com/samuelcolvin/dnserver">dnserver</a></h1>
<p><em>Serveur DNS simpliste pour le développement</em></p>
<ul>
<li><a href="https://github.com/samuelcolvin/dnserver/pull/2">Tests unitaires</a></li>
<li><a href="https://github.com/samuelcolvin/dnserver/pull/9">La fonctionnalité de proxy DNS est désactivable</a></li>
<li><a href="https://github.com/samuelcolvin/dnserver/pull/10">Ajout d'exemples dans le README</a></li>
</ul>
<h1><a href="https://github.com/pulsejet/nextcloud-oidc-login">nextcloud-oidc-login</a></h1>
<p><em>Plugin OpenID Connect pour nextcloud</em></p>
<ul>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/186">Mise à jours vers OpenID-Connect-PHP 0.9.8</a></li>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/187">Correction d'erreurs de mise en forme du code</a></li>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/releases/tag/v2.3.3">Publication de la version 2.3.3</a></li>
</ul>Last FOSS contributions from the Yaal Coop team (summer 2022)2022-09-22T00:00:00+02:002022-09-22T00:00:00+02:00Éloi Rivard <eloi@yaal.coop>tag:yaal.coop,2022-09-22:/blog/en/dernieres-contributions-logiciels-libres-ete-2022<p>The last free and open-source software contributions from the Yaal Coop team during summer 2022.</p><h1><a href="https://gitlab.gnome.org/World/Phosh/squeekboard/">squeekboard</a></h1>
<p><em>An on-screen-keyboard input method for Wayland</em></p>
<ul>
<li><a href="https://gitlab.gnome.org/World/Phosh/squeekboard/-/commit/b54922b021ad3c326a5de74dfba1e3ea3b7c32f5">French translation</a></li>
</ul>
<h1><a href="https://gitlab.gnome.org/World/Phosh/libcall-ui">libcall-ui</a></h1>
<p><em>User interface for Linux phone calls</em></p>
<ul>
<li><a href="https://gitlab.gnome.org/World/Phosh/libcall-ui/-/commit/7cd3cfdd2ce1fe3e72614928f46c6376c226b1a7">French translation</a></li>
</ul>
<h1><a href="https://developer.mozilla.org/fr/">Mozilla Web Docs</a></h1>
<p><em>Documentation about web technologies, including CSS, HTML, and JavaScript</em></p>
<ul>
<li><a href="https://github.com/mdn/content/pull/16769">Add a Warning</a> about deprecated <a href="https://developer.mozilla.org/en-US/docs/Web/OpenSearch">OpenSearch</a> for Firefox add-ons</li>
</ul>
<h1><a href="https://gitlab.com/yaal/canaille">canaille</a></h1>
<p><em>Simplistic OpenID Connect provider over OpenLDAP</em></p>
<ul>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/54">Client-initiated logout</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/55">Online demo</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/56">Fixed too permissive scopes</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/57">Adding a dark theme</a></li>
</ul>
<h1><a href="https://python.org">Python</a></h1>
<ul>
<li>Documentation: <a href="https://github.com/python/cpython/pull/93574">replace domain names not managed by PSF</a> by python.org et domain names with .example Top Level Domain (cf. <a href="https://github.com/python/cpython/issues/93573">issue</a>) in the documentation</li>
</ul>
<h1><a href="https://github.com/python-caldav/caldav">python-caldav</a></h1>
<ul>
<li><a href="https://github.com/python-caldav/caldav/pull/193">Support for multiple authentication methods server headers</a></li>
<li><a href="https://github.com/python-caldav/caldav/pull/194">Tox configuration</a></li>
<li><a href="https://github.com/python-caldav/caldav/pull/195">Configured Github Actions</a></li>
<li><a href="https://github.com/python-caldav/caldav/pull/197">Pytest migration</a></li>
<li><a href="https://github.com/python-caldav/caldav/pull/198">Build the documentation with tox</a></li>
<li><a href="https://github.com/python-caldav/caldav/pull/199">Precommit installation</a></li>
</ul>
<h1>Debian Archive Kit (dak)</h1>
<p><em>Programs used to maintain the Debian project's archives</em></p>
<ul>
<li><a href="https://salsa.debian.org/ftp-team/dak/-/merge_requests/254">Fix E123 flakes8 errors</a>. E123 code means "closing bracket does not match indentation of opening bracket's line".</li>
</ul>
<h1>Python2 will disappear</h1>
<ul>
<li>Removal of a workaround for older releases than 2.6 in <a href="https://github.com/Pylons/webtest/pull/244">Webtest</a></li>
<li>Documentation: removal of an example based on python2 in <a href="https://github.com/nickstenning/honcho/pull/235">Honcho</a></li>
<li>Removal of python2.7 specific cases in <a href="https://github.com/pypa/setuptools/pull/3564">setuptools</a></li>
<li>Removal python2 support in <a href="https://github.com/msgpack/msgpack-python/pull/519">msgpack</a></li>
</ul>
<h1><a href="https://gitlab.gnome.org/GNOME/tracker-miners/">tracker-miners</a></h1>
<p><em>Data collectors for GNOME tracker</em></p>
<ul>
<li><a href="https://gitlab.gnome.org/GNOME/tracker-miners/-/merge_requests/395">Added CLI options for RSS feeds addition and deletion</a></li>
</ul>
<h1><a href="https://python-poetry.org/docs/">poetry</a></h1>
<p><em>Tool for dependency management and packaging in Python</em></p>
<ul>
<li><a href="https://github.com/python-poetry/poetry/pull/3995">Add a warning if credentials are written in lock file</a></li>
<li><a href="https://github.com/python-poetry/poetry-plugin-export/pull/93">Add private attribute to fit the implementation of the mocked class</a> (needed for previous patch)</li>
</ul>
<h1><a href="https://github.com/migraf/fhir-kindling">fhir-kindling</a></h1>
<p><em>FHIR resource and synthetic data set creation and management tool</em></p>
<ul>
<li><a href="https://github.com/migraf/fhir-kindling/pull/99">Bugfix for proxy support</a></li>
<li><a href="https://github.com/migraf/fhir-kindling/pull/105">Bugfix for custom headers support</a></li>
</ul>
<h1><a href="https://github.com/nazarewk/keyring_pass">keyring_pass</a></h1>
<p><em>Password Store (pass) backend for python's keyring</em></p>
<ul>
<li><a href="https://github.com/nazarewk/keyring_pass/pull/2">Documentation improvements</a></li>
<li><a href="https://github.com/nazarewk/keyring_pass/pull/6">Deprecation fixes</a></li>
</ul>
<h1><a href="https://github.com/samuelcolvin/dnserver">dnserver</a></h1>
<p><em>Simple development DNS server</em></p>
<ul>
<li><a href="https://github.com/samuelcolvin/dnserver/pull/2">Implemented unit tests</a></li>
<li><a href="https://github.com/samuelcolvin/dnserver/pull/9">The DNS proxy feature can be disabled</a></li>
<li><a href="https://github.com/samuelcolvin/dnserver/pull/10">Added code samples in the README</a></li>
</ul>
<h1><a href="https://github.com/pulsejet/nextcloud-oidc-login">nextcloud-oidc-login</a></h1>
<p><em>Nextcloud login via a single OpenID Connect 1.0 provider</em></p>
<ul>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/186">Updated OpenID-Connect-PHP to 0.9.8</a></li>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/187">Fixed linter errors</a></li>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/releases/tag/v2.3.3">Released v2.3.3</a></li>
</ul>Revue logicielle du Librem 5 de Purism2022-06-02T00:00:00+02:002022-06-02T00:00:00+02:00Éloi Rivard <eloi@yaal.coop>tag:yaal.coop,2022-06-02:/blog/purism-librem5-software-santas-list<p>Nous avons testé le téléphone Librem5 de Purism avec un regard vierge, et avons listé ce qu'il manque pour pouvoir utiliser le téléphone au quotidien.</p><p>Après plusieurs années d'attente, nous venons de recevoir le <a href="https://puri.sm/products/librem-5/">Librem 5</a> que nous avions commandé chez Purism.
C'est un téléphone orienté vie-privée dont les fonctionnalités notables sont :</p>
<ul>
<li>l'utilisation de <a href="https://pureos.net">PureOS</a>, une distribution GNU/Linux basée sur Debian, à la place d'Android ou iOS ;</li>
<li>l'interface graphique est <a href="https://gnome.org">GNOME</a> avec quelques modifications ;</li>
<li>la présence de boutons permettant de physiquement éteindre le Wifi, le Bluetooth, les données mobiles, le microphone ou la caméra (c'est à dire couper l'arrivée électrique).</li>
</ul>
<p>Utiliser Linux sur un téléphone mobile ouvre à de nouveaux usages qui concernent surtout des personnes technophiles, mais cela vient aussi avec son lot d'inconvénients.
Les plus notables sont que les téléphones sous Linux sont quelque chose de nouveau, et les applications ne sont simplement pas prêtes : les interface ne sont adaptées aux écrans mobiles, les interactions pratiques sur un téléphone mobile (comme le glissement du pouce) ne sont pas utilisées, et plus généralement les applications n'ont pas encore été assez testées par des utilisateurs mobiles.</p>
<p>Les développeurs de logiciels libres font de leur mieux, et un sacré travail a déjà été fait.
Cependant nous ne sommes pas encore à un point où les téléphones sous Linux peuvent être mis entre toutes les mains.
Avec notre regard vierge (c'est la première fois que nous voyons un téléphone sous Linux), nous voulons lister ici ce que nous pensons qu'il manque à l'écosystème pour fournir un bonne expérience utilisateur (du moins pour notre usage biaisé de technophiles).</p>
<p>Nous nous sommes concentrés sur les applications <a href="https://apps.gnome.org/">GNOME Core et Circle</a>, ainsi que sur les applications mobiles développées par Purism.</p>
<p>Ce que nous attendons d'un téléphone est qu'il nous permette de :</p>
<ul>
<li>passer des appels</li>
<li>recevoir et envoyer des SMS</li>
<li>recevoir et envoyer des emails</li>
<li>être utilisé comme réveil</li>
<li>gérer ses contacts</li>
<li>gérer des listes de tâches</li>
<li>être utilisé comme un appareil de géolocalisation</li>
<li>naviguer sur internet</li>
<li>jouer de la musique</li>
<li>prendre des photos</li>
<li>prendre des notes</li>
<li>afficher des documents</li>
<li>partager sa connexion internet</li>
<li>être utilisé comme lampe-torche</li>
<li>discuter avec des gens</li>
</ul>
<p>Comme produire des correctifs a encore plus de valeur que rapporter des bugs, cette liste pourrait nous servir de liste de tâches à faire si nous (ou vous ?) nous ennuyons un jour.</p>
<p>Nous avons testé le téléphone sous <a href="https://pureos.net/">PureOS byzantium</a>, et mis à jour les applications grâce à <a href="https://flathub.org">Flatpak</a> quand c'était possible afin de bénéficier des avancées de GNOME 42.</p>
<h1>Bloquants</h1>
<p>Dans cette catégorie nous listons les problèmes qui nous découragent fortement pour une utilisation quotidienne.
Cela concerne principalement du stress et de la friction dans l'expérience utilisateur, ainsi que des fonctionnalités manquantes ou inutilisables.</p>
<ul>
<li><a href="https://gitlab.gnome.org/World/Phosh/squeekboard/">Clavier virtuel</a> - <a href="https://gitlab.gnome.org/World/Phosh/squeekboard/-/issues/93">Infobulles pour les caractères accentués</a> : Le clavier devrait offrir un moyen simple d'écrire des caractères accentués.</li>
<li><a href="https://source.puri.sm/Librem5/OS-issues/">Librem5</a> - <a href="https://source.puri.sm/Librem5/OS-issues/-/issues/84">L'interface n'est pas traduite</a> : Au premier lancement la langue préférée de l'utilisateur est demandée, mais l'interface reste affichée en anglais par la suite. C'est assez simple à corriger à la main, mais c'est assez surprenant.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-clocks">Horloges</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-clocks/-/issues/1">Les réveils devraient sonner même quand l'application n'est pas lancée</a> : Une fois qu'un réveil est programmé, il devrait sonner quoi qu'il arrive, même si l'application a été fermée.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-clocks">Horloges</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-clocks/-/issues/100">Les réveils devraient sonner même quand le téléphone est en veille</a> : Une fois qu'un réveil est programmé, il devrait sonner quoi qu'il arrive, même si le téléphone est en veille.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-clocks">Horloges</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-clocks/-/issues/10">Sons de réveil personnalisés</a> : Pour le moment il n'y a pas de choix des sons à jouer.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-clocks">Clocks</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-clocks/-/issues/160">Interaction avec le réveil depuis l'écran de verrouillage</a> : À l'heure actuelle il faut déverrouiller le téléphone pour éteindre le réveil. Quand on vient d'ouvrir les yeux, c'est assez compliqué.</li>
<li><a href="https://gitlab.gnome.org/World/Phosh/squeekboard/">Clavier virtuel</a> - <a href="https://gitlab.gnome.org/World/Phosh/squeekboard/-/issues/282">Indicateurs d'interaction</a> : Lorsqu'une lettre est pressée, on devrait avoir un indicateur visuel pour indiquer de quelle lettre il s'agissait.</li>
<li><a href="https://source.puri.sm/Librem5/linux">Librem5</a> - <a href="https://source.puri.sm/Librem5/linux/-/issues/387">Lumière nocturne</a> : GNOME a une fonctionnalité de lumière nocturne qui rougit l'écran automatiquement en fonction de l'heure. Il semblerait qu'il y a des choses à faire dans le noyau pour utiliser cette fonctionnalité avec le Librem5.</li>
<li><a href="https://gitlab.gnome.org/GNOME/calls/">Appels</a> - <a href="https://gitlab.gnome.org/GNOME/calls/-/issues/456">Barre latérale de navigation alphabétique</a> : L'application manque d'un outil pour rapidement sauter à une lettre donnée de l'alphabet, ce qui est très utile lorsqu'on a des centaines de contacts.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-contacts">Contacts</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-contacts/-/issues/246">Barre latérale de navigation alphabétique</a> : L'application manque d'un outil pour rapidement sauter à une lettre donnée de l'alphabet, ce qui est très utile lorsqu'on a des centaines de contacts.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-todo/">Tâches</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-todo/-/issues/274">Interface mobile</a> : L'interface n'est pas adaptée aux mobiles, donc l'application est inutilisable pour le moment.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-weather/">Météo</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-weather/-/issues/236">Interface mobile</a> : L'application n'est pas tout à fait adaptée aux mobiles.</li>
<li><a href="https://gitlab.gnome.org/GNOME/fractal/">Fractal</a> - <a href="https://gitlab.gnome.org/GNOME/fractal/-/issues/717">Chiffrement de bout en bout</a> : À Yaal Coop nous chiffrons tous nos salons, donc le chiffrement de bout en bout est nécessaire pour que nous puissions utiliser Fractal.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-maps/">Cartes</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-maps/-/issues/264">Interface mobile</a> : Le menu latéral n'est pas adapté aux mobiles.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-maps/">Cartes</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-maps/-/issues/335">Navigation</a> : L'application peut calculer des itinéraires, mais ne fournit rien pour les suivre. On ne peut donc pas encore l'utiliser dans une voiture.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-maps/">Cartes</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-maps/-/issues/2">Appui long pour ouvrir le menu contextuel</a> : Certaines actions sont cachées derrière le menu contextuel sur bureau, qui s'ouvre avec un clic droit. Sur mobile on ne peut donc pas ouvrir ce menu. Un appui long devrait permettre d'ouvrir le menu.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-online-accounts/">Comptes en ligne</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-online-accounts/-/issues/1">Support des fournisseurs CarDAV & CalDAV</a> : Cela permettrait de se brancher à n'importe quel fournisseur de contacts, agendas, et tâches.</li>
<li><a href="https://gitlab.gnome.org/GNOME/mobile-broadband-provider-info">mobile-broadband-provider-info</a> - <a href="https://gitlab.gnome.org/GNOME/mobile-broadband-provider-info/-/merge_requests/38">Suppport de l'opérateur TéléCoop</a> : Cela permet l'utilisation des données mobiles avec <a href="https://telecoop.fr/">TéléCoop</a>. Le correctif est appliqué, mais pas encore déployé.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-software">Logiciels</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-software/-/issues/1472">L'interface n'est pas réactive</a> : Lorsque les dépôts Flatpak sont actifs, chaque action prend une éternité à s'exécuter, au point qu'il faille de temps en temps redémarrer l'application.</li>
<li><a href="https://gitlab.com/kop316/vvmplayer">Messagerie vocale</a> - <a href="https://source.puri.sm/Librem5/OS-issues/-/issues/267">Pas d'application fonctionnelle de messagerie vocale</a>: Pouvoir consulter ses messages (ou à défaut être averti qu'il en existe) nous semble indispensable pour un téléphone en 2022.</li>
</ul>
<h1>Confort</h1>
<p>Dans cette catégorie nous lisons ce qui améliorerait notre confort.
Cela concerne principalement les interfaces.</p>
<ul>
<li><a href="https://gitlab.gnome.org/World/Phosh/phosh/">Phosh</a> - <a href="https://gitlab.gnome.org/World/Phosh/phosh/-/issues/9">Changement automatique des thèmes clairs et sombres</a> : En plus de l'adaptation de la rougeur de la luminosité, passer d'un thème clair à un thème sombre le soir est très reposant pour les yeux. C'est faisable avec GNOME Shell avec l'extension <a href="https://extensions.gnome.org/extension/2236/night-theme-switcher/">Night Theme Switcher</a> par exemple.</li>
<li><a href="https://gitlab.gnome.org/World/Phosh/phosh/">Phosh</a> - <a href="https://gitlab.gnome.org/World/Phosh/phosh/-/merge_requests/934">Glisser pour ouvrir et fermer le menu</a> : Pour le moment les menus du haut et du bas ne s'ouvrent qu'en tapant, or glisser est plus naturel sur mobile. Le correctif est développé mais pas encore déployé.</li>
<li><a href="https://gitlab.gnome.org/World/Phosh/phosh/">Phosh</a> - <a href="https://gitlab.gnome.org/World/Phosh/phosh/-/issues/397">Dévérouiller automatiquement le trousseau</a> : Lorsqu'on déverouille une session, le mot de passe est demandé une seconde fois pour dévérouiller le trousseau de mots de passes.</li>
<li><a href="https://gitlab.gnome.org/World/Phosh/phosh/">Phosh</a> - <a href="https://gitlab.gnome.org/World/Phosh/phosh/-/issues/525">Garder les boutons appuyés pour changer le volume sonore</a> : Pour le moment il est nécessaire d'appuyer plusieurs fois sur les boutons de volume pour pouvoir le changer. Un appui long devrait permettre la même chose.</li>
<li><a href="https://source.puri.sm/Librem5/OS-issues">Librem5</a> - <a href="https://source.puri.sm/Librem5/OS-issues/-/issues/265">Choix de la phrase de chiffrement au premier démarrage</a> : Au premier démarrage, une phrase de chiffrement par défaut est demandée à l'utilisateur, en anglais, avec un clavier qwerty. Il nous semblerait plus accessible de demander à l'utilisateur de choisir sa phrase de déchiffrement au premier démarrage, une fois qu'il a choisi sa langue et son clavier.</li>
<li><a href="https://source.puri.sm/Librem5/OS-issues">Librem5</a> - <a href="https://source.puri.sm/Librem5/OS-issues/-/issues/265">Internationalisation de l'écran de déchiffrement du disque</a> : L'écran de déchiffrement du disque est en anglais, avec un clavier virtuel en qwerty.</li>
<li><a href="https://gitlab.gnome.org/World/Phosh/phosh/">Phosh</a> - <a href="https://gitlab.gnome.org/World/Phosh/phosh/-/issues/784">Garder l'horloge affichée lorsque le menu du haut est ouvert</a> : L'horloge est masquée lorsque le menu du haut est ouvert. Le correctif est développé mais pas encore déployé.</li>
<li><a href="https://gitlab.gnome.org/World/Phosh/phosh/">Phosh</a> - <a href="https://gitlab.gnome.org/World/Phosh/phosh/-/issues/783">Activer ou non la géolocalisation depuis le menu du haut</a> : Dans le menu du haut on peut activer ou désactiver le Wifi ou le Bluetooth, mais pas la géolocalisation.</li>
</ul>
<h1>Paillettes</h1>
<p>Dans cette catégorie nous listons toutes les autres choses que nous avons rencontrées, il s'agit surtout de petites améliorations d'interface et quelques fonctionnalités qui permettraient par exemple un usage hors-ligne.</p>
<ul>
<li><a href="https://source.puri.sm/Librem5/chatty/">SMS</a> - <a href="https://source.puri.sm/Librem5/chatty/-/issues/698">Glisser pour retourner à la liste des messages</a> : Lorsqu'un message est affiché, glisser vers la gauche devrait ramener à la liste des messages.</li>
<li><a href="https://gitlab.gnome.org/GNOME/geary/">Emails</a> - <a href="https://gitlab.gnome.org/GNOME/geary/-/issues/1377">Glisser pour retourne à la liste des messages</a> : Lorsqu'un email est affiché, glisser vers la gauche devrait ramener à la liste des messages.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-calendar">Agenda</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/702">Glisser pour naviguer entre les mois ou les semaines</a> : Glisser nous semble plus adapté aux interfaces mobiles que les flèches actuellement présentes.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-calendar">Agenda</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/838">Indicateur visuel de sélection</a> : Lorsque l'on sélectionne une période, on n'a aucun indicateur visuel de ce qui est sélectionné avant d'avoir terminé la sélection.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-calendar">Agenda</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/670">Interface mobile</a> : Agenda ne s'affiche pas trop mal sur mobile, mais certains détails manquent. Par exemple, les infobulles peuvent être plus larges que l'écran.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-clocks">Horloges</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-clocks/-/issues/238">Widget de montre analogique</a> : Taper à multiple reprises pour changer les minutes ou les heures n'est pas pratique. Afficher un cadran d'horloge analogique permettrait de faire la même chose en tapant seulement deux fois sur l'écran.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-disk-utility">Disques</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-disk-utility/-/issues/251">Interface mobile</a> : Le menu de chiffrement n'est pas adapté aux mobiles, mais l'application reste utilisable.</li>
<li><a href="https://github.com/dialect-app/dialect/">Traductions</a> - <a href="https://github.com/dialect-app/dialect/issues/254">Mauvaises performances au démarrage</a> : L'application met plusieurs secondes à se lancer.</li>
<li><a href="https://github.com/dialect-app/dialect/">Traductions</a> - <a href="https://github.com/dialect-app/dialect/issues/255">Impossible de fermer la fenêtre de préférences</a> : Il manque un bouton pour fermer la fenêtre.</li>
<li><a href="https://github.com/dialect-app/dialect/">Traductions</a> - <a href="https://github.com/dialect-app/dialect/issues/211">Traductions hors-ligne</a> : Parce que nous ne sommes pas toujours connectés.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-maps/">Cartes</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-maps/-/issues/1">Cartes hors-ligne</a> : Pour économiser des données, il serait intéressant de pré-télécharger les cartes, sur une connexion Wifi par exemple.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-dictionary">Dictionnaire</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-dictionary/-/issues/15">Dictionaire hors ligne</a> : Pour le moment une connection internet est nécessaire pour les traductions.</li>
<li><a href="https://gitlab.gnome.org/GNOME/evince/">Evince</a> - <a href="https://gitlab.gnome.org/GNOME/evince/-/issues/1256">Passer automatiquement en mode nocturne</a> : Evince permet de manuellement inverser les couleurs. Il serait pratique que le système fasse ça automatiquement en fonction du mode nocturne.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-maps">Cartes</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-maps/-/issues/452">Taper deux fois pour zoomer</a> : Sur bureau un double clic permet de zoomer. Taper deux fois sur la carte devrait le permettre aussi.</li>
<li><a href="https://gitlab.gnome.org/World/Phosh/squeekboard">Clavier virtuel</a> - <a href="https://gitlab.gnome.org/World/Phosh/squeekboard/-/merge_requests/552">Support de la disposition Bépo</a> : Cela concerne une niche, mais nous adorerions voir arriver le support de la disposition Bépo.</li>
<li><a href="https://gitlab.gnome.org/GNOME/geary">Mails</a> - <a href="https://gitlab.gnome.org/GNOME/geary/-/issues/1196">La bannière d'affichage des images ne s'adapte pas aux écrans mobiles</a> : La bannière d'affichage des images n'est pas adaptée aux écrans mobiles.</li>
<li><a href="https://gitlab.gnome.org/GNOME/epiphany">Navigateur Web</a> - <a href="https://gitlab.gnome.org/GNOME/epiphany/-/issues/1801">La bannière d'enregistrement des mots de passe ne s'adapte pas aux écrans mobiles</a> : La bannière d'enregistrement des mots de passe n'est pas adaptée aux écrans mobiles.</li>
<li><a href="https://gitlab.gnome.org/World/deja-dup">Sauvegardes</a> - <a href="https://gitlab.gnome.org/World/deja-dup/-/issues/310">Interface mobile</a> : L'écran d'accueil n'est pas adapté aux mobiles.</li>
<li><a href="https://source.puri.sm/Librem5/OS-issues">Librem5</a> - <a href="https://source.puri.sm/Librem5/OS-issues/-/issues/138">Compteur d'utilisation des données mobiles</a> : Cela s'avérerait pratique pour les gens qui ont souscrit à des forfaits mobiles aux données limitées.</li>
<li><a href="https://github.com/lakoliu/Furtherance">Furtherance</a> - <a href="https://github.com/lakoliu/Furtherance/issues/52">La page d'accueil n'est pas assez adaptées aux écrans mobiles</a> : La traduction française de l'application pose des soucis d'affichage sur mobile.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-notes/">Notes</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-notes/-/issues/134">Interface mobile</a> : Notes n'est utilisable que sur le bureau.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-control-center">Paramètres</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/231#note_1469421">La fenêtre Bluetooth n'est pas assez adaptée aux écrans mobiles</a> : Comme d'habitude, les traduction françaises des applications font déborder le contenu de l'écran.</li>
</ul>Purism Librem 5 software review : our list to Santa2022-06-02T00:00:00+02:002022-06-02T00:00:00+02:00Éloi Rivard <eloi@yaal.coop>tag:yaal.coop,2022-06-02:/blog/en/purism-librem5-software-santas-list<p>We tested the Purism Librem5 phone with fresh eyes, and listed what is missing before we can use the phone as a daily driver.</p><p>After several years of waiting, we just received our <a href="https://puri.sm/products/librem-5/">Librem 5 phone</a> from Purism.
The Librem 5 phone is a privacy-oriented phone which notable features are:</p>
<ul>
<li>it uses <a href="https://pureos.net">PureOS</a>, a GNU/Linux distribution based on Debian, instead of Android or iOS;</li>
<li>the interface is based on <a href="https://gnome.org">GNOME</a> with a few modifications;</li>
<li>it has kill switches to physically disable wifi, bluetooth, cellular data, camera and microphone.</li>
</ul>
<p>Running a Linux on a cellular phone enables new uses, especially for tech savvy, but it comes with its lot of drawbacks.
The main notable ones is that Linux phones is a brand new field, and a lot of apps are simply 'not ready'.
Either because their UI is not adaptive, because they have not been adapted to mobile user interactions (swiping and other gestures), or just because they have not been tested enough by users, so some actions feels convoluted.</p>
<p>FOSS developers do their best, and a whole lot of great work has been done so far.
However we are not yet at a point where Linux phones can be put in the hands of a larger audience.
With our fresh eyes of new Linux mobile users, we want to list here the main things that we felt were really missing to provide a good user experience (at least for our biased geeky use).
We focused on <a href="https://apps.gnome.org/">GNOME Core and Circle apps</a>, and mobile/Librem5 specific apps developped by Purism.
What we expect from a phone is to:</p>
<ul>
<li>place calls</li>
<li>receive and send SMS</li>
<li>receive and send emails</li>
<li>be used as an alarm clock</li>
<li>manage contacts</li>
<li>manage tasks</li>
<li>be used as a geolocation navigation device</li>
<li>browse the internet</li>
<li>play music</li>
<li>take photos</li>
<li>take notes</li>
<li>display documents</li>
<li>share internet connection</li>
<li>be used as a torchlight</li>
<li>discuss with people</li>
</ul>
<p>As patching has even more value than reporting, this list could be used by us (or you?) as a to-do list for some day if we get bored.</p>
<p>We have tested the phone running <a href="https://pureos.net/">PureOS byzantium</a>, and we updated all the apps through <a href="https://flathub.org">Flatpak</a> when possible so we could get the latest GNOME 42 fixes.</p>
<h1>Blockers</h1>
<p>In this category we put the issues we feel are very discouraging for a daily use.
This mainly concerns UX friction and stress, and missing or broken features.</p>
<ul>
<li><a href="https://gitlab.gnome.org/World/Phosh/squeekboard/">Squeekboard</a> - <a href="https://gitlab.gnome.org/World/Phosh/squeekboard/-/issues/93">Alternate characters popovers</a>: We Europeans use a lot of diacritics, the keyboard should offer us a way easily write any common accentuated character.</li>
<li><a href="https://source.puri.sm/Librem5/OS-issues/">Librem5</a> - <a href="https://source.puri.sm/Librem5/OS-issues/-/issues/84">Translation have to be forced</a>: At first launch, the welcome panel asks the user for their language, but this action is uneffective and the system is displayed in English after that. This is easy to fix with a command-line, but surprising for a first-launch.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-clocks">Clocks</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-clocks/-/issues/1">Alarms should ring even when the application is not launched</a>: If an alarm has been set, it should ring on time, no matter what. Having to launch the application to get the alarm ring is unexpected.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-clocks">Clocks</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-clocks/-/issues/100">Alarms should wake the system up</a>: If an alarm has been set, it should ring on time, no matter what. Alarms should wake the system up if needed.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-clocks">Clocks</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-clocks/-/issues/10">Custom alarm sound</a>: At the moment, the only alarm sound is the default one.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-clocks">Clocks</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-clocks/-/issues/160">Interact with an alarm from the lock screen</a>: Currently it is needed to enter the PIN code before we can stop the alarms. When you wake up, this is harsh.</li>
<li><a href="https://gitlab.gnome.org/World/Phosh/squeekboard/">Squeekboard</a> - <a href="https://gitlab.gnome.org/World/Phosh/squeekboard/-/issues/282">Input indicator</a>: When a key is tapped, users should have a visual indication of which key is actually pressed.</li>
<li><a href="https://source.puri.sm/Librem5/linux">Librem5</a> - <a href="https://source.puri.sm/Librem5/linux/-/issues/387">Night light support</a>: GNOME provide a night light feature that reddish the screen automatically depending on the hour. It seems there are some kernel thing to do to enable this. Without this, watching to the screen at night just kill your eyes.</li>
<li><a href="https://gitlab.gnome.org/GNOME/calls/">Calls</a> - <a href="https://gitlab.gnome.org/GNOME/calls/-/issues/456">Alphabet side bar</a>: The application lacks an alphabet side bar to quickly jump to some letters in the contact list. With thousands of contacts this would become more than useful.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-contacts">Contacts</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-contacts/-/issues/246">Alphabet side bar</a>: The application lacks an alphabet side bar to quickly jump to some letters in the contact list. With thousands of contacts this would become more than useful.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-todo/">To-Do</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-todo/-/issues/274">Adaptive UI</a>: The UI is not adaptive at the moment, so To-Do is not usable.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-weather/">Weather</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-weather/-/issues/236">Adaptive UI</a>: The application is not adapted to mobile UI.</li>
<li><a href="https://gitlab.gnome.org/GNOME/fractal/">Fractal</a> - <a href="https://gitlab.gnome.org/GNOME/fractal/-/issues/717">End-to-end encryption</a>: At Yaal Coop we encrypt our conversations, so E2EE in Fractal is a blocker to us.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-maps/">Maps</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-maps/-/issues/264">Adaptive UI</a>: The side-menu is not usable on a Librem 5 at this point.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-maps/">Maps</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-maps/-/issues/335">Navigation view</a>: The application can calculate itineraries, but do not provide anything to follow the itineraries. Is is not usable in a car yet.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-maps/">Maps</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-maps/-/issues/2">Long-press to open the contextual menu</a>: Some actions are only accessible via right click on desktop, so on mobile they just cannot be done. A long press on the map should have the same effect as a right click.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-online-accounts/">Online Accounts</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-online-accounts/-/issues/1">CarDAV & CalDAV provider support</a>: This would allow to plug any contact, calendar and todo list provider to the system.</li>
<li><a href="https://gitlab.gnome.org/GNOME/mobile-broadband-provider-info">mobile-broadband-provider-info</a> - <a href="https://gitlab.gnome.org/GNOME/mobile-broadband-provider-info/-/merge_requests/38">TeleCoop support</a>: This allows to use data with <a href="https://telecoop.fr/">TeleCoop</a>. The patch is applied but not yet deployed.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-software">Software</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-software/-/issues/1472">UI is sluggish</a>: When Flatpak in enabled, any actions takes decades to achieve, to the point that it is sometimes needed to restart the app.</li>
<li><a href="https://gitlab.com/kop316/vvmplayer">Voicemail</a> - <a href="https://source.puri.sm/Librem5/OS-issues/-/issues/267">There is no working voicemail app at the moment</a>: Having the ability to easilly listen to voicemails is a must-have on a 2022 phone.</li>
</ul>
<h1>Comfort</h1>
<p>In this category we put the issues that would improve our comfort.
This mainly concern mobile UX improvements.</p>
<ul>
<li><a href="https://gitlab.gnome.org/World/Phosh/phosh/">Phosh</a> - <a href="https://gitlab.gnome.org/World/Phosh/phosh/-/issues/9">Automatic light and dark theme switch</a>: Along with the screen warmness adaptation, switching from a light to a dark theme when the night comes is a bliss for the eyes. This is achievable with GNOME Shell with the <a href="https://extensions.gnome.org/extension/2236/night-theme-switcher/">Night Theme Switcher</a> extension for instance.</li>
<li><a href="https://gitlab.gnome.org/World/Phosh/phosh/">Phosh</a> - <a href="https://gitlab.gnome.org/World/Phosh/phosh/-/merge_requests/934">Swipe to open and close the menu</a>: As of today, the application menu and the top menu can only be opened by tapping. However swiping to open the menu feels more natural on mobile. This have been implemented but not yet deployed.</li>
<li><a href="https://gitlab.gnome.org/World/Phosh/phosh/">Phosh</a> - <a href="https://gitlab.gnome.org/World/Phosh/phosh/-/issues/397">Automatically unlock the keyring</a>: When opening a new session with a PIN, it is then asked a second time to unlock the GNOME keyring. This feels redundant.</li>
<li><a href="https://gitlab.gnome.org/World/Phosh/phosh/">Phosh</a> - <a href="https://gitlab.gnome.org/World/Phosh/phosh/-/issues/525">Hold the volume buttons to change volume</a>: Currently, we have to press the buttons multiple times in order to change the volume.</li>
<li><a href="https://source.puri.sm/Librem5/OS-issues">Librem5</a> - <a href="https://source.puri.sm/Librem5/OS-issues/-/issues/265">Ask the encryption passphrase at first boot</a>: At first boot, a (default) passphrase is asked to decrypt the disk, in English, with a qwerty keyboard. It would be friendlier to not ask it a the first boot and let the user choose it.</li>
<li><a href="https://source.puri.sm/Librem5/OS-issues">Librem5</a> - <a href="https://source.puri.sm/Librem5/OS-issues/-/issues/265">Disk decryption screen l10n</a>: The disk decryption screen is in English, with a qwerty keyboard, so it is not adapted to other languages.</li>
<li><a href="https://gitlab.gnome.org/World/Phosh/phosh/">Phosh</a> - <a href="https://gitlab.gnome.org/World/Phosh/phosh/-/issues/784">Keep the time displayed when the top menu is opened</a>: The time is hidden when the top menu is opened. Time is still an interesting information to display when the menu is opened, and without this the top bar appears strangely empty. This seems to be fixed but not yet deployed.</li>
<li><a href="https://gitlab.gnome.org/World/Phosh/phosh/">Phosh</a> - <a href="https://gitlab.gnome.org/World/Phosh/phosh/-/issues/783">Toggle geolocation from the top menu</a>: In the top menu there are button to toggle wifi or bluetooth, but not to toggle geolocation.</li>
</ul>
<h1>Sparkles</h1>
<p>In this category we put everything else that we met during our test, from nice-to-have features to slight mobile UX improvements:</p>
<ul>
<li><a href="https://source.puri.sm/Librem5/chatty/">Chatty</a> - <a href="https://source.puri.sm/Librem5/chatty/-/issues/698">Swipe to return to the message list</a>: When a message is displayed, there is an arrow button that allows to go back to the message list, but the more natural action on mobile would be to swipe left.</li>
<li><a href="https://gitlab.gnome.org/GNOME/geary/">Geary</a> - <a href="https://gitlab.gnome.org/GNOME/geary/-/issues/1377">Swipe to return to the message list</a>: When a message is displayed, there is an arrow button that allows to go back to the message list, but the more natural action on mobile would be to swipe left.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-calendar">Calendar</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/702">Swipe to navigate between weeks or months</a>: Swipe would be more adapted to mobile screens than the current arrows.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-calendar">Calendar</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/838">Selection visual indicator</a>: During a selection on touchscreen, users have no feedback until their finger is released.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-calendar">Calendar</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/670">Adaptive UI</a>: Calendar displays good enough on mobile, but some details are missing. For instance, the tooltips can be larger than the screen.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-clocks">Clocks</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-clocks/-/issues/238">Analog watch widget</a>: Tapping multiple times on the screen to select hours and minutes is cumbersome. An analog watch widget could achieve the action in on two taps.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-disk-utility">Disks</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-disk-utility/-/issues/251">Adaptive UI</a>: The encryption menu is not adaptive, but this is still usable.</li>
<li><a href="https://github.com/dialect-app/dialect/">Dialect</a> - <a href="https://github.com/dialect-app/dialect/issues/254">Slow performances at startup</a>: The applications takes several seconds to start.</li>
<li><a href="https://github.com/dialect-app/dialect/">Dialect</a> - <a href="https://github.com/dialect-app/dialect/issues/255">Cannot close the preferences dialog</a>: It has a close button on GNOME Shell, but not on phosh.</li>
<li><a href="https://github.com/dialect-app/dialect/">Dialect</a> - <a href="https://github.com/dialect-app/dialect/issues/211">Offline translations</a>: Because we are not always connected.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-maps/">Maps</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-maps/-/issues/1">Offline maps</a>: To save mobile data, it would be better to pre-download maps and routes on a Wifi connection for instance.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-dictionary">Dictionary</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-dictionary/-/issues/15">Offline dictionary</a>: Currently, an internet connection is needed to use the app.</li>
<li><a href="https://gitlab.gnome.org/GNOME/evince/">Evince</a> - <a href="https://gitlab.gnome.org/GNOME/evince/-/issues/1256">Automatically switch to night mode</a>: Evince allows to manually invert the background color at night. This should be done automatically depending on the system dark mode.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-maps">Maps</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-maps/-/issues/452">Double-tap to zoom</a>: On desktop double-clicking zooms, as should do double-tapping on touchscreen.</li>
<li><a href="https://gitlab.gnome.org/World/Phosh/squeekboard">Squeekboard</a> - <a href="https://gitlab.gnome.org/World/Phosh/squeekboard/-/merge_requests/552">Bépo support</a>: This one does only concerns a few nerds, but bépo (a French dvorak layout) support would be awesome.</li>
<li><a href="https://gitlab.gnome.org/GNOME/geary">Geary</a> - <a href="https://gitlab.gnome.org/GNOME/geary/-/issues/1196">Image banner is not adaptive</a>: The image display banner does not display well on mobile.</li>
<li><a href="https://gitlab.gnome.org/GNOME/epiphany">Web</a> - <a href="https://gitlab.gnome.org/GNOME/epiphany/-/issues/1801">Password banner is not adaptive</a>: The password banner does not display well on mobile.</li>
<li><a href="https://gitlab.gnome.org/World/deja-dup">Backups</a> - <a href="https://gitlab.gnome.org/World/deja-dup/-/issues/310">Adaptive UI</a>: The home screen does not display well on mobile.</li>
<li><a href="https://source.puri.sm/Librem5/OS-issues">Librem5</a> - <a href="https://source.puri.sm/Librem5/OS-issues/-/issues/138">Mobile data traffic counter</a>: This would be a useful utility when data is limited.</li>
<li><a href="https://github.com/lakoliu/Furtherance">Furtherance</a> - <a href="https://github.com/lakoliu/Furtherance/issues/52">Home screen is not adaptive enough</a>: The French translation of the application provokes UX adaptivity issues.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-notes/">Notes</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-notes/-/issues/134">Adaptive UI</a>: Notes is not yet adaptive.</li>
<li><a href="https://gitlab.gnome.org/GNOME/gnome-control-center">Settings</a> - <a href="https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/231#note_1469421">Bluetooth screen is not adaptive enough</a>: As usual, some French content makes the panel too large.</li>
</ul>Dernières contributions à des logiciels libres par l'équipe Yaal Coop (début 2022)2022-05-12T00:00:00+02:002022-05-12T00:00:00+02:00Éloi Rivard <eloi@yaal.coop>tag:yaal.coop,2022-05-12:/blog/dernieres-contributions-logiciels-libres-debut-2022<p>Les dernières contributions à des logiciels libres par l'équipe Yaal Coop début 2022.</p><p>Ces derniers mois nous avons principalement contribué à <a href="https://gitlab.com/yaal/canaille">canaille</a>, le serveur d'identité que nous développons,
ainsi que le menu d'autocomplétion <a href="https://github.com/pstanoev/simple-svelte-autocomplete">simple-svelte-autocomplete</a> et le greffon
<a href="https://github.com/pulsejet/nextcloud-oidc-login">nextcloud-oidc-login</a> qui permet à nextcloud de se connecter à des serveurs d'identité.</p>
<h1><a href="https://github.com/wtforms/wtforms">wtforms</a></h1>
<p><em>Bibliothèque python de gestion de formulaires web</em></p>
<ul>
<li><a href="https://github.com/wtforms/wtforms/pull/721">Les champs de date peuvent manipuler plusieurs formats de date différents</a></li>
<li><a href="https://github.com/wtforms/wtforms/pull/722">Fin du support de python 3.6</a></li>
</ul>
<h1><a href="https://gitlab.com/yaal/canaille">canaille</a></h1>
<p><em>Serveur OpenID Connect simpliste, basé sur OpenLDAP</em></p>
<ul>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/30">Délai d'expiration pour les liens d'invitation</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/31">Les utilisateurs invités peuvent choisir leur identifiant</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/33">Correction au lancement de la démo sur debian</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/34">Le nom de famille est nécessaire à l'inscription pour les inetOrgPerson</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/35">Début de séparation de la partie LDAP</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/36">Orthographe</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/37">Augmentation de la longueur maximale des identifiants des jetons d'accès</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/38">Les jetons d'accès sont des JWT</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/39">Correction graphique sur le menu administrateur</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/40">Correction d'une faute de frappe dans la configuration</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/41">Correction d'une erreur sur les groupes dans les invitations</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/42">Correction de problèmes d'empaquetage</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/43">Correction d'une erreur sur les utilisateurs sans nom de famille</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/45">Dockerisation de la démo</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/46">Ajout d'une option pour désactiver la réinitialisation de mot de passe</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/47">Ajout d'une option pour désactiver l'édition de profil</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/48">Support d'authlib 1.0.0</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/49">Instructions pour la génération des catalogues de traduction</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/50">Documentation</a></li>
</ul>
<h1><a href="https://github.com/Pylons/webtest">webtest</a></h1>
<p><em>Bibliothèque de tests unitaires pour applications web</em></p>
<ul>
<li><a href="https://github.com/Pylons/webtest/pull/241">Fin du support pour python 3.6, début du support pour python 3.10</a></li>
<li><a href="https://github.com/Pylons/webtest/pull/242">Support des balises HTML 'input', de type 'file', avec l'attribut 'multiple'</a></li>
</ul>
<h1><a href="https://github.com/nextcloud/server">nextcloud</a></h1>
<p><em>Logiciel de partage et de synchronisation de fichiers</em></p>
<ul>
<li><a href="https://github.com/nextcloud/server/issues/31301">Rapport de bug sur les partages fédérés</a></li>
</ul>
<h1><a href="https://github.com/pulsejet/nextcloud-oidc-login">nextcloud-oidc-login</a></h1>
<p><em>Plugin OpenID Connect pour nextcloud</em></p>
<ul>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/150">Formattage du code</a></li>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/159">Authentification avec les jetons utilisateurs</a></li>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/160">Authentification par mot de passe sur les vieilles routes</a></li>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/161">De meilleurs messages d'erreur en cas de problème</a></li>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/165">Support des avatars</a></li>
</ul>
<h1><a href="https://github.com/ansible/ansible">ansible</a></h1>
<p><em>Outil d'automatisation des déploiements</em></p>
<ul>
<li><a href="https://github.com/ansible/ansible/pull/76378">Créations et suppressions de chaînes par le module iptables</a></li>
</ul>
<h1><a href="https://github.com/pstanoev/simple-svelte-autocomplete">simple-svelte-autocomplete</a></h1>
<p><em>Composant svelte de suggestion d'éléments dans une liste déroulante</em></p>
<ul>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/127">Arrêter de nettoyer les requêtes localement lorsqu'elle doivent être traîtées à distance</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/147">Paramètre maxItemsToShowInList pour la fonction searchFunc</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/156">Ajout de tests unitaires</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/157">Réparation du comportement async</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/158">Correction d'un bug lors du rechargement des pages sur le site de démo</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/162">Refonte graphique du site de démo</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/163/">Encarts d'en-tête et de pied du menu déroulant personalisables</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/164">Correction d'un bug à l'initialisation avec une valeur pour le champ de saisie</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/165/">Correction concernant l'affichage de la croix de nettoyage de la saisie</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/166">Nettoyage des tests</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/168">Réorganisation des items par glisser-déposer en mode sélection multiple</a></li>
</ul>
<h1><a href="https://github.com/migraf/fhir-kindling">fhir-kindling</a></h1>
<p><em>Brique de connexion à des serveurs de ressources FHIR</em></p>
<ul>
<li><a href="https://github.com/migraf/fhir-kindling/pull/51">Documentation de la classe QueryResponse</a></li>
<li><a href="https://github.com/migraf/fhir-kindling/pull/61">Suppression d'un print inutile</a></li>
<li><a href="https://github.com/migraf/fhir-kindling/pull/63">Correction d'un warning en python 3.10</a></li>
</ul>
<h1><a href="https://www.debian.org/">Debian</a></h1>
<ul>
<li>Coloration syntaxique de code source dans le manuel <a href="https://www.debian.org/doc/debian-policy/index.html">Debian Policy</a> : <a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=999566">signalement incluant le .diff à appliquer</a></li>
</ul>Last FOSS contributions from the Yaal Coop team (winter 2022)2022-05-12T00:00:00+02:002022-05-12T00:00:00+02:00Éloi Rivard <eloi@yaal.coop>tag:yaal.coop,2022-05-12:/blog/en/dernieres-contributions-logiciels-libres-debut-2022<p>The last free and open-source software contributions from the Yaal Coop team during winter 2022.</p><p>Those last months we mainly worked on <a href="https://gitlab.com/yaal/canaille">canaille</a>, our identity server,
as well as the autocompletion menu <a href="https://github.com/pstanoev/simple-svelte-autocomplete">simple-svelte-autocomplete</a> and
<a href="https://github.com/pulsejet/nextcloud-oidc-login">nextcloud-oidc-login</a> that allows nextcloud to connect to identity servers.</p>
<h1><a href="https://github.com/wtforms/wtforms">wtforms</a></h1>
<p><em>A flexible forms validation and rendering library for Python.</em></p>
<ul>
<li><a href="https://github.com/wtforms/wtforms/pull/721">Date related field can handle several formats</a></li>
<li><a href="https://github.com/wtforms/wtforms/pull/722">Stop support python 3.6</a></li>
</ul>
<h1><a href="https://gitlab.com/yaal/canaille">canaille</a></h1>
<p><em>Simplistic OpenID Connect provider over OpenLDAP</em></p>
<ul>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/30">invitations expire after 48h</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/31">Invited users can choose their uid</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/33">find slapadd and ldapadd binaries on debian 11</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/34">surname is required when the user is created or updated</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/35">start the separation of the ldap parts</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/36">Spellcheck a word in french translatio</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/37">AuthorizationCode and Token have a new id parameter</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/38">JWT access token</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/39">Fix: better consistency of admin dropdown menu</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/40">Fix: spellcheck configuration key</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/41">fix: groups are saved even when invited user does not have read permission on groups</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/42">Fixed some packaging issues</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/43">fix cn/dn when user has no given name</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/45">make demo entirely runnable with docker-compose</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/46">Added an option to disable password recovery</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/47">Added an option to disable self edition</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/48">authlib 1.0.0</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/49">Generate mo files</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/50">more documentation to help contributors</a></li>
</ul>
<h1><a href="https://github.com/Pylons/webtest">webtest</a></h1>
<p><em>Wraps any WSGI application and makes it easy to send test requests to that application, without starting up an HTTP server.</em></p>
<ul>
<li><a href="https://github.com/Pylons/webtest/pull/241">stop python3.6 support</a></li>
<li><a href="https://github.com/Pylons/webtest/pull/242">Support for multiple file input</a></li>
</ul>
<h1><a href="https://github.com/nextcloud/server">nextcloud</a></h1>
<p><em>Nextcloud server, a safe home for all your data</em></p>
<ul>
<li><a href="https://github.com/nextcloud/server/issues/31301">Bug report: Accept/reject remote share action from "pending shares" view does not work</a></li>
</ul>
<h1><a href="https://github.com/pulsejet/nextcloud-oidc-login">nextcloud-oidc-login</a></h1>
<p><em>Nextcloud login via a single OpenID Connect 1.0 provider</em></p>
<ul>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/150">Use php-cs-fixer to format the code style</a></li>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/159">webdav Basic auth: login with user token</a></li>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/160">webdav endpoint v1 BasicAuthentication</a></li>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/161">BasicAuth: Raise an exception when the token is null or invalid</a></li>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/165">Update user avatars on login</a></li>
</ul>
<h1><a href="https://github.com/ansible/ansible">ansible</a></h1>
<p><em>simple IT automation platform</em></p>
<ul>
<li><a href="https://github.com/ansible/ansible/pull/76378">iptables: chains creation and deletion</a></li>
</ul>
<h1><a href="https://github.com/pstanoev/simple-svelte-autocomplete">simple-svelte-autocomplete</a></h1>
<p><em>Simple Autocomplete / typeahead component for Svelte</em></p>
<ul>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/127">skip client side input text filtering when request are done serverside</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/147">Pass maxItemsToShowInList to searchFunc</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/156">Unit tests</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/157">Fixed async behavior</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/158">user HTML anchors to keep the demo tabs on reloading</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/162">demo: use bulma messages</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/163/">Added dropdown header and footer slots</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/164">Initialization with the 'text' parameter</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/165/">Fixed multiple selection clear cross</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/166">Cleaned up directories</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/168">multiple selection reordering with drag and drop</a></li>
</ul>
<h1><a href="https://github.com/migraf/fhir-kindling">fhir-kindling</a></h1>
<p><em>FHIR resource and synthetic data set creation and management tool</em></p>
<ul>
<li><a href="https://github.com/migraf/fhir-kindling/pull/51">Document QueryResponse</a></li>
<li><a href="https://github.com/migraf/fhir-kindling/pull/61">removed a loud 'print'</a></li>
<li><a href="https://github.com/migraf/fhir-kindling/pull/63">Fixed a python warning</a></li>
</ul>
<h1><a href="https://www.debian.org/">Debian</a></h1>
<ul>
<li><a href="https://www.debian.org/doc/debian-policy/index.html">Debian Policy</a> syntax highlighting : <a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=999566">bug report indication which patch to apply</a></li>
</ul>Visite aux JDLL 20222022-04-11T00:00:00+02:002022-04-11T00:00:00+02:00Stéphane Blondon <stephane@yaal.coop>tag:yaal.coop,2022-04-11:/blog/jdll-de-lyon<p>Un (bref) résumé des Journées Du Logiciel Libre 2022 de Lyon</p><p>Les 2 et 3 avril 2022, plusieurs associé·es de Yaal Coop étaient présents aux 23ièmes <a href="https://www.jdll.org/">Journées du Logiciel Libre</a> qui se déroulaient à Lyon. C'était l'occasion d'approfondir des sujets qui nous intéressaient, de faire quelques découvertes ainsi que de rencontrer des acteur·ices du Libre en personne.</p>
<p>Comme nous construisons un service d'hébergement nommé <a href="https://nubla.fr/">nubla</a>, assister aux présentations sur le collectif des <a href="https://www.chatons.org/">CHATONS</a> (Collectif des Hébergeurs Alternatifs, Transparents, Ouverts, Neutres et Solidaires) et sur <a href="https://zourit.net/">zourit</a> ont été un moyen pour nous de confirmer (ou d'infirmer) nos choix sur le fonctionnement du service. Découvrir cette communauté donne du coeur à l'ouvrage !</p>
<p>Cela fait aussi plaisir de constater l'intérêt pour le mouvement coopératif, comme ce fut le cas lors des discussions animées de la session d'échange "Gouvernance du libre/Gouvernance des coopératives : quels points communs ?". Tout un programme... Qui nous conforte dans notre choix de <a href="https://yaal.coop/blog/de-yaal-a-yaal-coop">transformer Yaal en SCIC</a> fin 2020. Un choix loin d'être unique comme l'a encore démontrée cette discussion organisée par d'autres coopératives du numérique : <a href="https://hashbang.fr/">Hashbang</a>, <a href="https://tadaa.fr/">Tadaa</a> et <a href="https://www.probesys.com/">Probesys</a>.</p>
<p>D'un point de vue moins politique (quoi que...) à Yaal Coop nous avons un usage quotidien de claviers plus ou moins originaux (TypeMatrix, Truly Ergonomic, ErgoDox) et, pour certains, de personnalisations de disposition de clavier <a href="https://bepo.fr">bépo</a>. De fait, la présentation sur la fabrication personnalisée de clavier et sur la disposition récente tentant d'avoir une disposition agréable pour écrire en français, en anglais et pour programmer - <a href="https://ergol.org/">ergoL</a> -, ont piqué notre curiosité.</p>
<p><img alt="Tellement de type de claviers dans la zone des associations !" src="/media/blog/articles/jdll-2022-collection-de-claviers.webp" title="Tellement de type de claviers dans la zone des associations !"></p>
<p>Cette conférence était l'occasion de parler avec des passionnés mais aussi celle de recroiser et discuter avec des personnes déjà rencontrées lors d'autres conférences (en l'occurence <a href="https://www.debconf.org/">DebConf</a> et <a href="https://www.pycon.fr">PyconFr</a>).</p>
<p>Le village associatif en particulier a été pour nous un lieu d'échanges, notamment avec Framasoft sur les avantages et les différences des formats coopératifs et associatifs.</p>
<p>Du coup, encore merci à tous les organisateurs et présentatrices, et vivement la prochaine ?</p>Retour d'expérience concernant l'usage d'AlpineLinux comme conteneur2022-02-15T00:00:00+01:002022-02-15T00:00:00+01:00Stéphane Blondon <stephane@yaal.coop>tag:yaal.coop,2022-02-15:/blog/retour-d-experience-sur-alpine-linux-comme-conteneur<p>La distribution AlpineLinux est célèbre pour la taille minuscule mais ce n'est pas sa seule spécificité. Les autres choix d'AlpineLinux ont eu des effets auxquels nous ne nous attendions pas.</p><p>AlpineLinux est une distribution souvent utilisée pour des conteneurs (lxc/lxd, Docker, etc.) car la taille des images d'AlpineLinux est minuscule (seulement 6 Mo !).
C'est un avantage réel, surtout si on a beaucoup de conteneurs. Si cette performance est remarquable, il est cependant nécessaire de prendre en compte l'ensemble des choix réalisés par la distribution.
Sur le <a href="https://www.alpinelinux.org/">site web</a>, il est clairement indiqué « Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busybox. ». Voyons quelles contraintes cela apporte :</p>
<h1>Les performances de musl</h1>
<p>AlpineLinux a fait le choix de musl comme bibliothèque C, contrairement à la plupart des distributions Linux qui utilisent la libc GNU. Il peut y avoir des problèmes de compilation ou d'exécution de logiciel qui ont été testées avec la glibc et pas avec musl mais nous n'avons jamais rencontré ce problème.</p>
<p>À l'exécution, musl est plus <a href="https://andygrove.io/2020/05/why-musl-extremely-slow/">lente</a> que la glibc. Par exemple, une compilation de cpython est <a href="https://lists.alpinelinux.org/~alpine/users/%3C6df8863e77b970b466dbfc9a3a5c2bcec3199f48.camel%40aquilenet.fr%3E">deux fois plus lente</a> qu'avec la glibc. C'est un problème connu des mainteneurs qui pourrait être résolu dans le futur en changeant d'allocateur mémoire. <a href="https://github.com/microsoft/mimalloc#performance">Mimalloc</a> semble être une bonne piste à l'avenir, mais pour l'instant, il faut vivre avec ce niveau de performance.</p>
<h1>L'environnement espace utilisateur</h1>
<h2>busybox</h2>
<p>AlpineLinux utilise <a href="https://www.busybox.net/">busybox</a> pour les outils Unix de base. Busybox est un projet éprouvé et utilisé depuis de nombreuses années dans l'embarqué.</p>
<p>Ce choix permet de minimiser la taille des outils embarqués par Alpine.</p>
<p>Mais, si le développement de script shell est réalisé sur un système disposant des outils GNU, il est possible qu'il y ait des erreurs lors de son exécution sur un système Alpine car le comportement n'est pas exactement le même : par exemple, il peut manquer des paramètres à certains outils (en particulier lorsque ce sont des extensions GNU à la norme Unix). Dans ce cas, il faut modifier le code ou installer un paquet pour embarquer l'outil GNU que l'on souhaite.</p>
<h2>systemd</h2>
<p>AlpineLinux utilise les scripts de démarrage classique Unix (dans <code>/etc/init.d/</code>) et non systemd. Selon les besoins et préférences de chacun, cela peut être une qualité ou un défaut.</p>
<h1>Les mises-à-jour</h1>
<p>Mettre à jour une version mineure d'alpine à l'autre (par exemple de 3.14 à 3.15) est très vite réalisé en quelques minutes. Comparé à la migration d'une version stable de Debian à la suivante, c'est étonnant et confortable puiqu'il n'y a pas de messages bloquants affichant les Changelog de changement incompatible ou des différences de fichiers de configuration entre la version du maitenant et celle du système en cours. L'inconvénient étant que les services peuvent être non fonctionnels ensuite...</p>
<p>Ce comportement n'est pas forcément un problème si l'usage est celui de conteneurs Docker qui sont supprimés et reconstruits à chaque modification. Dans le cas d'un usage classique avec des mises-à-jour, ça l'est beaucoup plus. L'usage d'instantanés (snapshot) peut permettre de limiter le problème : une fois la mise-à-jour faite, si des problèmes sont présents, il faut restaurer l'instantané fait avant la mise-à-jour puis chercher quel est le problème sur la version mise-à-jour.</p>
<h1>Conclusion</h1>
<p>Ces différents défauts ne sont pas forcément rédhibitoires selon l'usage fait d'AlpineLinux (par exemple pour des environnements docker locaux jetables). Il semble cependant important de les prendre en compte et se demander s'ils sont bloquants ou non avant de décider d'utiliser AlpineLinux selon l'usage prévu.</p>
<p>Après avoir utilisé AlpineLinux pour nos conteneurs lxc, nous avons conclu que l'utilisation de Debian était plus adapté à nos besoins dans ce cadre. Les prochains conteneurs seront donc basé sur Debian et les anciens migrés au fur et à mesure.</p>Dernières contributions à des logiciels libres par l'équipe Yaal Coop (fin 2021)2021-12-17T00:00:00+01:002021-12-17T00:00:00+01:00Éloi Rivard <eloi@yaal.coop>tag:yaal.coop,2021-12-17:/blog/dernieres-contributions-logiciels-libres-fin-2021<p>Les dernières contributions à des logiciels libres par l'équipe Yaal Coop fin 2021.</p><h1><a href="https://github.com/yiisoft/yii2-authclient">yii2-authclient</a></h1>
<p><em>Brique de connexion OpenID Connect, notamment utilisée par <a href="https://www.humhub.com/">humhub</a></em></p>
<ul>
<li><a href="https://github.com/yiisoft/yii2-authclient/pull/334">Correctif sur la lecture du champ « aud » des ID tokens</a></li>
<li><a href="https://github.com/yiisoft/yii2-authclient/pull/333">Correctif concernant l'attribut « nonce » dans l'identification</a></li>
</ul>
<h1><a href="https://github.com/mstilkerich/rcmcarddav">rcmcarddav</a></h1>
<p><em>Greffon de synchronisation des contacts CardDAV pour l'interface web de gestion des mails <a href="https://roundcube.net/">Roundcube</a></em></p>
<ul>
<li><a href="https://github.com/mstilkerich/rcmcarddav/pull/355">Traduction française</a></li>
</ul>
<h1><a href="https://gitlab.com/yaal/canaille">canaille</a></h1>
<p><em>Serveur OpenID Connect simpliste, basé sur OpenLDAP</em></p>
<ul>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/8">Implémentation d'une commande 'check' qui vérifie la validité du fichier de configuration</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/9">Fonctionnalité de choix des audiences pour les tokens</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/10">Correction d'une erreur sur les droits d'introspection des tokens</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/11">Fonctionnalité de pré-autorisations des clients</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/12">La commande 'check' vérifie les permissions de l'utilisateur LDAP</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/13">Les consentements sont mis à jours lorsqu'un 'scope' OpenID Connect plus large est demandé par une application</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/14">Résolution d'un bug lorsque les groupes contiennent des membres invalides</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/15">Fonctionnalité de thèmes personnalisés</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/16">Options de configuration pour paramétrer la journalisation</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/18">Liens d'invitation</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/19">Amélioration du nom de l'expéditeur dans les emails sortants</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/20">Refonte du système de permissions</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/21">Échappement des caractères spéciaux</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/23">Option permettant de désactiver l'utilisation d'OpenID Connect</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/24">Canaille reste utilisable si aucun serveur SMTP n'est configuré</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/25">Meilleures suggestions du champ d'identification</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/26">Configuration d'autres attributs pour identifier les objets du LDAP</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/27">Gestion des attributs jpegPhoto</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/28">Variabilisation du contenu des jetons JWT</a></li>
</ul>
<h1><a href="https://github.com/wtforms/wtforms">wtforms</a></h1>
<p><em>Bibliothèque python de gestion de formulaires web</em></p>
<ul>
<li><a href="https://github.com/wtforms/wtforms/pull/708">Corrections d'erreurs mineures de style</a></li>
<li><a href="https://github.com/wtforms/wtforms/pull/709">Mise à jour des dépendances de l'environnement de documentation</a></li>
<li><a href="https://github.com/wtforms/wtforms/pull/710">Découpage d'un gros fichier en plusieurs petits</a></li>
<li><a href="https://github.com/wtforms/wtforms/releases/tag/3.0.0">Publication de la version 3.0.0</a></li>
</ul>
<h1><a href="https://github.com/wtforms/flask-wtf">flask-wtf</a></h1>
<p><em>Intégration de WTForms dans Flask</em></p>
<ul>
<li><a href="https://github.com/wtforms/flask-wtf/pull/484">Ménage des fonctionnalités dépréciées</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/releases/tag/v1.0.0">Publication de la version 1.0.0</a></li>
</ul>
<h1><a href="https://github.com/pallets/secure-cookie">secure-cookie</a></h1>
<p>La bibliothèque secure-cookie devrait être utilisée dans Flask à l'avenir.</p>
<ul>
<li><a href="https://github.com/pallets/secure-cookie/pull/66">Création automatique des répertoires de session</a></li>
</ul>
<h1><a href="https://gitlab.alpinelinux.org/alpine/aports/">aports</a></h1>
<p><em>Paquets de la distribution Alpine Linux</em></p>
<ul>
<li><a href="https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/27041">Création du paquet py3-flask-themer</a></li>
<li><a href="https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/27255">Mise à jour du paquet py3-flask-wtf</a></li>
<li><a href="https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/27256">Mise à jour du paquet py3-wtforms</a></li>
</ul>
<h1><a href="https://gitlab.com/yaal/sheraf">sheraf</a></h1>
<p><em>Surcouche objet à ZODB</em></p>
<ul>
<li><a href="https://gitlab.com/yaal/sheraf/-/merge_requests/22">Meilleur affichage en console des attributs de collection</a></li>
</ul>
<h1><a href="https://github.com/jumbojett/OpenID-Connect-PHP">OpenID-Connect-PHP</a></h1>
<p><em>Bibliothèque OpenID Connect en PHP</em></p>
<ul>
<li><a href="https://github.com/jumbojett/OpenID-Connect-PHP/pull/276">Correction d'un bug dans la fonction <code>verifyJWTclaims</code></a></li>
<li><a href="https://github.com/jumbojett/OpenID-Connect-PHP/releases/tag/v0.9.3">Publication de la version 0.9.3</a></li>
<li><a href="https://github.com/jumbojett/OpenID-Connect-PHP/releases/tag/v0.9.4">Publication de la version 0.9.4</a></li>
</ul>
<h1><a href="https://github.com/pulsejet/nextcloud-oidc-login">nextcloud-oidc-login</a></h1>
<p><em>Plugin OpenID Connect pour nextcloud</em></p>
<ul>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/123">Support des jeton non JWT pour l'authentification WebDAV</a></li>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/136">Support de l'authentification DAV par mot de passe</a></li>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/137">Mise-à-jour d'OpenID-Connect-PHP en version 0.9.4</a></li>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/141">Mise-à-jour d'OpenID-Connect-PHP en version 0.9.5</a></li>
</ul>
<h1><a href="https://github.com/python-ldap/python-slapd">python-slapd</a></h1>
<p><em>Interface pythonique pour contrôler un serveur OpenLDAP</em></p>
<ul>
<li><a href="https://github.com/python-ldap/python-slapd/pull/4">Support de la commande ldapsearch</a></li>
<li><a href="https://github.com/python-ldap/python-slapd/pull/5">Le DN racine a les autorisations pour ajouter des schemas</a></li>
</ul>
<h1><a href="https://pygments.org/">Pygments</a></h1>
<p><em>Bibliothèque Python de coloration syntaxique</em></p>
<ul>
<li><a href="https://github.com/pygments/pygments/pull/1946">Mise-à-jour du lexeur debian/control</a></li>
</ul>
<h1><a href="https://www.debian.org/">Debian</a></h1>
<ul>
<li>Mise-à-jour cosmétique des <a href="https://salsa.debian.org/ddp-team/release-notes/-/merge_requests/125">notes de publication</a>
et du <a href="https://salsa.debian.org/installer-team/installation-guide/-/merge_requests/16">guide d'installation</a></li>
</ul>Last FOSS contributions from the Yaal Coop team (fall 2021)2021-12-17T00:00:00+01:002021-12-17T00:00:00+01:00Éloi Rivard <eloi@yaal.coop>tag:yaal.coop,2021-12-17:/blog/en/dernieres-contributions-logiciels-libres-fin-2021<p>The last free and open-source software contributions from the Yaal Coop team during the fall of 2021.</p><h1><a href="https://github.com/yiisoft/yii2-authclient">yii2-authclient</a></h1>
<p><em>Yii 2 authclient extension</em></p>
<ul>
<li><a href="https://github.com/yiisoft/yii2-authclient/pull/334">OIDC: 'aud' claims can be arrays</a></li>
<li><a href="https://github.com/yiisoft/yii2-authclient/pull/333">Use nonce from the authentication request</a></li>
</ul>
<h1><a href="https://github.com/mstilkerich/rcmcarddav">rcmcarddav</a></h1>
<p><em>CardDAV plugin for RoundCube Webmailer</em></p>
<ul>
<li><a href="https://github.com/mstilkerich/rcmcarddav/pull/355">French translations</a></li>
</ul>
<h1><a href="https://gitlab.com/yaal/canaille">canaille</a></h1>
<p><em>Simplistic OpenID Connect provider over OpenLDAP</em></p>
<ul>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/8">configuration check command</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/9">tokens can have multiple audiences</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/10">fixed introspection access rights</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/11">Implemented client pre-authorization</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/12">'check' command check ldap permissions</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/13">Updated consents when a larger scope is required</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/14">Fix bug on groups with non-existent members</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/15">use flask-themer to allow theme customization</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/16">Logging is configurable</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/18">Invitation links</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/19">Use the 'NAME' configuration parameter in the email sender name</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/20">Permissions overhaul</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/21">Escape filters</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/23">Option to not use OIDC</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/24">Disabled invitation and password reset when no smtp server has been configured</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/25">Login placeholder depends on the USER_FILTER configuration attribute</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/26">Added configuration options to tune object IDs</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/27">jpegPhoto management</a></li>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/28">customize jwt claims with format string in config file</a></li>
</ul>
<h1><a href="https://github.com/wtforms/wtforms">wtforms</a></h1>
<p><em>A flexible forms validation and rendering library for Python.</em></p>
<ul>
<li><a href="https://github.com/wtforms/wtforms/pull/708">Fixed some style errors</a></li>
<li><a href="https://github.com/wtforms/wtforms/pull/709">updated docs dependencies</a></li>
<li><a href="https://github.com/wtforms/wtforms/pull/710">Field files split</a></li>
<li><a href="https://github.com/wtforms/wtforms/releases/tag/3.0.0">Released version 3.0.0</a></li>
</ul>
<h1><a href="https://github.com/wtforms/flask-wtf">flask-wtf</a></h1>
<p><em>Simple integration of Flask and WTForms, including CSRF, file upload and Recaptcha integration.</em></p>
<ul>
<li><a href="https://github.com/wtforms/flask-wtf/pull/484">1.0 version deprecations removal</a></li>
<li><a href="https://github.com/wtforms/flask-wtf/releases/tag/v1.0.0">Released version 1.0.0</a></li>
</ul>
<h1><a href="https://github.com/pallets/secure-cookie">secure-cookie</a></h1>
<p><em>Secure cookies and sessions for WSGI</em></p>
<ul>
<li><a href="https://github.com/pallets/secure-cookie/pull/66">FilesystemSessionStore create directories if they don't exist</a></li>
</ul>
<h1><a href="https://gitlab.alpinelinux.org/alpine/aports/">aports</a></h1>
<p><em>Alpine packages build scripts</em></p>
<ul>
<li><a href="https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/27041">py3-flask-themer package creation</a></li>
<li><a href="https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/27255">py3-flask-wtf package update</a></li>
<li><a href="https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/27256">py3-wtforms package update</a></li>
</ul>
<h1><a href="https://gitlab.com/yaal/sheraf">sheraf</a></h1>
<p><em>A versatile ZODB abstraction layer</em></p>
<ul>
<li><a href="https://gitlab.com/yaal/sheraf/-/merge_requests/22">collections: better repr</a></li>
</ul>
<h1><a href="https://github.com/jumbojett/OpenID-Connect-PHP">OpenID-Connect-PHP</a></h1>
<p><em>Minimalist OpenID Connect client</em></p>
<ul>
<li><a href="https://github.com/jumbojett/OpenID-Connect-PHP/pull/276"><code>verifyJWTclaims</code>: fixed an exception when <code>$accessToken</code> is null</a></li>
<li><a href="https://github.com/jumbojett/OpenID-Connect-PHP/releases/tag/v0.9.3">Released version 0.9.3</a></li>
<li><a href="https://github.com/jumbojett/OpenID-Connect-PHP/releases/tag/v0.9.4">Released version 0.9.4</a></li>
</ul>
<h1><a href="https://github.com/pulsejet/nextcloud-oidc-login">nextcloud-oidc-login</a></h1>
<p><em>Nextcloud login via a single OpenID Connect 1.0 provider</em></p>
<ul>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/123">Allow WebDAV authentication with non JWT tokens</a></li>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/136">DAV Password authentication</a></li>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/137">Upgraded OpenID-Connect-PHP to version 0.9.4</a></li>
<li><a href="https://github.com/pulsejet/nextcloud-oidc-login/pull/141">Bumped to OpenID-Connect-PHP 0.9.5</a></li>
</ul>
<h1><a href="https://github.com/python-ldap/python-slapd">python-slapd</a></h1>
<p><em>Controls a slapd process in a pythonic way</em></p>
<ul>
<li><a href="https://github.com/python-ldap/python-slapd/pull/4">ldapsearch command</a></li>
<li><a href="https://github.com/python-ldap/python-slapd/pull/5">rootdn can add schemas</a></li>
</ul>
<h1><a href="https://pygments.org/">Pygments</a></h1>
<p><em>Pygments is a generic syntax highlighter written in Python</em></p>
<ul>
<li><a href="https://github.com/pygments/pygments/pull/1946">Update debian control</a></li>
</ul>
<h1><a href="https://www.debian.org/">Debian</a></h1>
<ul>
<li><a href="https://salsa.debian.org/ddp-team/release-notes/-/merge_requests/125">Publication notes</a>
and <a href="https://salsa.debian.org/installer-team/installation-guide/-/merge_requests/16">installation guide</a> updates</li>
</ul>Un disque chiffré et partitionné avec Ubuntu2021-10-26T00:00:00+02:002021-10-26T00:00:00+02:00Loan Robert <loan@yaal.coop>tag:yaal.coop,2021-10-26:/blog/un-disque-chiffre-et-partitionne-avec-ubuntu<p>Tutoriel d'installation Ubuntu pour un disque chiffré et partitionné</p><p>Ça y est, c'est décidé, vous avez une nouvelle machine, ou bien vous voulez repartir sur des bases propres et vous aimeriez <strong>chiffrer</strong> votre disque pour protéger vos données.</p>
<p>Dans votre fougue, vous vous dites qu'il serait également intéressant de séparer l'OS de vos données perso, avoir un /home sur une autre partition car vous savez que cela présente pas mal d'avantages : réinstaller ou changer de système d'exploitation sans perdre vos données, partager ces données entre plusieurs systèmes, les récupérer plus simplement en cas d'incident... <strong>Partitionner</strong> est une très bonne idée.</p>
<p>Actuellement, il est facile de chiffrer un disque en faisant une nouvelle installation d'Ubuntu 21.04, il est également facile de partitionner son disque avec une nouvelle installation d'Ubuntu 21.04. L'installeur est assez bon pour faire ces deux choses, mais il reste limité. Si vous voulez faire les deux en même temps à l'installation sur une machine, il va falloir faire ça à la main.</p>
<p>Pas de panique, vous êtes au bon endroit, cet article va vous donner les étapes à suivre pour installer <strong>Ubuntu 21.04</strong> (mais également beaucoup de versions <strong>précédentes</strong> et probablement beaucoup de <strong>futures versions</strong>) en ayant des partitions, notamment votre /home, sur un disque chiffré.</p>
<h1>Backup de vos données</h1>
<p>Tout d'abord, vous voulez protéger tout ce qui fait de votre ordinateur quelque chose d'unique. Vous sauriez le trouver parmi d'autres et il sait vous reconnaître. Vous avez vos habitudes avec lui et il en sait pas mal sur vous, vous aimeriez le retrouver tel quel.</p>
<p>Bref, il faut <strong>sauvegarder</strong> vos fichiers personnels, vos identités, vos configurations particulières, noter vos applications préférées...</p>
<h2>Fichiers</h2>
<p>Rien de très surprenant ici, votre dossier <code>/home</code> est probablement un bon endroit pour commencer.</p>
<p>Faites un <strong>backup</strong> de tout ce que vous voulez garder quelque part, comme un ssd, une clé usb, ou sur un Nextcloud de chez <a href="https://nubla.io">Nubla</a> ☁️ par exemple, un super service de cloud hébergé par une <a href="https://yaal.coop">petite coopérative Bordelaise sympathique</a>.</p>
<p>Mais vous faites probablement déjà tout ça, faire des sauvegardes régulières ou bien synchroniser vos fichiers important quelque part, n'est-ce pas ? Bien sûr que oui, car comme tout le monde, vous êtes prudent et intelligent. Personne ne serait assez étourdi pour ne pas faire de sauvegarde, évidemment.</p>
<h2>Applications</h2>
<p>Cette partie dépend de votre façon préférée d'installer des applications. Avec apt, snap, Ubuntu Software Center ? Probablement un peu de tout...</p>
<h3>Paquets apt</h3>
<p>Vous pouvez utiliser cette commande :</p>
<div class="highlight"><pre><span></span><code><span class="n">comm</span><span class="w"> </span><span class="o">-</span><span class="mi">23</span><span class="w"> </span><span class="o"><</span><span class="p">(</span><span class="n">apt</span><span class="o">-</span><span class="n">mark</span><span class="w"> </span><span class="n">showmanual</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">sort</span><span class="w"> </span><span class="o">-</span><span class="n">u</span><span class="p">)</span><span class="w"> </span><span class="o"><</span><span class="p">(</span><span class="n">gzip</span><span class="w"> </span><span class="o">-</span><span class="n">dc</span><span class="w"> </span><span class="o">/</span><span class="k">var</span><span class="o">/</span><span class="nb">log</span><span class="o">/</span><span class="n">installer</span><span class="o">/</span><span class="n">initial</span><span class="o">-</span><span class="n">status</span><span class="o">.</span><span class="n">gz</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">sed</span><span class="w"> </span><span class="o">-</span><span class="n">n</span><span class="w"> </span><span class="s1">'s/^Package: //p'</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">sort</span><span class="w"> </span><span class="o">-</span><span class="n">u</span><span class="p">)</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="n">apps_backup</span><span class="o">.</span><span class="n">txt</span>
</code></pre></div>
<p>pour générer une liste des paquets qui ont été manuellement installés et les enregistrer sur un fichier <code>apps_backup.txt</code>. Ce n'est qu'une seule manière de faire, vous pouvez modifier cette commande pour avoir une liste plus exhaustive si vous préférez valider que tout va bien.</p>
<p><code>apt-mark showmanual</code> donne les paquets apt installés manuellement ainsi que ceux installés avec l'installeur d'Ubuntu. On peut récupérer cette liste de paquets d'installation initiale dans le log <code>/var/log/installer/initial-status.gz</code>. On compare ces deux listes et on ne garde que ce qui reste de la première avec la commande comm pour l'inscrire dans un fichier <code>apps_backup.txt</code>.</p>
<p>Vous trouverez beaucoup de commandes similaires sur les internets, trouvez celle qui vous conviendra le mieux, celle-ci a bien fonctionné pour moi. Évidemment, vous devez garder ce fichier en lieu sûr.</p>
<h3>snap</h3>
<p>Il est possible que dans certains cas vous ayez eu besoin de snap pour installer certains logiciels. vous pouvez les lister avec :</p>
<div class="highlight"><pre><span></span><code>snap list
</code></pre></div>
<p>Malheureusement, je n'ai pas trouvé de de moyens de lister ceux qui ont été installés manuellement, mais vous serez capable de faire le tri, retenez ceux que vous utilisez.</p>
<h3>Ubuntu Software</h3>
<p>Vous pouvez aussi lancer Ubuntu Software Center et afficher la liste des applications installées.</p>
<h2>Fichiers de configuration</h2>
<p>En tant que personne maline, vous n'avez pas besoin de lire cette partie, car vos fichiers de configuration perso, vos "dotfiles", sont déjà copiés quelque part, probablement partagés et peut-être même versionnés.</p>
<p>Alors, je vais seulement lister les quelques fichiers importants que j'utilise, juste pour mon futur moi, lui éviter la jobardise et atteindre, qui sait, cet état d'intelligente prudence :</p>
<ul>
<li>les fichiers .profile ou .bash_profile ou .bash_login... pour les sessions</li>
<li>.bashrc, .zshrc et/ou autres pour le shell</li>
<li>les aliases</li>
<li>.gitconfig et/ou .hgrc pour la config de vos VCS</li>
<li>la config de votre prompt</li>
<li>.vimrc pour la config de vim</li>
<li>...</li>
</ul>
<h2>Identités</h2>
<p>À moins que vous ayez envie de recommencer depuis zéro avec vos identifiants, comptes, etc., vous devriez garder précieusement vos configurations ssh (où toutes vos connections serveur sont paramétrées), votre base de donnée pass ou keepass (ou tout autre manager de mot de passe local), vos paires de clés publiques ET privées SSH, GPG et autres..., vos vaults et probablement beaucoup d'autres choses dont comme moi, vous vous souviendrez malheureusement trop tard. Je ne vous le souhaite pas, soyez organisé...</p>
<h1>Installation d'Ubuntu</h1>
<p>Vous êtes détendu, frais, tout est en sécurité, alors vous êtes prêt.</p>
<h2>Lancer Ubuntu</h2>
<p>Vous avez besoin d'une clé usb bootable, d'au moins 4gb, que vous pouvez créer avec le paquet usb-creator-gtk (ou usb-creator-kde).</p>
<p>Il faudra ensuite redémarrer votre ordinateur avec la clé usb branchée. Pour booter sur la clé, vous devez lancer le menu de boot normalement en pressant "<em>F12</em>", mais cela peut changer selon les machines. En général, un message sera affiché sur l'écran de lancement pour vous indiquer quelle touche il faudra enfoncer (pour moi, il s'agissait d'appuyer frénétiquement sur "<em>Enter</em>" jusqu'à ce qu'un son soit émis...).</p>
<p>Une fois qu'Ubuntu a été lancé depuis la clé, l'installeur se lance automatiquement. Vous pouvez cliquer sur "<strong>Try Ubuntu</strong>" ou bien aller un peu en avant dans l'installation de votre Ubuntu ce qui pourra peut-être vous faciliter la suite.</p>
<p>À titre d'exemple, de mon côté j'ai choisi l'anglais comme langue d'installation et donc la langue d'Ubuntu (principalement pour trouver plus simplement des ressources sur le web) puis sur l'écran suivant, j'ai sélectionné la disposition correspondant à mon clavier (ce qui facilite nos prochaines manipulations). J'ai ensuite quitté l'installateur sans aller plus loin pour pouvoir paramétrer le disque.</p>
<p>Une fois sur l'interface classique d'Ubuntu (mais lancé depuis la clé), vous pouvez si c'est nécessaire formater votre disque avec l'application gnome disks pour avoir une machine "comme" neuve.</p>
<h2>Partitionner le disque</h2>
<p>Nous allons utiliser fdisk depuis le terminal avec "<em>ctrl-alt-t</em>" (ou bien "<em>super-a</em>" et rechercher le terminal).</p>
<p>Pour simplifier le processus et comme la plupart des commandes nécessitent un niveau de permission superuser, il faut entrer :</p>
<div class="highlight"><pre><span></span><code>sudo -s
</code></pre></div>
<p>Ensuite, vous pouvez lister les disques disponibles avec :</p>
<div class="highlight"><pre><span></span><code>fdisk -l
</code></pre></div>
<p>Le disque en question sera probablement <code>/dev/sda</code> ou <code>/dev/vda</code> pour moi c'était plutôt <code>/dev/nvme0n1</code>. La suite de cette doc suivra les particularités de ma machine.</p>
<p>Pour <strong>partitionner</strong> ce disque, entrez :</p>
<div class="highlight"><pre><span></span><code>fdisk /dev/nvme0n1
</code></pre></div>
<p>Il nous faut une partition <strong>EFI</strong>, une partition de <strong>boot</strong>, et une autre partition (celle qui sera <strong>chiffrée</strong>) qui occupera le reste du disque. Dans fdisk, pour obtenir de l'aide, appuyez sur "<em>m</em>" et en cas de doute sur les différentes partitions, vous pouvez appuyer sur "<em>q</em>" pour quitter sans sauvegarder vos modifications.</p>
<h3>EFI</h3>
<p>Pour créer la première partition EFI, appuyez sur</p>
<div class="highlight"><pre><span></span><code>n
</code></pre></div>
<p>Le prompt va alors vous demander le numéro de la partition, gardez la valeur par défaut en pressant</p>
<div class="highlight"><pre><span></span><code>↵
</code></pre></div>
<p>Ensuite, il vous demande quel est le premier secteur à allouer. Par défaut, ce sera le premier qu'il trouve, appuyez donc sur</p>
<div class="highlight"><pre><span></span><code>↵
</code></pre></div>
<p>Et enfin le dernier secteur. Cette partition de EFI de nécessite pas de beaucoup de place. Mais suffisant, ce n'est pas assez pour moi, j'ai donc arbitrairement préféré 2G parce que mon disque est assez gros pour supporter un sacrifice de cette valeur. Indiquez dans le prompt</p>
<div class="highlight"><pre><span></span><code>+2G
</code></pre></div>
<h3>Boot</h3>
<p>Pour la partition de boot, même procédure, 2G c'est trop, généralement, 512M sont suffisant, mais trop, c'est pas grave aussi :</p>
<div class="highlight"><pre><span></span><code>n
↵
↵
+2G
</code></pre></div>
<h3>À chiffrer</h3>
<p>Enfin pour la dernière partition, même procédure, sauf que l'on veut occuper le reste du disque. Le dernier secteur de cette partition doit donc être le dernier secteur du disque, et ça tombe bien, c'est la valeur par défaut :</p>
<div class="highlight"><pre><span></span><code>n
↵
↵
↵
</code></pre></div>
<p>Il faut maintenant sauvegarder toutes ces modifications de la table de partition en pressant</p>
<div class="highlight"><pre><span></span><code>w
</code></pre></div>
<p>Les partitions sont maintenant créées, nous pouvons passer au chiffrement de cette dernière partition nommée <code>nvme0n1p3</code>.</p>
<h2>Chiffrer votre partition principale</h2>
<p>Il est temps de choisir un nom pour votre volume chiffré. Vous pouvez par exemple choisir le nom que vous voulez donner à votre machine. Lors du lancement de votre ordinateur, c'est ce nom qui apparaîtra lorsque vous sera demandé votre mot de passe pour <strong>déchiffrer</strong> le disque. Ici, pour l'exemple, nous l'appellerons <code>pasvraimentcrypté</code>.</p>
<p>Nous pouvons lancer la procédure de chiffrement avec</p>
<div class="highlight"><pre><span></span><code>cryptsetup luksFormat /dev/nvme0n1p3
</code></pre></div>
<p>Le prompt demandera confirmation en entrant YES ce que nous pouvons faire en toute sérénité. Il demandera ensuite d'entrer la <strong>passphrase</strong>, ce sera votre clé pour déchiffrer votre disque à chaque démarrage, ne l'oubliez pas !</p>
<p>Nous avons ensuite besoin d'ouvrir cette partition chiffrée, pour en faire un volume physique et pour y créer un groupe de volume nommé ubuntu et différents volumes logiques. Entrons</p>
<div class="highlight"><pre><span></span><code>cryptsetup luksOpen /dev/nvme0n1p3 pasvraimentcrypté
</code></pre></div>
<p>Comme nous ouvrons un volume chiffré, le prompt nous demande la passphrase. Cette commande va créer un nouveau device nommé <code>/dev/mapper/pasvraimentcrypté</code>.</p>
<p>Nous allons ensuite utiliser LVM2 (Logical Volume Manager) pour <strong>partitionner</strong> ce nouveau device. Dans notre cas, nous voulons une partition <strong>root</strong> de minimum 8G pour l'OS, une partition <strong>home</strong> pour l'utilisateur et une partition <strong>swap</strong> de 8G pour la mémoire. Vous pouvez être imaginatif sur vos partition, vous trouverez beaucoup de ressources et différents avis sur la question de la taille à allouer, mais ce cas suffit à mes besoins.</p>
<p>Nous allons faire de notre partition déchiffrée un volume physique :</p>
<div class="highlight"><pre><span></span><code>pvcreate /dev/mapper/pasvraimentcrypté
</code></pre></div>
<p>Puis créer un groupe <em>ubuntu</em> (ou autre) :</p>
<div class="highlight"><pre><span></span><code>vgcreate ubuntu /dev/mapper/pasvraimentcrypté
</code></pre></div>
<p>Et enfin les volumes logiques du groupe <em>ubuntu</em> :</p>
<div class="highlight"><pre><span></span><code>lvcreate -L 64G -n root ubuntu
lvcreate -L 8G -n swap ubuntu
lvcreate -l 100%FREE -n home ubuntu
</code></pre></div>
<p>Nous pouvons maintenant relancer l'installeur. Lorsque celui-ci demandera de choisir le type d'installation, cliquez sur le bouton "<strong>Autre chose</strong>", ce qui nous permettra d'utiliser les partitions et volumes créés. Configurons les trois volumes logiques :</p>
<ul>
<li>
<p><code>/dev/mapper/ubuntu-root</code></p>
<ul>
<li>Utiliser comme : Ext4 journaling filesystem</li>
<li>Formater la partition</li>
<li>Point de montage : <code>/</code></li>
</ul>
</li>
<li>
<p><code>/dev/mapper/ubuntu-swap</code></p>
<ul>
<li>Utiliser comme : Swap area</li>
</ul>
</li>
<li>
<p><code>/dev/mapper/ubuntu-home</code></p>
<ul>
<li>Utiliser comme : Ext4 journaling filesystem</li>
<li>Formater la partition</li>
<li>Point de montage : <code>/home</code></li>
</ul>
</li>
</ul>
<p>Et pour les devices :</p>
<ul>
<li>
<p>/dev/nvme0n1p1</p>
<ul>
<li>Utiliser comme : EFI</li>
</ul>
</li>
<li>
<p>/dev/nvme0n1p2</p>
<ul>
<li>Utiliser comme : Ext2 filesystem</li>
<li>Formater la partition</li>
<li>Point de montage : <code>/boot</code></li>
</ul>
</li>
</ul>
<p>Un petit récapitulatif des changement sera affiché. Nous pouvons poursuivre l'installation d'Ubuntu. Une fois l'installation terminée, choisissez "Continuer à tester", nous devons encore faire un peu de configuration.</p>
<h2>Instructions de déchiffrement au démarrage</h2>
<p>Ubuntu est installé sur votre machine. Il nous faut maintenant décrire quel device doit être <strong>déchiffré au démarrage et comment</strong>. Nous avons donc besoin d'éditer la crypttab pour donner ces instructions. Pour que tout cela soit pris en compte, il nous faut reconstruire initramfs qui gère le répertoire racine temporaire pendant le démarrage du système. Enfin, cette reconstruction ne peut être réalisée que depuis la nouvelle installation.</p>
<p>Mais avant tout, il nous faut copier l'<strong>UUID</strong> du disque chiffré. Ouvrez un nouveau terminal (ou un nouvel onglet) et entrez</p>
<div class="highlight"><pre><span></span><code>sudo blkid /dev/nvme0n1p3
</code></pre></div>
<p>vous pourrez par la suite retourner sur cet onglet, il vous suffira de le mettre en surbrillance pour qu'il soit copié dans le buffer de votre souris (et collé avec le bouton du milieu de votre souris). Vous pouvez aussi utiliser "<em>shift+ctrl+c</em>" pour copier le texte en surbrillance et "<em>shift+ctrl+v</em>" pour le coller.</p>
<h3>Basculer sur la nouvelle installation</h3>
<p>Nous allons utiliser chroot pour passer dans le nouveau système. Entrez les commandes suivantes :</p>
<div class="highlight"><pre><span></span><code>mount /dev/mapper/ubuntu-root /mnt
mount --bind /dev /mnt/dev
chroot /mnt
mount -t proc proc /proc
mount -t sysfs sys /sys
mount -t devpts devpts /dev/pts
mount -a
</code></pre></div>
<p>Nous sommes maintenant dans le nouveau système, avec différents devices montés sur différents répertoires.</p>
<h3>Instructions de démarrage</h3>
<p>Nous devons créer le fichier <code>/etc/crypttab</code>. Le fichier doit contenir la ligne suivante, vous pouvez l'éditer avec nano, vi, emacs, bref, votre éditeur préféré et il n'est évidemment pas nécessaire ici de débattre de la supériorité de l'un par rapport aux autres 😘</p>
<div class="highlight"><pre><span></span><code>pasvraimentcrypté UUID=e7167ac4-b606-4be0-98a7-ace4e5e13f6b none luks,discard
</code></pre></div>
<p>Nous avons donc quatre champs : le nom du device à déchiffrer, son UUID (remplacez-le par celui de votre device chiffré, celui que vous avez copié précédemment, sans guillemets), le mot de passe (à none puisque l'objectif est qu'il vous soit demandé à chaque démarrage) et des options.</p>
<p>Sauvegardez ce fichier et quittez l'éditeur (pas le terminal).</p>
<h3>Mettre à jour initramfs</h3>
<p>Une fois l'éditeur quitté, toujours dans le terminal, il nous suffit de rentrer la commande suivante :</p>
<div class="highlight"><pre><span></span><code>update-initramfs -k all -u
</code></pre></div>
<p>Nous pouvons maintenant quitter <code>chroot</code> en tapant</p>
<div class="highlight"><pre><span></span><code><span class="k">exit</span>
</code></pre></div>
<p>Depuis notre shell de départ, il nous faut maintenant démonter <code>mnt</code> avec</p>
<div class="highlight"><pre><span></span><code>umount -R /mnt
</code></pre></div>
<h1>Fin</h1>
<p>Nous pouvons maintenant fermer le shell et <strong>relancer</strong> la machine. Au démarrage, elle devrait nous demander la <strong>passphrase</strong> pour déchiffrer le device <code>pasvraimentcrypté</code> puis Ubuntu se lancera normalement.</p>
<p>La commande :</p>
<div class="highlight"><pre><span></span><code>lsblk
</code></pre></div>
<p>nous permet d'avoir un visuel sur le résultat de nos différentes manipulations :</p>
<div class="highlight"><pre><span></span><code><span class="n">NAME</span><span class="w"> </span><span class="nl">MAJ</span><span class="p">:</span><span class="nf">MIN</span><span class="w"> </span><span class="n">RM</span><span class="w"> </span><span class="k">SIZE</span><span class="w"> </span><span class="n">RO</span><span class="w"> </span><span class="n">TYPE</span><span class="w"> </span><span class="n">MOUNTPOINT</span>
<span class="n">nvme0n1</span><span class="w"> </span><span class="mi">259</span><span class="err">:</span><span class="mi">0</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="mi">476</span><span class="p">,</span><span class="mi">9</span><span class="n">G</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k">disk</span>
<span class="err">├─</span><span class="n">nvme0n1p1</span><span class="w"> </span><span class="mi">259</span><span class="err">:</span><span class="mi">1</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="mi">2</span><span class="n">G</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="n">part</span><span class="w"> </span><span class="o">/</span><span class="n">boot</span><span class="o">/</span><span class="n">efi</span>
<span class="err">├─</span><span class="n">nvme0n1p2</span><span class="w"> </span><span class="mi">259</span><span class="err">:</span><span class="mi">2</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="mi">2</span><span class="n">G</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="n">part</span><span class="w"> </span><span class="o">/</span><span class="n">boot</span>
<span class="err">└─</span><span class="n">nvme0n1p3</span><span class="w"> </span><span class="mi">259</span><span class="err">:</span><span class="mi">3</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="mi">472</span><span class="p">,</span><span class="mi">9</span><span class="n">G</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="n">part</span>
<span class="w"> </span><span class="err">└─</span><span class="n">pasvraimentcrypté</span><span class="w"> </span><span class="mi">253</span><span class="err">:</span><span class="mi">0</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="mi">472</span><span class="p">,</span><span class="mi">9</span><span class="n">G</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="n">crypt</span>
<span class="w"> </span><span class="err">├─</span><span class="n">ubuntu</span><span class="o">-</span><span class="n">root</span><span class="w"> </span><span class="mi">253</span><span class="err">:</span><span class="mi">1</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="mi">64</span><span class="n">G</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="n">lvm</span><span class="w"> </span><span class="o">/</span>
<span class="w"> </span><span class="err">├─</span><span class="n">ubuntu</span><span class="o">-</span><span class="n">swap</span><span class="w"> </span><span class="mi">253</span><span class="err">:</span><span class="mi">2</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="mi">8</span><span class="n">G</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="n">lvm</span><span class="w"> </span><span class="o">[</span><span class="n">SWAP</span><span class="o">]</span>
<span class="w"> </span><span class="err">└─</span><span class="n">ubuntu</span><span class="o">-</span><span class="n">home</span><span class="w"> </span><span class="mi">253</span><span class="err">:</span><span class="mi">3</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="mi">400</span><span class="p">,</span><span class="mi">9</span><span class="n">G</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="n">lvm</span><span class="w"> </span><span class="o">/</span><span class="n">home</span>
</code></pre></div>
<p>On peut résumer cela ainsi :</p>
<ul>
<li>le disque physique <code>nvme0n1</code> est divisé en trois partitions physiques : <code>nvme0n1p1</code>, <code>nvme0n1p2</code> et <code>nvme0n1p3</code></li>
<li>la partition <code>nvme0n1p1</code> est une partition EFI (nécessaire depuis Ubuntu 20.04) requise par le système d'exploitation</li>
<li>la partition <code>nvme0n1p2</code> est la partie <code>/boot</code> qui permet au système de démarrer</li>
<li>la partition <code>nvme0n1p3</code> contient un volume chiffré <code>pasvraimentcrypté</code></li>
<li>ce volume chiffré <code>pasvraimentcrypté</code> que l'on doit déchiffrer au démarrage contient les trois volumes logiques LVM suivants :</li>
<li><code>ubuntu-root</code>, la racine de l'arborescence du système Ubuntu</li>
<li><code>ubuntu-swap</code>, l'extension de mémoire vive</li>
<li><code>ubuntu-home</code>, contenant les dossiers et fichiers personnels des utilisateurs, isolé du reste du système</li>
</ul>
<p>Ça y est, votre nouvelle vie commence avec votre nouvelle machine super secrète super rangée ! 🥳</p>Premier pied dans Yaal, en sabots2021-10-18T00:00:00+02:002021-10-18T00:00:00+02:00Brunélie Lauret <brunelie@yaal.coop>tag:yaal.coop,2021-10-18:/blog/premier-pied-dans-yaal-en-sabots<p>Création d'identité visuelle, design de produit et création d'une boutique en ligne pour la Brasserie du Sabot.</p><p>Mars 2020, un moment pas très bien choisi pour tenter de faire des entretiens d'embauche. Pourtant, je vois Yaal en visio d'abord, et j'apprécie beaucoup ce que j'entend pendant cet entretien !</p>
<p>On garde le contact, on se dit qu'on se verra après le confinement, mais comme les semaines s'étirent, on continue à distance et c'est le premier juillet 2020 et que je suis officiellement embauché⋅e dans Yaal en tant que graphiste webdesigner.</p>
<p><em>Ma première mission ?</em>
Développer l'identité visuelle du projet tout neuf de quelques associé⋅es de Yaal : <em>Une brasserie</em> !</p>
<h1>La Brasserie du Sabot, c'est quoi ?</h1>
<p>Le projet d'associé⋅es de Yaal. Une brasserie artisanale installée à Villenave d'Ornon, au sud de Bordeaux.</p>
<p>Un projet coopératif et militant. D'ailleurs, c'est pas pour rien que ça s'appelle le Sabot : Si au premier abord on va penser à l'aspect artisanal de la chaussure en bois d'antan, c'est plutôt du symbole révolutionnaire dont on parle ici. Le sabot qu'on coince dans les rouages de la machine à l'usine en signe de protestation. Le sabotage, quoi !</p>
<p>Pour moi, en tant que graphiste, ça fait deux grands axes à explorer pour concilier tout le monde :</p>
<ul>
<li>
<p>L'esthétique de l'engagement, de la contreculture, un truc un peu révolutionnaire. Militantisme, anarchisme, affichage sauvages, tracts syndicaux, pochoirs et graffitis, affiches déchirées, c'est ce genre d'images là que j'ai eu en tête.</p>
</li>
<li>
<p>L'artisanal. Le bois, le recyclé, le matériau brut, l'écologie. C'est aussi un sujet clé pour les associé⋅es de la brasserie.</p>
</li>
</ul>
<h2>Des idées en vrac</h2>
<p><img alt="Dessins de départ pour la brasserie" src="/media/blog/articles/dessins-initiaux.webp" title="dessins de départ pour la brasserie"></p>
<p>Inspirations de dessin à la ligne claire, mais aussi de découpage de pochoir, puis de gravure.</p>
<h2>et ça sur des bouteilles, ça donnerait quoi ?</h2>
<p>Ces pistes, déclinées pleeein de fois sur des formats d'étiquette pour se donner une meilleure idée de ce que ça donne, ci-dessous un petit florilège :</p>
<p><img alt="Pistes et essais d'étiquettes" src="/media/blog/articles/design_tests_etiquette.webp" title="pistes et essais d'étiquettes"></p>
<p>Toujours avec une texture un peu papier dans le fond, on se rappelle à la fois de l'aspect artisanal et des tracts de manif', une pierre deux coups.
Et pour s'y croire encore plus, j'en ai intégré certaines sur des mockups de bouteilles. Toujours plus d'immersion.</p>
<p><img alt="Mockups d'étiquettes sur des bouteilles" src="/media/blog/articles/bouteilles-mockup.webp" title="Mockups d'étiquettes sur des bouteilles"></p>
<h2>Le choix final</h2>
<p>Avec ces prévisualisations en tête, plus simple de se faire une idée et de savoir ce qui nous parle vraiment.</p>
<p>Voilà le logo choisi, qui servira aussi pour les étiquettes d'expérimentation :</p>
<p><img alt="Logo final de la Brasserie du Sabot" src="/media/blog/articles/Logo_red.webp" title="Logo final de la Brasserie du Sabot"></p>
<h2>Déclinaison</h2>
<p>Les étiquettes finales mettront à l'honneur des figures de l'anarchisme, et principalement des femmes !
En voilà quelques unes, à l'image d'Emma Goldman et Louise Michel.</p>
<p>Le logo principal quand à lui, se prête à l'exercice des brassins de test, du site internet, des flyers, des sous-bock et de la devanture de la brasserie elle-même.</p>
<p><img alt="Etiquettes finales (en situation ?)" src="/media/blog/articles/bouteilles-experimentation.webp" title="Etiquettes finales en situation">
<img alt="Etiquettes finales (en situation ?)" src="/media/blog/articles/bouteilles-finales.webp" title="Etiquettes finales en situation">
Les étiquettes finales, après retouches faites en interne à la brasserie.</p>
<h2>Le site</h2>
<p>Dans un premier temps, j'ai développé un site internet vitrine pour la Brasserie, dont l'objectif principal était d'annoncer sa future ouverture et de la faire découvrir.</p>
<p>Puis dans un second temps est venue la partie boutique, celle qui permet de commander ses bières en ligne !</p>
<p><img alt="Homepage du site de la brasserie" src="/media/blog/articles/homepage.webp" title="Homepage du site de la brasserie"></p>
<p><img alt="Page boutique de la brasserie" src="/media/blog/articles/sabot-boutique.webp" title="Page boutique de la brasserie"></p>
<h1>Tada !</h1>
<h2>Et surtout, n'hésitez pas à aller jeter un oeil par vous même sur 🍺 <a href="https://sabot.beer">https://sabot.beer</a> 🍺 !</h2>De Yaal à Yaal Coop2021-09-24T00:00:00+02:002021-09-24T00:00:00+02:00Camille Daniel <camille@yaal.coop>tag:yaal.coop,2021-09-24:/blog/de-yaal-a-yaal-coop<p>Transition d'une entreprise coopérative</p><p><strong>Yaal Coop</strong> est officiellement née le 1er septembre 2020 et a accueilli ses premier·es salarié·es 2 mois plus tard, en novembre 2020.
C'est la petite soeur de <a href="https://yaal.fr/">Yaal SAS</a>, créée il y a bien plus longtemps, en 2010 (ce qui ne rajeunit pas ses fondateurs Arthur et Colin !).</p>
<p>Comme je sais que la co-existence des deux entreprises peut être source de confusion, voici ma tentative pour raconter l'aventure Yaal Coop.</p>
<p><em>Disclaimer : mon point de vue est personnel et forcément biaisé. Et pas forcément très synthétique non plus.</em> 😗🎶</p>
<h2>Yaal kézako ?</h2>
<p>Yaal est une vieille entreprise d'informatique (sisi 2010 c'est forcément vieux, je n'avais même pas entamé ma première carrière professionnelle de bio-physicienne à cette époque !).
Mais une entreprise qui n'a de classique que son statut juridique de SAS, car pour le reste, on dévie pas mal des standards du milieu.</p>
<p><strong>Auto-organisation</strong> et <strong>auto-gouvernance</strong> sont des principes qui font partie de l'ADN de Yaal depuis toujours.
Si l'entreprise a grossi, jusqu'à atteindre une trentaine de personnes en 2019, elle a eu à coeur de maintenir ces principes en effaçant la hierarchie et en proposant aux salarié·es de s'associer après un an de collaboration.
Transparence des salaires et des finances permet à chacun·e, associé·e comme salarié·e, de saisir les enjeux, de se forger une opinion et d'en discuter lorsqu'il le désire.</p>
<p>Une autre particularité de Yaal est son modèle économique reposant sur <strong>l'investissement technique</strong>. L'ambition est grande : casser les règles habituelles du couple client/prestataire informatique en partageant les risques aussi bien techniques que financiers avec les porteur·euses de projets innovants auxquels elle s’associe.
Pour se donner les moyens de ces ambitions, les associé·es touchent tous le même salaire, sensiblement plus faible que le prix du marché pour permettre à l'entreprise d'investir dans les projets, et se partagent plus tard les bénéfices en cas de succès collectif. Finalement, sur 10 ans, les revenus des associés chez Yaal sont comparables à ceux d'autres entreprises informatiques.</p>
<p>Car cela marche : le plus gros projet de Yaal, <a href="https://myelefant.com/en/">Myelefant</a>, <a href="https://objectifaquitaine.latribune.fr/innovation/2019-11-14/comment-yaal-investit-de-la-technique-dans-les-startups-832940.html">est revendu 21 millions d'euros en novembre 2019</a> !</p>
<h2>Pourquoi créer Yaal Coop ?</h2>
<p>Avec le rachat de Myelefant par Sinch, une partie de l'équipe quitte Yaal pour suivre ce projet et rejoint Sinch en mars 2020.
Parmi ceux et celles qui font le choix de rester, des associé·es de Yaal de longue date mais aussi des salarié·es plus récent·es, dont je fais partie.</p>
<p>Embauchée à Yaal en octobre 2018, je n'ai pas eu le temps d'y devenir associée, l'opération de vente de Myelefant ayant gelé les opérations d'entrée et sortie du capital à l'été 2019.
Et après le rachat, la situation financière de Yaal a évidemment pas mal changé. Il n'est d'un coup plus aussi simple de rentrer au capital de Yaal SAS dont la valorisation financière a pas mal évolué. 😅</p>
<p>Pour autant j'aime toujours Yaal et son modèle inspirant qui m'a séduite d'entrée !
Et je ne suis pas la seule.</p>
<p>Alors que certain·es profitent de ce tournant pour se lancer dans une aventure de <a href="https://sabot.beer/">production de bière</a>, je commence un sacré remue-méninges avec mes collègues pour imaginer un Yaal 2.0 encore plus beau, encore plus fort, et encore plus autogestionné. 💪</p>
<p>Tant qu'à devoir changer de structure pour assurer à tous ses membres un même niveau d'engagement et de pouvoir décisionnel, pourquoi ne pas remettre les choses à plat et changer de statut ?
En passant à celui officiel de <strong>coopérative</strong>, cela clarifie notre fonctionnement (1 personne = 1 voix) et nos valeurs (recherche d'équilibre entre toutes les parties prenantes et d'une rentabilité compatible avec cet objectif).</p>
<h2>Qu'est-ce qui change alors dans Yaal Coop ?</h2>
<p>Yaal Coop est une Société Coopérative d'Intéret Collectif (SCIC). Entre autre, ça veut dire que :</p>
<ul>
<li>
<p>Tout·e salarié·e peut un jour devenir associé·e. Chez nous, c'est même devenu une obligation après un an de salariat, inscrite dans nos statuts. On souhaite ainsi aligner nos intérêts et nos engagements, éviter de créer un fossé entre coopérateur·rices associé·es et salarié·es. Fin 2019 à Yaal, un tiers seulement des salarié·es étaient associé·es et il nous semble nécessaire d'inverser la dynamique au sein de Yaal Coop.</p>
</li>
<li>
<p>Le processus d'entrée et sortie des associé·es au sein de la coopérative est simplifié car il est décrit dans nos statuts et détaché de la valorisation financière de l'entreprise, au contraire d'une entreprise classique. Cela assure également une lucrativité limitée puisque'aucune plus-value n’est possible lors du remboursement des parts en cas de départ.</p>
</li>
<li>
<p>Au contraire d'une SCOP (un autre statut plus connu des entreprises coopératives), le capital et le pouvoir n'est pas réservé aux seul·es salarié·es. Plusieurs collèges d'associé·es existent, dont celui des salarié·es, mais ce n'est pas le seul.</p>
</li>
</ul>
<p>Aujourd'hui à Yaal Coop nous avons désigné 4 collèges :</p>
<ul>
<li>
<p>celui des <strong>salarié·es</strong> qui dispose de 50% des voix, le maximum possible en SCIC, car il nous semble primordial que les travailleur·euses soient majoritaires pour décider des orientations de leur entreprise</p>
</li>
<li>
<p>celui des <strong>bénéficiaires</strong> (composé de clients, usagers ou fournisseurs). Collège obligatoire en SCIC, il fait toute la particularité de ce statut et concrétise la recherche de l'intérêt collectif, en intégrant les autres parties prenantes du travail réalisé au sein de l'entreprise</p>
</li>
<li>
<p>celui des <strong>investisseur·euses</strong> qui nous a permis d'accueillir Yaal SAS et de bénéficier d'un premier apport pour lancer l'activité !</p>
</li>
<li>
<p>et celui des <strong>observateur·rices et soutiens</strong>, qui vise à accueillir toute personne morale ou physique qui contribuerait par tout moyen à l'activité de Yaal Coop : professionnel·le collaborateur·rice, réseau ou organisme partenaire (acteur·rice de l'ESS, des biens communs...), bénévole, etc.</p>
</li>
</ul>
<p>Pour créer Yaal Coop, nous nous sommes fait accompagner par <a href="https://www.finacoop.fr/">Finacoop Nouvelle Aquitaine</a>, qui est aujourd'hui notre cabinet comptable mais aussi le premier membre officiel de notre collège des bénéficiaires 💚, ainsi que par l'URSCOP.</p>
<p>Nous avons aussi procédé à un rachat de l'activité partielle de Yaal SAS pour basculer nos contrats de travail, et nous avons signé un contrat de licence d'exploitation de la marque Yaal pour pouvoir porter fièrement l'héritage de Yaal jusque dans notre nom. ✊</p>
<h2>Mais concrètement au quotidien ça fonctionne comment ?</h2>
<p>Pour l'instant la mise en oeuvre de nos principes coopératifs et d'auto-gouvernance est plutôt simplifiée : en passant de plus de 30 salarié·es à <strong>5 coopérateur·rices salarié·es associé·es</strong>, on a naturellement beaucoup fluidifié la communication et le partage d'informations entre nous (même si la crise sanitaire ne nous a, elle, pas beaucoup aidés 😩).</p>
<p>Aujourd'hui on se retrouve la plupart des jours de la semaine en présentiel dans notre local pour travailler sur nos différents projets.
Même lorsqu'on ne travaille pas sur la même chose au même moment, c'est d'autant plus facile de discuter des autres sujets autour d'une pause thé ou du déjeuner.</p>
<p>Le mardi en particulier est sanctuarisé pour pouvoir discuter et travailler sur des sujets collectifs : tout le monde se retrouve au bureau et personne ne travaille isolé en prestation. <em>(Au contraire le mercredi est le seul jour où tout le monde télétravaille alors ne prévoyez pas de passer au local ce jour là pour boire un café !).</em></p>
<p>Lorsque tout le monde est arrivé, on commence notre <strong>weekly</strong> où l'on discute à tour de rôle des activités de la semaine passée et celle à venir en s'appuyant sur notre trello* d'équipe qu'on met à jour à ce moment là. On y met en particulier toutes les tâches de gestion, projets internes et pistes/prospects pour assurer un suivi partagé.</p>
<p>Avec notre instance de cloud nextcloud qui nous permet de numériser et ranger tous les documents de l'entreprise (notamment les factures, contrats, fiches de paie, etc.) et de partager des agendas (par exemple celui de nos congés/absences), c'est notre outil principal pour la gestion.</p>
<p>On a aussi une petite interface maison héritée de Yaal qui nous permet à tous d'avoir un oeil sur l'évolution du compte en banque, un bon gros tableau libre office à l'ancienne en guise de plan de tréso et un mini-wiki dans un simple document texte partagé pour documenter nos habitudes de gestion, qu'on étoffe au fur et à mesure (comment on commande des tickets resto ? Comment on range une facture ? Comment on fait la paie <em>(sans risquer d'oublier la dernière étape de bien fêter la fête 🎉)</em> ?).</p>
<p>Les mails et surtout la messagerie Element complètent nos outils de communication interne, en particulier les jours où nous sommes à distance et/ou asynchrones.</p>
<p>De manière plus macro, on a fait le choix du <strong>salaire unique</strong> et du <strong>temps plein</strong> pour les associé·es.
Notre salaire est donc indépendant de notre expérience, de notre fonction et du montant que l'on facture.
Et son montant est encore bas pour continuer de pouvoir investir à la manière de Yaal SAS.</p>
<p>On a eu pas mal de discussions riches sur le sujet, en particulier une session animée par <a href="https://davidbruant.github.io/">David Bruant</a>, extérieur à la coop, qui aime réfléchir au sujet de la rémunération juste (merci d'être venu en parler avec nous l'année dernière !).
Je suis assez curieuse d'autres modèles alternatifs, comme celui de <a href="http://scopyleft.fr/">Scopyleft</a> par exemple, où chacun se paie ce dont il a besoin après avoir pris soin d'en discuter avec tout le monde.</p>
<p>Mais pour l'instant le salaire unique nous convient et nous permet de démarrer simplement. On aimerait s'augmenter dès que la coopérative aura atteint un régime de croisière mais on est aussi plus dans la team "réduisons notre temps de travail" que "gagnons toujours plus", donc on verra bien...</p>
<p>Côté projets, on continue l'investissement technique (comme avec notre premier projet <a href="https://lum1.fr/">Lum1</a> !), mais on fait aussi un peu de bénévolat à <a href="https://supercoop.fr/">Supercoop</a> (le supermarché coopératif de Bordeaux) et d'autres projets internes : bientôt <a href="https://nubla.io">Nubla</a> ☁️ ?! On fait aussi un peu de prestation plus classique vu qu'on continue notamment à travailler pour Sinch, ce qui assure une certaine stabilité financière.</p>
<p>Au fond on cherche encore l'équilibre qui conviendra (et qui évoluera probablement !) et on est ouvert sur les modes de collaboration possibles.
Ce que l'on veut surtout c'est <strong>participer à des projets qui ont du sens</strong> et <strong>avec des personnes qui partagent nos valeurs</strong>.</p>
<p>Enfin côté vie coopérative élargie, et en particulier animation des autres collèges d'associé·es, on a encore un tas de chose à explorer. On a la chance de pouvoir commencer petits, avec peu d'associé·es qui nous connaissent et nous font confiance. Donc nos efforts sont pour l'instant concentrés ailleurs. Mais on a en tête que c'est une chose à laquelle on va devoir consacrer plus de temps ensuite ! Et on a hâte d'avoir les moyens de le faire.</p>
<p>Yaal Coop n'a même pas un an, on n'est qu'au début de l'aventure et de l'expérimentation ! 🌱</p>
<h2>Et Yaal SAS alors ?</h2>
<p>Je suis sans doute mal placée pour parler de Yaal SAS car je n'en fais plus partie. Son activité est aujourd'hui en sommeil, il n'y a d'ailleurs plus aucun salarié : seulement <a href="https://www.yaal.fr/equipe">9 associé.es</a> dispersés entre Yaal Coop, Sinch, La Brasserie du Sabot et d'autres projets personnels. Dispersés mais pas bien loin, alors rendez-vous à la prochaine bière ! 🍻</p>
<p><em>*Oui Trello. L'outil détonne au milieu des autres outils libres qu'on utilise et dont on est plus friand. Mais pour l'instant on n'a pas trouvé d'alternative cool et aussi pratique pour la gestion de projet donc on fait avec 🙂 (vous utilisez quoi vous ?)</em></p>Design et création d'un nuage, Nubla.io2021-09-07T00:00:00+02:002021-09-07T00:00:00+02:00Brunélie Lauret <brunelie@yaal.coop>tag:yaal.coop,2021-09-07:/blog/design-et-creation-d-un-nuage-nubla-io<p>Création de notre nuage</p><h1>C'est quoi, Nubla ?</h1>
<p>Nubla, c'est un projet de service pour fournir des e-mails, de l'espace de stockage Cloud, de messagerie instantanée et d'agenda pour tous⋅tes, sans passer sous le giron de Google et des géants du web.</p>
<p>On veut passer par des solutions libres, mises à disposition à des frais qui varient selon les moyens de nos utilisateurs. Ca, on y tient. C'est un souhait aussi depuis le début, s'adapter et faire un service qui puisse profiter à un maximum de monde, sans vente de données, sans fins publicitaires et sur mesure.</p>
<p><img alt="Bannière nubla.io" src="/media/blog/articles/meta-picture.webp" title="bannière nubla.io"></p>
<h1>☁️</h1>
<hr>
<h1>Design et création d'un nuage, Nubla.io ☁️</h1>
<p>Ma priorité sur le site de Nubla, c'est de faire un site internet fonctionnel, accessible et lisible. Et quand je dis accessible, c'est au sens de l'accessibilité à tous⋅tes : Choix de polices d'écriture intelligibles, contrastes suffisants, hiérarchisation des contenus et facilité de navigation.</p>
<p>La seconde, c'est de créer quelque chose qui me fasse plaisir à imaginer, à dessiner, puis à intégrer.</p>
<p>Utiliser des outils et des techniques qui me plaisent : <a href="https://wwW.coolors.co">coolors</a> pour le choix des palettes de couleur, me tourner vers des polices d'écriture libres, des illustrations open source aussi avec <a href="https://www.undraw.co">undraw</a>, l'utilisation de <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout">CSS Grid</a> pour l'intégration...</p>
<h2>Premières pistes</h2>
<p><img alt="Palettes, tests de fonts avec le texte nubla.io" src="/media/blog/articles/palettes-fonts.webp" title="Palettes, tests de fonts avec le texte nubla.io"></p>
<p>Quand j'ai proposé au vote les différentes palettes à l'équipe, on s'en est sortis avec une égalité retentissante.</p>
<p>Le point commun entre toutes : Elles sont colorées. Vraiment.
Dans mes préférences, j'aimerais garder au moins une palette qui contient du jaune pour faire une petite référence discrète à Yaal Coop.</p>
<p>Parmi les autres couleurs, je tiens généralement à utiliser un noir qui n'est pas parfaitement noir, et un blanc pas parfaitement blanc. Juste pour ne pas trop agresser la rétine, je trouve ça plus doux. Ici, #323232 fait office de noir, et #F4F4F4 fait office de blanc.</p>
<h3>Les fonts testées ici sont :</h3>
<ul>
<li><a href="https://indestructibletype.com/Jost.html">Jost</a> - Une police d'écriture libre, adaptée à la technologie <a href="https://v-fonts.com/">variable font d'OpenType</a>, reproduisant l'esprit de la légendaire Futura.</li>
<li>Varela Round - Une police d'écriture ronde, sympathique, créée par le designer <a href="https://dribbble.com/JoePrince">Joe Prince</a>.</li>
</ul>
<p>J'ai finalement opté pour Jost, du fait de sa grande polyvalence, mais également pour son aspect géométrique et lisible qui viendra contraster avec les motifs décoratifs plutôt ronds du site (les fameux blobs).</p>
<p><img alt="Tests d'interaction des couleurs entre elles" src="/media/blog/articles/color-shapes.webp" title="Tests d'interaction des couleurs entre elles"></p>
<p>Côté formes, décoratives, j'ai testé le géométrique et l'anguleux, mais pour un projet cloud avec une face amicale/familiale, je lui ai préféré les courbes et les "blobs" arrondis. La police d'écriture choisie elle-même déjà tout en angles et en pointes créée un contraste et une dynamique amusants.</p>
<p><img alt="Image du blob de fond" src="/media/blog/articles/blob.webp" title="image du blob de fond"></p>
<h2>Wireframes</h2>
<p>Sur la sturcture du site, j'avais très envie de travailler avec <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout">CSS Grid</a> Je suis partie sur une structure de cinq colonnes, chacune séparée d'une gouttière de 20px, la première et la dernière colonne restant "vides" pour aérer le site. Je met vides entre guillemets, parce que c'est dans la colonne de droite que j'ai prévu de poser la navigation, fixée en haut à droite de l'écran pour rester toujours visible.</p>
<p><img alt="Wireframe de la page d'accueil, en noir et blanc" src="/media/blog/articles/wireframe-1.webp" title="Wireframe de la page d'accueil, en noir et blanc"></p>
<p><img alt="Wireframe de la page à propos, en noir et blanc" src="/media/blog/articles/wireframe-3.webp" title="Wireframe de la page à propos, en noir et blanc"></p>
<h2>Déclinaison de maquettes</h2>
<p>Les maquettes ci-dessous ne sont pas finales, mais sont là pour donner une idée assez claire des différents layouts qui seront mis en place sur le site et du rendu qu'on pourra obtenir.</p>
<p>Je suis pas vraiment adepte des maquettes pixel perfect (je vais pas m'étaler là dessus), d'autant plus lorsque je ne suis pas seul responsable des contenus du site. Je préfère poser une base, voir quels contenus sont proposés puis m'y adapter en respectant l'esprit et les déclinaisons de layouts choisis pour le site.</p>
<p><img alt="Maquettes graphiques du site Nubla.io" src="/media/blog/articles/maquette-homepage.webp" title="Maquettes graphiques du site Nubla.io"></p>
<p><img alt="Maquettes graphiques du site Nubla.io" src="/media/blog/articles/maquette-about.webp" title="Maquettes graphiques du site Nubla.io"></p>
<p>Pourquoi le cadre ? Jeu sur la structure du site, évite la sensation de "flottement" des éléments dans le vide. Peut aussi permettre des jeux de parallaxe.
Jouer avec le scroll à l'intérieur du cadre, avec la navigation fixe, je trouve ça assez marrant.</p>
<h1>☁️</h1>
<hr>
<h1>Le Site</h1>
<h2>Structure du site :</h2>
<p><img alt="Schéma de la structure du site" src="/media/blog/articles/wireframe-grid.webp" title="Schéma de la structure du site"></p>
<ul>
<li>Le body, sur lequel je place le blob de fond.</li>
<li>Un conteneur, celui qui a le cadre noir et un padding qui laisse la place pour la scrollbar à droite et les notes de pied de page en bas</li>
<li>Un layout en grille CSS de 5 colonnes, séparées par des gouttières de 20px.</li>
<li>La navigation, qui semble posée sur la 5eme colonne mais est en réalitée positionnée en position:fixed; pour ne pas bouger d'un pouce lorsque l'on navigue sur la page.</li>
</ul>
<h2>Les petits détails qui font plaiz</h2>
<p>... ou comment faire l'effet de soulignement dynamique des liens :</p>
<p><img alt="Gifs de quelques interactions animées, genre le soulignage des liens" src="/media/blog/articles/link-hover.gif" title="gif d'interaction animée"></p>
<h3>C'est fait comme ça :</h3>
<div class="highlight"><pre><span></span><code><span class="p">.</span><span class="nc">line</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">display</span><span class="p">:</span><span class="w"> </span><span class="kc">inline-block</span><span class="p">;</span>
<span class="w"> </span><span class="k">position</span><span class="p">:</span><span class="w"> </span><span class="kc">relative</span><span class="p">;</span>
<span class="w"> </span><span class="k">font-style</span><span class="p">:</span><span class="w"> </span><span class="kc">normal</span><span class="p">;</span>
<span class="w"> </span><span class="k">z-index</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="w"> </span><span class="k">color</span><span class="p">:</span><span class="nf">var</span><span class="p">(</span><span class="nv">--dark</span><span class="p">);</span>
<span class="p">}</span>
<span class="nt">a</span><span class="p">.</span><span class="nc">line</span><span class="p">:</span><span class="nd">hover</span><span class="o">,</span><span class="w"> </span><span class="nt">a</span><span class="p">.</span><span class="nc">line</span><span class="p">:</span><span class="nd">focus</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">color</span><span class="p">:</span><span class="nf">var</span><span class="p">(</span><span class="nv">--dark</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">.</span><span class="nc">line</span><span class="p">::</span><span class="nd">after</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">width</span><span class="p">:</span><span class="w"> </span><span class="mi">100</span><span class="kt">%</span><span class="p">;</span>
<span class="w"> </span><span class="k">height</span><span class="p">:</span><span class="w"> </span><span class="mf">.7</span><span class="kt">em</span><span class="p">;</span>
<span class="w"> </span><span class="k">content</span><span class="p">:</span><span class="s2">" "</span><span class="p">;</span>
<span class="w"> </span><span class="k">background-color</span><span class="p">:</span><span class="w"> </span><span class="nf">var</span><span class="p">(</span><span class="nv">--yellow</span><span class="p">);</span>
<span class="w"> </span><span class="k">position</span><span class="p">:</span><span class="w"> </span><span class="kc">absolute</span><span class="p">;</span>
<span class="w"> </span><span class="k">left</span><span class="p">:</span><span class="mi">10</span><span class="kt">px</span><span class="p">;</span>
<span class="w"> </span><span class="k">bottom</span><span class="p">:</span><span class="mi">0</span><span class="kt">px</span><span class="p">;</span>
<span class="w"> </span><span class="k">z-index</span><span class="p">:</span><span class="w"> </span><span class="mi">-2</span><span class="p">;</span>
<span class="p">}</span>
<span class="nt">a</span><span class="p">.</span><span class="nc">line</span><span class="p">::</span><span class="nd">before</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">width</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="kt">%</span><span class="p">;</span>
<span class="w"> </span><span class="k">height</span><span class="p">:</span><span class="w"> </span><span class="mf">.7</span><span class="kt">em</span><span class="p">;</span>
<span class="w"> </span><span class="k">content</span><span class="p">:</span><span class="s2">" "</span><span class="p">;</span>
<span class="w"> </span><span class="k">background-color</span><span class="p">:</span><span class="w"> </span><span class="nf">var</span><span class="p">(</span><span class="nv">--magenta</span><span class="p">);</span>
<span class="w"> </span><span class="k">position</span><span class="p">:</span><span class="w"> </span><span class="kc">absolute</span><span class="p">;</span>
<span class="w"> </span><span class="k">left</span><span class="p">:</span><span class="mi">10</span><span class="kt">px</span><span class="p">;</span>
<span class="w"> </span><span class="k">bottom</span><span class="p">:</span><span class="mi">0</span><span class="kt">px</span><span class="p">;</span>
<span class="w"> </span><span class="k">z-index</span><span class="p">:</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span>
<span class="w"> </span><span class="k">transition</span><span class="p">:</span><span class="w"> </span><span class="mf">.2</span><span class="kt">s</span><span class="w"> </span><span class="kc">all</span><span class="p">;</span>
<span class="p">}</span>
<span class="nt">a</span><span class="p">.</span><span class="nc">line</span><span class="p">:</span><span class="nd">hover</span><span class="p">::</span><span class="nd">before</span><span class="o">,</span><span class="w"> </span><span class="nt">a</span><span class="p">.</span><span class="nc">line</span><span class="p">:</span><span class="nd">focus</span><span class="p">::</span><span class="nd">before</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">width</span><span class="p">:</span><span class="w"> </span><span class="mi">100</span><span class="kt">%</span><span class="p">;</span>
<span class="w"> </span><span class="k">transition</span><span class="p">:</span><span class="w"> </span><span class="mf">.2</span><span class="kt">s</span><span class="w"> </span><span class="kc">all</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div>
<p>Ce serait dommage de se priver de ce genre de petites choses ! Ca me fait expérimenter un peu, et puis c'est toujours amusant à voir. Bien sûr, dans un souci d'accessibilité, les animations se déclenchent aussi lorsqu'un élément est placé en [focus] et pas seulement au survol de la souris.</p>
<h1>☁️</h1>
<hr>
<h1>Et voilà !</h1>
<h3>Vous voulez voir ce que ça donne en vrai ? C'est par là : 👉 <a href="https://nubla.io">https://nubla.io</a> 👈</h3>
<p>Et n'hésitez pas à faire un tour sur notre <a href="https://framaforms.org/outils-informatiques-1593440082">sondage</a> concernant vos usages e-mail, cloud et internet, et savoir si l'offre de Nubla pourrait vous intéresser !</p>
<p>J'espère que la lecture vous a plu !</p>Dernières contributions à des logiciels libres par l'équipe Yaal Coop (rentrée 2021)2021-09-01T00:00:00+02:002021-09-01T00:00:00+02:00Éloi Rivard <eloi@yaal.coop>tag:yaal.coop,2021-09-01:/blog/dernieres-contributions-logiciels-libres-rentree-2021<p>Les dernières contributions à des logiciels libres par l'équipe Yaal Coop entre le printemps et septembre 2021.</p><h1><a href="https://github.com/pytest-dev/pytest">pytest</a></h1>
<p><em>Outil de tests unitaires en Python</em></p>
<ul>
<li><a href="https://github.com/pytest-dev/pytest/pull/8752">Personnalisation des thèmes de la coloration syntaxique</a></li>
</ul>
<h1><a href="https://github.com/pstanoev/simple-svelte-autocomplete">simple-svelte-autocomplete</a></h1>
<p><em>Composant svelte de suggestion d'éléments dans une liste déroulante</em></p>
<ul>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/94">Installation d'une suite de tests unitaires</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/95">Ignorer les accents lors de la surbrillance</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/74">Préchargement de la liste lorsque le composant est initialisé avec une valeur</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/70">Le contenu peut-être figé</a></li>
<li>Diverses maintenances <a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/100">#100</a>
<a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/92">#92</a> <a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/83">#83</a>
<a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/77">#77</a> <a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/76">#76</a>
<a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/75">#75</a> <a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/72">#72</a> <a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/69">#69</a></li>
</ul>
<h1><a href="https://github.com/nhn/tui.editor/">toast-ui editor</a></h1>
<p><em>Éditeur markdown wysiwyg en Javascript</em></p>
<ul>
<li><a href="https://github.com/nhn/tui.editor/pull/1772">Attribut 'autofocus' qui permet au composant de ne pas prendre le focus au chargement d'une page</a></li>
</ul>
<h1><a href="https://gitlab.com/yaal/canaille">canaille</a></h1>
<p><em>Serveur OpenID Connect simpliste, basé sur OpenLDAP</em></p>
<ul>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/6">Ajout, édition et suppression des groupes d'utilisateurs</a></li>
</ul>
<h1><a href="https://gitlab.com/yaal/sheraf">sheraf</a></h1>
<p><em>Surcouche objet à ZODB</em></p>
<ul>
<li><a href="https://gitlab.com/yaal/sheraf/-/merge_requests/21">Décorateur sur les attributs sheraf pour personnaliser les fonctions de recherche et d'indexation</a></li>
<li><a href="https://gitlab.com/yaal/sheraf/-/merge_requests/18">Utilitaires pour vérifier l'état de l'indexation d'une instance d'un modèle</a></li>
</ul>
<h1><a href="https://github.com/zopefoundation/ZEO">ZEO</a></h1>
<p><em>Serveur de base de données pour ZODB</em></p>
<ul>
<li><a href="https://github.com/zopefoundation/ZEO/pull/183">Correction dans la documentation d'un paramètre</a></li>
</ul>
<h1><a href="https://github.com/leapfrogonline/rstr">rstr</a></h1>
<p><em>Bibliothèque Python produisant des chaînes de caractères aléatoire</em></p>
<ul>
<li>Mises à jour du paquet (<a href="https://github.com/leapfrogonline/rstr/pull/6">métadonnées</a>, <a href="https://github.com/leapfrogonline/rstr/pull/9">versions de python</a>), une <a href="https://github.com/leapfrogonline/rstr/pull/7">vérification de paramètres passées</a>. L'ensemble est disponible dans la version 2.0 sur <a href="https://pypi.org/project/rstr/">pypi.org</a>.</li>
</ul>
<h1><a href="https://pygments.org/">Pygments</a></h1>
<p><em>Bibliothèque Python de coloration syntaxique</em></p>
<ul>
<li>Ajout d'un lexeur à <a href="https://github.com/pygments/pygments/pull/1808">Pygments</a> pour le format <a href="https://devcenter.heroku.com/articles/procfile#procfile-format">Procfile</a>. Les fichiers Procfile sont utilisés par des hébergeurs comme Heroku mais ils servent aussi pour des développements locaux (avec Foreman ou Honcho).</li>
</ul>
<h1><a href="https://python.org">Python.org</a></h1>
<ul>
<li>Correction d'un exemple de code sur le site <a href="https://github.com/python/pythondotorg/pull/1763">python.org</a>. La correction est intégrée dans le dépôt, mais pas encore disponible sur le site.</li>
</ul>Last FOSS contributions from the Yaal Coop team (summer 2021)2021-09-01T00:00:00+02:002021-09-01T00:00:00+02:00Éloi Rivard <eloi@yaal.coop>tag:yaal.coop,2021-09-01:/blog/en/dernieres-contributions-logiciels-libres-rentree-2021<p>The last free and open-source software contributions from the Yaal Coop team during summer 2021.</p><h1><a href="https://github.com/pytest-dev/pytest">pytest</a></h1>
<p><em>The pytest framework makes it easy to write small tests, yet scales to support complex functional testing</em></p>
<ul>
<li><a href="https://github.com/pytest-dev/pytest/pull/8752">Syntax highlighting theme customization</a></li>
</ul>
<h1><a href="https://github.com/pstanoev/simple-svelte-autocomplete">simple-svelte-autocomplete</a></h1>
<p><em>Simple Autocomplete / typeahead component for Svelte</em></p>
<ul>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/94">Unit tests suite</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/95">Words highlighting ignore accents</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/74">async: Loads item list on focus when the component is pre-initialized</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/70">Lockable input</a></li>
<li>Janitoring <a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/100">#100</a>
<a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/92">#92</a> <a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/83">#83</a>
<a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/77">#77</a> <a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/76">#76</a>
<a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/75">#75</a> <a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/72">#72</a> <a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/69">#69</a></li>
</ul>
<h1><a href="https://github.com/nhn/tui.editor/">toast-ui editor</a></h1>
<p><em>Markdown WYSIWYG Editor</em></p>
<ul>
<li><a href="https://github.com/nhn/tui.editor/pull/1772">add an 'autofocus' option that can disable initial focus</a></li>
</ul>
<h1><a href="https://gitlab.com/yaal/canaille">canaille</a></h1>
<p><em>Simplistic OpenID Connect provider over OpenLDAP</em></p>
<ul>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/6">Group management</a></li>
</ul>
<h1><a href="https://gitlab.com/yaal/sheraf">sheraf</a></h1>
<p><em>A versatile ZODB abstraction layer</em></p>
<ul>
<li><a href="https://gitlab.com/yaal/sheraf/-/merge_requests/21">Attribute decorators</a></li>
<li><a href="https://gitlab.com/yaal/sheraf/-/merge_requests/18">Indexation helpers</a></li>
</ul>
<h1><a href="https://github.com/zopefoundation/ZEO">ZEO</a></h1>
<p><em>ZODB Client-Server framework</em></p>
<ul>
<li><a href="https://github.com/zopefoundation/ZEO/pull/183">Replaced 'cache-size-bytes' with 'cache-size' in the documentation</a></li>
</ul>
<h1><a href="https://github.com/leapfrogonline/rstr">rstr</a></h1>
<p><em>rstr is a helper module for easily generating random strings of various types.</em></p>
<ul>
<li>Package updates (<a href="https://github.com/leapfrogonline/rstr/pull/6">metadata</a>, <a href="https://github.com/leapfrogonline/rstr/pull/9">python versions</a>), <a href="https://github.com/leapfrogonline/rstr/pull/7">paremeters check</a>.</li>
</ul>
<h1><a href="https://pygments.org/">Pygments</a></h1>
<p><em>Pygments is a generic syntax highlighter written in Python</em></p>
<ul>
<li><a href="https://github.com/pygments/pygments/pull/1808">Procfile lexer</a></li>
</ul>
<h1><a href="https://python.org">Python.org</a></h1>
<ul>
<li><a href="https://github.com/python/pythondotorg/pull/1763">Code sample fix</a></li>
</ul>Dernières contributions à des logiciels libres par l'équipe Yaal Coop2021-06-10T00:00:00+02:002021-06-10T00:00:00+02:00Éloi Rivard <eloi@yaal.coop>tag:yaal.coop,2021-06-10:/blog/dernieres-contributions-logiciels-libres-mi-2021<p>Les dernières contributions à des logiciels libres par l'équipe Yaal Coop.</p><h1><a href="https://github.com/pstanoev/simple-svelte-autocomplete">simple-svelte-autocomplete</a></h1>
<p><em>Composant svelte de suggestion d'éléments dans une liste déroulante</em></p>
<ul>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/35">Flag html5 <em>autocomplete</em></a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/43">Délai entre les requêtes</a> (afin de ne pas surcharger le serveur)</li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/44">Ignorer les vieilles réponses qui arrivent trop tard</a> (afin de ne pas afficher de vieux résultats)</li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/46">Personnalisation des éléments de la liste</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/50">Indicateur d'activité</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/54">Support des générateurs asynchrones</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/58">Ignorer les accents pour suggérer des éléments</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/59">Soumettre le formulaire en appuyant sur la touche Entrée</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/68">Trier les résultats en fonction de leur pertinence</a></li>
</ul>
<h1><a href="https://gitlab.com/yaal/canaille">canaille</a></h1>
<p><em>Serveur OpenID Connect simpliste, basé sur OpenLDAP</em></p>
<ul>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/5">Gestion des groupes d'utilisateurs</a></li>
</ul>
<h1><a href="https://gitlab.com/yaal/sheraf">sheraf</a></h1>
<p><em>Surcouche objet à ZODB</em></p>
<ul>
<li><a href="https://gitlab.com/yaal/sheraf/-/merge_requests/16">Possibilité d'enregistrer des crochets à la création, l'édition ou la suppression d'attributs</a></li>
<li><a href="https://gitlab.com/yaal/sheraf/-/merge_requests/15">Les méthodes d'indexation des indexes peuvent ne retourner qu'une unique valeur</a></li>
<li><a href="https://gitlab.com/yaal/sheraf/-/merge_requests/14">De meilleures performances pour les QuerySet</a></li>
<li><a href="https://gitlab.com/yaal/sheraf/-/merge_requests/13">Attribut Enum</a></li>
<li><a href="https://gitlab.com/yaal/sheraf/-/merge_requests/12">Indexes partagés entre différents attributs</a></li>
<li><a href="https://gitlab.com/yaal/sheraf/-/merge_requests/11">Plusieurs manières de définir des indexes</a></li>
<li><a href="https://gitlab.com/yaal/sheraf/-/merge_requests/10">Levée d'une erreur lorsqu'un ModelAttribute n'est pas appelé avec un Model</a></li>
</ul>
<h1><a href="https://github.com/python-ldap/python-slapd">python-slapd</a></h1>
<p><em>Bibliothèque python pour contrôler un server OpenLDAP</em></p>
<ul>
<li>Création et publication du projet.</li>
</ul>
<h1>cpython</h1>
<ul>
<li>pprint.pprint() dispose d'un <a href="https://github.com/python/cpython/pull/24864">paramètre underscore_numbers</a> qui améliore la lisibilité des gros entiers (sera disponible dans la prochaine version)</li>
<li><a href="https://github.com/python/cpython/pull/23872">Correction de liens internes dans la documentation</a> (rétroporté vers les versions 3.8 et 3.9)</li>
<li><a href="https://github.com/python/pythondotorg/pull/1763">Correction d'un exemple de code sur le site web</a></li>
</ul>
<h1><a href="https://github.com/wtforms/wtforms">wtforms</a></h1>
<p><em>Bibliothèque python de gestion de formulaires web</em></p>
<ul>
<li><a href="https://github.com/wtforms/wtforms/pull/689">Nouveau logo</a></li>
</ul>
<h1>Debian</h1>
<ul>
<li>modernisation d'icônes pour les <a href="https://salsa.debian.org/ddp-team/release-notes/-/merge_requests/103">notes de publication</a> (permet une cohérence graphique avec la mise-à-jour du <a href="https://salsa.debian.org/installer-team/installation-guide/-/merge_requests/11">guide d'installation</a>)</li>
</ul>Last FOSS contributions from the Yaal Coop team (spring 2021)2021-06-10T00:00:00+02:002021-06-10T00:00:00+02:00Éloi Rivard <eloi@yaal.coop>tag:yaal.coop,2021-06-10:/blog/en/dernieres-contributions-logiciels-libres-mi-2021<p>The last free and open-source software contributions from the Yaal Coop team during the spring 2021.</p><h1><a href="https://github.com/pstanoev/simple-svelte-autocomplete">simple-svelte-autocomplete</a></h1>
<p><em>Simple Autocomplete / typeahead component for Svelte</em></p>
<ul>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/35"><em>autocomplete</em> html5 flag</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/43">Delay between requests</a> (afin de ne pas surcharger le serveur)</li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/44">Ignore the old late responses</a> (afin de ne pas afficher de vieux résultats)</li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/46">List items customization</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/50">Activity indicator</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/54">Async generator support</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/58">Suggestions ignore diacritics</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/59">Submit enter by pressing Enter</a></li>
<li><a href="https://github.com/pstanoev/simple-svelte-autocomplete/pull/68">Sort results by pertinence</a></li>
</ul>
<h1><a href="https://gitlab.com/yaal/canaille">canaille</a></h1>
<p><em>Simplistic OpenID Connect provider over OpenLDAP</em></p>
<ul>
<li><a href="https://gitlab.com/yaal/canaille/-/merge_requests/5">Groups support</a></li>
</ul>
<h1><a href="https://gitlab.com/yaal/sheraf">sheraf</a></h1>
<p><em>A versatile ZODB abstraction layer</em></p>
<ul>
<li><a href="https://gitlab.com/yaal/sheraf/-/merge_requests/16">Attribute hooks</a></li>
<li><a href="https://gitlab.com/yaal/sheraf/-/merge_requests/15">Values method can index single values</a></li>
<li><a href="https://gitlab.com/yaal/sheraf/-/merge_requests/14">Better QuerySet performances</a></li>
<li><a href="https://gitlab.com/yaal/sheraf/-/merge_requests/13">Enum attribute</a></li>
<li><a href="https://gitlab.com/yaal/sheraf/-/merge_requests/12">Attribute shared indexes</a></li>
<li><a href="https://gitlab.com/yaal/sheraf/-/merge_requests/11">Indexes alternate definitions</a></li>
<li><a href="https://gitlab.com/yaal/sheraf/-/merge_requests/10">raise exception if ModelAttribute is called without Model</a></li>
</ul>
<h1><a href="https://github.com/python-ldap/python-slapd">python-slapd</a></h1>
<p><em>Controls a slapd process in a pythonic way</em></p>
<ul>
<li>Project creation and publication.</li>
</ul>
<h1>cpython</h1>
<ul>
<li><a href="https://github.com/python/cpython/pull/24864">pprint.pprint function displays integer with underscores</a></li>
<li><a href="https://github.com/python/cpython/pull/23872">Change URL for 'from' link when used in a raised exception</a></li>
<li><a href="https://github.com/python/pythondotorg/pull/1763">fix input-output order in interpreter example</a></li>
</ul>
<h1><a href="https://github.com/wtforms/wtforms">wtforms</a></h1>
<p><em>A flexible forms validation and rendering library for Python.</em></p>
<ul>
<li><a href="https://github.com/wtforms/wtforms/pull/689">New logo</a></li>
</ul>
<h1>Debian</h1>
<ul>
<li><a href="https://salsa.debian.org/ddp-team/release-notes/-/merge_requests/103">Improved publication notes</a></li>
</ul>