This commit is contained in:
Alexis Métaireau 2024-07-12 02:18:10 +02:00
parent 0ad8c22cd8
commit d88da93f06
No known key found for this signature in database
GPG key ID: 1C21B876828E5FF2
27 changed files with 422 additions and 187 deletions

View file

@ -1,5 +1,6 @@
---
title: Adding Real-Time Collaboration to uMap, first week
title: uMap realtime sync #1
slug: adding-real-time-collaboration-to-umap-first-week.html
headline: A heads-up on what I've been doing this week on uMap
tags: Python, CRDT, Sync, uMap
---
@ -366,4 +367,4 @@ It's very rough, but the point was mainly to see how the library can be used, an
- The team behind Automerge is very welcoming, and was prompt to answer me when needed.
- There seem to be another API `Automerge.getHistory()`, and `Automerge.diff()` to get a patch between the different docs, which might prove more helpful than getting all the small patches.
We'll figure that out next week, I guess!
We'll figure that out next week, I guess!

View file

@ -1,5 +1,6 @@
---
title: Adding Real-Time Collaboration to uMap, second week
title: uMap realtime sync #2
slug: adding-real-time-collaboration-to-umap-second-week.html
headline: A heads-up on what I've been doing this week on uMap
tags: Python, CRDT, Sync, uMap
---
@ -115,4 +116,4 @@ Here are some notes about SSE. I've learned that:
- [Django channels](https://channels.readthedocs.io/en/latest/) aims at using ASGI for certain parts of the app.
- You don't have to handle all this in Django. It's possible to delegate it to [pushpin](https://github.com/fastly/pushpin), a proxy, using [django-grip](https://github.com/fanout/django-grip)
It's questioning me in terms of infrastructure changes.
It's questioning me in terms of infrastructure changes.

View file

@ -1,5 +1,6 @@
---
title: Adding collaboration on uMap, third update
title: uMap realtime sync #3
slug: adding-collaboration-on-umap-third-update
tags: umap, geojson, websockets
---

View file

@ -1,5 +1,6 @@
---
title: A comparison of JavaScript CRDTs
title: A comparison of JS CRDTs
slug: a-comparison-of-javascript-crdts
tags: crdts, umap, sync
display_toc: true
---

View file

@ -1,50 +0,0 @@
---
title: Adding collaboration on uMap, fourth update
tags: umap, geojson, websockets
status: draft
---
Since last week, the main branch of uMap ships a web socket server, and the
ability to make peers communicate with each other, replicating local changes to
other peers.
Here is a demonstration of the "real-time" import of some data on one peer, with
its replication on another peer.
<video width="100%" controls src="https://files.notmyidea.org/choropleth-sync.webm">
</video>
Our roadmap to having "real-time" collaboration looks like this:
1. ☑︎ Learn about CRDTs, what they are and find how they can be useful;
2. ☑︎ Make structural changes to the codebase;
3. ☑︎ Allow a replication of a peer state to another connected peer;
4. Sync with peers late to the party ;
5. Handle UX and disconnects.
6. Scale.
## The path behind us
Over the past few months, we did the following changes in the uMap codebase:
First, we [replaced datalayers ids with uuids](https://github.com/umap-project/umap/pull/1630), making it possible to have them generated by the clients in the long term. Then, we [assigned semi-unique ids to each map "features"](https://github.com/umap-project/umap/pull/1649), making it possible to refer to them over different peers. That makes it possible to know which "marker" has moved, for instance.
We then introduced a change in how the data flows, by [separating the UI rendering from data updates](https://github.com/umap-project/umap/pull/1692). With this change, we introduced a way to regenerate only the parts that matters when updating a value. This enabled us to [apply data updates to and from other peers over a web socket connection](https://github.com/umap-project/umap/pull/1754).
## What's still to come
That's a huge step in the right direction, but, that's not the end of the game yet. We still need to do some work in order to finish what's been started.
The current effort is on applying pre-join changes: with the currently shipped code, you only get the changes while you're connected: changes that happened before you join aren't there. As a result, peers can show diverging maps. We're currently considering using [Hybrid Logical Clocks](https://sergeiturukin.com/2017/06/26/hybrid-logical-clocks.html) (HLC) to reapply the operations in a predictable order on the different peers.
Basically, we'll need to:
- Assign each operation an `id` and store them locally ;
- Find a way for the peers to ask another peer about the missing changes since a specific date ;
- Get these changes and reapply them locally.
HLCs will help us avoid clock drift between the different peers, and ensure the operations are applied in the rough same order.
Once that's covered, we'll still need to handle these:
- **Interface changes**: we have some mockups to integrate, making it obvious other peers are connected and interacting on the map, and handle web socket disconnects.
- **Security**: making peers communicate with each other enables new data flows, and with them new "attack vectors". We want to take the time to think this trough, and cover some of the problems we are already envisioning about handling permissions, and escalation trough a peer with greater privileges.
- **Scaling things up**: uMap is used to serve a quite large number of maps, and probably will need to make sure our changes are able to scale. This will potentially require some structural changes on the web socket server, because not everything might fit in memory anymore.

View file

@ -0,0 +1,5 @@
---
title: Thoughts on getting already passed operations in uMap
status: draft
---

View file

@ -1,7 +1,6 @@
---
title: Generating my weeknotes quotes with jq and readeck
tags: readeck, jq, markdown
status: draft
---
I've installed [readeck](https://readeck.org/en/) to track the articles I read,
@ -57,7 +56,14 @@ Because I write these notes every week, I'm only interested in the content of th
Here is how to get "last-week-date" on macOS:
```bash
date -v-7d +"%Y-%m-%d"
set lastweek date -v-7d +"%Y-%m-%d"
```
And on linux:
```bash
set lastweek date -d "7 days ago" +"%Y-%m-%d"
```
And I can filter with:
@ -72,6 +78,7 @@ Putting it all together, I have the following line:
curl -X GET "https://readeck.notmyidea.org/api/bookmarks/annotations" -H "accept: application/json" -H "authorization: Bearer <redacted>" \
| jq -r --arg date $(date -v-7d +"%Y-%m-%d") \
'.[] | select(.created > $date) | "> \\(.text) \\n> \\n> — [\\(.bookmark_title)](\\(.bookmark_url))\\n"'```
'.[] | select(.created > $date) | "> \\(.text) \\n> \\n> — [\\(.bookmark_title)](\\(.bookmark_url))\\n"'
```
I feel like a hairy terminal monster, with smiling eyes.

View file

@ -0,0 +1,84 @@
---
title: uMap realtime sync #4
tags: umap, geojson, websockets
slug: adding-collaboration-on-umap-fourth-update
---
The main branch of uMap now ships a web socket server, enabling
local changes to be replicated to other peers.
Here is short video capturing how the import of some data can be synced between
two browsers.
<video width="100%" controls src="https://files.notmyidea.org/choropleth-sync.webm">
</video>
It's pretty exciting, but the feature is not complete yet, and it's still barely usable.
Over the past few months, we made the following changes to the code:
- We [replaced the datalayers ids with uuids](https://github.com/umap-project/umap/pull/1630), making it possible to have them generated by the clients in the long term.
- We [assigned semi-unique IDs to each map "feature"](https://github.com/umap-project/umap/pull/1649), to be able to refer to them consistently (without it, it's not possible for peers to know they're talking about the same object).
- We changed how the data flows, by [separating data updates from UI-rendering](https://github.com/umap-project/umap/pull/1692). With this change, we introduced a way to regenerate only the required parts when changing a value.
- Lastly, we added [a websocket server, making it possible to apply remote data updates locally](https://github.com/umap-project/umap/pull/1754).
## The roadmap
Our roadmap for having "real-time" collaboration currently looks like this:
1. ☑︎ Learn about CRDTs, what they are and find how they can be useful;
2. ☑︎ Make structural changes to the codebase;
3. ☑︎ Allow a replication of a peer state to another connected peer;
4. **Bringing peers on the same page**: That's where we are.
5. **Interface changes**: we have some mockups to integrate, making it obvious
other peers are connected and interacting on the map, and handle web socket
disconnects.
6. **Security**: making peers communicate with each other enables new data
flows, and with them new "attack vectors". We want to take the time to think
this trough, and cover some of the problems we are already envisioning about
handling permissions, and escalation trough a peer with greater privileges.
7. **Scaling things up**: uMap is used to serve a quite large number of maps,
and probably will need to make sure our changes are able to scale. This will
potentially require some structural changes on the web socket server, because
not everything might fit in memory anymore.
## Bringing peers to the same page
The current code of uMap allows for syncing **already connected** clients.
You only get operations happening *while you're connected*, meaning
it's lacking the changes that happened before you joined, or if you get
disconnected (think flacky connections).
Basically, we'll need to:
- Assign each operation an `id` and store them locally ;
- Find a way for the peers to ask another peer about the missing changes since a specific date ;
- Get these changes and reapply them locally.
### Storing operations locally, using HLCs
We already have `operation` messages sent over our transport protocol. We will need to
store them locally. Each operation will be tied to a particular "time".
We will be using Hybrid Logical Clock for this, ad they offer us some nice
properties on distributed systems. I won't go in to much details about them, but
you can just consider that the time is unique and it's possible for all peers to
agree on which operation came before another one.
The following operations will be required:
- Receive remote operations and decide if we should apply the updates.
- Compact the data: sometimes, the same value gets updated multiple times, and
we might not want to send useless info.
- Keep old values, it might prove useful to implement an "undo" feature.
### Communicating with other peers
At the moment, the server broadcasts all messages (to all the connected peers).
We will need a way to send messages only to a specific peer.
This will be useful to retrieve information known only by the peers, such as…
the list of operations :-)
Let's get back to it, we're almost there!

View file

@ -0,0 +1,95 @@
---
title: Parsing JSON into Specific Pydantic Models
tags: pydantic, python, match
---
I really like [Pydantic](https://docs.pydantic.dev/latest/) because it makes it
easy to define the the structure of the objects I want to use, using typing.
One use case I have at the moment is to parse a json object and build different
objects depending on some key in the json object.
I tried multiple times, and finally managed to do it:
have different pydantic classes which share a same property (here named `kind`),
and end up with the proper classes at the end.
Here, I have three types of messages: "OperationMessage", "PeerMessage" and
"ServerRequest", as follows:
```python
from typing import Literal, Optional
from pydantic import BaseModel
class OperationMessage(BaseModel):
"""Message sent from one peer to all the others"""
kind: Literal["operation"] = "operation"
verb: Literal["upsert", "update", "delete"]
subject: Literal["map", "layer", "feature"]
metadata: Optional[dict] = None
key: Optional[str] = None
class PeerMessage(BaseModel):
"""Message sent from a specific peer to a specific one"""
kind: Literal["peermessage"] = "peermessage"
sender: str
recipient: str
# The message can be whatever the peers want. It's not checked by the server.
message: dict
class ServerRequest(BaseModel):
"""A request towards the server"""
kind: Literal["server"] = "server"
action: Literal["list-peers"]
```
Each of these classes share the same `kind` property, which can act as a discriminator.
Let's build a generic `Request` class that will be able to build for me the proper objects:
```python
from typing import Union
from pydantic import Field, RootModel, ValidationError
class Request(RootModel):
"""Any message coming from the websocket should be one of these, and will be rejected otherwise."""
root: Union[ServerRequest, PeerMessage, OperationMessage] = Field(
discriminator="kind"
)
```
Which can be used this way:
```python
try:
incoming = Request.model_validate_json(raw_message)
except ValidationError as e:
error = f"An error occurred when receiving the following message: {raw_message}"
```
And, because we have classes, we can leverage the `match` statement:
```python
match incoming.root:
case OperationMessage():
# Here to broadcast the message
websockets.broadcast(peers, raw_message)
case PeerMessage(recipient=_id):
# Or to send peer messages to the proper peer
peer = connections.get(_id)
if peer:
await peer.send(raw_message)
```

View file

@ -1,5 +1,6 @@
---
title: Il nous restera ça
contraintes : utiliser « il nous restera ça », 30mn.
---
Perdre pied. Vertige, écroulement et densité. Bruit, solidité, bloc. On s'y perdrait.
@ -19,6 +20,3 @@ Des matinées, des silences et de la densité. Le temps passe, passera. Qui occu
Écouter. Oiseaux, ballade et soleil. Silence, fluidité, ouverture. On s'y retrouverait.
Il nous restera ça.
---
Contraintes : utiliser « il nous restera ça », 30mn.

View file

@ -1,5 +1,6 @@
---
title: L'Élan
contraintes : <ul> <li>Faire un texte avec lensemble des mots suivants, 4 par 4 dans lordre.</li> <li>Parler à la première personne.</li> </ul>
---
Il est 16h et je me pose enfin. Dehors, le temps d'une clope, seul. J'aime bien ce que le soleil fait derrière ma nuque. Un massage presque. Je ne savais pas que j'en avais besoin.
@ -20,9 +21,3 @@ Les vagues viennent à la rencontre des rochers, en essayant de briser leur iner
Je me lève et je me mets en mouvement. Sortir de mes projections — de mon cinéma presque — m'est étonnement facile, comme si j'avais trouvé un trait d'union et retrouvé mon souffle.
---
Contraintes :
- Faire un texte avec l'ensemble des mots suivants, 4 par 4 dans l'ordre.
- Parler à la première personne.

View file

@ -1,5 +1,6 @@
---
title: Sapins
contraintes: <ul> <li>Thème : Sapin.</li> <li>Timer : 35mn. (20mn)</li> <li>Contrainte supplémentaire : ne pas effacer ses mots.</li> </ul>
---
C'est d'abord son odeur qui m'arrive aux narines, une effluve de résine, un côté fruité, presque épicé. Une puissance aromatique qui vient en plusieurs temps, d'abord me chatouiller les narines, puis remplir mon espace olfactif jusqu'à ce que je ne sente plus rien d'autre. Entêtant.
@ -20,11 +21,3 @@ Je suis content de la laisser derrière moi, même si je me souviendrais de son
Derrière moi.
---
Contraintes:
- Thème : Sapin.
- Timer : 35mn. (20mn)
- Contrainte supplémentaire : ne pas effacer ses mots.

View file

@ -1,15 +1,15 @@
---
title: Lettre pour honorée
status: draft
contraintes: <p>Texte libre à partir de mots énoncés oralement et à orthographier comme on le souhaite (en utiliser au moins 5 sur 7 et les décliner selon au moins 2 orthographes).</p><ul><li>Durée : -25mn.</li><li>Mots: Verre (ver, vers, vert), Chair (cher, chère), Cerf (serre, sert, cerf), Cou (Cou, coup, coût), Échelle, Cercle, Père (pair, paire)</li></ul>
---
Ma très chère, mon adorée, ma plume, ma joie, Honorée.
La chaleur que je ressens en pensant au moment où tu lira cette lettre me satisfait déjà d'avoir entamé son écriture.
La chaleur que je ressens en pensant au moment où tu liras cette lettre me satisfait déjà d'avoir entamé son écriture.
Te savoir loin, te savoir en train d'expérimenter ce qui t'es le plus cher me procure du plaisir. Mais je suis bien obligée de constater que je m'ennuie de toi, et la missive reçue hier par le dernier cheval en provenance de Reims m'a fait le plus grand bien.
Hier, le cercle s'est réuni, comme tous les premiers de chaque nouvelle lune, cette fois ci au vert, signe que le printemps revient. Entre paires nous avons décidé des affaires courantes, et je ne peux que te dire que les graines que nous avons semées ensemble à l'automne commencent à germer. Je tairais les discussions précises de peur que ces écrits soient lus par des yeux indélicats. Mais… le ver est dans le fruit.
Hier, le cercle s'est réuni, comme tous les premiers de chaque nouvelle lune, cette fois-ci au vert, signe que le printemps revient. Entre paires, nous avons décidé des affaires courantes, et je ne peux que te dire que les graines que nous avons semées ensemble à l'automne commencent à germer. Je tairai les discussions précises de peur que ces écrits soient lus par des yeux indélicats. Mais… le ver est dans le fruit.
Père est toujours prisonnier de ses démons et les choses commencent à devenir plus délicates à dissimuler. Sa blessure au cou continue à s'infecter et nous n'avons plus le sou pour l'emmener à la ville. J'ai mis en place une cagnotte et espère pouvoir réunir la somme au plus vite, mais le coût est énorme ! Être Serf ne lui accorde pas beaucoup de pouvoir. Heureusement que Marine est là pour nous aider.
@ -17,22 +17,7 @@ Tout me manque en toi, ta chair, ta voix, ta présence d'esprit…
Je te serre fort contre moi, vivement ton retour.
A bientôt,
À bientôt,
Marie.
---
Contraintes:
- Texte libre à partir de mots énoncés oralement et à orthographier comme on le souhaite (en utiliser au moins 5 sur 7 et les décliner selon au moins 2 orthographes).
- Durée : 25mn
- Mots:
- Verre / ver / vers / vert…
- Chair / cher / chère…
- Cerf / serre / sert/ cerf…
- Cou / coup / coût…
- Échelle
- Cercle
- Père / pair / paire…

View file

@ -1,5 +1,6 @@
---
title: Souvenir du thé
contraintes: <ul> <li>Il faut quun théière ait une importance particulière.</li> <li>Temps : 35mn.</li> <li>Les premières pages dun roman.</li> <li>Parler au présent.</li> </ul>
---
Le paysage file. Mon wagon, accroché à tous les autres me propulse dans l'espace, avec calme et sérénité. Je baille.
@ -22,12 +23,3 @@ Je bois, et laisse mes sens errer à leurs découvertes. Un objet posé sur la p
Je soulève la théière et des bribes de vie me reviennent, et je regarde ma fille comme si je la découvrais pour la première fois.
---
Contraintes
- Il faut qu'un théière ait une importance particulière.
- Temps : 35mn.
- Les premières pages d'un roman.
- Parler au présent.

View file

@ -1,5 +1,6 @@
---
title: Certitudes
contraintes: <ul> <li>⏲ 15mn</li> <li>Sappuyer sur la structure « Qui dit… dit… » (répété autant de fois que voulu) et conclure par « Alors… ».</li> </ul>
---
Qui dit peur ne dit rien.
@ -31,13 +32,6 @@ Ensemençant le terrain vague.
Pour plus tard y planter, y voir germer,
pousser, puis fleurir, l'été.
---
Contraintes :
- ⏲ 15mn
- Sappuyer sur la structure « Qui dit… dit… » (répété autant de fois que voulu) et conclure par « Alors… ».

View file

@ -4,33 +4,33 @@ status: draft
# La petite porte du perron
Nous nous étions finalement retrouvés sur le perron. La petite porte, ornée de décorations de Noël qui n'avaient pas bougées depuis l'année dernière — à en croire la couche de poussière qui s'y était déposé — était faite de bois massif. Le frappoir en forme de lion semblait presque animé et nous regardait fixement.
Nous nous étions finalement retrouvés sur le perron. La petite porte, ornée de décorations de Noël qui n'avaient pas bougé depuis l'année dernière — à en croire la couche de poussière qui s'y était déposée — était faite de bois massif. Le frappoir en forme de lion semblait presque animé et nous regardait fixement.
« Tu es sure que tu veux y aller ? » dit Clara en me regardant.
« Tu es sûre que tu veux y aller ? » dit Clara en me regardant.
Trop tard, j'avais poussé la porte sans y penser. Elle s'ouvrir d'un long grincement lourd, nous dévoilant une pièce plus grande que ce que j'avais imaginé.
Trop tard, j'avais poussé la porte sans y penser. Elle s'ouvre d'un long grincement lourd, nous dévoilant une pièce plus grande que ce que j'avais imaginée.
En un éclair, sans même l'avoir décidé, je m'étais retrouvé assis à une table, ornée d'une nappe blanche et fournie de victuailles toutes plus opulentes les unes que les autres.
Au moment ou l'horloge sonna de manière sonore, les objets posés sur la table se mirent à se déplacer d'eux mêmes, comme animés.
Au moment où l'horloge sonna de manière sonore, les objets posés sur la table se mirent à se déplacer d'eux-mêmes, comme animés.
Le tic tac insistant de l'horloge rythmait les allées et venues de ce qui semblait être un ballet incessant de couverts, assiettes, verres à pied et divers plats.
Ils se présentaient devant moi, couteau et fourchette coupant les brocolis en sauce et les approchant de ma bouche. Horrifié, je repoussais la chaise sur laquelle j'étais assise pour me dégager. Au moment même de me lever, une forte pression sur l'intérieur de mes genoux me fit me rassoir.
Ils se présentaient devant moi, couteau et fourchette coupant les brocolis en sauce et les approchant de ma bouche. Horrifié, je repoussais la chaise sur laquelle j'étais assise pour me dégager. Au moment même de me lever, une forte pression sur l'intérieur de mes genoux me fit me rasseoir.
Des carottes râpées avaient succédé aux brocolis, et je ne pouvais plus me lever. Clara, à l'autre bout de la table semblait elle aussi prisonnière de sa chaise.
Des carottes râpées avaient succédé aux brocolis, et je ne pouvais plus me lever. Clara à l'autre bout de la table semblait elle aussi prisonnière de sa chaise.
L'horloge s'arrêta, et le ballet cessa. Les lumières s'éteignirent et on pouvait entendre assez distinctement un « tac tac tac » assez rapide se rapprocher de la pièce dans laquelle nous étions. En même temps que les bruits se rapprochaient une lumière semblait également s'approcher de nous. Quelqu'un ?
Dans l'encadrement de la porte qui devait mener à la cuisine apparu une lampe, assez haute et élégante, avec trois pieds en bois, assez longs. L'ampoule était allumée et visible. Elle me regardait, d'un air à la fois jovial et effrayant.
Dans l'encadrement de la porte qui devait mener à la cuisine apparut une lampe, assez haute et élégante, avec trois pieds en bois, assez longs. L'ampoule était allumée et visible. Elle me regardait, d'un air à la fois jovial et effrayant.
D'une voix aigüe et grave à la fois, elle dit :
« Ah, vous êtes arrivés. Savez-vous l'heure qu'il est ? Vous trouvez ça normal de me faire attendre pour cette nuit de réveillon ? Asseyez-vous, je vais prévenir Ampère. »
J'essayais de répondre, mais dès que j'essayais d'ouvrir la bouche les barreaux de la chaise sur laquelle j'étais me rentraient désagréablement dans le dos. Je compris que peut-être il vaudrait mieux me taire.
J'essayais de répondre, mais dès que j'essayais d'ouvrir la bouche, les barreaux de la chaise sur laquelle j'étais me rentraient désagréablement dans le dos. Je compris que peut-être il vaudrait mieux me taire.
La lampe ressorti de la pièce, avant qu'aux « tac tac tac » se rajoutent des bruits plus sonores mais moins fréquents. Quelques minutes plus tard, Ampère s'était jointe à nous, une lampe assez haute, avec un pied unique et qui parlait quand à elle d'une voix aiguë, abîmée
La lampe ressortie de la pièce, avant qu'aux « tac tac tac » se rajoutent des bruits plus sonores mais moins fréquents. Quelques minutes plus tard, Ampère s'était jointe à nous, une lampe assez haute, avec un pied unique et qui parlait quand à elle d'une voix aiguë, abîmée
« Servez-vous enfin. Tout est prêt pour vous. Allez allez, n'hésitez pas tout est encore chaud ça sort du four. »

View file

@ -6,7 +6,6 @@ contraintes:
- Liste de mots
- Durée
---
Cette période se rappelle parfois à moi comme un flashback. Comme une sorte de pastille temporelle, un trampoline qui me ramène vers mon enfance. Avec ses quelques écueils mais sans boire la tasse. Ou alors une petite tasse de café, tranquille, en terrasse. Loin des grandes vagues de l'atlantique.
La petite moustache de cire se transforme bientôt en soupe, le liquide chaud prenant de plus en plus de place, s'étalant à l'horizontal d'une manière qu'on aurait voulu plus gracieuse. La forme droite vacille bientôt. Ce qui était un grand bâtiment, longiligne, droit et froid est maintenant un étrange lac visqueux et — disons le — moche. La bougie est ratatouille. Mais la flamme est toujours présente. Au final, on se demande qui nargue qui.

View file

@ -2,7 +2,6 @@
title: Seul
status: draft
---
Là. youpi
Juste devant.

View file

@ -1,19 +1,12 @@
---
title: Revoir la mer
contraintes: <ul> <li>Tirage à la ligne: commencer par une phrase, puis létirer dans une seconde phrase, puis repartir de cette seconde phrase et létirer à nouveau. 6 fois.</li> <li>Durée 20mn</li> </ul>
---
Qu'importe où je posait les yeux, derrière, devant, au dessus et au dessous, au plus proche mais aussi aux limites de ce qui m'était visible, tout autour de moi, les gens qui m'entouraient — où était-ce mon regard sur eux ? — avaient changés, ce que je me souvenais de leurs froncements de sourcils, qu'ils soient surpris ou agacés avaient laissé place à des yeux rieurs, à des regards ouverts et accueillants, le paysage aussi avait bougé, les collines dont le souvenir m'était difficile étaient toujours là mais étaient devenues plus simples à gravir, me laissant plus facilement voir au delà du terrain accidenté, pour que mon regard se pose sur **la mer**, ce territoire qui avait été houleux et agité s'était transformée, **silencieuse**, **calme**, comme **ouverte**, sur un **horizon** de promesses, de celles qui sont simples parce qu'on les fait sans s'en rendre compte, parce qu'elles nous sont possibles, sans hésitation.
---
Contraintes:
- Tirage à la ligne: commencer par une phrase, puis l'étirer dans une seconde phrase, puis repartir de cette seconde phrase et l'étirer à nouveau. 6 fois.
- Durée 20mn
---
L'évolution du texte:
<details>
<summary>L'évolution du texte</summary>
La mer était silencieuse, calme, et ouverte sur l'horizon.
@ -26,3 +19,4 @@ Tout autour de moi, les gens qui m'entouraient — où peut-être mon regard sur
Derrière, devant, au dessus et au dessous, tout autour de moi, les gens qui m'entouraient — où était-ce mon regard sur eux ? — avaient changés, leurs froncements de sourcils, surpris ou agacés laissant place à des yeux rieurs, les collines étaient toujours là mais étaient devenues plus simples à gravir, pour laisser mon regard se poser sur la mer, ce territoire qui avait été houleux et agité s'était transformé, ouvert, sur un horizon de promesses, de celles qu'on fait sans s'en rendre compte, parce qu'on les croit possibles, sans hésitation.
Qu'importe où je posait les yeux, derrière, devant, au dessus et au dessous, au plus proche mais aussi aux limites de ce qui m'était visible, tout autour de moi, les gens qui m'entouraient — où était-ce mon regard sur eux ? — avaient changés, ce que je me souvenais de leurs froncements de sourcils, qu'ils soient surpris ou agacés avaient laissé place à des yeux rieurs, à des regards ouverts et accueillants, le paysage aussi avait bougé, les collines dont le souvenir m'était difficile étaient toujours là mais étaient devenues plus simples à gravir, me laissant plus facilement voir au delà du terrain accidenté, pour que mon regard se pose sur **la mer**, ce territoire qui avait été houleux et agité s'était transformée, **silencieuse**, **calme**, comme **ouverte**, sur un **horizon** de promesses, de celles qui sont simples parce qu'on les fait sans s'en rendre compte, parce qu'elles nous sont possibles, sans hésitation.
</details>

View file

@ -2,7 +2,6 @@
title: Marco
status: draft
---
Oh oui, je me souviens !
Emmitouflés sous autant de couches de vêtements que le nombre de degrés perdus depuis la fin septembre, nous étions sur la route des vacances, dans cette petite deux chevaux à transmission manuelle. Le plancher ouvert aux quatre vents laissant voir par moments la bande blanche du tracé de la route, et le poc poc poc du pot d'échappement se rappelant à nous par la fumée grise qu'on pouvait encore voir à chaque virage en épingle.

View file

@ -1,9 +1,6 @@
Phrases prises au pif dans trois livres différents:
« Il s'était laissé emporter par le spectacle et les chocolats »
« A vrai dire, je n'y gagnais guerre, car la peau du fou donnait plutôt une impression de fraicheur »
« Il eut un grand et large sourire, qui exprimait toute l'étendue de sa satisfaction »
---
title: Il s'était laissé emporter
contraintes: Phrases prises au pif dans trois livres différents: <ul><li>« Il s'était laissé emporter par le spectacle et les chocolats »</li><li>« A vrai dire, je n'y gagnais guerre, car la peau du fou donnait plutôt une impression de fraicheur »</li><li>« Il eut un grand et large sourire, qui exprimait toute l'étendue de sa satisfaction »</li></ul>
---
Se tournant vers moi, avec sa tête d'ange et ses cheveux d'or, il eut un grand et large sourire, qui exprimait toute l'étendue de sa satisfaction. Je me demandais bien ce qu'il avait pu trouver de si génial dans la scène, pourtant banale et quasi quotidienne, de son père qui ramassait et pliait le linge. Une vie de parent banale, voire un peu ennuyante, et si éloignée de ce que j'aurais voulu y trouver à l'origine.

View file

@ -1,3 +1,8 @@
---
status: draft
title: Gris, Réga, Lanterne et Sonnette
---
Il y avait celui qu'on avait fini par nommer « gris ». Il n'avait pas toujours été comme ça, mais ces dernières années, c'est comme si il s'était perdu dans les méandres de ce qui avaient étés, il y a longtemps, ses envies. Voyager, c'était à l'époque pour lui un appel, comme une envie d'ailleurs, toujours présente alors même qu'on y est déjà, ailleurs.
Lui qui croyait aux rencontres, elles ne lui suffisaient plus. Un trajet en chassait un autre, alors que le premier n'était pas terminé. Le voyage lui avait laissé des valises sous les yeux, peut-être a force de soulever et de reposer celles qu'il se trainait un peu partout avec lui.

View file

@ -1,21 +0,0 @@
---
title: Quand la vie à fini de jouer
---
Quand la vie à fini de jouer, devant la lumière et derrière les ombres, se dévoilent les rides du lac, comme autant de tranches de soleil dans la froideur d'une nuit trop noire.
« Dès le retour du bazar, Tabriz, ils ont cessé de s'aimer ».
Déleste moi du lendemain. Je serais ce que je veux. Mon sourire célébrant le retour de l'écho, Bleu. Ample et pliant, souple.
Le ciel accumule cette fois ci non-plus les ratés mais les rayons, le jour s'infiltrant entre les interstices, trouvant sa voie, celeste.
Le thé bouillant vaut mieux que la suave odeur du pétrole.
---
Texte écrit lors d'un atelier d'écriture, avec les contraintes suivantes:
- 🧱 Matériaux: chercher des mots qui nous parlent / nous font réagir, dans des livres. Laisser les mots venir à soi.
- ⌛Temps:
- 15mn pour chercher les mots
- 25mn d'écriture

View file

@ -0,0 +1,14 @@
---
title: Deleste-moi du lendemain
contraintes: <p>Texte écrit lors dun atelier décriture, avec les contraintes suivantes:</p> <ul> <li>🧱 Matériaux: chercher des mots qui nous parlent / nous font réagir, dans des livres. Laisser les mots venir à soi.</li> <li>⌛Temps: <ul> <li>15mn pour chercher les mots</li> <li>25mn décriture</li> </ul></li> </ul>
---
Dès le retour du bazar, ils ont cessé de s'aimer.
Puis, quand la vie à fini de jouer, devant la lumière et derrière les ombres, se dévoilent les rides du lac, comme autant de tranches de soleil dans la froideur d'une nuit trop noire.
Déleste moi du lendemain. Je serai ce que je veux. Mon sourire célébrant le retour de l'écho, Bleu. Ample et pliant, souple.
Le thé bouillant vaut mieux que la suave odeur du pétrole.
Le ciel accumule cette fois ci non-plus les ratés mais les rayons, le jour s'infiltrant entre les interstices, trouvant sa voie, celeste.

View file

@ -1,6 +1,8 @@
---
title: Gueule de ?
contraintes: <p>Texte écrit lors dun atelier décriture, avec les contraintes suivantes :</p> <ul> <li>🧱 Matériel : Des cartes du jeu Dixit</li> <li>🤔 Consignes : <ul> <li>Conter une histoire, en tirant des cartes. Lhistoire suit le déroulement suivant, chaque élément correspond à une carte : <ul> <li>personnage principal</li> <li>situation initiale</li> <li>bascule</li> <li>péripétie</li> <li>alliés ou ennemi</li> <li>enjeu à résoudre / quête</li> <li>résolution / fin sublimant la sitution</li> </ul></li> <li>Se laisser porter par son intuition, ne pas trop réfléchir.</li> </ul></li> <li>⏰ Timing: 30mn</li> </ul>
---
Gueule de bois immense, et franchement je ne comprends pas trop. Pas une goutte d'alcool hier, et j'aurais ptet dû, parce que... bah au moins je l'aurais méritée. Un peu d'eau sur le visage, et quand j'aperçois ma gueule dans le miroir, j'ai un mouvement de recul.
Ma tête est couverte de poils, longs, une mâchoire allongée, un... putain c'est quoi ce truc. Un groin ? Un museau ? Merde, un museau. J'ai une tête de clébard.
@ -21,7 +23,7 @@ Je termine nez à nez avec Camomille, qui me regarde mi-amusée, mi-apeurée.
Ça me tord le bide, ce truc. Je comprends rien, et pourquoi elle me dit rien, elle croit vraiment qu'on va à une soirée déguisée ?... Pfff. Bon, elle sent quand même vachement bon, la Camomille, ce soir.
On s'avance doucement sous le clair de lune et le décor change. Tout autour, des lianes, une foret de lianes, verte, mousseuse, et agitée. Devant, derrière, dessus, dessous. On n'y voit pas à deux mètre. Et toujours, cette faim qui me tiraille, et Camomille qui sent si bon...
On s'avance doucement sous le clair de lune et le décor change. Tout autour, des lianes, une foret de lianes, verte, mousseuse, et agitée. Devant, derrière, dessus, dessous. On n'y voit pas à deux mètres. Et toujours, cette faim qui me tiraille, et Camomille qui sent si bon...
« Je peux sentir ta main ? T'as mis un parfum ou quoi ? »
« Sérieux ? T'es sérieuse là ? Tu crois pas qu'on devrait se préoccuper des lianes autour de nous plutôt ? »
@ -47,18 +49,3 @@ Puis les contours deviennent nets, le sol palpable. Je suis en terrain connu, ch
Ma mère qui me regarde : « Alors chouchou, on a la gueule de bois ? Tu veux manger un bout ? »
---
Texte écrit lors d'un atelier d'écriture, avec les contraintes suivantes :
- 🧱 Matériel : Des cartes du jeu Dixit
- 🤔 Consignes :
- Conter une histoire, en tirant des cartes. L'histoire suit le déroulement suivant, chaque élément correspond à une carte :
- personnage principal
- situation initiale
- bascule
- péripétie
- alliés ou ennemi
- enjeu à résoudre / quête
- résolution / fin sublimant la sitution
- Se laisser porter par son intuition, ne pas trop réfléchir.
- ⏰ Timing: 30mn

View file

@ -1,8 +1,9 @@
---
title: Une caresse de plus
contraintes: <p>Texte écrit lors dun atelier décriture, avec les contraintes suivantes:</p> <ul> <li>🗺️ Écrire autour de la notion de territoire.</li> <li>🧱 Matériaux: <ul> <li>📖 Un extrait de « Zizi Cabane », de Bérangère Cournut</li> <li>👣 Une ballade le cahier à la main, dans la nature, pour se laisser inspirer. Avec la consigne découter.</li> </ul></li> <li>⌛ 45mn de ballade, 30mn décriture</li> </ul>
---
Le soleil sur ma nuque, une caresse de plus. Une goutte tombe sur la base de ma main pour que je lève la tête, rappel que nous ne possédons rien. Que nous sommes plus que ça.
Le soleil sur ma nuque, une caresse de plus. Une goutte tombe sur la base de ma main pour que je lève la tête, rappel que nous ne possédons rien. Que nous sommes plus que ça.
D'ici, je vois la lune.
@ -10,7 +11,7 @@ Les herbes hautes laissent place à un providentiel banc, tronc d'arbre couché.
Son odeur. Délice.
Je te le dis, Louise, à toi qui m'entoure désormais de partout, confortablement. J'aime imaginer que ces ilots de nature se maillent les uns aux autres, dans cette tresse désormais tienne.
Je te le dis, Louise, à toi qui m'entoures désormais de partout, confortablement. J'aime imaginer que ces îlots de nature se maillent les uns aux autres, dans cette tresse désormais tienne.
Dans tes yeux l'eau, noire, quasi impermanente. La mousse et les herbes hautes laissent place aux couleurs marron et rouille presque orangées, le soleil perçant le feuillage par endroit, taches de rousseur.
@ -26,12 +27,3 @@ Le soleil chauffe, à en plisser les yeux, et je me dépose sur l'arbre-pause, t
Une caresse de plus.
---
Texte écrit lors d'un atelier d'écriture, avec les contraintes suivantes:
- 🗺️ Écrire autour de la notion de territoire.
- 🧱 Matériaux:
- 📖 Un extrait de « Zizi Cabane », de Bérangère Cournut
- 👣 Une ballade le cahier à la main, dans la nature, pour se laisser inspirer. Avec la consigne d'écouter.
- ⌛ 45mn de ballade, 30mn d'écriture

168
content/weeknotes/34.md Normal file
View file

@ -0,0 +1,168 @@
---
date: 2024-07-12
headline: notes hebdo des semaines écoulées
projects: dangerzone, umap
status: draft
---
# Notes hebdo
J'ai eu beaucoup de mal à trouver du temps pour ces notes hebdo dans les
dernières semaines. Pas mal d'énergie mise sur d'autres projets et d'autres
enjeux.
Les vacances arrivent cette fin de semaine, et j'ai envie de faire un petit
point sur le mois passé, depuis la dernière note.
**[Danger Zone](https://dangerzone.rocks/)**
*DangerZone transforme des documents potentiellement dangereux en documents sûrs.*
- 8ème semaine sur le projet.
- Pas mal de temps passé à comprendre comment faire une release, tester que tout
fonctionne correctement sur différents OSes, pour finalement avoir une version
`0.7.0` distribuée.
**[uMap](https://umap-project.org)**
*uMap est un outil libre pour faire des cartes personnalisées*
- _Article de synthèse_: rédigé pour expliquer l'état actuel de la synchronisation.
- _Refactoring_: simplification du code précédemment écrit. C'est plus concis :-)
- _Rétrospective des 6 semaines passées_: avec un format proposé par David qui s'y prétait bien.
- _Synchro_: j'ai commencé le code qui manque pour la partie synchro, pour
pouvoir voir les données qui ont été synchronisées avant son arrivée. Une petite
session de pair avec Yohan sur le sujet.
## Des joies 🤗
- Je me sens *beaucoup* plus détendu que les semaines précédentes sur
DangerZone, je commence à y voir plus clair et à me sentir moins stressé.
- Je me sens reposé. Ça me fait bizarre de l'écrire, mais ça faisait longtemps que ça ne m'était pas arrivé.
- Je m'autorise à prendre plus de pauses, ce qui fait que j'ai un rapport plus constructif au travail.
- Voir que ça va faire trop, et m'autoriser à annuler ce qui ferait déborder le vase.
- Des rencontres à côté du boulot qui sont simples et motivantes, être à fond.
- Me remettre à faire des trucs fermentés (légumes lactofermentés, kombucha)
- Prendre le temps d'animer des ateliers d'autodéfense numérique.
- Me retrouver dans des assemblées avec des gens qui partagent des valeurs fortes de liberté
- Retrouver une partie du controle sur mon temps
- Me retrouver sous Linux + Gnome, c'est bête mais ça m'avait en fait manqué, je me sens plus à l'aise.
- Sentir le temps se décaller, me coucher tard et me leve tard, me reposer quand
j'en ai envie. C'est surement ça que j'appelle « retrouver le contrôle de mon
temps »», un peu paradoxalement peut-être.
## Des peines 😬
- C'est des semaines très chargées côté perso et côté boulot, je l'ai vu venir
mais j'ai cru que ça passerait. J'aimerai mieux voir que ce sont mes limites
dont il s'agit.
- J'ai annulé une semaine avant ma présence à un évènement auxquels je voulais
être présent. J'aimerai trouver d'autres alternatives pour faire équipe, et
mieux m'organiser pour le futur.
- Certaines réunions continuent de générer de la frustration chez moi, je peste.
J'aimerai clarifier mes attentes et proposer une évolution.
- J'ai beaucoup moins de temps de disponible pour avancer sur uMap, et je ne
suis pas vraiment satisfait de ma non-implication actuelle sur le projet. Je
m'essouffle un peu, et le fait de faire ça de front en même temps que DZ change
beaucoup du rythme que j'avais jusqu'ici.
- Le travail de release sur Dangerzone a pris beaucoup de place, et pour le moment
je n'ai que très peu développé sur le projet. J'aimerai que ça évolue, ce qui sera
surement le cas pour la suite.
## Vu, Lu, etc
- 🎵 Découvert [Ellen Winter](https://www.youtube.com/watch?v=hB4E0B2uyKQ) et [Ouzo Bazooka](https://music.youtube.com/watch?v=UnzXKRl-vi4)
- 📘 J'ai commencé la lecture de « Se vouloir du bien et se faire du mal »
- ⏯️ Last week tonight [sur l'utilisation des drogues psychédéliques en tant que thérapie](https://www.youtube.com/watch?v=a546lxxJIhE)
- ⏯️ Last week tonight [sur ce que serait un second mandat de Trump](https://www.youtube.com/watch?v=gYwqpx6lp_s)
- ⏯️ Une [vidéo d'analyse](https://www.youtube.com/watch?v=AAZMzW2H9cI) de Clément Viktorovitch sur ce qu'il pourrait arriver maintenant que le danger proto-faschiste est écarté
- ⏯️ [The AI art situation](https://www.youtube.com/watch?v=FHOAeFkoVLw&t=898s), une vidéo d'Andrew Huang, qui fait des tutos sur la MAO sur sa découverte autour de l'utilisation de l'intelligence artificielle dans le milieu artistique. Il se positionne, mais qu'à moitié, et en même temps ça correspond bien à ce que j'ai pu vivre par ailleurs comme réflexions. Difficile d'y voir clair encore pour le moment.
- ⏯Politikon [qui résume le livre de Judith Butler « trouble dans le genre »](https://www.youtube.com/watch?v=8HvZqrpcUyc)
- ⏯Politikon [qui résume la pensée d'Antonio Gramsci](https://www.youtube.com/watch?v=K3vf4DSL_GE)
- ⏯Une explication un peu geek de [pourquoi le 7 est la sortie la plus probable](https://www.youtube.com/watch?v=nghmEH1mISI&t=273s) lorsqu'on lance deux dès à six faces.
### Adint
> [There is something] called Adint, advertising intelligence. We all know about
> the social media political economy ecosystem, which is about vaccuming up as
> much information from users in order to direct targetted advertisement towards
> them. That all operates largely in realtime data broker exchanges, behind
> the scenes, people bid "I want to reach this type of person, who has these
> characteristics", and that's why people are making jokes as being observed by
> their phones.
>
> That actually happens, and that's because there is realtime biding exchanges
> and applications on your devices which are constently seeking permission to
> access your microphone, your camera, your instagram posts, etc.
>
> Well, into this mix now is a new industry, which is usually made up of veteran
> of intelligence agencies that have setup addint. **These are companies that
> operate in this realtime broken exchange and give government clients access to
> that type of information.**
Lors d'une présentation de Ronald Deibert, du [Citizen Lab](https://
citizenlab.ca/), je me suis rendu compte que j'avais manqué toute une partie de
la problématique sur le sujet de nos téléphones. Le fait que ce soit d'anciennes
personnes des agences de renseignement qui vendent des données aux gouvernements
en provenance de nos téléphones m'avait tout à fait échappé…
> Apple have introduced a new feature called lockdown mode, which I recommend to
everybody here. **We have yet to see any spyware defeat lockdown mode**. So please
turn it on. Apple has also sued NSO group, as has WhatsApp.
Je note deux choses ici:
- Le lockdown mode pour les téléphones d'apple semble être efficace à l'heure actuelle ;
- Apple, et WhatsApp ont fait un procès à [NSO Group](https://en.wikipedia.org/
wiki/NSO_Group) (les auteurs du malware Pegasus)
---
### Pardonner
> Pourquoi est-ce qu'on à du mal à pardonner ? Parce que nos souffrances, en
fait, on s'y attache. Pourquoi est-ce qu'on s'y attache ? Parce qu'en fait,
vivre une souffrance évidemment c'est une épreuve. C'est une épreuve dont on
essaye de faire quelque chose, c'est à dire qu'on essaye d'y survivre, et dans
cette manière d'y survivre en général on en garde quelque chose, à l'intérieur.
Tant que vous gardez ce quelque chose, il sera impossible de faire le geste de
pardon. Le geste de pardon consiste à laisser sortir ses propres souffrances.
**A renoncer à la valeur de sa propre souffrance en disant « non finalement,
ma souffrance m'a sans doute été utile, mais en tant que telle, ce n'est qu'un
déchet »**
>
> — [Pourquoi se dispute-t-on avec ceux qu'on aime ?](https://www.youtube.com/watch?v=icZNfugCBIU)
J'étais passé complètement à côté de la valeur de la souffrance en tant
qu'identité. Bye bye.
---
### Reddition de comptes
> After all, if you cant hold back from judging yourself, youre unlikely
> to do so with others. So to get started, you can refrain from the demeaning
> self-talk the next time you do something that, in hindsight, looks like an
> error. **Instead, you can practice asking questions like, what was I thinking and
> noticing when this happened? How did I respond to what I saw happening? What did
> I expect?
>
> — [The gift of accountability. | everything changes](https://everythingchanges.us/blog/the-gift-of-accountability/)
L'article m'a beaucoup parlé, parce que ça semble être très en lien avec la
manière qu'on peut avoir de se juger, de donner de l'importance à ce que pensent
les autres.
> If I can **speak candidly about how I fucked up**, knowing no harm will come to
> me, I am more able to admit my mistakes, learn from them, and commit to making
> whatever repairs may be necessary to recover from the harm. Paradoxically, **its
> the lack of blame that creates the possibilities of repair and insight, while
> the threat of punishment forecloses opportunities for both**.
La punition devient alors un moyen d'empécher le changement, le pardon un moyen
de transformation, d'amélioration. 🤯