Update content

This commit is contained in:
Alexis Métaireau 2024-10-10 11:16:43 +02:00
parent 3bfe7c4dc4
commit 28c866637c
No known key found for this signature in database
GPG key ID: 1C21B876828E5FF2
14 changed files with 333 additions and 99 deletions

View file

@ -1,42 +0,0 @@
---
title: Debian packaging for python
tags: debian, packaging, python, stden, pyproject
status: draft
---
Recently, for [Dangerzone](https://github.com/freedomofpress/dangerzone), we [switched from stdeb to pybuild](https://github.com/freedomofpress/dangerzone/pull/901).
Stdeb wasn't working for us on Debian trixie (at the time at least), and after some tinkering, we figured it could be better to use the pybuild tools instead. I was pretty happy to find an excuse to learn about Debian packaging, as I really like the Debian project [and the culture behind it](https://www.debian.org/social_contract).
I have to say that at a first glance, this seemed overly complicated. There is *a lot* of documentation about how to do debian packaging, almost to the point where I didn't know where to start. Hopefully, [Kunal](https://legoktm.com) pointed me to the right direction.
And, it turns out I was completly wrong about the complexity. Sure there is a lot of moving pieces, but in the end, doing the packaging work was pretty straightforward. This is partially due to the fact we are packaging a client-side application, meaning we avoid some complexity about WSGI to HTTP "bridges".
In the end, most of the work is to write the proper files in the `debian` folder, and call `dpkg-buildpackage`.
## The `debian` folder
Here is the file structure:
```
debian/
├── changelog
├── compat
├── control
├── copyright
├── rules
└── source
├── format
└── options
```
Let get to each of the interesting files one by one:
- `debian/changelog` contains the changelog. The format actually means something and is documented here ;
- `debian/control` contains the actual project description and dependencies, we'll get back to this in a bit ;
- `debian/rules` is a Makefile containing the targets to build the actual package ;
- `debian/compat` contains some metadata information about the version of the packaging standard this uses ;
- `debian/source/*` contains some information on how to get the source. Depending
- I leave `debian/copyright` out of the picture, it's just
## Pybuild

View file

@ -0,0 +1,138 @@
---
title: Debian Python packaging
tags: debian, packaging, python, stdeb, pyproject
---
Recently, I did some Debian python packaging, for the [Dangerzone](https://github.com/freedomofpress/dangerzone) project.
I was pretty happy to find an excuse to learn about Debian packaging: I'm a long time user of Debian, and [their culture](https://www.debian.org/social_contract) resonates well with me.
More specifically, we [switched from stdeb to pybuild](https://github.com/freedomofpress/dangerzone/pull/901).
Stdeb wasn't working for us on Debian trixie (at the time at least), and after some tinkering, we figured it could be better to use the pybuild tools instead.
At a first glance, all of this seemed overly complicated. There is *a lot* of documentation about how to do debian packaging, almost to the point where I didn't know where to start. Hopefully, [Kunal](https://legoktm.com) pointed me to the right direction and gave me a help when I was stuck (thanks!).
It turns out to be less complex that expected. Sure there is a bunch of moving pieces, but in the end, doing the packaging work was pretty straightforward.
Building a `.deb` package is done in two steps:
1. Filling in the `debian` folder with the proper information
2. Running the `dpkg-buildpackage` utility, which will output the `.deb`
## The `debian` folder
Most of the work is to write the proper files in the `debian` folder, and call `dpkg-buildpackage`. Here is how it looks:
Here is the file structure:
```
debian/
├── changelog
├── compat
├── control
├── copyright
├── rules
└── source
├── format
└── options
```
Let's describe these files:
### `debian/changelog`
Contains... the changelog! The format is documented [here](https://www.debian.org/doc/debian-policy/ch-source.html#s-dpkgchangelog) ; In our case it looks like this:
```
dangerzone (0.7.0) unstable; urgency=low
* Removed stdeb in favor of direct debian packaging tools
-- Freedom of the Press Foundation <info@freedom.press> Tue, 27 Aug 2024 14:39:28 +0200
```
### `debian/control`
This contains the actual project description and dependencies:
```
Source: dangerzone
Maintainer: Freedom of the Press Foundation <info@freedom.press>
Section: python
Priority: optional
Build-Depends: dh-python, python3-setuptools, python3, dpkg-dev, debhelper (>= 9)
Standards-Version: 4.5.1
Homepage: https://github.com/freedomofpress/dangerzone
Rules-Requires-Root: no
Package: dangerzone
Architecture: any
Depends: ${misc:Depends}, ${python3:Depends}, podman, python3, python3-pyside2.qtcore, python3-pyside2.qtgui, python3-pyside2.qtwidgets, python3-pyside2.qtsvg, python3-appdirs, python3-click, python3-xdg, python3-colorama, python3-requests, python3-markdown, python3-packaging
Description: Take potentially dangerous PDFs, office documents, or images
Dangerzone is an open source desktop application that takes potentially dangerous PDFs, office documents, or images and converts them to safe PDFs. It uses disposable VMs on Qubes OS, or container technology in other OSes, to convert the documents within a secure sandbox.
.
```
All the fields are almost self-explanatory, and [documented here](https://www.debian.org/doc/debian-policy/ch-controlfields.html).
In our case, here are the ones worth mentionning:
- `Rules-Requires-Root` allows to tell that the building of the package doesn't actually require root privileges.
- Some specific templates are used, like ${python3:Depends} in the `Depends` definition. This will be filled-in by pybuild.
### `debian/rules`
This is basically a Makefile containing the targets to build the actual package. In our case, because we are delegating the build steps to pybuild, it's almost empty. It looks like this:
```Makefile
#!/usr/bin/make -f
export PYBUILD_NAME=dangerzone
export DEB_BUILD_OPTIONS=nocheck
%:
dh $@ --with python3 --buildsystem=pybuild
```
### `debian/source/*`
Contains some information on how to get the source. Depending on how you want to do it there are multiple ways to do this. In our case, because the `debian` folder is part of the repository we want to package, we use the `3.0 (native)` format, which will create a compressed file (tarball).
`debian/source/format` defines this format:
```
3.0 (native)
```
`debian/source/options` specifies the options that can be useful when creating the tar file that will be used as a source. As you can see, we instruct it to ignore a few folders we don't want to package:
```
compression = "gzip"
tar-ignore = "dev_scripts"
tar-ignore = ".*"
tar-ignore = "__pycache__"
```
### Additional `debian/*` files
- `debian/copyright` contains [the license information about the package](https://www.debian.org/doc/debian-policy/ch-source.html#copyright-debian-copyright).
- `debian/compat` contains some metadata information about the version of the packaging standard this uses. In our case [`10`]();
## Pybuild
I've mentionned we are using [pybuild](https://wiki.debian.org/Python/Pybuild). Pybuild is doing the work of getting the dependencies out of `setup.py`, or `pyproject.toml`.
### Pyproject
In the case you are using `pyproject.toml` (and you should!), you can use [`pybuild-plugin-pyproject`](https://packages.debian.org/bookworm/pybuild-plugin-pyproject) to get the dependencies out of it.
On Dangerzone, at the time of writing this we are still supporting Ubuntu Focal, which doesn't provide this pyproject plugin, hence why it is not configured.
If we had to do it, we would do the following:
1. Add it to the build dependencies in `debian/control`
2. Upate the `debian/rules` file to specify the following:
```
export PYBUILD_SYSTEM=pyproject
```
Hope it's useful :-)

View file

@ -4,12 +4,17 @@ slug: about
---
# About me
👋 **Welcome here**, I'm Alexis, a software developer interested by collectives,
digital freedom and conflict resolution.
👋 **Welcome here**, I'm Alexis,
I am a software engineer interested by digital freedom and privacy.
I'm also exploring how to run and participate to healthy collectives via listening and conflict-resolution techniques.
I mostly publish here in French, but some articles are in English.
You can find here [weekly notes](/weeknotes) (fr), some journal entries (sometimes in english, sometimes in french),
[reading notes (fr)](/lectures), [bits of code (en)](/code) and [some writing (fr)](/ecriture)
I mostly publish here in French, but some articles are in English. You can
find here [weekly notes](/weeknotes) (fr), some journal entries (sometimes in english, sometimes in french),
[reading notes](/lectures), [bits of code](/code) and [some writing](/ecriture)
---

View file

@ -3,11 +3,78 @@ title: dangerzone
save_as: dangerzone/index.html
template: worklog-en
---
## Mercredi 09 Octobre 2024 (8h, 5/5)
I've reviewed the work done by Alex on the on host conversion, which spawned some interesting discussions about how to deal with our scripts generally speaking, covered by [#946](https://github.com/freedomofpress/dangerzone/issues/946) . I tested the branch locally on a M1 mac and it works well 🎉
I've updated the Github issue templates with the review, and we should be good soon there.
Also, I spent some time mocking `subprocess.Popen`, to finally use `pytest-mockpopen` which does the heavy lifting for us (it's not working with the `unittest.mock` out of the box, unfortunately).
I sent and merged a quick PR replacing `set-output` by environment variables in our CI.
## Mardi 08 Octobre 2024 (6h, 5/5)
I started writing tests for the branch which checks the image installation. It seems that the best way forward will be to `@mock.patch` the calls to docker/podman, to see if the errors are displayed. I'm not really sure if I should consider this a unit test or a functional test (probably both ? 🤔).
What I want to test is:
- Are the logs generated by the calls to docker / podman present ?
- When clicking on retry, do the messages go away ?
I also started writing a blueprint of how the independent container updates might work, and what are the problems this will solve. I've started creating an API, but I stopped in the middle of it, wondering if it could make sense to use signing mechanisms from the registries, rather than doing it ourselves.
It's possible to do so [on podman at least](https://github.com/containers/podman/blob/main/docs/tutorials/image_signing.md) ([another link](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/html/building_running_and_managing_containers/assembly_signing-container-images_building-running-and-managing-containers#proc_signing-container-images-with-gpg-signatures_assembly_signing-container-images)), but it requires some control on the receiving machine, which we might not have. See this:
```
$ cat /etc/containers/policy.json
{
...
"transports": {
"docker": {
"<registry>/<namespace>": [
{
"type": "signedBy",
"keyType": "GPGKeys",
"keyPath": "<path>/key.gpg"
}
]
}
}
}
```
[Skopeo](https://github.com/containers/skopeo) is a tool to transport the containers from one machine to another, so it's something we might want to use, but it's not installable on windows unfortunately.
Started reviewing the onhost conversion PR Alex proposed. Will resume tomorrow on this.
## Lundi 07 Octobre 2024 (6h, 5/5)
- Sync with Alex
- Another pass on the GH issue templates, to have issue templates for different OSes
- Reviews on different changes proposes by Alex
- Added a `--debug` flag to the dangerzone-cli to help getting more logs when needed
- Some more debugging on the colima support issue
## Jeudi 03 Octobre 2024 (6h, 5/5)
- Github issue templates
- Error handling during the container installation phase
## Mercredi 02 Octobre 2024 (7h, 4/5)
- Sync with Alex about what goes in 0.8.0
- Merged the migration to Github Actions
- Did some reviewing on the preparation of the on host conversion PR
- Team meeting !
## Lundi 30 Septembre 2024 (7h, 4/5)
- Sync with @a_pyrgio about last week
- Review the 0.7.1 hotfix, updated commits, and created assets via our mac minis (.dmg for silicon, .deb and fedora 39,40 rpms). Tested the hotfix on an Apple M1 machine, it works.
- Updated the "migrate to CI branch" according to @a_pyrgio comments
## Jeudi 19 Septembre 2024 (8h, 4/5)
- Some debugging on colima, gVisor is not able to run there (yet)
@ -19,6 +86,7 @@ template: worklog-en
- 1:1 with Harris
- DZ team meeting
## Mercredi 18 Septembre 2024 (8h, 4/5)
- Merged #906 - Fix wrong container runtime detection on Linux

View file

@ -7,6 +7,26 @@ template: worklog
Transformation d'un site web depuis hugo vers ghost.
## 8 Octobre 2024 (1h, 4/5)
Mise à jour de ghost suite à [une faille de sécurité](https://github.com/TryGhost/Ghost/security/advisories/GHSA-78x2-cwp9-5j42). Ce n'était pas si simple, parce que ghost veut absolument nous simplifier la vie et au final nous la rends plus compliquée 🧰
J'ai du :
- Changer la version de node qui était utilisée par défaut dans le script `ghost`:
```
vim ~/.npm-packages/lib/node_modules/ghost-cli/bin/ghost
```
- Modifier les checks qu'il faisait pour s'assurer qu'il y avait assez d'espace disque libre, parce que ça bloquait
```
vim ~/.npm-packages/lib/node_modules/ghost-cli/lib/commands/doctor/checks/free-space.js
```
- lancer `ghost upgrade`
- relancer le worker dans l'interface d'admin
- ???
- PROFIT !
J'en ai profité pour faire la migration des services vers l'infrastructure logicielle 2024
## 12 Janvier 2023 (1h, 4/5)
Changement de la pagination par défaut. J'ai mis du temps à trouver ou était le bon réglage, mais c'était très simple une fois trouvé. Je m'attendais à trouver l'information dans l'admin, mais cela fait partie des réglages du thème.

View file

@ -4,6 +4,7 @@ save_as: umap/index.html
template: worklog
total_days: 90
---
## Vendredi 27 Septembre 2024 (7h, 5/5)
Je trouve une manière de faire le déploiement avec uWsgi pour le serveur de websockets.
@ -22,6 +23,8 @@ Je simplifie le code pour la gestion des opérations dans la PR en cours, puis j
On se fait une session de discussion avec David, puis un tour du propriétaire suivi d'une session de debug, pour se rendre compte que `makeFeature` ne passe pas sync=false en paramètre.
On a en direct la réponse de NLNet pour le financement pour les tuiles vectorielles, qui est accepté !
Je déploie sur fly.io :-)
## Mercredi 25 Septembre 2024 (6h, 3/5)

View file

@ -9,16 +9,16 @@ status: draft
C'est la reprise après les grandes vacances d'été.
**[Danger Zone](https://dangerzone.rocks/)**
## Ce qui s'est passé
*DangerZone transforme des documents potentiellement dangereux en documents sûrs.*
Dangerzone
- Une semaine de travail en solo
- J'ai appris à faire du packaging pour Debian et des applications en python côté client.
- Relectures d'un article à paraître sur comment DZ à fait l'utilisation de gVisor
- Des discussions autour de comment estimer s'il faut s'intéresser à des alertes de sécurité (CVE) ou non
## Des joies 🤗
## Les trucs marquants:
- Les vacances, c'était super :-)
- Faire du packaging pour Debian est plus simple que ce pensais (au moins dans ce contexte).
@ -26,14 +26,10 @@ C'est la reprise après les grandes vacances d'été.
- J'écoute mes limites et j'en fais des discussions. Je suis content de la manière dont les choses sont reçues.
- Content de retourner dans mon espace de coworking pour la fin de semaine.
- Retrouver mes claviers [et l'envie de faire de la musique avec](https://tutut.delire.party/@almet/113052885449948979)
## Des peines 😬
- Je serais bien resté en vacances...
- En étant seul une partie de la semaine, j'ai manqué de rythme et j'ai passé trop de temps derrière des écrans. Gros décallage et mal de crane.
- Je ne vois pas de « solution magique » pour mettre fin à cette situation où je cumule deux missions (dangerzone + umap). J'aimerai trouver un moyen d'aller au bout de l'histoire sans que ça me fasse des semaines à ralonge.
## Vu, Lu, etc
## Partages
- 🏓 Pling Klang, un spectacle qui parle de masculinités en montant un meuble Ikea, avec de l'humour décalé et du ping-pong quand on ne s'y attends pas. Super.
- 🎧 Quelques épisodes de « Dingue », sur RTS (sur le burn out, les troubles du spectre autistique, le TDAH). C'est chouette d'avoir un panorama rapide mais malheureusement je reste sur ma faim en terme de contenus, surement le format qui est un peu court.

View file

@ -9,12 +9,14 @@ status: draft
Deuxième semaine de reprise !
**[Danger Zone](https://dangerzone.rocks/)**
## Ce qui c'est passé:
DangerZone:
- J'ai continué de bosser pour améliorer ma compréhension du packaging sur Debian ;
- On à commencé un travail pour se faciliter la vie pour les prochaines mises à jour, améliorer la sécurité générale du projet, et clarifier comment on gère l'annonce de nouvelles vulnérabilités (CVEs);
## Des joies 🤗
## Les trucs marquants:
- Je me sens plein d'énergie. Je ne sais pas si c'est ~~le printemps~~la rentrée ou si c'est le fait de commencer à être plus à l'aise dans le contexte du boulot, mais c'est chouette !
- Improviser le temps d'une soirée, d'abord avec les copaines puis en amoureux.
@ -22,10 +24,6 @@ Deuxième semaine de reprise !
- Je vous ai déjà dit que la musique c'était génial ? 📎
- Prendre le temps de faire de la transformation de fruits.
## Des peines 😬
- 🤦🏼‍♂️ L'annonce de la nomination de notre nouveau premier ministre, que dire...
## Vu, Lu, etc
- 🎬 Vu Emilia Perrez de Jacques Audiard. J'y suis allé les yeux fermés, et j'ai été assez surpris du format. Pas mal de choses chouettes et quelques questionnements en sortant.

View file

@ -7,31 +7,24 @@ status: draft
# Notes hebdo #37
Une semaine bien remplie, première session de théatre d'improvisation,
## Ce qui s'est passé
**[Dangerzone](https://dangerzone.rocks/)**
Dangerzone:
- Le changement de la manière de faire du packaging pour Debian, la préparation d'un article sur gVisor et Dangerzone ;
- Migration en cours de l'integration continue vers les actions Github, c'est l'occasion de revoir la manière dont le cache est géré ;
- Une belle session de debug à deux avec Alex pour se rendre compte que le souci dans lequel on est aurait pu être évité en mettant à jour nos "runners".
- J'ai changé la manière dont on fait le packaging pour Debian
- Relecture et quelques ajouts sur un article sur gVisor et Dangerzone
- Migration en cours vers les actions Github pour notre intégration continue. L'occasion de rendre ces tests plus rapides!
## Des joies 🤗
uMap:
- Prendre le temps de présenter des excuses, et de commencer à dénouer une situation tendue, tout en explicitant la cause de notre désaccord.
- M'accorder des moments de relâche par rapport au travail, pour pouvoir être présent à d'autres endroits.
- M'organiser pour rendre possible la fin du travail sur uMap sans me mettre trop de travail dans les pattes. Content d'avoir amorcé la discussion.
- Oser commencer le théatre d'improvisation alors que je n'en ai jamais fait
- On a mis en place des semaine spécifiques sur uMap, avec l'idée de perdre moins de temps à changer de contexte.
## Les moments marquants
- Très content de prendre le temps de rendre possible la fin du travail sur uMap. Content d'avoir amorcé la discussion, et des réactions des intéressés.
- J'ai nommé des soucis que je mettais sous le tapis depuis plusieurs mois, pour me rendre compte que les constats étaient partagés avec d'autres.
- Une belle session de pair-debugging, j'aime beaucoup y apprendre des petites astuces.
## Des peines 😬
## Partages
- C'était un peu trop rempli, et j'ai manqué de temps pour chiller / me relaxer. J'aurai pu raccourcir les soirées pour avoir plus de temps de repos.
- Décaller mes matinées, et devoir enchainer la journée pour pouvoir avancer.
- J'ai du recadrer un peu lors d'une réunion où ça partait un peu trop en vrille pour moi, sans trop savoir si le recadrage à été bien vu.
## Vu, Lu, etc
- Commencé la série Kaos sur Netflix, c'est assez marrant de voir les dieux grecs dans notre modernité.
- Écouté Sam et la reprise des Contes de mon vieux grimoire.
- Écouté le code à changé « l'éloge du bug »
- J'ai commencé à suivre une formation autour de la sécurité informatique, entre autres pour mieux comprendre comment fonctionnent les différents types d'attaques, d'un peu plus près.

View file

@ -7,29 +7,22 @@ status: draft
# Notes hebdo #38
**[Dangerzone](https://dangerzone.rocks/)**
## Ce qui c'est passé:
- Préparation de la prochaine release `0.8.0`
- La recherche d'alternatives à l'utilisation de Docker Desktop sous OSX (une license est demandée pour les grosses organisations)
- La fin de la migration aux Actions Github, ça ne paraissait pas grand chose, mais c'est chouette d'avoir une CI qui réponds rapidement.
Dangerzone:
## Des joies 🤗
- On commence à préparer la prochaine release `0.8.0`
- La recherche de solutions pour que les organisations de plus de 250 employés puissent utiliser Dangerzone (Docker Desktop n'est pas libre et requiert une license dans ce cas).
- La suite de la migration aux Actions Github, ça ne paraissait pas grand chose, mais c'est chouette d'avoir une CI qui réponds rapidement.
## Les points marquants:
- Je récupère mes vendredi, et ça me rends beaucoup d'énergie. Très content d'avoir trouvé une solution pour la situation uMap + Dangerzone. Ça faisait trop et je sens le niveau d'anxiété qui diminue.
- Me coucher tôt et lire
- Décaller ma journée pour me faire une grasse mat'
- Être là pour des proches
- Me coucher tôt et lire, c'est toujours aussi bien.
- La musique c'est la vie, épisode 237. Les répétitions de la fanfare me donnent toujours autant d'énergie.
## Des peines 😬
- Je me suis mis la pression lors d'un concert, et j'ai perdu mes moyens. J'aurais préféré m'entrainer avant, et y mettre moins d'enjeu.
- Parfois,Je me suis mis la pression lors d'un concert, et j'ai perdu mes moyens. J'aurais préféré m'entrainer avant, et y mettre moins d'enjeu.
- Ne pas savoir mettre fin à une discussion stérile, parce que les enjeux sont (perçus comme) forts. J'aurais aimé gagner quelques heures de sommeil.
## Partage
## Vu, Lu, etc
- Predestination (film)
- Le chat du rabin tome 1 et 2. J'aime vraiment bien cet humour :-)
- Rejoué un peu à Hadès 1 sur Switch. J'y suis presque :p

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

@ -0,0 +1,28 @@
---
date: 2024-09-27
headline: notes hebdo #39
projects: uMap
status: draft
---
# Notes hebdo #39
## Ce qui c'est passé:
- Une semaine concentré sur uMap. Je reprends le travail qui permet aux pairs de récupérer les messages qui se sont échangés avant de rejoindre la carte.
- Plusieurs sessions de debug autour de ces concepts, on se rends compte que ce n'est pas simple à débugger, mais c'est chouette d'avancer.
- Je fais du déploiement via Docker (sur la plateforme fly.io)
- Je commence à intégrer la liste des personnes connectées dans l'interface.
- On reçoit la réponse de NLNet pour le financement de la fonctionalité de tuiles vectorielles, c'est validé !
## Les points marquants:
- Très content d'être à la canopée comme espace de coworking, je m'y sens de plus en plus à l'aise.
- Des longues sessions de travail, un total de presque 50 heures cette semaine, c'est beaucoup.
- Difficile de faire la séparation entre différents projets, ça demande une discipline que je dois apprendre.
## Partage
- J'ai terminé Subtil Béton, c'était super, je recommende.
- Joué à Akropolis (jeu de plateau)
- Vu Good Bye Persil, de la compagnie L'Arbre à vaches. C'était encore mieux que dans mes souvenirs.

32
content/weeknotes/40.md Normal file
View file

@ -0,0 +1,32 @@
---
date: 2024-10-04
headline: Weeknotes #40
projects: dangerzone
status: draft
---
# Weeknotes #40
## What happened
Dangerzone:
- We had to publish an emergency 0.7.1 release, to account for Docker Desktop changes happening on Windows and MacOS. They changed how they generate IDs for their images, and this made the application fail to find them.
- We finished the move the Github Actions, adding some cache along the way. The outcome is faster tests and CI: it now takes 8 minutes to test run all the tests, build the artifacts, on all our supported platforms! 🙌🏼
## Takeaways
- It was pleasant to do this release without too much pressure, and it's nice to see we are paving the way for more automation in the future, which should release the stress even more ;
- I found myself emotionally triggered, a kind of traumatic backfire. It makes me realize I am in a posture now to let things go. It's crazy to see the amount of time required to recover from double cross, and to measure the impacts of it on my day to day life one year and half later 😬
- 🎺🎷🥁📣 Fortunately, music is here once again. Very happy to find a refuge here, with simple moments of joy.
## Sharing
- I'm starting to read « Comme un empire dans un empire » d'Alice Zeniter, and I like the writing so far. Let's see how it goes.
- I went to a gig of [Fleuves](https://www.youtube.com/watch?v=iKqsBx7-ZdE), it was nice to meet with friends there and feel the urge for dancing, and lose myself there 🕺🏼
- I went to see [Tatami](https://fr.wikipedia.org/wiki/Tatami_(film%2C_2023)) on the movies, the history of two judoca women participating to the judo championships for the islamic nation of Iran. A thriller, by all means, in black and white, where we can really feel the injustice. Powerful.
-
> **The gap between your abilities and your taste is not a gap to be crossed but one to be cultivated**. As you build your craft [...] you develop ever more ideas about whats possible in your work. As your skill grows, so too do your ambitions, such that your taste always and forever outstrips your abilities. For every increment of improvement, you extend your desires out that much further. This is not to say you will never be satisfied with your work — although, that is a not uncommon scenario, and not necessarily as dreary as it sounds. But rather that as you become more capable, you are wont to find as much joy and satisfaction in the process of developing your skill as in the outcomes of it. **The work of creativity, at the end of the day, is the work of creativity — not what you create, but who you become in the act of creation**.
>
> — [Stay in the gap, Everything changes](https://everythingchanges.us/blog/stay-in-the-gap/)

View file

@ -611,6 +611,8 @@ hr {
width: 100%;
height: 0.5em;
border: 0px;
margin-top: 3em;
margin-bottom: 3em;
background: repeating-linear-gradient(
45deg,
var(--text-color) 0px,

View file

@ -39,7 +39,7 @@ PLUGINS = [
CACHE_OUTPUT_DIRECTORY = "cache"
CACHE_DOMAIN = "/cache/"
TYPOGRIFY = True
TYPOGRIFY = False
INDEX_SAVE_AS = "index.html"
# URL configuration