···99J'utilise la distribution Linux **Pop!_OS** depuis presque cinq ans.
1010J'ai toujours apprécié leur démarche autour de l'auto-tiling, qui est une fonctionnalité qui manque cruellement à GNOME (bien que des plugins existent).
11111212-Après quelques mois passés sous Manjaro Linux, et des galères liées à des montées de version hasardeuses qui ont plusieurs fois cassé mon système, et avec la sortie récente de Pop!_OS 24.04, il était temps pour moi de revenir sur cette distribution pour me faire un avis sur l'environnement très attendu : COSMIC.
1212+Après quelques mois passés sous Manjaro Linux, et des galères liées à des montées de version hasardeuses qui ont plusieurs fois cassé mon système, et avec la sortie récente de Pop!_OS 24.04, il était temps pour moi de revenir sur cette distribution pour me faire un avis sur l'environnement très attendu : COSMIC.
13131414<!--more-->
15151616-## Le nouvel environnement de bureau : COSMIC
1616+## Le nouvel environnement de bureau : COSMIC
17171818Pop!_OS n'a pas eu de mise à jour majeure depuis longtemps (la version précédente, 22.04, était sortie en avril 2022 donc)
1919La raison est simple, leur effort était principalement concentré autour du développement de leur environnement de bureau COSMIC, qui a duré plus de trois ans.
20202121-La promesse est forte : un environnement écrit en Rust pour avoir de bonnes performances et de la stabilité, un environnement pensé dès le départ pour supporter l'auto-tiling, ainsi que les workspaces dans un contexte multi-écran.
2121+La promesse est forte : un environnement écrit en Rust pour avoir de bonnes performances et de la stabilité, un environnement pensé dès le départ pour supporter l'auto-tiling, ainsi que les workspaces dans un contexte multi-écran.
2222COSMIC est aussi pensé dès le départ pour s'intégrer avec Wayland, en remplacement de X11.
23232424-COSMIC se veut être un environnement complet, et propose donc un ensemble de logiciels inclus, qui fournissent à peu près les mêmes outils que la suite GNOME, à savoir :
2424+COSMIC se veut être un environnement complet, et propose donc un ensemble de logiciels inclus, qui fournissent à peu près les mêmes outils que la suite GNOME, à savoir :
25252626-* un terminal : COSMIC Terminal
2727-* un éditeur de texte : COSMIC Text Editor
2828-* un explorateur de fichiers : COSMIC Files
2929-* un lecteur multimedia : COSMIC Media Player
3030-* un gestionnaire de configuration : COSMIC Settings
3131-* un store d'applications : COSMIC Store
2626+* un terminal : COSMIC Terminal
2727+* un éditeur de texte : COSMIC Text Editor
2828+* un explorateur de fichiers : COSMIC Files
2929+* un lecteur multimedia : COSMIC Media Player
3030+* un gestionnaire de configuration : COSMIC Settings
3131+* un store d'applications : COSMIC Store
32323333> Oui, ils ne se sont pas foulés pour les noms, mais au moins c'est facile à retenir 😅
3434···45454646## La distribution
47474848-Pop!_OS (qui est top 5 sur [DistroWatch](https://distrowatch.com/table.php?distribution=popos), même si ça ne veut pas dire grand-chose hormis qu'il y a une hype certaine autour de cette distrib) est une distribution Linux basée sur Ubuntu. Elle est développée par System76, une société américaine qui vend des ordinateurs portables sous Linux uniquement. On y retrouve donc les outils habituels : _apt_ et _flatpak_ pour l'installation de paquets (pas de _snap_ par défaut, et c'est tant mieux).
4848+Pop!_OS (qui est top 5 sur [DistroWatch](https://distrowatch.com/table.php?distribution=popos), même si ça ne veut pas dire grand-chose hormis qu'il y a une hype certaine autour de cette distrib) est une distribution Linux basée sur Ubuntu. Elle est développée par System76, une société américaine qui vend des ordinateurs portables sous Linux uniquement. On y retrouve donc les outils habituels : _apt_ et _flatpak_ pour l'installation de paquets (pas de _snap_ par défaut, et c'est tant mieux).
49495050-Au niveau de l'ISO à télécharger, 2 versions sont disponibles : une version simple, et une version embarquant les drivers Nvidia (l'option que j'ai choisie, puisque j'ai un petit GPU dans ma machine). Il existe aussi une version pour les architectures ARM. Je n'ai pas de machine ARM pour tester, mais je pense que ça peut être intéressant pour certains home-labs.
5050+Au niveau de l'ISO à télécharger, 2 versions sont disponibles : une version simple, et une version embarquant les drivers Nvidia (l'option que j'ai choisie, puisque j'ai un petit GPU dans ma machine). Il existe aussi une version pour les architectures ARM. Je n'ai pas de machine ARM pour tester, mais je pense que ça peut être intéressant pour certains home-labs.
5151Les ISOs sont assez lourds (2.8Go et 3.3Go pour la version avec les drivers Nvidia).
5252L'installation est simple, avec un helper graphique comme on en trouve dans toutes les distributions.
5353···9191> Sur mon setup de bureau, j'ai deux écrans 24 pouces en résolution 2560x1440, je les ai conservés en affichage à 100%, ce qui est plutôt confortable. J'ai activé l'auto-tiling par défaut, et des workspaces verticaux séparés pour chaque écran.
9292Sur mon laptop, j'ai un écran 14 pouces en 2880x1800, un scaling partiel à 150% est plus confortable.
93939494-Un point important : TOUT A FONCTIONNÉ DU PREMIER COUP.
9494+Un point important : TOUT A FONCTIONNÉ DU PREMIER COUP.
95959696-C'est, je pense, suffisamment bien pour pouvoir le mentionner (EN CRIANT !).
9696+C'est, je pense, suffisamment bien pour pouvoir le mentionner (EN CRIANT !).
97979898-J'ai pu facilement :
9999-* imprimer ;
100100-* connecter plusieurs casques Bluetooth ;
101101-* utiliser mon micro et ma webcam pour une visio ;
102102-* partager mon écran ;
103103-* prendre des screenshots ;
104104-* capturer un peu de video avec OBS Studio connecté à ma PS5 !
9898+J'ai pu facilement :
9999+* imprimer ;
100100+* connecter plusieurs casques Bluetooth ;
101101+* utiliser mon micro et ma webcam pour une visio ;
102102+* partager mon écran ;
103103+* prendre des screenshots ;
104104+* capturer un peu de video avec OBS Studio connecté à ma PS5 !
105105106106
107107108108-Et tout aussi important :
108108+Et tout aussi important :
109109110110-* installer Steam ;
111111-* et jouer à Factorio 🏭⚙️ !
110110+* installer Steam ;
111111+* et jouer à Factorio 🏭⚙️ !
112112113113Tout ça sans aucune galère.
114114C'est du niveau attendu pour toute distribution Linux moderne, mais je m'attendais à quelques galères plus importantes, surtout avec un environnement aussi récent.
···153153* La page [Community de COSMIC](https://system76.com/cosmic/community)
154154* Le GitHub [cosmic-utils](https://github.com/cosmic-utils)
155155* Pop!_OS sur [DistroWatch](https://distrowatch.com/table.php?distribution=popos)
156156-* [libcosmic](https://github.com/pop-os/libcosmic?) pour développer :
156156+* [libcosmic](https://github.com/pop-os/libcosmic?) pour développer :
157157 * des [applets](https://github.com/pop-os/cosmic-applet-template)
158158 * des [applications](https://github.com/pop-os/cosmic-app-template)
+4-4
content/posts/2026/2026-01-30-mi-veille/index.md
···35353636* [A fun trick for getting discovered by LLMs and AI tools](https://cassidoo.co/post/ai-llm-discoverability/) de [Cassidy Williams](https://cassidoo.co)
37373838-> Comment maintenir son site web à l'air des crawlers IA qui alimentent les LLMs ?
3939-Et comment réussir à être cité en source ?
3838+> Comment maintenir son site web à l'air des crawlers IA qui alimentent les LLMs ?
3939+Et comment réussir à être cité en source ?
4040>
4141> Cassidy Williams donne quelques pistes qu'elle a expérimentées, avec succès.
4242On y retrouve le llms.txt.
···6464C'est joli, et c'est gratuit.
6565La variante italique est incroyable. Je pense que je vais utiliser cette font sur mon site, pour les titres surtout.
66666767-* [Comprendre la loi de Brooks : le mythe du mois-homme, 50 ans plus tard](https://www.sfeir.dev/tendances/comprendre-la-loi-de-brooks-le-mythe-du-mois-homme-50-ans-plus-tard/) _via_ [Siegfried Ehret](https://ehret.me/2026/01/nflm-developer/)
6767+* [Comprendre la loi de Brooks : le mythe du mois-homme, 50 ans plus tard](https://www.sfeir.dev/tendances/comprendre-la-loi-de-brooks-le-mythe-du-mois-homme-50-ans-plus-tard/) _via_ [Siegfried Ehret](https://ehret.me/2026/01/nflm-developer/)
68686969> Chiffrer en jours/homme, ajouter des personnes à un projet en retard, on sait que ça ne fonctionne pas, mais des organisations continuent à le faire.
7070>
···7373* [Veille technologique ma méthode pour rester à jour | Camille Roux](https://youtu.be/d8nLfDFcip4) _via_ [LinkedIn](https://www.linkedin.com/posts/camilleroux_veille-technologique-ma-methode-pour-rester-activity-7407785711631933440-hHnQ)
74747575> Utiliser un lecteur RSS est de nouveau hype.
7676-Camille Roux nous donne quelques conseils concrets pour faire sa veille et la partager. En 3 mots : classer, consacrer du temps, partager.
7676+Camille Roux nous donne quelques conseils concrets pour faire sa veille et la partager. En 3 mots : classer, consacrer du temps, partager.
7777Quelques bonnes idées avec un peu d'IA, pour faire des résumés ciblés, ou "écouter" des articles plutôt que les lire.
7878S'appuyer sur des aggrégateurs d'actus forme aussi un bon point de départ.
7979
···42424343Le constat est sans appel, la manipulation politique de cette crise (mais aussi d'autres évènements) est évidente, puisque les agriculteurs, premiers concernés par cet évènement, sont très peu présents dans le discours face aux mouvements politiques, face aux comptes associés à des ingérences étrangères, et autres mouvements contestataires (anti-vax, théoristes du complot, etc.).
44444545-Pour conclure, Clément pousse la réflexion au monde de l'IA Gen, qui est entraînée sur ces contenus (en particulier Grok, entraîné sur le contenu de Twitter donc) : la propagande russe infiltre l'IA Gen.
4545+Pour conclure, Clément pousse la réflexion au monde de l'IA Gen, qui est entraînée sur ces contenus (en particulier Grok, entraîné sur le contenu de Twitter donc) : la propagande russe infiltre l'IA Gen.
46464747Il nous a également présenté l'initiative Française VigiNum (unique au monde), qui vise à surveiller les tendances sur les réseaux sociaux, et détecter les tentatives d'ingérences qui pourraient être menées par certains états, ainsi que quelques axes permettant de riposter face à ces attaques.
4848···57575858
59596060-Le ton est vite posé. Ce talks est un des plus drôles que j'ai vus récemment. Tout est prétexte à un jeu de mots en _ix_ : une partie de _Chifoumix_ : Menhir/Parchemin/Serpe, la commande `curlix` pour exécuter des requêtes HTTP, le serveur de cache _Redix_.
6060+Le ton est vite posé. Ce talks est un des plus drôles que j'ai vus récemment. Tout est prétexte à un jeu de mots en _ix_ : une partie de _Chifoumix_ : Menhir/Parchemin/Serpe, la commande `curlix` pour exécuter des requêtes HTTP, le serveur de cache _Redix_.
61616262Le jeu entre les deux speakers fonctionne bien, sur fond de rivalité éternelle entre ces deux personnages.
6363···8181Chaque exécution est associée à un _seed_ qui va rendre le test reproductible.
8282Un axe est aussi d'exécuter les tests dans des répétitions pour maximiser les cas couverts.
83838484-Un seul point négatif : la librairie est conçue pour être utilisée avec JUnit 4 uniquement, ce qui est un peu limitant pour les projets récents utilisant JUnit 5 ou 6.
8484+Un seul point négatif : la librairie est conçue pour être utilisée avec JUnit 4 uniquement, ce qui est un peu limitant pour les projets récents utilisant JUnit 5 ou 6.
85858686-### Metal-As-A-Service : Gérer votre bare-metal en MaaS, comme si c'était une machine virtuelle ! - par Julien Briault
8686+### Metal-As-A-Service : Gérer votre bare-metal en MaaS, comme si c'était une machine virtuelle ! - par Julien Briault
87878888On ne présente plus Julien, bénévole aux Restos du Coeur, et porteur de l'initiative _Le Cloud du Coeur_. Cette fois-ci, il nous présente les challenges associée à la gestion de serveurs en bare-metal.
8989···9999>
100100> Si vous ne les avez pas vu, allez aussi jetter un oeil aux autres talks de Julien sur le Cloud du Coeur, ça vaut le détour.
101101102102-### Fatigués de la POO ? Passez à la DOP ! - Par Jérôme Tama
102102+### Fatigués de la POO ? Passez à la DOP ! - Par Jérôme Tama
103103104104Un talk qui parcours les évolutions de Java depuis la version 8 jusqu'aux versions récentes.
105105L'approche est de proposer en live un refactoring de code, d'une application Java 8, sous la forme d'un Kata.
···119119120120> Un bon rappel du fonctionnement de la mémoire. C'est dense et technique, mais c'est intéressant pour se refaire l'_overview_ de ce qui existe.
121121122122-### Keynote du Jeudi soir : Speechless - par Jean-François Garreau
122122+### Keynote du Jeudi soir : Speechless - par Jean-François Garreau
123123124124-Un exercice d'improvisation, animé par Jean-François, avec quatre speakers de légende : Estelle Landry, Aurélie Vache, Mickael Alves, et Sébastien Ferrer; plus deux membres du jury : Marjorie Aubert et Thierry Chantier.
124124+Un exercice d'improvisation, animé par Jean-François, avec quatre speakers de légende : Estelle Landry, Aurélie Vache, Mickael Alves, et Sébastien Ferrer; plus deux membres du jury : Marjorie Aubert et Thierry Chantier.
125125Un bel exercice, très drôle, pendant lequel le public participe au choix des sujets.
126126127127
···134134135135J'ai profité du regain d'énergie de l'heure du midi pour aller voir quelques talks _Lightning_ de 15 minutes.
136136137137-### Keynote - Gray Hat, Black Hat, Users : comment protéger une plateforme de 85M d'utilisateurs face à des menaces hybrides - Par Mikael Robert et Yohan Boyer
137137+### Keynote - Gray Hat, Black Hat, Users : comment protéger une plateforme de 85M d'utilisateurs face à des menaces hybrides - Par Mikael Robert et Yohan Boyer
138138139139Mikael et Yohan sont co-fondateurs du réseau social Yubo, réseau social Français 🇫🇷, avec pour cible des utilisateurs de la Gen Z (donc _obviously_, je ne connaissais pas ce réseau).
140140···150150151151> Le message principal est donc que le risque vient aussi de l'intérieur et des usages détournés. La surveillance des signaux dits "faibles" prend une place importante.
152152153153-### Mieux écrire, mieux trouver : Diátaxis comme guide de documentation - par Alexis "Horgix" Chotar
153153+### Mieux écrire, mieux trouver : Diátaxis comme guide de documentation - par Alexis "Horgix" Chotar
154154155155Alexis présente rapidement le concept de Diataxis, framework d'organisation de documentation.
156156157157
158158159159-Ce framework propose d'organiser la doc selon 2 axes, en 4 parties : les tutoriels et how-tos visant à documenter des actions, et les explications et la références plus portées sur la connaissance.
159159+Ce framework propose d'organiser la doc selon 2 axes, en 4 parties : les tutoriels et how-tos visant à documenter des actions, et les explications et la références plus portées sur la connaissance.
160160161161Quelques tips intéressants, en particulier ne pas hésiter à lier les articles de documentation, ainsi qu'être le plus spécifique possible.
162162163163
164164165165> J'ai bien aimé l'approche avec les exemples sur la photo précédente, qui aide à se projetter dans l'organisation proposée par le framework.
166166-> Comme l'a dit Alexis, le mieux, c'est de se lancer !
166166+> Comme l'a dit Alexis, le mieux, c'est de se lancer !
167167168168-### Déchaînez le Chaos : Tester la résilience de votre application avec Chaos Monkey - par Erwan Le Tutour
168168+### Déchaînez le Chaos : Tester la résilience de votre application avec Chaos Monkey - par Erwan Le Tutour
169169170170Erwan présente les approches de Chaos Monkey, qui ont été popularisées par Netflix, avec la Simian Army.
171171···175175176176La démo est intéressante, Erwan nous montre comment activer le Chaos Monkey, sur les différentes couches de notre application, pour y introduire des latences ou des erreurs. À tester couplé avec des tirs de charge pour observer comment les applications se comportent et améliorer leur résilience.
177177178178-> Probablement une brique que je vais tester à l'avenir, vu que c'est tout pile dans ma stack !
178178+> Probablement une brique que je vais tester à l'avenir, vu que c'est tout pile dans ma stack !
179179180180-### Tricher pour mieux apprendre : 30 minutes par jour pour rester curieux dans nos métiers de la tech - par Yann Schepens
180180+### Tricher pour mieux apprendre : 30 minutes par jour pour rester curieux dans nos métiers de la tech - par Yann Schepens
181181182182Yann nous parle de veille techno, et nous propose de prendre 30 minutes chaque jour, sur notre temps de travail pour faire de la veille.
183183Il nous invite à pratiquer, lancer des projets persos, partager.
184184185185
186186187187-L'idée la plus pertinente à mon sens : faire sa veille 30 minutes avant le daily. Cela permet de bien gérer le temps, de ne pas déborder.
187187+L'idée la plus pertinente à mon sens : faire sa veille 30 minutes avant le daily. Cela permet de bien gérer le temps, de ne pas déborder.
18818830 minutes par jour, ça représente une dizaine d'heures par mois, donc cette "triche" permet quand même de cumuler pas mal de temps, c'est une bonne astuce si on a pas encore de temps consacré à la veille.
189189190190> Je reste convaincu que la veille est probablement une des pratiques les plus importantes de nos métiers.
···198198199199Antoine et Mathieu nous présentent l'histoire de l'utilisation des images sur le web, depuis la photo des Cernettes (première photo publiée sur internet), en passant par les différents formats, des BMP, GIF, en passant par les JPG et PNG, jusqu'aux formats modernes AVIF ET WEBP, dont les codecs sont issus du monde de la vidéo.
200200201201-Ils nous listent avec humour les piliers de l'enfer : des JPG non-transparents, aux images qui ne chargent pas, à l'image de 20 pixels affichée en grand donc floue, à l'image de 4000 pixels affichée en tout petit.
201201+Ils nous listent avec humour les piliers de l'enfer : des JPG non-transparents, aux images qui ne chargent pas, à l'image de 20 pixels affichée en grand donc floue, à l'image de 4000 pixels affichée en tout petit.
202202203203-Mais au delà de cet aspect humoristique, ils nous partagent des axes d'amélioration très concrets : l'utilisation des formats modernes qui sont très légers, le redimensionnement des images et la mise à disposition au browser d'un `srcset` pour lui permettre de choisir parmi les formats, les `lazy loading` et `fetchpriority` pour aller chercher des images au bon moment.
203203+Mais au delà de cet aspect humoristique, ils nous partagent des axes d'amélioration très concrets : l'utilisation des formats modernes qui sont très légers, le redimensionnement des images et la mise à disposition au browser d'un `srcset` pour lui permettre de choisir parmi les formats, les `lazy loading` et `fetchpriority` pour aller chercher des images au bon moment.
204204205205Une architecture est aussi proposée pour redimensionner les images à la volée et les conserver en cache, plutôt que de faire ces redimensionnements au build (pas comme sur ce blog donc), à base de Strapi, imgproxy, d'un bucket et d'une BDD pour le stockage, et d'un Varnish ou d'un CDN pour le cache.
206206C'est plutôt intéressant pour des sites publics, je testerai probablement une ou deux de ces astuces dans les prochains mois.
207207208208> J'avais déjà entamé un travail sur les images de ce blog sur les bons conseils d'Antoine, il m'a redonné des idées supplémentaires avec ce talk. J'en avais pas besoin ahah.
209209210210-### Local-first et sync-engines, l'architecture du futur ? - par Benjamin Legrand
210210+### Local-first et sync-engines, l'architecture du futur ? - par Benjamin Legrand
211211212212-Benjamin présente les problèmes liés aux architectures classiques _n-tiers_, avec le Frontend qui communique à un Backend, avec des requêtes HTTP par exemple. Ces communications sont sources d'attente côté utilisateur en cas de latence réseau, et on met en place des mécanismes pour y palier : loaders et spinners. La gestion d'erreur est également un problème en soi, ainsi que la disponibilité du Backend qui doit être maximale, sous peine de rendre le Frontend inutilisable.
212212+Benjamin présente les problèmes liés aux architectures classiques _n-tiers_, avec le Frontend qui communique à un Backend, avec des requêtes HTTP par exemple. Ces communications sont sources d'attente côté utilisateur en cas de latence réseau, et on met en place des mécanismes pour y palier : loaders et spinners. La gestion d'erreur est également un problème en soi, ainsi que la disponibilité du Backend qui doit être maximale, sous peine de rendre le Frontend inutilisable.
213213214214
215215216216Il présente ensuite les approches _local-first_, qui consistent à avoir une base de données locale au Frontend (type _IndexedDB_ ou _sqLite_), couplée à un moteur de synchronisation.
217217218218-Les avantages sont nombreux : plus besoin de _spinner_, l'accès réseau devient optionnel car l'application peut fonctionner en mode déconnecté, les données peuvent être plus facilement sécurisées et privées si besoin, le Frontend devient alors aussi plus tolérant aux pannes du Backend.
218218+Les avantages sont nombreux : plus besoin de _spinner_, l'accès réseau devient optionnel car l'application peut fonctionner en mode déconnecté, les données peuvent être plus facilement sécurisées et privées si besoin, le Frontend devient alors aussi plus tolérant aux pannes du Backend.
219219220220Côté Frontend, l'utilisation de _live-queries_ permet d'implémenter le lien entre les écrans et la base de données facilement (ainsi que le refresh pour les données synchronisées entrantes). Côté moteur de synchronisation, la plupart des moteurs du marché proposent l'utilisation d'un _CRDT_ (pour _Conflict-free Replicated Data Type_), une espèce d'API de Documents à la MongoDb, pour implémenter la synchronisation simplement.
221221···223223224224> J'avais déjà vu ce genre d'architecture par le passé. Le principal problème est pour moi le besoin de déplacer (ou dupliquer) les règles de gestion dans le Frontend, mais je trouve l'approche intéressant quand l'application Web est le seul canal.
225225226226-## Keynote de fin : Une belle démarche de transparence
226226+## Keynote de fin : Une belle démarche de transparence
227227228228-La keynote de cloture du vendredi soir (juste après ma game de Factorio), a été l'occasion pour les orgas de remercier tout le monde : sponsors, speakeuses et speakers, et le public présent.
228228+La keynote de cloture du vendredi soir (juste après ma game de Factorio), a été l'occasion pour les orgas de remercier tout le monde : sponsors, speakeuses et speakers, et le public présent.
229229230230
231231
···26262727C'est, je pense, un bon point de départ.
28282929-Voici les scores de mon site à l'heure actuelle, pour une navigation mobile et desktop :
2929+Voici les scores de mon site à l'heure actuelle, pour une navigation mobile et desktop :
30303131
3232
3333{ class="images-grid-2" }
34343535Ces scores peuvent sembler intéressants sur la page d'accueil, mais ils se dégradent fortement sur certaines pages.
3636-Voici les scores pour la page de mon talk sur Factorio :
3636+Voici les scores pour la page de mon talk sur Factorio :
37373838
3939
···5050Cette étape est très simple à mettre en place, car elle est déjà supportée par Hugo.
5151Il suffit lors du build d'ajouter le flag `--minify` pour demander à Hugo de minifier toutes les ressources.
52525353-Ma commande de build est la suivante dans mon `mise.toml` :
5353+Ma commande de build est la suivante dans mon `mise.toml` :
54545555```toml
5656[tasks.build]
···8888 | xargs -n 1 -P "$JOBS" -I IMG sh -c 'cwebp -q 75 IMG -o $(echo "IMG" | sed "s/\.[^.]*$/.webp/")'
8989```
90909191-Puis un gros `sed` pour remplacer les références dans mes markdown :
9191+Puis un gros `sed` pour remplacer les références dans mes markdown :
92929393```shell
9494sed -Ei 's/\.(jpe?g|png)$/\.webp/I' **/*.md
···115115Hugo supporte la recompression des images dans différents formats à la volée (qui aurait pu remplacer mes scripts, mais il vallait mieux ne pas faire ça au build), mais pas leur redimensionnement automatique, il faut implémenter soi-même la mécanique.
116116Pour pouvoir redimensionner les images à la volée (au build donc), la meilleure solution semble d'utiliser un hook _img_ Hugo, qui permet de surcharger la traduction du markdown et d'y mettre le code qu'on souhaite.
117117118118-Le hook utilisé par défaut est le suivant :
118118+Le hook utilisé par défaut est le suivant :
119119120120```go
121121<img src="{{ .Destination | safeURL }}"
···130130
131131```
132132133133-aura pour équivalent HTML le code suivant :
133133+aura pour équivalent HTML le code suivant :
134134135135```html
136136<img src="/photo.jpg" alt="Une image">
···154154La magie a lieu sur les premières lignes.
155155Je redimensionne l'image à la taille maximale de 820px (ou moins si l'image est plus petite).
156156157157-Le HTML généré par Hugo pour mes images est maintenant le suivant :
157157+Le HTML généré par Hugo pour mes images est maintenant le suivant :
158158159159```html
160160<img src="/photo_hu_ed495de5ae801a42.webp" width="820" height="540" alt="Une image">
···186186 {{ with $.Title }}title="{{ . }}"{{ end }}>
187187```
188188189189-Le code HTML généré ressemble donc à ça :
189189+Le code HTML généré ressemble donc à ça :
190190191191```html
192192<img srcset="/photo_hu_ed495de5ae801a42.webp 820w,
···237237Cependant, la compression se fait en utilisant un peu de CPU à la volée.
238238Il est alors intéressant de pré-compresser les ressources statiques à la phase de build pour économiser un peu de CPU.
239239240240-Une directive Caddy permet de servir des fichiers statiques pré-compressés : `precompressed`.
240240+Une directive Caddy permet de servir des fichiers statiques pré-compressés : `precompressed`.
241241Caddy va alors rechercher des variantes compressées des fichiers, sous la forme de fichiers sidecar.
242242À côté de chaque fichier statique, il faut donc générer les variantes compressées et les nommer en utilisant les extensions `.gz`, `.br` et `.zst` par exemple.
243243244244Hugo ne permet pas de générer ces variantes compressées de lui-même, donc je dois utiliser un petit script qui s'exécutera en fin de la phase de build.
245245246246-J'ai donc créé un script `precompress` dans mon fichier `mise.toml` :
246246+J'ai donc créé un script `precompress` dans mon fichier `mise.toml` :
247247248248```toml
249249[tasks.build]
···276276245 files compressed : 80.99% ( 83.3 MiB => 67.4 MiB) B ==> 98%^T
277277```
278278279279-On peut valider que les fichiers buildés sont précompressés comme souhaité, avec les extensions `.gz` et `.zst` :
279279+On peut valider que les fichiers buildés sont précompressés comme souhaité, avec les extensions `.gz` et `.zst` :
280280281281```bash
282282$ ls public/
···305305306306> On a encore un joli gain avec les compressions `gzip` et `zstd`, de l'ordre de 75%.
307307308308-Pour ensuite servir les fichiers précompressés, il faut ajouter la [directive `precompressed`](https://caddyserver.com/docs/caddyfile/directives/file_server#precompressed) dans le `Caddyfile` :
308308+Pour ensuite servir les fichiers précompressés, il faut ajouter la [directive `precompressed`](https://caddyserver.com/docs/caddyfile/directives/file_server#precompressed) dans le `Caddyfile` :
309309310310```Caddyfile
311311# Clever Cloud needs us to listen on port 8080
···336336Server: Caddy
337337```
338338339339-et la même commande après la compression :
339339+et la même commande après la compression :
340340341341```bash
342342$ curl --compressed --head https://codeka.io
···377377Strict-Transport-Security: max-age=63072000
378378```
379379380380-Dans mon Caddyfile, rien de plus simple, j'ajoute le header `Strict-Transport-Security` :
380380+Dans mon Caddyfile, rien de plus simple, j'ajoute le header `Strict-Transport-Security` :
381381382382```Caddyfile
383383# Clever Cloud needs us to listen on port 8080
···447447La directive `img-src` permet d'autoriser les images qui proviennent de shields.io, que j'utilise pour afficher quelques badges.
448448Enfin, la directive `default-src` sert de fallback pour toutes les directives possibles, et indique que seul mon site est une source autorisée.
449449450450-## Et ça donne quoi ?
450450+## Et ça donne quoi ?
451451452452-Après toutes ces modifications, voici les résultats de l'analyse LightHouse :
452452+Après toutes ces modifications, voici les résultats de l'analyse LightHouse :
453453454454-Voici les scores de mon site à l'heure actuelle, pour une navigation mobile et desktop :
454454+Voici les scores de mon site à l'heure actuelle, pour une navigation mobile et desktop :
455455456456
457457
···45945946046096 et 100 en performance sur la page d'accueil, on est mieux que les 91 initiaux, mission accomplie ici.
461461462462-Pour la page qui avait un résultat vraiment mauvais, le résultat est un peu plus mitigé :
462462+Pour la page qui avait un résultat vraiment mauvais, le résultat est un peu plus mitigé :
463463464464
465465
···468468Les scores initiaux étaient de 43 en mobile et de 58 en desktop.
469469En fouillant un peu, ce sont les `iframes` qui plombent les perfs, donc je n'y pourrai pas grand chose.
470470471471-Côté headers de sécurité, j'ai atteint la perfection avec le joli score de 105/100, soit un A+, à la place du D- initial :
471471+Côté headers de sécurité, j'ai atteint la perfection avec le joli score de 105/100, soit un A+, à la place du D- initial :
472472473473
474474···486486487487## Liens et références
488488489489-* Documentation de Hugo :
489489+* Documentation de Hugo :
490490 * Configuration de l'[optimisation des images avec Hugo](https://gohugo.io/configuration/imaging/#quality)
491491 * La [méthode Resize de Hugo](https://gohugo.io/methods/resource/resize/)
492492 * Les [formats supportés par Hugo](https://gohugo.io/functions/images/process/#format)
493493 * [Le hookimage de Hugo](https://gohugo.io/render-hooks/images/#article)
494494495495-* Documentation de Caddy :
495495+* Documentation de Caddy :
496496 * [La directive `encode`](https://caddyserver.com/docs/caddyfile/directives/encode#syntax)
497497 * [La directive `precompressed`](https://caddyserver.com/docs/caddyfile/directives/file_server#precompressed)
498498499499-* Documentation MDN :
499499+* Documentation MDN :
500500 * [Responsive Images](https://developer.mozilla.org/en-US/docs/Web/HTML/Guides/Responsive_images)
501501 * [MDN HTTP Observatory](https://developer.mozilla.org/en-US/observatory)
502502 * [Content-Security-Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Security-Policy)
···505505506506* [Precompressing Content With Hugo and Caddy](https://scottstuff.net/posts/2025/03/09/precompressing-content-with-hugo-and-caddy/)
507507508508-* L'excellent talk de Antoine Caron et Hubert Sablonière : [La compression Web : comment (re)prendre le contrôle ?](https://www.youtube.com/watch?v=LWd0hr6ljZk)
508508+* L'excellent talk de Antoine Caron et Hubert Sablonière : [La compression Web : comment (re)prendre le contrôle ?](https://www.youtube.com/watch?v=LWd0hr6ljZk)
509509510510-* L'article de Denis Germain, qui a fait la même chose que moi cette semaine : [Optimisation webperf : AVIF et pré-compression pour le blog](https://blog.zwindler.fr/2026/02/19/optimisation-webperf-avif-precompression/)
510510+* L'article de Denis Germain, qui a fait la même chose que moi cette semaine : [Optimisation webperf : AVIF et pré-compression pour le blog](https://blog.zwindler.fr/2026/02/19/optimisation-webperf-avif-precompression/)