This commit is contained in:
Alexis Métaireau 2024-05-14 16:00:14 +02:00
parent f19f7a7939
commit 85e12bb780
No known key found for this signature in database
GPG key ID: 1C21B876828E5FF2
9 changed files with 414 additions and 10 deletions

View file

@ -38,7 +38,7 @@ Le livre est divisé en trois parties :
### Choisir Son Sujet
On a tendance à choisir les mauvais sujets de conversation, on a tendance à se foculaiser sur :
On a tendance à choisir les mauvais sujets de conversation, on a tendance à se focaliser sur :
- ce qui est facile (le sujet sur lequel on peut gagner)
- les sujets récents, plutôt que ce qui est vraiment important.

View file

@ -0,0 +1,12 @@
---
tags: JavaScript
title: document.designMode = "on";
---
I've [learned today](https://frontendmasters.com/blog/5-things-designers-can-do-with-javascript/) a really simple trick I wasn't aware of, to turn any webpage into something I can edit, I just need to enter:
```js
document.designMode = "on";
```
You can enter this directly in the console, or in the document directly. Very impressive when used on newspaper websites.

View file

@ -0,0 +1,53 @@
---
title: Know how much memory a long-running process used
tags: bash
---
I've had a situation in which I wanted to check the memory consumption of a
long-running process on my machine. For this, I discovered I can use the `time`
gnu utility (which is different from the bash `time`).
I didn't know it was possible to have this information this way, I'm always
using `top` (or `htop`) for stuff like this, but it doesn't get me the max
memory used :-)
On OSX, I had to install the gnu time with:
```bash
brew install gnu-time
```
And then, prepend `gtime -v` (ior `/usr/bin/time -v` on Linux machines):
```bash
gtime -v python umap/ws.py
```
Which got me a nice update once the process has finished:
```
Command terminated by signal 2
Command being timed: "python umap/ws.py"
User time (seconds): 1.67
System time (seconds): 0.91
Percent of CPU this job got: 5%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:45.92
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 108160
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 184
Minor (reclaiming a frame) page faults: 13944
Voluntary context switches: 185869
Involuntary context switches: 7827
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 1489
Socket messages received: 1491
Signals delivered: 1
Page size (bytes): 16384
Exit status: 0
```

View file

