From 436c5e7602e071b2a8178891ec735fa7d9d00af4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alexis=20M=C3=A9taireau?=
- {{ article.headline }}
-
|
-| It's separated as different small atomic libraries, which makes it easy to switch bits of the code if needed, without throwing everything away. | Seems to be a one-person project until now |
-| The interface [proposes to store different type of data](https://jsonjoy.com/libs/json-joy-js/json-crdt/guide/node-types) (constants, values, arrays, etc) | Quite recent, so probably rough spots are to be found |
-| Distributed as different type of JS bundles (modules, wasm, etc) | I didn't find a lot of support, (probably because the project is still quite new) |
-## Summarizing CRDT Libraries for uMap
+| Pros | Cons |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
+| Low level, so you know what you're doing | It doesn't provide a high level interface for sync
|
+| Small atomic libraries, making it easy to use only the parts we need. | It's currently a one-person project, without clear community channels to gather with other interested folks. |
+| The interface [proposes to store different type of data](https://jsonjoy.com/libs/json-joy-js/json-crdt/guide/node-types) (constants, values, arrays, etc) | Quite recent, so probably rough spots are to be found |
+| Distributed as different type of JS bundles (modules, wasm, etc) |
-Let's summarize the key considerations and how each CRDT library aligns with our objectives for uMap. The goal is to assess their fit in terms of specific collaborative features, efficiency, and ease of integration.
+---
+## Part 3: Key takeaways
-| Feature / Library | Y.js | Automerge | JSON Joy |
-| ------------------------- | ------------------------------------------------------ | ---------------------------------------------------------- | --------------------------------------------------------------- |
-| Intuitive API | Provides a natural feel with native JS objects. | API is transactional, detailed for change tracking. | Low-level API offers granular control. |
-| Synchronization Protocol | Multiple options with providers, including WebSockets. | Multiple options with providers, including WebSockets. | Requires custom implementation for sync. |
-| Conflict Resolution | Automatic merging with Y.js's internal mechanisms. | Detailed conflict detection and resolution API. | Allows control over data types and operations. |
-| Offline Changes Handling | Inbuilt support for offline edits and synchronization. | Requires a more manual approach to handle offline changes. | Focused on model updates without specifics on network handling. |
-| Versioning and History | Supports selective versioning through snapshots. | Designed with robust version history tracking. | Model is versioned but favors compact storage. |
-| Community and Support | Active community with regular updates. | Strong support with a focus on collaboration. | Smaller community; promising but less established. |
-| Library Size / Efficiency | Small size with efficient operation. | Larger library with dependency on WebAssembly. | Modular design with compact size. |
-| Browser Compatibility | Broad compatibility, some bundler dependencies. | Supports modern browsers with potential polyfills. | Flexible bundles for diverse browser support. |
-| Suitability for uMap | Ready-to-use with good documentation and examples. | Strong features, may require significant integration. | Promising, would need robustness as it matures. |
+Y.js:
-## Notes on YATA and RGA
+- **JavaScript objects API**: uses native JS objects, making it easier to integrate with existing applications (but can also transport metadata we don't really want)
+- **WebSockets**: a "connection provider" exists for WebSockets, handling offline changes, reconnections, etc. The currently implemented provider considers the server as a central node, which also maintains a CRDT locally.
+- **Awareness API**: a protocol defined to send awareness information (who is connected, and for instance the cursor position)
+- Versioning and history: Supports selective versioning through snapshots.
+- Community and support: Active community with regular updates.
+- Library Size / Network usage: Small size with efficient default compression of the data.
+
+Suitability for uMap: Ready-to-use with good documentation and examples, might do more than what we need, some bundler dependencies.
+
+Automerge:
+
+- **Transactional API**: API is transactional (edits should happen in a function), making it obvious, but can also be harder to implement.
+- **WebSockets**: Multiple options with providers and storage, including WebSockets. It works similarly to the y.js one, with a copy of the data living on the server. There is currently no detection of offline / retry on disconnect, or awareness API.
+- **Conflict Resolution**: [A conflict detection API](https://automerge.org/docs/documents/conflicts/) exists, which make it easy to get the conflicting values, when it happens.
+- **Offline Changes Handling**: Requires a more manual approach to handle offline changes.
+- Versioning and History: Designed with robust version history tracking.
+- **Community and Support**: Strong support with a focus on collaboration.
+- **Library Size / Efficiency**: Larger library with dependency on WebAssembly.
+
+JSON Joy:
+
+- **Lower-level API**: A low-level API offers granular control, it's more hands-on, but less magic.
+- **WebSockets**: Nothing is provided in this area, and it would need to be implemented by ourselves.
+- **Community and Support**: there is only one maintainer as of now, and the community doesn't exist yet.
+- **Browser Compatibility**: Flexible bundles for diverse browser support, which might be helpful in our case.
+
+## Extra notes
+
+### YATA and RGA
While researching, I found that the two popular CRDTs implementation out there use different approaches for the virtual counter:
@@ -337,7 +426,7 @@ While researching, I found that the two popular CRDTs implementation out there u
### Resources
-- [Bartosz Sypytkowski](https://www.bartoszsypytkowski.com/the-state-of-a-state-based-crdts/) introduction on CRDTs, with practical exemples is very intuitive.
-- [CRDT Implementations](https://jzhao.xyz/thoughts/CRDT-Implementations#replicated-growable-array-rga)
-- [CRDTs: The Hard Parts - YouTube](https://www.youtube.com/watch?v=x7drE24geUw)
+- [CRDTs: The Hard Parts](https://www.youtube.com/watch?v=x7drE24geUw), a video by Martin Kleppmann where he explains the current state of the art of CRDTs, and why some problems aren't solved yet.
- [An Interactive Intro to CRDTs](https://jakelazaroff.com/words/an-interactive-intro-to-crdts/) gets you trough different steps to understand what are CRDTs, and how to implement a LWW Register.
+- [Bartosz Sypytkowski](https://www.bartoszsypytkowski.com/the-state-of-a-state-based-crdts/) introduction on CRDTs, with practical exemples is very intuitive.
+- [CRDT Implementations](https://jzhao.xyz/thoughts/CRDT-Implementations) contains nice information and vocabulary useful when working with CRDTs.
diff --git a/content/pages/projets.md b/content/pages/projets.md
index 2fec04a..78d8bc2 100644
--- a/content/pages/projets.md
+++ b/content/pages/projets.md
@@ -1,67 +1,8 @@
---
-save_as: projets.html
+save_as: projets/index.html
slug: projets
---
-# Projets
-
-J'ai pu jouer avec travailler sur plusieurs projets au fil des années, et bien souvent j'ai passé la main sur certains projets que j'ai initié, pour pouvoir faire autre chose.
-
-Voici quelques logiciels que j'ai initié, ou bien auxquels j'ai participé. Vous pouvez aussi aller faire un tour sur mes dépots publics ([Github](https://github.com/almet) ou [Gitlab](https://gitlab.com/almet))
-
-[Générateur de motifs jacquard (tricot)](https://bekeko.notmyidea.org/) (2022)
-: Un petit logiciel pour faciliter la vie d'une amie qui fabrique des chaussons à la main. L'idée est de pouvoir choisir des motifs et des couleurs, et de se rendre compte du résultat. ([codé en Elm](https://github.com/almet/bekeko))
-
-[Copanier](https://github.com/spiral-project/copanier) (2019-2024)
-: Un logiciel web créé en 2019, qui permet d'organiser des groupements
-d'achats. J'ai repris et adapté le logiciel pour
-l'usage d'un groupement auquel je participe. ([codé en python](https://github.com/almet/copanier))
-
-[I Hate Money](http://ihatemoney.org) (2011-2023)
-: Un site web qui permet de gérer les dépenses de groupes, [créé fin
-2011](https://blog.notmyidea.org/how-are-you-handling-your-shared-expenses.html).
-Il est possible de rentrer qui à payé quoi, et pour qui, et une balance est
-gérée pour vous. Je maintiens une instance ouverte sur [ihatemoney.org](https://ihatemoney.org). ([codé en python+flask](https://github.com/spiral-project/ihatemoney))
-
-[Kinto](https://github.com/kinto/kinto) (2012-2015)
-: Un backend générique pour des applications Web. J'ai initié ce projet avec
-des collègues [en
-2012](https://blog.notmyidea.org/thoughts-about-a-form-generation-service-gis-enabled.html)
-alors que je travaillais pour Mozilla. Le projet est actuellement utilisé pour
-gérer la synchronisation de certaines données dans Firefox. ([codé en python+pyramid](https://github.com/Kinto/kinto))
-
-[Pelican](http://getpelican.com) (2010-2020)
-: Un générateur de site statique [créé en
-2010](https://blog.notmyidea.org/pelican-a-simple-static-blog-generator-in-python.html).
-Ce site fonctionne grace à ce logiciel, et il est utilisé par des projets comme
-le [Noyau Linux](https://www.kernel.org/pelican.html) et
-[Debian](https://bits.debian.org/pages/about.html). L'idée est de pouvoir transformer des fichiers [au format Markdown](https://fr.wikipedia.org/wiki/Markdown) en un site web qui ne sera pas regénéré à chaque requête, et qui est donc très facile à héberger. ([codé en python](https://github.com/getpelican/pelican))
-
----
-
-## Expériences passées
-
-En sortant de mes études, j'ai d'abord travaillé en tant que developpeur avant de monter une brasserie artisanale.
-
-[Mozilla](https://mozilla.org)
-: J'ai travaillé de 2011 à 2016 pour Mozilla au sein de l'équipe « Services ».
-J'ai pu travailler sur des projets autour des données utilisateur, du
-chiffrement et de la synchronisation, ainsi que pour le passage à l'échelle de
-certaines sites comme addons.mozilla.com.
-
-[Brasserie du Vieux Singe](https://www.vieuxsinge.com/)
-: J'ai co-fondé en 2017 une brasserie artisanale biologique qui défend des
-valeurs de coopération, de partage et de gastronomie. J'en suis parti à l'été
-2023 pour retourner vers le developpement. La Brasserie existe toujours.
-
-[Le Grappe](https://www.reseaugrappe.org/)
-: Durant mes années étudiantes (2007-2012), j'ai participé à la création et à l'animation
-d'un réseau d'associations « porteuses de projets en environnement ». Un bon
-moyen de rencontrer d'autres personnes animées par des valeurs collectivistes,
-et de chercher à s'organiser contre l'artificialisation du monde.
-
----
-
## 🌟 Valeurs et intérets
Logiciel Libre
@@ -83,6 +24,72 @@ Bonne humeur
---
+## Projets
+
+J'ai pu jouer avec travailler sur plusieurs projets au fil des années. Bien souvent j'ai passé la main sur ceux que j'ai initié.
+
+Voici quelques logiciels auxquels j'ai participé. Vous pouvez aussi aller faire un tour sur mes dépots publics ([Github](https://github.com/almet) ou [Gitlab](https://gitlab.com/almet))
+
+🗺️ [uMap](https://umap-project.org) (2023-2024)
+: Un logiciel de création de cartes pour le web. J'y travaille sur l'ajout de fonctionalités de collaboration, pour que plusieurs utilisateur·ices puissent voir les éditions des autres, en « temps réel ».
+
+🚨 [Argos](https://framasoft.frama.io/framaspace/argos/) (2023-2024)
+: Un logiciel de supervision de sites web, et un *status board*, realisé pour le compte de l'[association Framasoft](https://framasoft.org).
+
+🧶 [Générateur de motifs jacquard (tricot)](https://bekeko.notmyidea.org/) (2022)
+: Un petit logiciel pour faciliter la vie d'une amie qui fabrique des chaussons à la main. L'idée est de pouvoir choisir des motifs et des couleurs, et de se rendre compte du résultat. ([codé en Elm](https://github.com/almet/bekeko))
+
+🙌 [Copanier](https://github.com/spiral-project/copanier) (2019-2024)
+: Un logiciel web créé en 2019, qui permet d'organiser des groupements
+d'achats. J'ai repris et adapté le logiciel pour
+l'usage d'un groupement auquel je participe. ([codé en python](https://github.com/almet/copanier))
+
+💸 [I Hate Money](http://ihatemoney.org) (2011-2023)
+: Un site web qui permet de gérer les dépenses de groupes, [que j'ai créé fin
+2011](https://blog.notmyidea.org/how-are-you-handling-your-shared-expenses.html).
+Il est possible de rentrer qui à payé quoi, et pour qui, et une balance est
+gérée pour vous. Je maintiens une instance ouverte sur [ihatemoney.org](https://ihatemoney.org). ([codé en python+flask](https://github.com/spiral-project/ihatemoney))
+
+🔄 [Kinto](https://github.com/kinto/kinto) (2012-2015)
+: Un « backend » générique pour des applications Web. J'ai initié ce projet avec
+des collègues [en
+2012](https://blog.notmyidea.org/thoughts-about-a-form-generation-service-gis-enabled.html)
+alors que je travaillais pour Mozilla. Le projet est actuellement utilisé pour
+gérer la synchronisation de certaines données dans Firefox. ([codé en python+pyramid](https://github.com/Kinto/kinto))
+
+✍️ [Pelican](http://getpelican.com) (2010-2020)
+: Un générateur de site statique [que j'ai créé en
+2010](https://blog.notmyidea.org/pelican-a-simple-static-blog-generator-in-python.html).
+Ce site fonctionne grace à ce logiciel, et il est utilisé par des projets comme
+le [Noyau Linux](https://www.kernel.org/pelican.html) et
+[Debian](https://bits.debian.org/pages/about.html). L'idée est de pouvoir transformer des fichiers [au format Markdown](https://fr.wikipedia.org/wiki/Markdown) en un site web qui ne sera pas regénéré à chaque requête, et qui est donc très facile à héberger. ([codé en python](https://github.com/getpelican/pelican))
+
+---
+
+## Expériences
+
+[Développeur indépendant](https://blog.notmyidea.org) (depuis 2023)
+: Je travaille en tant que développeur au sein de ma propre structure.
+
+[Brasserie du Vieux Singe](https://www.vieuxsinge.com/) (2017 - 2023)
+: J'ai co-fondé une brasserie artisanale biologique qui défend des
+valeurs de coopération, de partage et de gastronomie. J'en suis parti à l'été
+2023 pour retourner vers le developpement. La Brasserie existe toujours.
+
+[Mozilla](https://mozilla.org) (2011 - 2016)
+: J'ai travaillé pour Mozilla au sein de l'équipe « Services ».
+J'ai pu travailler sur des projets autour des données utilisateur, du
+chiffrement et de la synchronisation, ainsi que pour le passage à l'échelle de
+certaines sites comme addons.mozilla.com.
+
+[Le Grappe](https://www.reseaugrappe.org/) (2007 - 2012)
+: Durant mes années étudiantes, j'ai participé à la création et à l'animation
+d'un réseau d'associations « porteuses de projets en environnement ». Un bon
+moyen de rencontrer d'autres personnes animées par des valeurs collectivistes,
+et de chercher à s'organiser contre l'artificialisation du monde.
+
+---
+
## 🧑🔧Technologie
Python
diff --git a/content/pages/worklog/umap.md b/content/pages/worklog/umap.md
index 5331f8b..aa94851 100644
--- a/content/pages/worklog/umap.md
+++ b/content/pages/worklog/umap.md
@@ -4,6 +4,15 @@ save_as: umap/index.html
template: worklog
total_days: 25
---
+
+## Vendredi 15 Mars 2024 (4h, 5/5)
+
+J'ai terminé ([PR](https://github.com/umap-project/umap/pull/1692)) la séparation du rendering avec la mise à jour des données, en suivant la piste commencée mardi, puis j'ai passé un peu de temps à faire marcher json joy, suite aux retours du mainteneur. L'API générale me semble bien pour des gens qui utilisent des composants qui savent se re-rendre, mais quand on a besoin de savoir ce qui a été modifié dans le patch, il faut regarder la dedans à la main ce qui rends toute l'opération un peu plus précaire.
+
+Bon, j'ai réussi à faire marcher le tout c'est l'important ! J'en ai profité pour bouger le code de [leaflet-sync](https://gitlab.com/umap-project/leaflet-sync) dans l'organisation umap-project dans gitlab.
+
+Normalement, tout est en place pour qu'on puisse commencer à ajouter du websocket dans le mix, surement dans le courant de la semaine prochaine !
+
## Mardi 12 Mars 2024 (7h, 5/5)
Une bonne journée, passée majoritairement en pair prog avec Yohan. On a d'abord fait un point de synchro sur l'avancement général de la synchro, durant lequel on a plus ou moins décidé d'aller dans un premier temps vers la version simple de la synchronisation, en faisant en sorte que les clients écrasent les données des autres clients, avec le serveur qui s'occupe de faire le passe-plat.
diff --git a/mnmlist/static/css/main.css b/mnmlist/static/css/main.css
index 4f5e25b..328e8e8 100644
--- a/mnmlist/static/css/main.css
+++ b/mnmlist/static/css/main.css
@@ -1,5 +1,5 @@
/*
- Theme Name: mnmlist modified by almet
+ Theme Name: mnmlist modified by Alexis Métaireau
Theme URI: http://mathieu.agopian.info/mnmlist/theme.html
Description: Theme adapted from http://mnmlist.com/theme/ from Leo Babauta, a very clean minimalist theme, without comments, search, archives or other features.
Author: Mathieu Agopian, Mathieu Leplatre, Alexis Métaireau
@@ -77,7 +77,6 @@ h1 {
font-size: 2em;
font-weight: normal;
margin-bottom: 0;
- font-weight: bold;
line-height: 1.2em;
}
@@ -224,10 +223,6 @@ a.tag:hover {
color: var(--highlight-hover);
}
-ul {
- list-style-type: none;
-}
-
ul li,
ol li {
line-height: 30px;
@@ -468,10 +463,13 @@ a[data-size='5'] {
font-size: 2.2em;
}
+.footer #feed {
+ top: 5px;
+}
+
#feed {
text-decoration: none;
position: relative;
- top: 5px;
}
#feed img {
height: 25px;
@@ -532,22 +530,22 @@ dd {
text-align: center;
}
-article {
- text-align: justify;
-}
-
nav {
padding-top: 2em;
}
.navigation {
list-style-type: none;
- display: inline-block;
padding-left: 0px;
+ width: 100%;
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ justify-content: center;
}
.navigation > li {
- display: inline;
+ display: inline-flex;
padding: 0px 0.5em;
}
diff --git a/mnmlist/templates/article.html b/mnmlist/templates/article.html
index 4c661dd..964eb11 100644
--- a/mnmlist/templates/article.html
+++ b/mnmlist/templates/article.html
@@ -3,56 +3,45 @@
{% block content %}
- {{ article.title }}
-
- {% if article.headline %}
-
- par {{ article.author }}
-
-
{{ article.title }}
-
-
+
+ {{ article.title }}
+
+
+ {% else %}
+
+ de {{ article.author }}
+ {{ article.title }}
+
+ {% endif %}
+
{{ article.headline }}
{% endif %} -{% endif %} + {% if article.isbn_cover %} +