Compare commits

...
3 Commits
Author SHA1 Message Date
alahouze 0b6b7774d9 Article du 10 Mai 2026.
ci/woodpecker/manual/woodpecker Pipeline was successful
2026-05-10 17:36:59 +02:00
alahouze bc150a7a44 Article du 03/04/2026 : favicon.
ci/woodpecker/push/woodpecker Pipeline was successful
2026-04-03 14:51:29 +02:00
alahouze 2d2da86f6a Ajout favicon. 2026-04-03 14:51:21 +02:00
9 changed files with 404 additions and 0 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

+5
View File
@@ -0,0 +1,5 @@
---
title: 3 Avril 2026
linkTitle: "03"
---
+137
View File
@@ -0,0 +1,137 @@
---
date: 2026-04-03T13:34:39+02:00
draft: false
author: Alexis Lahouze
title: Favicon
linkTitle: favicon
tags:
- général
- favicon
- svg
---
Parce que je trouvais que ça faisait vide, mon onglet sans icône.
<!--more-->
Donc j'ai créé un favicon.
## Réalisation
J'ai commencé par un SVG. Pour tout vous dire, j'ai demandé à PicoClaw de m'en
générer une à partir de mon site et du style Gruvbox Dark Hard.
Ça m'a permis d'avoir un premier jet, et une idée de base.
J'ai repris ça à la main, pour avoir un SVG, simple, final :
```svg
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 32 32" width="32" height="32"
>
<!-- Background -->
<rect width="32" height="32" rx="2" ry="2" fill="#1d2021"/>
<!-- Prompt -->
<text
x="1" y="8"
font-family="IosevkaTermSS04 Nerd Font Mono" font-size="8"
fill="#d79921"
>
$
</text>
<text
x="9" y="8"
font-family="IosevkaTermSS04 Nerd Font Mono" font-size="8"
fill="#b8bb26"
>
whoami
</text>
<!-- Command result -->
<text
x="1" y="17"
font-family="IosevkaTermSS04 Nerd Font Mono" font-size="8"
fill="#fabd2f"
>
alexis
</text>
<!-- New prompt, with cursor -->
<text
x="1" y="26"
font-family="IosevkaTermSS04 Nerd Font Mono" font-size="8"
fill="#d79921"
>
$
</text>
<text
x="9" y="26"
font-family="IosevkaTermSS04 Nerd Font Mono" font-size="8"
fill="#ebdbb2"
>
&#9608;
</text>
</svg>
```
L'idée, c'était de rester dans la sémantique du shell, et d'avoir mon prénom
retourné par la commande `whomai`. Et le curseur qui s'affiche juste après le
second prompt.
## Conversion
À partir de ce SVG, j'ai effectué une conversion en PNG, taille 256x256, avec la
commande `rsvg-convert` du paquet `librsvg2-bin` :
```sh
rsvg-convert favicon.svg -w 256 -h 256 -o assets/favicon.png
```
J'ai choisi 256 parce que c'est la plus grande taille "standard".
## Intégration avec Hugo
Ensuite, pour intégrer tout ça dans Hugo, c'est assez simple. J'ai édité le
partial `head.html` pour rajouter les balises `link` :
```go-html-template
{{ with resources.Get "favicon.png" }}
{{ with .Resize "180x" }}
<link rel="apple-touch-icon"
sizes="{{ .Width }}x{{ .Height }}" href="{{ .RelPermalink }}">
{{ end }}
{{ $res := . }}
{{ range (slice "256" "128" "96" "64" "48" "32" "16") }}
{{ with $res.Resize (print . "x") }}
<link rel="icon" type="image/png"
sizes="{{ .Width }}x{{ .Height }}" href="{{ .RelPermalink }}">
{{ end }}
{{ end }}
{{ end }}
```
L'idée est simple. Je génère d'abord l'icone pour Apple, parce qu'ils ne sont
visiblement pas capables d'utiliser les standards.
Ensuite, je génère plusieurs tailles, parce que pourquoi pas ? C'est facile à
gérer avec un `range` en template Hugo alors autant le faire, le navigateur se
gèrera.
## Épilogue
C'est assez simple à mettre en place.
Peut-être que je modifierai l'icône, parce qu'elle n'est pas hyper lisible dans
l'onglet, mais bon, c'est déjà un début.
Aussi, je n'ai pas scripté la génération des .png depuis le .svg, faudrait que
je le fasse, on verra au moment où je changerai le .svg, parce que ça implique
de rajouter le paquet `librsvg2-bin` dans la procédure de build, rien de bien
compliqué mais bon, faut faire.
Aller, à très vite!
<!-- vim: set tw=80 ts=2 sw=2 sts=2 spelllang=fr: -->
+8
View File
@@ -0,0 +1,8 @@
---
title: "Avril 2026"
linkTitle: "04"
---
Cette page liste les articles d'Avril 2026. Du plus récent au plus ancien.
<!-- vim: set tw=80 ts=4 sw=4 sts=4 spelllang=fr :-->
+5
View File
@@ -0,0 +1,5 @@
---
title: 10 Mai 2026
linkTitle: "10"
---
+182
View File
@@ -0,0 +1,182 @@
---
date: 2026-05-10T17:34:31+02:00
draft: false
author: Alexis Lahouze
title: Projets Persos
linkTitle: projets-persos
tags:
- projets
- technologie
- moi
---
On fait des choses.
<!--more-->
## Moi, d'abord
Avant de parler de ce que je fais, je vais parler un peu de moi.
Je suis quelqu'un de passionné, et curieux. Particulièrement sur les sujets
technologiques.
Ma première passion a été l'informatique, en découvrant la programmation Basic
sur Amstrad CPC 6128, à l'âge de 10 ans. J'ai toujours cette machine.
Du coup, histoire d'allier ma curiosité avec ma passion de la programmation,
j'ai un peu tendance à vouloir écrire un programme pour les sujets qui
m'intéressent.
Et alors, évidemment, avec la pléthore de langages qui existent, j'ai aussi
tendance à explorer ceux que je ne connais pas. Vous verrez par la suite que ça
peut avoir un certain impact sur le cycle de vie de mes projets.
Et en dehors de la programmation, j'ai une maison qui nécessite des travaux,
notamment d'électricité, et ça fait partie des domaines qui me plaisent. Donc…
## IRL
Cette maison, et cette électricité. Oui, jouer avec des fils électriques, ça me
botte bien, je sais que ça n'est pas le cas de tout le monde. L'électricité fait
peur, car une erreur peut causer la mort, et elle ne se voit pas. Mais en
respectant quelques règles, il n'y a pas vraiment de souci à se faire:
- couper le jus si possible, là, y a pas de questions à se poser ;
- vérifier la tension avec un multimètre, ou mieux avec un détecteur de
tension sans contact ;
- utiliser des outils adaptés, notamment des pinces et tournevis isolés, et
des chaussures aussi.
Suite à un défaut électrique (en résumé, j'ai un domino qui a cramé sans une
boîte de dérivation, j'étais à pas grand chose d'avoir la maison partir en
fumée), j'ai décidé de refaire l'électricité. En commençant par le
rez-de-chaussée. Bon, évidemment, j'ai mis le nez dedans, j'ai voulu tout
refaire. Y compris le tableau, et même avant, c'est à dire l'arrivée ENEDIS. À
l'origine, mon tableau se trouvait trop haut, derrière la porte, donc j'ai monté
une GTL, et j'ai refait mon tableau, repassé des gaines, repassé des fils dans
des goulottes. Je ne m'attarde pas sur ce chantier, mais en gros, il a commencé
il y a 2 ans et demi. Et donc ça fait 2 ans que j'ai des fils qui pendouillent
dans mon couloir. J'ai repris le weekend dernier, avec pour objectif de passer
ces fils en moulures "rapidement".
Ce chapitre est déjà long, alors je ne m'attarde pas, mais ma maison a deux
autres niveaux. Et je n'ai pas encore mis le nez dans l'étage, mais je sais
qu'au moins la moitié des prises n'a pas de terre…
Et je n'ai évoqué que l'électricité, mais il y a bien d'autres travaux à
réaliser dans cette maison.
## Jeu Vidéo
Je ne vais pas rentrer dans le cliché du passionné de jeu vidéos qui voulait
devenir programmeur de jeux vidéos. J'ai toujours considéré que ce milieu était
trop sous pression.
Cependant, j'ai quand même eu quelques idées. On va commencer par le MMORPG. Le
sujet m'intéressait, mais surtout la partie communication. Et aussi, j'aimais
bien Resident Evil. J'ai donc commencé à développer un système de messagerie
distribuée pour gérer la communication client-serveur et serveur-serveur pour un
MMORPG dans un univers de zombies. Autant vous dire que ça n'a pas été loin. Le
dépôt Git n'a pas bougé depuis… 16 ans. Je ne l'ai pas publié, j'ai trop honte.
Dans les autres idées que j'avais, et parce que je suis un perfectionniste,
j'imaginais un jeu vidéo où l'univers serait régit par des lois physiques, où on
aurait des atomes, et une physique réaliste, notamment sur les destructions.
C'était avant Minecraft, et la vogue du Voxel. Et j'ai rapidement compris que
c'est techniquement irréalisable de gérer une physique aussi complexe et
coûteuse en calculs.
Et enfin, dernier sujet lié au jeu vidéo, l'IA. Et sujet connexe, la génétique.
Le "vivant", quoi. Dans les idées folles que j'ai pu avoir, il y avait un jeu
vidéo où :
- on aurait des créatures qui apprennent (réseaux neuronaux) ;
- leurs caractéristiques physiques seraient régies par un ADN, avec
reproduction, et donc possibilité de croisements et de sélection
(algorithmes génétiques).
Le jeu se déroulerait en deux phases, la première en local où le joueur
entraînerait ses créatures, et la seconde où ils leur feraient rencontrer celles
d'autres joueurs dans des combats, et du coup un classement, des championnats,
etc. Avec l'engouement actuel pour l'IA, et surtout les évolutions du matériel
liées à ce domaine, peut-être qu'un tel jeu pourrait être possible. Mais
probablement complexe.
## Les transports
Dans les transports, il y a surtout deux domaines qui m'intéressent: le rail et
l'aéronautique.
Dans le premier, un jour, j'ai eu une idée à la con : modéliser des plans de
voies ferrées, notamment en gare, stylisés, à partir de données réelles. Les
données, on peut les avoir sur OpenStreetMap. Donc, j'ai appris le modèle de
données OSM PBF pour pouvoir le lire dans un programme en C++ et récolter les
infos dont j'ai besoin. Pour pouvoir visualiser ces infos, j'ai aussi développé
une application graphique, basée sur la bibliothèque
[Magnum](https://magnum.graphics/). En 2D. Et là, je me suis heurté à un domaine
que je ne soupçonnais pas : la géomatique et notamment les projections. Et c'est
parti d'un constat tout bête. J'ai rapidement eu une visualisation, sauf que la
zone que je visualisais (gare de Bordeaux Saint-Jean) a une particularité :
une plateforme circulaire. Dans ma première visualisation, cette plateforme
était… Ovale. Et aussi, j'avais des angles droits, pas droits. J'avais
simplement utilisé les coordonnées GPS mappées sur les coordonnées de l'écran.
Pour la faire courte, ça marche pas comme ça. Il faut changer de projection pour
avoir quelque chose de plus régulier. Et donc j'ai mis le nez dans des notions
comme WGS84, Lambert, UTM… Je ne rentre pas dans les détails, cherchez
vous-mêmes.
Et donc, le second, l'aéronautique. C'est plus récent, mais pareil, j'ai un
projet de visualisation, mais en 3D. Parce que pourquoi faire simple quand on
peut apprendre plein de choses ? Si vous vous intéressez un peu au sujet, vous
savez peut-être qu'il existe un format d'échanges de données qui s'appelle AIXM,
et ls SIA publie pas mal de choses dans ce format, ça s'appelle eAIP. Donc
l'idée c'est de prendre ces données et les afficher sur un globe. Donc, vous
saurez que, notamment, la Terre n'est pas ronde. Elle est sphérique (plus ou
moins). Et donc là, entre en jeu la géodésie. Je rentre pas dans les détails,
mais les projections en 2D c'est déjà un vaste sujet, mais alors l'affichage et
les coordonnées sur une plus ou moins sphère, je vous laisse imaginer. En l'état
actuel, j'ai une sphère. Qu'on peut faire tourner avec la souris. Faudrait que
je publie ça, un jour.
## L'électronique
L'électronique est un domaine qui m'a toujours fasciné, mais je ne connais que
les bases. Vous savez, U=RI, et P=UI. Du coup, je me suis dis qu'un des moyens
d'apprendre, c'est d'utiliser un simulateur: NGSpice. Et puis du coup, pourquoi
ne pas documenter ma démarche en écrivant un livre où j'explique comment
utiliser cette simulation pour apprendre l'électronique? Bon, du coup, j'ai
commencé en LaTeX à écrire ça. Et à passer *beaucoup* de temps à apprendre
comment on dessine un circuit en LaTeX. Bref, j'ai dû écrire deux chapitres.
## La radio
C'est un des morceaux les plus récents. Je ne sais plus comment c'est arrivé,
j'ai découvert la radio. J'ai acheté un dongle USB SDR, et j'ai commencé à
jouer. Bon, maintenant je veux installer une antenne sur une de mes cheminées,
et peut-être m'intéresser au brevet de radio-amateur.
## La téléphonie
Certains ont connu les modems pilotés en liaison série, avec les commandes AT.
Et bien on peut toujours faire ça, mais avec des modems 4G/5G. J'avais envie de
retrouver un peu cet esprit, et donc j'ai commandé un modem 4G/5G, pas un
routeur, qu'on branche en USB, et dans lequel on met une carte SIM. La carte
SIM, une carte prépayée suffit pour jouer avec. Et on peut recevoir et envoyer
des SMS. Et aussi des appels, a priori. Mais je n'en suis pas arrivé là.
## Pandoc
C'est dans la suite du précédent. En fait, j'ai discuté de mes expériences avec
le Modem 4G/5G avec un certain Lefinnois, AKA Denis Bodor. Je lui ai promis
d'écrire un article. Bon, du coup j'ai commencé à regarder ce qu'il faut pour
écrire un article chez Diamond. Vous avez un modèle de document ODT, avec des
styles. Bon, j'aime pas la bureautique, mais j'aime beaucoup Pandoc, qui permet
d'écrire du Markdown, et d'en sortir un peu ce qu'on veut. L'idée c'est qu'on
peut écrire des filtres personnalisés pour sortir la structure qu'on veut. Bon,
du coup j'ai promis deux articles à Denis, le premier étant sur le filtre que
j'ai commencé à développer pour écrire un article. Un peu méta, quoi. Faut que
je m'y mette sérieusement parce que mon filtre est en réalité presque terminé.
D'ailleurs celui-là je l'ai publié :
[https://codeberg.org/xals/pandoc-diamond-filter](https://codeberg.org/xals/pandoc-diamond-filter).
<!-- vim: set tw=80 ts=2 sw=2 sts=2 spelllang=fr: -->
+8
View File
@@ -0,0 +1,8 @@
---
title: "Mai 2026"
linkTitle: "05"
---
Cette page liste les articles de Mai 2026. Du plus récent au plus ancien.
<!-- vim: set tw=80 ts=4 sw=4 sts=4 spelllang=fr :-->
+46
View File
@@ -0,0 +1,46 @@
<svg xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 32 32" width="32" height="32">
<!-- Background -->
<rect width="32" height="32" rx="2" ry="2" fill="#1d2021"/>
<!-- Prompt -->
<text
x="1" y="8"
font-family="IosevkaTermSS04 Nerd Font Mono" font-size="8"
fill="#d79921"
>
$
</text>
<text
x="9" y="8"
font-family="IosevkaTermSS04 Nerd Font Mono" font-size="8"
fill="#b8bb26"
>
whoami
</text>
<!-- Command result -->
<text
x="1" y="17"
font-family="IosevkaTermSS04 Nerd Font Mono" font-size="8"
fill="#fabd2f"
>
alexis
</text>
<!-- New prompt with cursor -->
<text
x="1" y="26"
font-family="IosevkaTermSS04 Nerd Font Mono" font-size="8"
fill="#d79921"
>
$
</text>
<text
x="9" y="26"
font-family="IosevkaTermSS04 Nerd Font Mono" font-size="8"
fill="#ebdbb2"
>
&#9608;
</text>
</svg>

After

Width:  |  Height:  |  Size: 907 B

+13
View File
@@ -55,5 +55,18 @@
{{ end }} {{ end }}
{{ end }} {{ end }}
{{ with resources.Get "favicon.png" }}
{{ with .Resize "180x" }}
<link rel="apple-touch-icon" sizes="{{ .Width }}x{{ .Height }}" href="{{ .RelPermalink }}">
{{ end }}
{{ $res := . }}
{{ range (slice "256" "128" "96" "64" "48" "32" "16") }}
{{ with $res.Resize (print . "x") }}
<link rel="icon" type="image/png" sizes="{{ .Width }}x{{ .Height }}" href="{{ .RelPermalink }}">
{{ end }}
{{ end }}
{{ end }}
<title>{{ block "title" . }}{{ .Site.Title }} - {{ .Title }}{{ end }}</title> <title>{{ block "title" . }}{{ .Site.Title }} - {{ .Title }}{{ end }}</title>
{{/* vim: set tw=80 ts=2 sw=2 sts=2 ft=gohtmltmpl: */}} {{/* vim: set tw=80 ts=2 sw=2 sts=2 ft=gohtmltmpl: */}}