@ -0,0 +1,191 @@
---
title: Deploying on fly.io
tags: docker, deployment, websockets
---
I spent some time today deploying [uMap](https://umap-project.org) to [fly.io](https://fly.io), using a `Dockerfile`. Here are some notes I took.
First, I had to install the `flyctl` command. On OSX, with `brew`, it's:
```bash
brew install flyctl
```
Fly is using docker containers under the hood, and provides some tools to help create the files. In the case of uMap, I already had a `Dockerfile`, so it wasn't necessary.
## Creating an app
I created an app:
```bash
fly apps create
```
By answering the questions. It eventually generated a `fly.toml` file., that I actually rewrote to fit my needs:
```toml
app = 'umap'
primary_region = 'iad'
console_command = 'umap shell'
[build]
dockerfile = "Dockerfile"
[[services]]
internal_port = 8000
protocol = 'tcp'
processes = ["app"]
[[services.ports]]
handlers = ['http']
port = 80
force_https = true
[[services.ports]]
handlers = ['http', "tls"]
port = 443
[[vm]]
memory = '1gb'
cpu_kind = 'shared'
cpus = 1
```
The `services` section could be simplified by using the `http_service` section, but as I will need to configure websockets on a different port, it seems to be a better bet.
## Creating PostgreSQL / PostGIS database
I created a postgres app, that I named `postgres_umap` by answering the questions asked by this command:
```bash
flyctl postgres create
```
Then I had to activate the PostGIS extension, by connecting to the postgres cluster…
```bash
flyctl postgres connect -a postgres-umap
```
… and enter this:
```
CREATE EXTENSION postgis
```
At this stage, the machine crashed, and a `fly logs -a postgres-umap` told me that it was out of memory. I bumped the memory a bit with this:
```bash
# got the id of the machine with
fly machine status -a postgres-umap
# and then bumped the memory to 1024mb
fly machine update 3d8dd964a25978 --vm-memory 1024 --app postgres-umap
```
Redoing the `CREATE EXTENSION postgis;` worked this time.
Once this is done, I used this utility:
```bash
fly postgres attach postgres-umap --app umap
```
This created users, passwords and a database for me, and set the proper secrets for my app. Neat.
I received an email telling me this costs money, so after initializing the postgis database, I scaled the instance down:
```bash
fly machine update 3d8dd964a25978 --vm-memory 256 --app postgres-umap
```
## Handling secrets
Additionally to environment variables (which are present in the `fly.toml` file), I also had to define some secrets, using `fly secrets`:
```bash
secrets set SECRET_KEY=S0_S3CR3T
```
At some point, I had to unset some of them with:
```bash
secrets unset SECRET_KEY
```
I also added a few env vars:
```toml
[env]
WEBSOCKET_URI = "wss://xxx.fly.dev:8001"
WEBSOCKET_HOST = "0.0.0.0"
WEBSOCKET_ENABLED = "True"
UMAP_ALLOW_ANONYMOUS = "True"
```
## Deploying
With this in place, I could deploy these two machines with `fly deploy`.
## Adding support for WebSockets
This can change in the future, but for now, I have two servers, a WebSocket server listening on port `8001`, separate from the `uwsgi` server listening on `443` and `80`.
It is possible to define some specific commands that will replace the default `CMD` one of the `Dockerfile`.
To do this, I used the `[processes]` section, and named the default one `django`, because it's running the django server with `uwsgi`:
```toml
[processes]
ws = "/venv/bin/python /venv/lib/python3.11/site-packages/umap/ws.py"
django = "/srv/umap/docker/entrypoint.sh"
```
… and added a new services definition:
```toml
[[services]]
internal_port = 8001
protocol = 'tcp'
processes = ['ws']
[[services.ports]]
handlers = ['tls']
port = 8001
```
Also, I'm not sure why I had to downgrade the number of processes:
```bash
fly scale count 1 --process-group=django
fly scale count 1 --process-group=ws
```
## Using a custom domain
I wanted this to be hosted on my domain, so I went with adding a `CNAME`, following [this documentation](https://fly.io/docs/networking/custom-domain/):
```bash
CNAME xxx xxx.fly.dev
```
And then generated the SSL certs:
```bash
fly certs add xxx.domain.tld
```
## Persisting files
Everything was working smoothly until I realize that the files weren't actually persisted. For the files to be persisted, I needed to add volumes in the toml file:
```toml
[mounts]
source="umap_data"
destination="/srv/umap/uploads"
```
And create the volumes with the cli:
```bash
fly volume create umap_data -r iad -n2
fly deploy
```

View file

@ -5,7 +5,7 @@ total_days: 8
template: worklog
---
## Jeudi 25 Avril 2024 (0h, 1h bénévole, 5/5)
## Jeudi 25 Avril 2024 (0h, 1h bénévoles, 5/5)
Publication de la v0.1.0 de Argos en pair avec Luc.

View file

@ -5,6 +5,62 @@ template: worklog
total_days: 90
---
## Vendredi 10 Mai 2024 (6h, 5/5)
Une journée passée à comprendre comment fonctionne Fly.io pour pouvoir déployer dessus. On a fait une session de pair avec David, pendant laquelle on a réussi à faire tomber le truc en marche, en levant les différents bloquages qu'on découvrait au fil de l'eau. Ça marche presque !
## Jeudi 09 Mai 2024 (7h, 3/5)
J'ai ajouté une manière de vérifier que les messages entrants sont bien acceptables, pour éviter que n'importe quel message soit accepté.
J'ai ajouté une propriété `belongsTo` dans le `SCHEMA`, qui contient une liste des sujets concernés (`map`, `datalayer` ou `feature`).
Ça m'a permis de me rendre compte de quelques pirouettes qui sont faites actuellement dans le code :
1. pour `map` et les `datalayer`, les propriétés sont dans `.options.{property}` alors que pour les `features` elles sont dans `properties`.
2. Pour les `features`, les propriétés sont contenues dans un *namespace* `_umap_options`.
Je suis repassé sur **toutes** les options qui sont modifiables dans uMap, et fait quelques ajustements pour rendre tout fonctionnel. C'est très satisfaisant d'avancer :-)
Je change la manière dont les settings sont gérés avec les variables d'environnement, et je déploie le tout avec docker, rejoint par david pour une petite session papote et durant laquelle on réussit à faire tourner avec la ligne suivante:
```bash
docker run --privileged --publish 8000:8000 -e "DATABASE_URL=postgis://alexis:@host.docker.internal:5432/umap" -e"SECRET_KEY=tralala" -e "WEBSOCKET_ENABLED=True" -it umap-ws
```
## Mercredi 08 Mai 2024 (7h, 5/5)
L'import de données marche maintenant, ça à demandé quelques changements sur la manière dont les données étaient envoyées. Je suis content d'avoir une démo fonctionnelle. J'ai ensuite fait un peu de pair avec Yohan, pour changer la manière dont les évènements sont gérés.
Je n'écoute plus les changements « au fil de l'eau », mais uniquement quand les données sont vraiment présentes. Par exemple, uniquement la position de fin lors d'un drag-n-drop est envoyée, ce qui est moins impressionnant, mais garde de la bande passante et du CPU pour autre chose.
Je suis repassé ensuite sur certaines fonctionnalités accessibles avec les menus « clic droit » pour m'assurer que tout fonctionne comme prévu, et j'ai corrigé quelques bugs au passage.
Chouette, ça avance :-)
## Mardi 07 Mai 2024 (10h, 5/5)
Je continue de faire marcher la PR en cours sur la synchro. Je suis dans des cas que je n'avais pas encore pris en compte, entre autre j'ai maintenant une meilleure compréhension de la manière dont les menus « clic droit » fonctionnent.
Ça m'a permis de régler certains problèmes, et d'avoir un import quasi fonctionnel (les données manquent, je n'ai pour le moment que les géographies). J'ai fait des changements mineurs et:
- Les websockets ne sont crées que lorsqu'on rentre dans le mode édition
- il est possible de bouger les polygones et les lignes, alors que c'était cassé jusqu'ici
En fin de journée, j'ai finalement réalisé que l'import ne prenait pas en compte les données (uniquement les géométries).
## Lundi 06 Mai 2024 (7h, 5/5)
Le matin, travail avec Aurélie sur l'UX pour la synchro, l'après midi présentation de la PR en cours avec David et Yohan, en sandwich avec la weekly.
Je passe un peu de temps pour comprendre comment fonctionne Docker, et les Dockerfiles dans le cadre de uMap.
On se pose quelques questions autour de la manière de faire de la gestion des permissions, et j'entrevois la possibilité de limiter les vérifications qui sont faite sur le serveur.
## Mardi 30 Avril 2024 (6h, 5/5)
J'ai continué le travail sur la PR en cours, en ajoutant plein de petits bouts qui manquaient pour que ce soit utilisable. On a maintenant un bouton pour démarrer la collaboration « temps réel », et des `settings` qui vont bien pour pouvoir configurer ça comme on veut. Pour le moment j'ai mis le bouton à un endroit comme un autre, mais ça pourra changer.
J'ai pu me rendre compte de quelques parties qui ne fonctionnent pas encore, comme l'import de données.
## Lundi 29 Avril 2024 (7h, 4/5)
La reprise :-) J'ai fait une petite revue de code de ce qu'a proposé Yohan pour les règles de filtrage, et j'ai repris le travail sur la synchro. Laisser respirer entre plusieurs tentatives permet d'affiner. J'ai quelque chose qui fonctionne à peu près bien, minus les quelques cas qui ne sont pas encore couverts.

