@@ -82,14 +82,14 @@ insert_anchor_links = "left"
* [Ğ.ML](//xn--tea.ml): sous-domaines gratuits pour la monnaie libre
* Servilo STUN publika: `stun:txmn.tk:3478`
* [Historique des données géographiques Cesium+ de la Ğ1](/g1/history/cesiumplusmap)
-* Hébergement/installation de site/blog/boutique Odoo, WordPress, ou autres. Payable en Ğ1, me contacter par e-mail.
+* Hébergement/installation de site/blog/boutique WordPress, ou autres. Payable en Ğ1, me contacter par e-mail.
* 🗒 [Etherpad](https://pad.txmn.tk): document partagé de prise de notes en temps réel
## Ankaŭ gastigas {#gastigas}
@@ -82,14 +82,14 @@ insert_anchor_links = "left"
* [Ğ.ML](//xn--tea.ml) : sous-domaines gratuits pour la monnaie libre
* Serveur STUN public : `stun:txmn.tk:3478`
* [Historique des données géographiques Cesium+ de la Ğ1](/g1/history/cesiumplusmap)
-* Hébergement/installation de site/blog/boutique Odoo, WordPress, ou autres. Payable en Ğ1, me contacter par e-mail.
+* Hébergement/installation de site/blog/boutique WordPress, ou autres. Payable en Ğ1, me contacter par e-mail.
* 🗒 [Etherpad](https://pad.txmn.tk) : document partagé de prise de notes en temps réel
## Héberge aussi {#heberge}
@@ -82,14 +82,14 @@ insert_anchor_links = "left"
* [Ğ.ML](//xn--tea.ml): free subdomains for the libre currency
* Public STUN server: `stun:txmn.tk:3478`
* [Cesium+ geographical data history of Ğ1](/g1/history/cesiumplusmap)
-* Hosting/installation of site/blog/shop Odoo, WordPress, or other. Paid in Ğ1, contact me by email.
+* Hosting/installation of site/blog/shop WordPress, or other. Paid in Ğ1, contact me by email.
* 🗒 [Etherpad](https://pad.txmn.tk): Real time shared document for note taking
## Also hosting {#host}
diff --git a/content/blog/install-linux/_index.fr.md b/content/blog/install-linux/_index.fr.md
new file mode 100644
index 0000000..612d001
--- /dev/null
+++ b/content/blog/install-linux/_index.fr.md
@@ -0,0 +1,58 @@
++++
+title = "Installer GNU/Linux"
+date = 2022-12-26
+description = "Installer GNU/Linux sans se prendre la tête et en évitant les ennuis."
+draft = true
+[taxonomies]
+tags = ["informatique", "Linux", "Windows"]
++++
+
+## S'informer
+
+On veut savoir :
+
+* ce qui est sauvegardé ailleurs, et si cette sauvegarde est accessible depuis ailleurs que l'ordinateur à libérer
+* si on a assez de temps pour terminer
+* si on est disponible les jours qui suivent pour régler les inévitables problèmes qui apparaîtront
+
+## S'équiper
+
+* Une **règle en plastique** servira à appuyer sur toutes les touches Fonction, Échap et Suppr en même temps lors du démarrage, pour accéder à l'interface de paramétrage du BIOS, si la touche précise est inconnue.
+* Le **câble d'alimentation**
+
+## Préparer les supports d'installation
+
+* `cp` suffit
+
+## Préparer boot-repair
+
+## Désactiver fast boot et secure boot
+
+## Installer Windows avant Linux
+
+sinon Windows casse tout
+
+## Faire une sauvegarde
+
+## Désactiver le chiffrement de Windows
+
+une partition BitLocker ne peut pas être redimensionnée
+
+## Désactiver les mises à jour automatiques de Windows
+
+sinon Windows casse tout y compris lui-même
+
+## Ajouter un stockage différent
+
+* évite d'avoir à altérer Windows
+* il suffit de retirer le stockage de Linux pour que tout remarche, en cas de problème
+
+## Vérifier que Linux marche
+
+* Wifi
+* Bouton d'arrêt, capot
+* Hibernation
+* Lecture de la partition de Windows
+
+## Vérifier que Windows démarre encore
+
diff --git a/content/blog/js.md b/content/blog/js.md
new file mode 100644
index 0000000..79030ac
--- /dev/null
+++ b/content/blog/js.md
@@ -0,0 +1,65 @@
++++
+title = "Why I hate JavaScript"
+date = 2023-01-20
+draft = true
+[taxonomies]
+tags = []
++++
+
+Why do people use JavaScript? Because it's a great language or because it's the only one ready-to-use in any web browser?
+
+Note that several of these arguments also apply to PHP, another _de facto_ application-specific (web server) language, that I think is mostly used because of technical debt.
+
+This article is about JavaScript for web browsers, not NodeJS or TypeScript.
+
+## TL; DR
+
+JavaScript combines all the problems of both high and low level languages.
+
+## Lack of features
+
+JavaScript is obviously not made for being used in webpages.
+
+* need jQuery
+* no native HTML escaping function
+* no native basic templating system (need `String.replaceAll("{{foo}}", foo)`)
+* no easy-to-use bytes array (like `Bytes` in Python or `Vec` in Rust), but many different bytes arrays with weird interfaces
+* no native cryptographic tools if you aren't using HTTPS and satisfying other strange "security" requirements (you often end up inefficiently implementing SHA2 or AES in JS, while the browser natively uses OpenSSL)
+* no native date/time string formatting
+* When defining an anonymous function (such as a callback) you can't reliably move variables to it.
+
+## What the fuck
+
+JavaScript doesn't respect anything.
+
+* You never know whether you're copying or borrowing (a table or an object), and how deeply.
+ * Python suffers the same problem.
+* Time is expressed in milliseconds, while the convention is seconds everywhere else.
+* `"1" == true && "2" != true && "2" != false` is true
+* ```js
+ if("2" == true)
+ console.log("I am not executed.");
+ if("2")
+ console.log("I am executed!");
+ ```
+ * Hence `==`, `===` and `if` have three distinct strictness levels.
+* `&&` is not commutative: `(true && "2") === "2" && ("2" && true) === true` is true
+* Operators are inconsistent: `"1"+1 === "11" && "1"*2 === 2` are true
+* ```js
+ var n = "1";
+ n += 1;
+ // n is now "11"
+ n ++;
+ // n should be "111"?
+ // but n is now 12
+ ```
+* `(-1)%2 == -1` while most of the time the convention is to give the least positive congruent.
+* Naming is incoherent. `XMLHttpRequest` is an example mixing all-caps and first-letter-cap conventions for initialisms. It should have been either `XmlHttpRequest` or `XMLHTTPRequest`.
+* Is an array really an array, or an object with _some_ of the array's properties? Lua has the same problem.
+ ```js
+ var foo = [];
+ foo["bar"] = 42;
+ console.log(foo["bar"]); // foo["bar"] exists.
+ console.log(foo.length); // 0
+ ```
+* `document.getElementsByClassName` does not return an array: its return type supports indexing but not for/in loops.
diff --git a/content/blog/minitel/index.eo.md b/content/blog/minitel/index.eo.md
index 554be3c..7472022 100644
--- a/content/blog/minitel/index.eo.md
+++ b/content/blog/minitel/index.eo.md
@@ -9,7 +9,7 @@ tags = ["Minitel", "retro", "Arduino"]
**Celo: uzi unu [Minitel](https://eo.wikipedia.org/wiki/Minitel) kiel terminalo de sistemo GNU/Linux.**
-{{ float_img(alt="Minitel elmontranta la logotipon de Rust.", src="minitel_rust.jpg", style="max-height:100vh;max-width:min(800px,100%)") }}
+{{ float_img(alt="Minitel elmontranta la logotipon de Rust.", src="minitel_rust.webp", style="max-height:100vh;max-width:min(800px,100%)") }}
Ĉi tio artikolo publikiĝis en la franclingva revuo [_Programmez!_ #256](https://www.programmez.com/magazine/programmez-253-pdf), kio enhavas multajn artikolojn pri la Minitel kaj sia interfacaĵo.
@@ -29,7 +29,7 @@ La Minitel enhavas ĉirkaŭ-komputikan kontaktilon (france "prise péri-informat
Unue mi programis kontrolilon en Python. Ĝi simulas terminalon, kun USB kiel eneligo. Ĝi legas komandan linion, kaj ĝin efektivigas kiam la klavo "Sendo" frapiĝas.
-{{ float_img(alt="Minitel ekmontranta la logotipon de Rust.", src="minitel_fortune.jpg", style="max-height:100vh;max-width:min(800px,100%)") }}
+{{ float_img(alt="Minitel ekmontranta la logotipon de Rust.", src="minitel_fortune.webp", style="max-height:100vh;max-width:min(800px,100%)") }}
Tio sola malfaciligis:
diff --git a/content/blog/minitel/index.fr.md b/content/blog/minitel/index.fr.md
index 9353157..4d4034f 100644
--- a/content/blog/minitel/index.fr.md
+++ b/content/blog/minitel/index.fr.md
@@ -8,7 +8,7 @@ tags = ["Minitel", "rétro", "Arduino"]
**Objectif : utiliser un [Minitel](https://fr.wikipedia.org/wiki/Minitel) comme terminal d'un système GNU/Linux.**
-{{ float_img(alt="Minitel affichant le logo de Rust.", src="minitel_rust.jpg", style="max-height:100vh;max-width:min(800px,100%)") }}
+{{ float_img(alt="Minitel affichant le logo de Rust.", src="minitel_rust.webp", style="max-height:100vh;max-width:min(800px,100%)") }}
Cet article est paru dans le magazine [_Programmez!_ #256](https://www.programmez.com/magazine/programmez-253-pdf), qui contient plusieurs autres articles concernant le Minitel et son interfaçage.
@@ -28,7 +28,7 @@ Le Minitel dispose d'une prise "péri-informatique", qui est un port série d'en
J'ai d'abord codé un contrôleur en Python. C'est une sorte d'émulateur de terminal, avec le port USB comme entrée-sortie. Il prend une ligne de commande et l'exécute à l'appui de la touche Envoi.
-{{ float_img(alt="Minitel affichant le logo de Rust.", src="minitel_fortune.jpg", style="max-height:100vh;max-width:min(800px,100%)") }}
+{{ float_img(alt="Minitel affichant le logo de Rust.", src="minitel_fortune.webp", style="max-height:100vh;max-width:min(800px,100%)") }}
Rien que ça demandait de surmonter plusieurs difficultés :
diff --git a/content/blog/minitel/minitel_fortune.jpg b/content/blog/minitel/minitel_fortune.jpg
deleted file mode 100644
index 3fb85d1..0000000
Binary files a/content/blog/minitel/minitel_fortune.jpg and /dev/null differ
diff --git a/content/blog/minitel/minitel_fortune.webp b/content/blog/minitel/minitel_fortune.webp
new file mode 100644
index 0000000..581d857
Binary files /dev/null and b/content/blog/minitel/minitel_fortune.webp differ
diff --git a/content/blog/minitel/minitel_rust.jpg b/content/blog/minitel/minitel_rust.jpg
deleted file mode 100644
index 75c923b..0000000
Binary files a/content/blog/minitel/minitel_rust.jpg and /dev/null differ
diff --git a/content/blog/minitel/minitel_rust.webp b/content/blog/minitel/minitel_rust.webp
new file mode 100644
index 0000000..1f97649
Binary files /dev/null and b/content/blog/minitel/minitel_rust.webp differ
diff --git a/content/blog/minitel/minitel_snake.jpg b/content/blog/minitel/minitel_snake.jpg
deleted file mode 100644
index 14a2164..0000000
Binary files a/content/blog/minitel/minitel_snake.jpg and /dev/null differ
diff --git a/content/blog/minitel/minitel_snake.webp b/content/blog/minitel/minitel_snake.webp
new file mode 100644
index 0000000..9cef308
Binary files /dev/null and b/content/blog/minitel/minitel_snake.webp differ
diff --git a/content/blog/minitel/minitel_tetris.jpg b/content/blog/minitel/minitel_tetris.jpg
deleted file mode 100644
index 74ba972..0000000
Binary files a/content/blog/minitel/minitel_tetris.jpg and /dev/null differ
diff --git a/content/blog/minitel/minitel_tetris.webp b/content/blog/minitel/minitel_tetris.webp
new file mode 100644
index 0000000..facd52b
Binary files /dev/null and b/content/blog/minitel/minitel_tetris.webp differ
diff --git a/sass/css/style.scss b/sass/css/style.scss
index 14b01a1..88a4ae1 100644
--- a/sass/css/style.scss
+++ b/sass/css/style.scss
@@ -118,6 +118,14 @@ code, pre {
font-family: SourceCodePro, monospace, monospace;
}
+code {
+ background-color: rgba(255, 128, 0, 0.3);
+}
+
+pre code {
+ background-color: initial;
+}
+
.anchor, .anchor:visited {
margin-left: -1rem;
margin-right: 0.75rem;
diff --git a/static/img/collectifsources.webp b/static/img/collectifsources.webp
new file mode 100644
index 0000000..38d729e
Binary files /dev/null and b/static/img/collectifsources.webp differ
diff --git a/static/img/dubitaristes.webp b/static/img/dubitaristes.webp
new file mode 100644
index 0000000..9ebd44e
Binary files /dev/null and b/static/img/dubitaristes.webp differ
diff --git a/static/img/etherpad.webp b/static/img/etherpad.webp
new file mode 100644
index 0000000..9636cfc
Binary files /dev/null and b/static/img/etherpad.webp differ
diff --git a/static/img/forceatlas2.webp b/static/img/forceatlas2.webp
new file mode 100644
index 0000000..27f4fff
Binary files /dev/null and b/static/img/forceatlas2.webp differ
diff --git a/static/img/forgejo.svg b/static/img/forgejo.svg
new file mode 100644
index 0000000..bcacdc0
--- /dev/null
+++ b/static/img/forgejo.svg
@@ -0,0 +1,27 @@
+
diff --git a/static/img/framadate.webp b/static/img/framadate.webp
new file mode 100644
index 0000000..d11504c
Binary files /dev/null and b/static/img/framadate.webp differ
diff --git a/static/img/lutim.webp b/static/img/lutim.webp
new file mode 100644
index 0000000..6f996b7
Binary files /dev/null and b/static/img/lutim.webp differ
diff --git a/static/img/progaccess.webp b/static/img/progaccess.webp
new file mode 100644
index 0000000..209390d
Binary files /dev/null and b/static/img/progaccess.webp differ
diff --git a/templates/blog.html b/templates/blog.html
index 5df4adc..ceaff43 100644
--- a/templates/blog.html
+++ b/templates/blog.html
@@ -58,6 +58,6 @@
- Git | CC BY-SA 4.0
+ Git/Forĝejo | CC BY-SA 4.0
{% endblock body %}