blog.notmyidea.org/umap/index.html

249 lines
No EOL
21 KiB
HTML

<!DOCTYPE html>
<html lang="fr">
<head>
<title>
uMap - Alexis Métaireau </title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet"
href="https://blog.notmyidea.org/theme/css/main.css?v2"
type="text/css" />
<link href="https://blog.notmyidea.org/feeds/all.atom.xml"
type="application/atom+xml"
rel="alternate"
title="Alexis Métaireau ATOM Feed" />
<script src="https://cdn.jsdelivr.net/npm/vega@5"></script>
<script src="https://cdn.jsdelivr.net/npm/vega-lite@5"></script>
<script src="https://cdn.jsdelivr.net/npm/vega-embed@6"></script>
</head>
<body>
<div id="content">
<section id="links">
<ul>
<li>
<a class="main" href="/">Alexis Métaireau</a>
</li>
<li>
<a class=""
href="https://blog.notmyidea.org/journal/index.html">Journal</a>
</li>
<li>
<a class=""
href="https://blog.notmyidea.org/code/">Code, etc.</a>
</li>
<li>
<a class=""
href="https://blog.notmyidea.org/weeknotes/">Notes hebdo</a>
</li>
<li>
<a class=""
href="https://blog.notmyidea.org/lectures/">Lectures</a>
</li>
<li>
<a class=""
href="https://blog.notmyidea.org/projets.html">Projets</a>
</li>
</ul>
</section>
<header>
<h1 class="post-title">uMap</h1>
<div>
▓▓▓▓▓▓▓░░░ 74% (129h / 175 prévues)
</div>
<ul>
<li>129h rémunérées</li>
<li>4h bénévoles</li>
</ul>
</header>
<article>
<div id="vis"></div>
<h2 id="lundi-18-decembre-2023">🗓️ Lundi 18 décembre&nbsp;2023</h2>
<p>J&#8217;ai creusé sur mon idée de faire en sorte de synchroniser un point, j&#8217;ai une meilleure compréhension de ou m&#8217;insérer dans le code, et j&#8217;ai pu commencer à coder un bout de code qui fait la connexion avec le&nbsp;stockage.</p>
<p>J&#8217;ai aussi commencé à coder la partie stockage, en mettant de côté pour le moment la partie <span class="caps">CRDT</span> en tant que telle, j&#8217;ai l&#8217;impression de voir comment ça va fonctionner&nbsp;maintenant.</p>
<p>J&#8217;ai découvert la documentation de Leaflet <a href="https://leafletjs.com/reference.html#class">sur comment les objets fonctionnent</a> et la documentation de <a href="http://leaflet.github.io/Leaflet.Editable/doc/api.html#editable">Leaflet Editable</a> qui étaient en fait des lectures indispensables à la bonne compréhension du code de&nbsp;umap.</p>
<p>On a terminé la journée avec une session de pair avec Yohan qui était vraiment bien : j&#8217;avais des questions précises et on a pu avancer ensemble vers plus de&nbsp;clarté.</p>
<h2 id="samedi-16-decembre-2023">🗓️ Samedi 16 décembre&nbsp;2023</h2>
<p>J&#8217;ai eu envie de commencer à m&#8217;intégrer avec uMap, pour ce qui est de la synchronisation des données. Pas forcement pour faire les choses <em>en version finale</em>, mais plutôt pour avancer un peu sur ma compréhension du code de manière&nbsp;générale.</p>
<p>Objectif: faire de la synchronisation de données pour un point. Quand il est ajouté sur une carte, je veux pouvoir récupérer un évènement de l&#8217;autre côté et l&#8217;afficher sur cette seconde carte. Éventuellement j&#8217;aimerai bien pouvoir suivre le drag-n-drop&nbsp;également.</p>
<p>J&#8217;ai passé l&#8217;aprèm à mettre des petits points d&#8217;arrêts dans mon navigateur web, pour mieux comprendre où ce serait le plus logique de m&#8217;insérer pour voir les modifications sur la carte, pour enfin commencer à ajouter <code>Y.js</code> dans le code (en tant que&nbsp;module).</p>
<p>Le fait qu&#8217;on utilise pas de bundler rends les choses un peu plus compliquées, mais je suis content d&#8217;avoir la main sur comment les choses sont&nbsp;faites.</p>
<p>J&#8217;ai un peu bloqué sur l&#8217;utilisation de Y.<span class="caps">JS</span>, qui s&#8217;attends à ce que d&#8217;autres modules soient disponibles dans des namespaces spécifiques, ce qui ne correspond pas vraiment à nos&nbsp;pratiques.</p>
<p>J&#8217;ai découvert <a href="">import maps</a> et j&#8217;ai commencé à les utiliser, mais ça ne semble pas suffire pour notre approche &#8220;simpliste&#8221;. En tout cas, pas pour Y.<span class="caps">JS</span>&nbsp;(https://github.com/yjs/yjs/issues/325)</p>
<h2 id="vendredi-15-decembre-2023">🗓️ Vendredi 15 décembre&nbsp;2023</h2>
<p>🚗 J&#8217;ai travaillé depuis la maison, suite à des soucis de&nbsp;voiture. </p>
<p>J&#8217;ai continué le travail sur l&#8217;ajout de l&#8217;utilisation de modules Javascript, pour pouvoir gérer les imports et les exports, plutôt que d&#8217;avoir tout dans le namespace&nbsp;global.</p>
<p>J&#8217;ai pu discuter avec Vincent puis avec David du sujet. Je suis content <a href="https://github.com/umap-project/umap/pull/1463">de l&#8217;approche prise</a>, qui devrait permettre de moderniser un peu la base de code, sans pour autant utiliser des technologies de transpilation, ni de bundling qui rendent l&#8217;expérience développeur plus&nbsp;complexe.</p>
<p>J&#8217;en ai profité pour <a href="https://github.com/umap-project/umap/pull/1471">ajouter mes apprentissages</a> dans la documentation développeur, le genre d&#8217;informations que je récupère à droite à gauche et qui sont utiles pour pouvoir&nbsp;contribuer.</p>
<p>J&#8217;ai un peu réorganisé mes notes autour des différents challenges qu&#8217;on a sur ce projet concernant les différents aspects (stockage, réactivité, réconcialiation des données, transport). Et entre autre autour de la partie&nbsp;transport.</p>
<h2 id="jeudi-14-decembre-2023">🗓️ Jeudi 14 décembre&nbsp;2023</h2>
<p>Réunion le matin avec Yohan et NLNet, l&#8217;idée était de valider notre plan d&#8217;action, et c&#8217;est bon. Les documents sont signés on est surs d&#8217;avoir le financement. Sacrée nouvelle&nbsp;:-)</p>
<p>J&#8217;ai découvert au passage quelques bibliothèques intéressantes (<a href="https://jsonjoy.com/"><span class="caps">JSON</span> Joy</a> et <a href="https://p2panda.org/">p2panda</a>), qui pourraient potentiellement nous&nbsp;intéresser. </p>
<p>J&#8217;ai passé un peu de temps en amont pour retravailler la proposition qu&#8217;on leur avait faite, et après pour leur donner dans le format qu&#8217;iels&nbsp;souhaitaient.</p>
<p>L&#8217;après-midi j&#8217;ai passé un peu de temps pour voir comment on pourrait utiliser des modules <span class="caps">JS</span> dans umap sans tout changer pour autant&nbsp;😇</p>
<h2 id="mercredi-13-decembre-2023">🗓️ Mercredi 13 décembre&nbsp;2023</h2>
<h2 id="mardi-12-decembre-2023">🗓️ Mardi 12 décembre&nbsp;2023</h2>
<p>Matinée loupée suite à une blessure au poignet la veille au soir. Après-midi passée en partie avec David pour mettre en place l&#8217;utilisation de web&nbsp;components.</p>
<h2 id="lundi-11-decembre-2023">🗓️ Lundi 11 décembre&nbsp;2023</h2>
<p>Matinée passée à imaginer comment les données pourraient êtres structurées dans le client, et comment l&#8217;interface pourrait se faire avec les objets&nbsp;leaflet.</p>
<p>Après-midi à faire un point humain, puis un point technique, avec la rencontre de (peut-être ?) notre prochaine&nbsp;bizdev.</p>
<p>Discussion technique avec David. Peut-être qu&#8217;un algorithme de merge qui serait présent sur le serveur et sur le client pourrait nous permettre de nous passer de la complexité des&nbsp;CRDTs?</p>
<h2 id="mercredi-06-decembre-2023">🗓️ Mercredi 06 décembre&nbsp;2023</h2>
<p>J&#8217;ai terminé de faire quelques légers changements dans la documentation, avant de me plonger dans le code javascript et de commencer à faire du&nbsp;refactoring.</p>
<p>J&#8217;ai passé du temps à comprendre comment avoir côte à côte des modules <span class="caps">ES6</span> et du code de type « script ». J&#8217;ai ensuite commencé à créer des modules javascript en charge de la sauvegarde des données. En tirant les fils je me rends compte qu&#8217;il va sans doute falloir que je repasse sur le code qui s&#8217;occupe des requêtes <span class="caps">XHR</span> à l&#8217;ancienne, pour le remplacer par de&nbsp;l&#8217;async/await.</p>
<p>J&#8217;avais oublié à quel point faire des requêtes depuis le navigateur était compliqué à l&#8217;époque&nbsp;!</p>
<h2 id="mardi-05-decembre-2023">🗓️ Mardi 05 décembre&nbsp;2023</h2>
<p>J&#8217;ai mis à plat ce que j&#8217;ai appris ces dernières semaines sur le projet, pour pouvoir décider vers où aller pour la suite des&nbsp;évènements.</p>
<p>Une discussion avec Yohan me fait pencher vers la piste que je mettais de côté à cause des changements qui sont nécessaires côté client: les&nbsp;CRDTs.</p>
<h2 id="mercredi-29-novembre-2023">🗓️ Mercredi 29 novembre&nbsp;2023</h2>
<p>J&#8217;ai passé du temps sur la <span class="caps">PR</span> du merge optimiste, pour essayer de changer le fonctionnement qui passe actuellement par la modification des champs de formulaires envoyés, ce que je ne trouve pas très&nbsp;clean.</p>
<p>Le travail pour faire autrement me semble trop important pour le moment, on accepte la <span class="caps">PR</span> telle quelle, avec l&#8217;idée de passer par une <span class="caps">API</span> plus tard, avec la refonte avec <span class="caps">DRF</span>.</p>
<p>J&#8217;ai aussi travaillé sur la&nbsp;documentation.</p>
<h2 id="mardi-28-novembre-2023">🗓️ Mardi 28 novembre&nbsp;2023</h2>
<p>Travail de projection pour NLNet, puis réunion l&#8217;après-midi. J&#8217;ai ensuite repris les recherches pour affiner l&#8217;utilisation des&nbsp;CRDTs.</p>
<h2 id="lundi-27-novembre-2023">🗓️ Lundi 27 novembre&nbsp;2023</h2>
<p>Matinée passée à organiser ma semaine, à participer a la présentation de NLNet (très bon accueil, et clarifications utiles), puis à faire un petit tour de uMap côté front avec&nbsp;Yohan.</p>
<p>L&#8217;après-midi j&#8217;ai commencé à intégrer les notes que j&#8217;ai prises sur le côté <span class="caps">JS</span> à la documentation actuelle, et j&#8217;en ai profité pour refaire un tour sur la documentation actuelle pour la simplifier et la&nbsp;clarifier.</p>
<h2 id="vendredi-24-novembre-2023">🗓️ Vendredi 24 novembre&nbsp;2023</h2>
<p>Réunion d&#8217;avancement et point avec David et Yohan pour préparer la suite concernant&nbsp;NLNet.</p>
<p>Je suis content d&#8217;avoir préparé le point, et je mesure l&#8217;importance donnée aux personnes dans les&nbsp;process.</p>
<h2 id="jeudi-23-novembre-2023">🗓️ Jeudi 23 novembre&nbsp;2023</h2>
<p>J&#8217;ai passé du temps pour faire passer les tests dans le <span class="caps">CI</span>, et résolu quelques problèmes au&nbsp;passage.</p>
<h2 id="mercredi-22-novembre-2023">🗓️ Mercredi 22 novembre&nbsp;2023</h2>
<p>J&#8217;ai exploré l&#8217;utilisation de Websockets pour le transport, entre autre sa consommation mémoire, il semblerait que ce soit tout à fait acceptable (1gb de mémoire permet de gérer 1500 connexions&nbsp;concurrentes).</p>
<p>WebRTC n&#8217;est <a href="https://gitlab.torproject.org/legacy/trac/-/issues/8178">actuellement pas supporté par Tor Browser </a>(<a href="https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41021">pour le moment</a>), donc j&#8217;imagine que c&#8217;est une fausse&nbsp;piste.</p>
<p>J&#8217;ai repassé un bon coup sur la <span class="caps">PR</span> du merge optimiste. Je suis content du résultat: le code et des tests me semblent plus lisibles et&nbsp;compréhensibles.</p>
<p>L&#8217;après-midi à été passée avec Yohan qui m&#8217;a fait un tour du frontend. J&#8217;en ai profité pour prendre des notes que je pense publier dans la documentation. C&#8217;était très utile d&#8217;avoir ses explications, le code n&#8217;est pas si simple à prendre en&nbsp;main.</p>
<h2 id="mardi-21-novembre-2023">🗓️ Mardi 21 novembre&nbsp;2023</h2>
<p>Une matinée passée à la fois à préparer la semaine et à rédiger un résumé de ce que j&#8217;ai fait la semaine dernière.
J&#8217;ai passé un peu plus de temps à comprendre en profondeur le code de merge de la <span class="caps">PR</span> de Biondi biondo, pour pouvoir l&#8217;expliquer dans un article de&nbsp;blog.</p>
<p>L&#8217;après-midi j&#8217;ai participé à la weekly et lu l&#8217;article de blog de Figma qui explique leur approche pour implementer du temps&nbsp;réel.</p>
<p>J&#8217;avance petit à petite sur la piste d&#8217;utiliser un <span class="caps">CRDT</span> &#8220;maison&#8221;, voire pas de <span class="caps">CRDT</span> du tout, en fonction de nos besoins réels. Un <span class="caps">CRDT</span> nous permettrait d&#8217;avoir plusieurs personnes qui travaillent en même temps sur une même feature (au sens GeoJSON), mais je ne sais pas encore si c&#8217;est un cas d&#8217;usage&nbsp;réel.</p>
<h2 id="samedi-18-novembre-2023">🗓️ Samedi 18 novembre&nbsp;2023</h2>
<p>J&#8217;ai passé un peu de temps à intégrer l&#8217;intégration continue de Github. Je pensais que ce serait rapide mais je ne devais pas être très&nbsp;réveillé…</p>
<h2 id="vendredi-17-novembre-2023">🗓️ Vendredi 17 novembre&nbsp;2023</h2>
<p>J&#8217;ai passé du temps pour essayer de comprendre comment utiliser SQLite en local à l&#8217;intérieur d&#8217;un navigateur, en utilisant <a href="https://vlcn.io/docs/cr-sqlite/intro">cr-sqlite</a>. J&#8217;ai un prototype qui fonctionne à peu près et qui permet de récupérer les éditions en local pour les synchroniser avec une autre base&nbsp;SQLite.</p>
<p>Fait un point avec l&#8217;équipe sur l&#8217;avancement général&nbsp;l&#8217;après-midi.</p>
<p>Ensuite continué à creuser sur l&#8217;utilisation de SQLite avec&nbsp;cr-sqlite.</p>
<h2 id="mardi-14-novembre-2023">🗓️ Mardi 14 novembre&nbsp;2023</h2>
<p>Une matinée passée avec Yohan pour à la fois <a href="https://github.com/umap-project/umap/pull/772/">avancer sur la <span class="caps">PR</span> pour merger des conflits simples</a>. On a passé le code en revue et fait quelques changements cosmétiques qui devraient aider à la compréhension&nbsp;générale.</p>
<p>La deuxième partie de la matinée à été utilisée pour discuter des découvertes et des questions que je me pose quand à comment faire pour ajouter ces fonctions de collaboration temps&nbsp;réel.</p>
<p>Plusieurs trucs à noter :
- Il est possible de challenger l&#8217;utilisation de geoJSON pour le stockage des données. On a parlé entre autres de pmtiles et de&nbsp;sqlite.</p>
<p>J&#8217;ai passé un début d&#8217;après-midi à installer mon environnement de travail sur Linux, puis j&#8217;ai :
- terminé de rebaser la pull request pour faire un merge optimiste.
- amélioré la vitesse d&#8217;execution des&nbsp;tests</p>
<p>Découvertes :
- https://www.geopackage.org/
-&nbsp;https://vlcn.io/docs/js/reactivity</p>
<h2 id="lundi-13-novembre-2023">🗓️ Lundi 13 novembre&nbsp;2023</h2>
<p>J&#8217;ai cherché à comprendre comment il serait possible de s&#8217;intégrer avec Leaflet. Je connais assez mal l&#8217;écosystème donc j&#8217;ai cherché les plugins autour de stockage de données et de la&nbsp;synchronisation.</p>
<p>Beaucoup de clicks, de lecture et de compréhension des contours de l&#8217;écosystème <span class="caps">SIG</span>, et de l&#8217;écosystème de&nbsp;Leaflet.</p>
<p>J&#8217;ai aussi creusé autour des <span class="caps">SSE</span> et de WebRTC, question de comprendre les limites et avantages de&nbsp;chacun.</p>
<h2 id="mardi-07-novembre-2023">🗓️ Mardi 07 novembre&nbsp;2023</h2>
<ul>
<li>Lu la documentation&nbsp;d&#8217;automerge</li>
<li>Commencé à faire un prototype pour voir le fonctionnement d&#8217;automerge en&nbsp;python</li>
<li>Installé les dépendances rust, compilé&nbsp;automerge</li>
<li>Réunion discussion avec Yohan sur mes questions et sur les différentes&nbsp;pistes</li>
</ul>
<h2 id="lundi-06-novembre-2023">🗓️ Lundi 06 novembre&nbsp;2023</h2>
<ul>
<li>Lu le code qui est dans uMap actuellement pour comprendre le fonctionnement&nbsp;actuel</li>
<li>Commencé à rédiger un document avec les différentes options pour faire de la&nbsp;synchro</li>
<li>Fais des recherches sur les différentes options pour faire de la&nbsp;synchro</li>
</ul>
</article>
<script>
const spec = {
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"width": 500,
"height": 200,
"data":
{
"name": "table",
"values": [
{"date": "2023-12-18", "series": "Rémunéré", "count": 9},
{"date": "2023-12-18", "series": "Bénévole", "count": 0},
{"date": "2023-12-16", "series": "Rémunéré", "count": 4},
{"date": "2023-12-16", "series": "Bénévole", "count": 0},
{"date": "2023-12-15", "series": "Rémunéré", "count": 7},
{"date": "2023-12-15", "series": "Bénévole", "count": 0},
{"date": "2023-12-14", "series": "Rémunéré", "count": 8},
{"date": "2023-12-14", "series": "Bénévole", "count": 0},
{"date": "2023-12-13", "series": "Rémunéré", "count": 2},
{"date": "2023-12-13", "series": "Bénévole", "count": 0},
{"date": "2023-12-12", "series": "Rémunéré", "count": 4},
{"date": "2023-12-12", "series": "Bénévole", "count": 0},
{"date": "2023-12-11", "series": "Rémunéré", "count": 8},
{"date": "2023-12-11", "series": "Bénévole", "count": 0},
{"date": "2023-12-06", "series": "Rémunéré", "count": 6},
{"date": "2023-12-06", "series": "Bénévole", "count": 0},
{"date": "2023-12-05", "series": "Rémunéré", "count": 8},
{"date": "2023-12-05", "series": "Bénévole", "count": 0},
{"date": "2023-11-29", "series": "Rémunéré", "count": 5},
{"date": "2023-11-29", "series": "Bénévole", "count": 0},
{"date": "2023-11-28", "series": "Rémunéré", "count": 4},
{"date": "2023-11-28", "series": "Bénévole", "count": 0},
{"date": "2023-11-27", "series": "Rémunéré", "count": 8},
{"date": "2023-11-27", "series": "Bénévole", "count": 0},
{"date": "2023-11-24", "series": "Rémunéré", "count": 2},
{"date": "2023-11-24", "series": "Bénévole", "count": 0},
{"date": "2023-11-23", "series": "Rémunéré", "count": 3},
{"date": "2023-11-23", "series": "Bénévole", "count": 0},
{"date": "2023-11-22", "series": "Rémunéré", "count": 9},
{"date": "2023-11-22", "series": "Bénévole", "count": 0},
{"date": "2023-11-21", "series": "Rémunéré", "count": 8},
{"date": "2023-11-21", "series": "Bénévole", "count": 0},
{"date": "2023-11-18", "series": "Rémunéré", "count": 0},
{"date": "2023-11-18", "series": "Bénévole", "count": 4},
{"date": "2023-11-17", "series": "Rémunéré", "count": 6},
{"date": "2023-11-17", "series": "Bénévole", "count": 0},
{"date": "2023-11-14", "series": "Rémunéré", "count": 8},
{"date": "2023-11-14", "series": "Bénévole", "count": 0},
{"date": "2023-11-13", "series": "Rémunéré", "count": 8},
{"date": "2023-11-13", "series": "Bénévole", "count": 0},
{"date": "2023-11-07", "series": "Rémunéré", "count": 8},
{"date": "2023-11-07", "series": "Bénévole", "count": 0},
{"date": "2023-11-06", "series": "Rémunéré", "count": 4},
{"date": "2023-11-06", "series": "Bénévole", "count": 0},
]
}
,
"mark": "bar",
"encoding": {
"x": {
"timeUnit": {"unit": "dayofyear", "step": 1},
"field": "date",
"axis": {"format": "%d/%m"},
"title": "Date",
"step": 1,
},
"y": {
"aggregate": "sum",
"field": "count",
"title": "Heures",
},
"color": {
"field": "series",
"scale": {
"domain": ["Bénévole", "Rémunéré"],
"range": ["#e7ba52", "#1f77b4"]
},
"title": "Type d'heures"
}
}
};
vegaEmbed("#vis", spec)
// result.view provides access to the Vega View API
.then(result => console.log(result))
.catch(console.warn);
</script>
<footer>
<a id="feed" href="/feeds/all.atom.xml">
<img alt="RSS Logo" src="/theme/rss.svg" />
</a>
</footer>
</div>
</body>
</html>