View file

@ -19,8 +19,8 @@ Une semaine de pause, consacrée au bricolage d'une cuisine pour l'accueil de gr
## Des joies 🤗
- J'ai eu la confirmation que j'allais travailler pour [Freedom of the Press Foundation](https://freedom.press/), sur [Danger Zone](https://dangerzone.rocks/) ! C'est assez excitant :-)
- Apprendre à faire de l'installation électrique, percer des murs, refaire un (tout petit) peu de plomberie. C'est plaisant de voir le résultat, et ça vient améliorer la confiance en moi là ou j'en ai besoin !
- Faire deux sessions de pair review et de discussion, durant lesquelles la discussion était simple et fluide. C'est tellement appréciable !
- Apprendre à faire de l'installation électrique, percer des murs, refaire un (tout petit) peu de plomberie. C'est plaisant de voir le résultat, et ça vient améliorer la confiance en moi là ou j'en ai besoin.
- Faire deux sessions de pair review et de discussion, durant lesquelles la discussion était simple et fluide.
## Des peines 😬
- Je me suis senti frustré de laisser en plan le travail en cours pour uMap pour cette semaine. J'ai l'impression de m'arrêter en pleine prise d'élan. Hâte d'y retourner.
@ -28,28 +28,28 @@ Une semaine de pause, consacrée au bricolage d'une cuisine pour l'accueil de gr
## Vu, Lu, etc
- 📘 Continué « La volonté de changer », de bell hooks.
- [La Tiktokeuse et la Tesla. Jonas et la baleine Reloaded. affordance.info](https://affordance.framasoft.org/2024/04/la-tiktokeuse-et-la-tesla/)
- 🎶 [ECHT! - DUNES (Live Session) - YouTube](https://www.youtube.com/watch?v=IeqvtXdniu4)
- 🎶 [ECHT! - DUNES (Live Session)](https://www.youtube.com/watch?v=IeqvtXdniu4)
- 🎶 J'ai découvert [La Mèche](https://lameche.bandcamp.com/album/la-m-che): un mix de sous-bassophone, sax ténor et batterie, génial !
- ⏯ [La Quadrature des Alex](https://www.youtube.com/watch?v=M-cFzVNrqKo), une aventure créé par Sam, en mode jeux de rôles, ou tout le monde s'appelle Alex, il fallait que j'écoute :-)
- 🕸 [Quelle est la capacité de Deuxfleurs ?](https://quentin.dufour.io/blog/2024-04-27/capa-web-deuxfleurs/) qui parle de comment l'architecture de DeuxFleurs est faite, et de ce que ça veut dire en terme de gestion de la charge. J'apprécie beaucoup lire ces détails techniques qui me donnent une meilleure compréhension du fonctionnement global.
- [À la rencontre de Fifine la renarde](https://cqfd-journal.org/A-la-rencontre-de-Fifine-la) qui parle d'une amitié avec une renarde, et d'un changement de perspective sur le vivant. Ça me touche, et ça connecte avec des discussions Ornito.
## Écran
> A chaque fait divers dramatique, le rôle donc “des écrans” ou “des réseaux” est convoqué non pour ce quil est (cest à dire un facteur parmi dautres mais jamais une causalité simple) mais pour ce quil permet de taire (leffondrement des politiques publiques de laccompagnement des mineurs en général, à commencer par celles et ceux qui traversent les situations les plus difficiles)
> — [Coercition de lintime. De Viry-Châtillon à Gaza. Sans retour. affordance.info](https://affordance.framasoft.org/2024/04/coercition-de-lintime-de-viry-chatillon-a-gaza-sans-retour/)
Tiens tiens, marrant de voir que c'est l'utilisation des écrans pour « faire écran » et remplacer la discussion qui pourrait être intéressante 🙄.
Marrant de voir des écrans utilisés pour « faire écran » et remplacer la discussion qui pourrait être intéressante 🙄.
---
## Valeur
> Spend time with every single other department at your company; spend time with users (as much as possible); spend time reading everything that comes across your desk. Get really really good at asking clarifying questions and combining disparate threads. Then write some code — and what you write matters much less than the outcome of its deployment, because despite what anodyne publicly-posted job descriptions might tell you your job is not to write code — it is to produce value for the organization.
> Spend time with every single other department at your company; spend time with users (as much as possible); spend time reading everything that comes across your desk. **Get really really good at asking clarifying questions and combining disparate threads**. Then write some code — and what you write matters much less than the outcome of its deployment, because despite what anodyne publicly-posted job descriptions might tell you your job is not to write code — it is to produce value for the organization.
> — [Your job is to produce value · Applied Cartography](https://jmduke.com/posts/microblog/produce-value/)
Ça fait beaucoup écho à des discussions du moment autour de la notion d'estime de soi, autour des injonctions qu'on se crée et de ce que ce serait qu'un sentiment d'imposture. Finalement, qu'est-ce qu'on se raconte sur ce que les gens attendent de nous ? De la technique, certes, mais pas uniquement.
Ça fait beaucoup écho à des discussions du moment autour de la notion d'estime de soi, autour des injonctions que je me crée, et de ce que ce serait qu'un sentiment d'imposture. Finalement, qu'est-ce qu'on se raconte sur ce que les gens attendent de nous ? De la technique, certes, mais pas uniquement.
La part de l'humain — les compétences psycho-sociales — me semblent tout aussi importante.
La part de l'humain — les compétences psycho-sociales — me semblent tout aussi importante(s).
---
## Équipe

49
content/weeknotes/28.md Normal file
View file

@ -0,0 +1,49 @@
---
date: 2024-05-08
headline: notes hebdo de la semaine
projects: umap
---
# Notes hebdo #28
## Ce qui s'est passé
La reprise, en déplacement à Angers puis à Dinan pour [Faiseuses du Web #3](https://faiseusesduweb.eu.org/).
**[uMap](https://umap-project.org)** 🗺️
*uMap est un outil libre pour faire des cartes personnalisées*
: J'ai repris le travail sur l'édition collaborative. Laisser respirer entre plusieurs tentatives permet d'affiner. J'ai quelque chose qui permet d'avoir un miroir entre deux navigateurs, minus les quelques cas qui ne sont pas encore couverts. C'est grisant d'avoir un bouton pour démarrer la collaboration !
: On a fait une rétrospective au format conseil de famille. C'était bien, mais j'aurai voulu préciser la temporalité de la réunion en commençant.
## Des joies 🤗
- Rencontrer et avoir des échanges inspirants avec des personnes qui pourraient être mes parents. J'apprécie que l'âge ne soit pas un frein aux discussions.
- M'autoriser à me reposer et à décaler des choses prévues alors que je n'avais plus d'énergie sociale.
- Me perdre sur internet et connecter avec de nouvelles personnes via leurs blogs.
- Écrire, avec d'autres, lors d'un petit moment hors du temps, une respiration.
- Accepter de laisser filer des occasions qui auraient pu être chouettes, pour ne pas rajouter du stress: ça ne rentrait pas.
- Parler soin dans les collectifs avec d'autres personnes, sentir qu'il y a peut-être quelque chose à faire pour que les lignes bougent.
## Des peines 😬
- Une soirée qui finit trop tard (et trop alcoolisée), qui m'a demandé plusieurs jours pour m'en remettre correctement. J'aimerai mieux connaitre mes limites, et éviter de les dépasser.
- Je me suis senti triste et anxieux suite à des discussions sur le soin dans les collectifs. Je suis content de mettre l'énergie à cet endroit, mais ça me demande beaucoup émotionnellement parlant. J'aimerai mieux percevoir quand je suis en train de dépasser ces limites.
- J'ai commencé à avoir des discussions « importantes », mais je n'y ai pas donné suite. J'aimerai prendre mon courage à deux mains.
## Vu, Lu, etc
- 🕸️ J'ai découvert le blog de Derek Sivers, avec des articles comme [Im a very slow thinker](https://sive.rs/slow), [Singing the counter-melody](https://sive.rs/counter) et [Explorers are bad leaders](https://sive.rs/exled). J'aime bien la manière dont les choses sont dites, et l'ouverture d'esprit qui semble transpirer.
- 😩 J'ai vu une vidéo de présentation de Process-com: [Équilibrez le Stress, Maximisez la Collaboration : communiquez sans heurts à laide de la process-com](https://www.youtube.com/watch?v=9vA2NciX1QQ), assez longue mais qui m'a donné envie de pousser un peu.
- 🎧 J'ai commencé [La chute de Lapin Ville](https://www.arteradio.com/emission/la_chute_de_lapinville/2942) sur Arte Radio, un humour cynique et décalé, j'aime beaucoup. Je me suis retrouvé à rire tout seul à plusieurs reprises.
- 🎧 J'ai écouté Corinne Le Bars parler de son livre « Réussir son burnout » dans [Zéro Virgule](https://audioblog.arteradio.com/blog/223731/podcast/223754/20-corinne-le-bars-reussir-son-burn-out)
- 🎶 J'ai découvert [Savana Funk - Ghibli](https://www.youtube.com/watch?v=bAkdjWPLhUQ), [Largue la peau](https://www.youtube.com/watch?v=xG7ulMT-eqk&list=PLaMo_Nya-E03TfzIR5Hf1jdYeadV8Ak4g&index=12) de Sages comme des sauvages.
## S'isoler
> Jaime beaucoup discuter avec des tas de gens pour comprendre comment iels voient le monde. Parfois, jen admire certain⋅es, jaimerais percevoir le monde comme elleux. Dautres minterrogent ou me mettent mal à laise. **Au bout dun moment, je me sens complètement vidée**. Les interactions sociales ont cet effet sur moi, ça me prend une énergie monstrueuse. Avec les années, jai compris que javais besoin des gens pour me nourrir. Me nourrir damour, daffection, de joie, didées. Mais que je devais le faire de manière mesurée et me dédier du temps en contrepartie pour me reposer.
>
> — [S'isoler pour créer, par Fanny Cheung](https://ynote.hk/mots/processus-de-creation/s-isoler-pour-creer.html)
Ça fait tout à fait écho à ma situation en fin de semaine, et avec le temps dédié au repos dimanche. 🤗
## Ailleurs…
Chez [Julie](https://juliebrillet.fr/notes/2024_05_06_notes/), [Benjamin](https://blog.benj.me/2024/05/06/notes-hebdo-3/), [Fabien](https://frica.github.io/blog/notes-11-fr.html)

43
content/weeknotes/29.md Normal file
View file

@ -0,0 +1,43 @@
---
date: 2024-05-13
headline: notes hebdo de la semaine
projects: umap
---
# Notes hebdo #29
## Ce qui s'est passé
Une semaine concentré sur uMap :-)
**[uMap](https://umap-project.org)** 🗺️
*uMap est un outil libre pour faire des cartes personnalisées*
: Continué le travail sur l'expérience utilisateur avec Aurélie.
: Présenté mon travail actuel au reste de l'équipe pour avoir leurs retours et pour être sur la même longueur d'onde.
: Travaillé sur la manière d'écouter les évènements pour ne relayer que les informations utiles (plutôt une fois que le changement est « définitif »)
: Repassé sur l'ensemble des options qui peuvent être synchronisées, pour lever les quelques bugs qui trainaient et qui empêchaient le fonctionnement, entre autres j'ai pu faire une démonstration de l'import qui fonctionne bien en étant synchronisé avec un autre pair.
: Ajouté une couche de sécurité, qui vérifie que les opérations proposées sont bien autorisées sur le client, et qu'elles font sens.
: Déployé le prototype actuel sur une instance de dev, en apprenant comment Docker fonctionne et (au passage) comment la plateforme fly.io l'utilise.
## Des joies 🤗
- Apprécier le fait d'avancer concrètement, et d'avoir des moments ou il est possible de faire de la synchronisation, d'avoir le temps d'avancer.
- Réussir à m'écouter et mettre fin à une conversation que je trouvais compliquée et pas au bon moment, et la planifier à un moment plus propice.
- Fermer l'ordinateur et profiter de ce soleil incroyable. Un petit pique-nique improvisé ([le mot viendrait de](https://fr.wikipedia.org/wiki/Pique-nique#%C3%89tymologie) « saisir l'instant », ça s'y prête bien).
- Prendre le temps de faire quelques séances de méditation, et de sieste, quand le besoin s'en faisait sentir.
- Prendre le temps d'un atelier d'écriture, ça m'a vraiment redonné envie ✍
## Des peines 😬
- Je peine un peu à terminer *la montée* que j'ai entamée sur uMap, hâte de faire passer cette *pull-request* pour profiter de *la pause sur le plateau*.
- Je me suis senti frustré d'être questionné sur des aspects techniques et méthodologiques à des moments où je demandais de l'aide. Je sens que j'ai besoin de clarifier la situation et mes attentes dans ces moments. J'aimerai discuter desdits moments entre concernés pour se mettre en recherche d'une solution.
- J'ai ruminé sur la question précédente, parce que ça ne passait pas. J'aimerai réussir à me détacher de ce genre de situations et faire preuve de plus de lâcher-prise.
- Je sens que je *mets un masque* dans les moments où je suis en dissonance. C'est nouveau pour moi, j'aimerai m'autoriser à être moi-même, avec mes questionnements et mon entièreté.
## Vu, Lu, etc
- 🎬 Vu Snow therapy (de Ruben Östlund), qui parle de ce que le patriarcat fait porter aux relations. Avec pas mal de plans chouettes (entre autres visuellement).
- Vu [Earl Nest](https://soundcloud.com/earlnest) (techno) et [Tane](https://www.youtube.com/watch?v=wxcjFvF38kA) en concert.
## Ailleurs…