Le site arthur.bebou.netlib.re - retour accueil
git clone git://bebou.netlib.re/arthur.bebou
Log | Files | Refs |
commit 6a43f158d313a5790a1f52310dec3c0c18c96690 parent 34d210284de05d3b54900860d997711103c30140 Auteurice: Arthur Pons <arthur.pons@unistra.fr> Date: Tue, 15 Jul 2025 16:00:07 +0200 Nouvel article sur les sites pad Diffstat:
A | contents/pad-to-html/index.sh | | | 151 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
M | contents/tron/index.sh | | | 6 | +++--- |
2 files changed, 154 insertions(+), 3 deletions(-)
diff --git a/contents/pad-to-html/index.sh b/contents/pad-to-html/index.sh @@ -0,0 +1,151 @@ +#! page +title: Faire un site one page avec un pad +author: Arthur Pons +description: Voyons ce que cela coûte de générer un très simple site depuis un pad +publication: 2025-07-15 + +section: main + +Article pas relu + +## Le besoin + +Imaginons un festival artistico-militanto-écolo du nord de l'Alsace. Il a pour +habitude de communiquer sur facebook et instagram (bouuuh). Il a tout de même +un linktree avec le programme et quelques infos (mieuux). A la fin du festival +une personne fait la remarque que ce serait tout de même chouette d'avoir un +vrai site avec les infos de bases. Sauf que c'est un peu ennuyant à faire, +difficile à éditer etc. + +De manière générale les personnes sont à l'aise avec l'édition d'un pad. Je le +reconnais c'est un bel outil dont il n'existe pas d'alternative identique dans +le monde termino-unixien. En terme d'appli web y'a vraiment pire d'etherpad. + +Et si l'on faisait tenir tout le site sur une page, générée depuis le markdown +d'un pad édité par tout le monde ? + +Pour faire des tests j'ai hébergé le site ici : http://ire.bebou.netlib.re +Et le pad ici : http://pad.unistra.fr/p/ire +Ca peut casser n'importe quand. + +## La proposition + +### Récupérer le contenu et en faire de l'HTML + +On peut récupérer le contenu d'un pad en le réquêtant avec `/export/txt` ajouté +à la fin : + + $ curl -Ls https://pad.unistra.fr/p/ire/export/txt + ## Blablabla + + machin + +On peut mettre ça dans du `lowdown` pour générer de l'html : + + $ curl -Ls https://pad.unistra.fr/p/ire/export/txt | lowdown + <h2 id="blablabla">Blablabla</h2> + + <p>machin</p> + +Si on met ça dans une petite boucle while on peut vérifier s'il s'est passé +quelque chose toutes les N secondes : + + while :;do + curl -Ls https://pad.unistra.fr/p/ire/export/txt | lowdown > index.html + sleep N + done + +### Ne pas spammer le pauvre pad de l'unistra + +Sauf que c'est bof de spammer pour rien le pad donc imaginons autre chose. En se +basant sur le système de [qcm](/qcm/) on peut ajouter un lien dans le pad qui, +lorsque l'on clique dessus, déclenchera la mise à jour du site via la détection +du chemin dans les logs du serveur web. Il faudra mettre en place le nécessaire +pour filtrer les logs et le lien dans le pad : + + [ -p "notif" ] || mkfifo "notif" + tail -Fn0 "/var/log/nginx/access.log" | + grep --line-buffered -E "/mise-a-jour" > "notif" & + notifpid=$! + + cat "notif" | while read maj; do + curl -Ls https://pad.unistra.fr/p/ire/export/txt | + grep -v 'http://ire.bebou.netlib.re/mise-a-jour' | + lowdown > index.html + done + +Pour éviter de refaire des calculs s'il n'y a pas eu de modif on peut +enregistrer le markdown et tester s'il est identique à l'ancien avec un `diff` : + + cat "notif" | while read maj; do + curl -Ls https://pad.unistra.fr/p/ire/export/txt | + grep -v 'http://ire.bebou.netlib.re/mise-a-jour' > index-new.md + if ! diff index.md index-new.md 2> /dev/null;then + lowdown > index.html + fi + done + +### Le versionnage automatique + +Finalement pour éviter de perdre quoi que ce soit on pourra gitter le tout : + + cat "notif" | while read maj; do + if ! diff index.md index-new.md 2> /dev/null;then + curl -Ls https://pad.unistra.fr/p/ire/export/txt | + grep -v 'http://ire.bebou.netlib.re/mise-a-jour' | + lowdown > index.html + fi + git add index.html + git commit -m "Modification" + git push + done + +Évidemment on pourra mettre une quantité arbitraire de code dans le while pour +avoir un squelette html décent, un `nav` dynamique ou autre. + +### La version minimale finale + +Au final la version "minimale" du concept pour un serveur `nginx` pourrait être +: + + [ -p "notif" ] || mkfifo "notif" + tail -Fn0 "/var/log/nginx/access.log" | + grep --line-buffered -E "/mise-a-jour" > "notif" & + notifpid=$! + + cat "notif" | while read maj; do + if ! diff index.md index-new.md 2> /dev/null;then + curl -Ls https://pad.unistra.fr/p/ire/export/txt | + grep -v 'http://ire.bebou.netlib.re/mise-a-jour' | + lowdown > index.html + fi + git add index.html + git commit -m "Modification" + git push + done + + kill $notifpid + +## Les limites + +A priori ça fonctionne pas mal pour une page mais ça devient compliqué pour +plus. C'est possible d'avoir un séparateur dans le pad qui délimite plusieurs +pages différentes puis de les séparer côté serveur mais ça risque de devenir +assez rapidement fastidieux à éditer. + +On peut intégrer des images déjà en ligne avec `![]()` mais comment fait-on pour +uploader des images, des pdf etc ? + +Il n'est pas possible d'éditer le css et l'html depuis le pad, que le contenu. +Ça peut éventuellement être un avantage selon le contexte. Avec plus de code +côté serveur c'est possible mais possiblement trop compliqué pour ce que l'on +voulait faire. + +Si le pad est public il faut bien le cacher sinon n'importe qui pourra faire des +modifications. Au pire des cas git devrait pouvoir nous permettre de revenir à +un état antérieur. + +Il n'est, je crois, pas possible d'utiliser ce système via un éditeur de texte +classique + git. Dans tous les cas à la prochaine modif du pad le contenu du +site sera écrasé. On a donc pas une accessibilité chouette à la fois pour les +personnes voulant y accéder via un navigateur web *et* des cli 😔. diff --git a/contents/tron/index.sh b/contents/tron/index.sh @@ -99,9 +99,9 @@ carrée](https://strlen.com/square/) ! Il faut télécharger la font, l'installer sur son système puis lancer un terminal avec la bonne font. Sur ma machine sur debian avec xfce : - curl -Ls https://strlen.com/files/square.ttf > square.ttf - sudo mv square.ttf /usr/share/fonts/truetype/ - xfce4-terminal --geometry 80x40 --font=/usr/share/fonts/truetype/square.ttf --command tron + $ curl -Ls https://strlen.com/files/square.ttf > square.ttf + $ sudo mv square.ttf /usr/share/fonts/truetype/ + $ xfce4-terminal --geometry 80x40 --font=/usr/share/fonts/truetype/square.ttf --command tron 