Compressed images, use WebP, mention Forgejo

This commit is contained in:
Pascal Engélibert 2023-04-16 20:43:55 +02:00
parent 4d58e6860b
commit 63694b54b7
Signed by: tuxmain
GPG Key ID: 3504BC6D362F7DCA
25 changed files with 190 additions and 32 deletions

View File

@ -5,14 +5,14 @@ insert_anchor_links = "left"
<div class="service_boxes">
{{ service_box(href="https://flim.txmn.tk", title="PeerTube", img="/img/peertube.svg", img_alt="Logotipo PeerTube") }}
{{ service_box(href="/framadate", title="Framadate", img="/img/framadate.png", img_alt="Logotipo Framadate") }}
{{ service_box(href="/framadate", title="Framadate", img="/img/framadate.webp", img_alt="Logotipo Framadate") }}
{{ service_box(href="/element", title="Matrix / Element", img="/img/element.svg", img_alt="Logotipo Element") }}
{{ service_box(href="https://forum.progaccess.net", title="Forumo ProgAccess", img="/img/progaccess.png", img_alt="Logotipo ProgAccess") }}
{{ service_box(href="https://forum.progaccess.net", title="Forumo ProgAccess", img="/img/progaccess.webp", img_alt="Logotipo ProgAccess") }}
{{ service_box(href="https://cloud.txmn.tk", title="NextCloud", img="/img/nextcloud.svg", img_alt="Logotipo NextCloud") }}
{{ service_box(href="/lufi", title="Lufi", img="/img/lufi.svg", img_alt="Logotipo Lufi") }}
{{ service_box(href="/lutim", title="Lutim", img="/img/lutim.png", img_alt="Logotipo Lutim") }}
{{ service_box(href="/lutim", title="Lutim", img="/img/lutim.webp", img_alt="Logotipo Lutim") }}
{{ service_box(href="/l", title="LSTU", img="/img/lstu.svg", img_alt="Logotipo LSTU") }}
{{ service_box(href="https://pad.txmn.tk", title="Etherpad", img="/img/etherpad.png", img_alt="Logotipo Etherpad") }}
{{ service_box(href="https://pad.txmn.tk", title="Etherpad", img="/img/etherpad.webp", img_alt="Logotipo Etherpad") }}
{{ service_box(href="/mumble", title="Mumble", img="/img/mumble.svg", img_alt="Logotipo Mumble") }}
</div>
@ -30,10 +30,10 @@ insert_anchor_links = "left"
## Projektoj {#projektoj}
<div class="service_boxes">
{{ service_box(href="https://progaccess.net", title="ProgAccess", img="/img/progaccess.png", img_alt="Logotipo ProgAccess") }}
{{ service_box(href="https://progaccess.net", title="ProgAccess", img="/img/progaccess.webp", img_alt="Logotipo ProgAccess") }}
{{ service_box(href="//zettascript.org/projects/gmixer/", title="ĞMixer", img="/img/gmixer.svg", img_alt="Logotipo ĞMixer") }}
{{ service_box(href="https://framagit.org/ZettaScript/syeve", title="Syeve", img="/img/syeve.svg", img_alt="Logotipo Syeve") }}
{{ service_box(href="https://framagit.org/ZettaScript/forceatlas2-rs", title="ForceAtlas2-rs", img="/img/forceatlas2.png", img_alt="Grafo") }}
{{ service_box(href="https://framagit.org/ZettaScript/forceatlas2-rs", title="ForceAtlas2-rs", img="/img/forceatlas2.webp", img_alt="Grafo") }}
{{ service_box(href="//worldwotmap.duniter.org", title="WorldWotMap", img="/img/gbreve.svg", img_alt="Ğ") }}
</div>
@ -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}
<div class="service_boxes">
{{ service_box(href="//dubitaristes.fr", title="Les Dubitaristes Girondins", img="/img/dubitaristes.png", img_alt="Logotipo Dubitaristes") }}
{{ service_box(href="https://collectifsources.fr", title="Collectif Sources", img="/img/collectifsources.png", img_alt="Logo Collectif Sources") }}
{{ service_box(href="//dubitaristes.fr", title="Les Dubitaristes Girondins", img="/img/dubitaristes.webp", img_alt="Logotipo Dubitaristes") }}
{{ service_box(href="https://collectifsources.fr", title="Collectif Sources", img="/img/collectifsources.webp", img_alt="Logo Collectif Sources") }}
{{ service_box(href="//juneland.fr", title="Juneland", img="/img/minetest.svg", img_alt="Logotipo MineTest") }}
</div>

View File

@ -5,14 +5,14 @@ insert_anchor_links = "left"
<div class="service_boxes">
{{ service_box(href="https://flim.txmn.tk", title="PeerTube", img="/img/peertube.svg", img_alt="Logo PeerTube") }}
{{ service_box(href="/framadate", title="Framadate", img="/img/framadate.png", img_alt="Logo Framadate") }}
{{ service_box(href="/framadate", title="Framadate", img="/img/framadate.webp", img_alt="Logo Framadate") }}
{{ service_box(href="/element", title="Matrix / Element", img="/img/element.svg", img_alt="Logo Element") }}
{{ service_box(href="https://forum.progaccess.net", title="Forum ProgAccess", img="/img/progaccess.png", img_alt="Logo ProgAccess") }}
{{ service_box(href="https://forum.progaccess.net", title="Forum ProgAccess", img="/img/progaccess.webp", img_alt="Logo ProgAccess") }}
{{ service_box(href="https://cloud.txmn.tk", title="NextCloud", img="/img/nextcloud.svg", img_alt="Logo NextCloud") }}
{{ service_box(href="/lufi", title="Lufi", img="/img/lufi.svg", img_alt="Logo Lufi") }}
{{ service_box(href="/lutim", title="Lutim", img="/img/lutim.png", img_alt="Logo Lutim") }}
{{ service_box(href="/lutim", title="Lutim", img="/img/lutim.webp", img_alt="Logo Lutim") }}
{{ service_box(href="/l", title="LSTU", img="/img/lstu.svg", img_alt="Logo LSTU") }}
{{ service_box(href="https://pad.txmn.tk", title="Etherpad", img="/img/etherpad.png", img_alt="Logo Etherpad") }}
{{ service_box(href="https://pad.txmn.tk", title="Etherpad", img="/img/etherpad.webp", img_alt="Logo Etherpad") }}
{{ service_box(href="/mumble", title="Mumble", img="/img/mumble.svg", img_alt="Logo Mumble") }}
</div>
@ -30,10 +30,10 @@ insert_anchor_links = "left"
## Projets {#projets}
<div class="service_boxes">
{{ service_box(href="https://progaccess.net", title="ProgAccess", img="/img/progaccess.png", img_alt="Logo ProgAccess") }}
{{ service_box(href="https://progaccess.net", title="ProgAccess", img="/img/progaccess.webp", img_alt="Logo ProgAccess") }}
{{ service_box(href="//zettascript.org/projects/gmixer/", title="ĞMixer", img="/img/gmixer.svg", img_alt="Logo ĞMixer") }}
{{ service_box(href="https://framagit.org/ZettaScript/syeve", title="Syeve", img="/img/syeve.svg", img_alt="Logo Syeve") }}
{{ service_box(href="https://framagit.org/ZettaScript/forceatlas2-rs", title="ForceAtlas2-rs", img="/img/forceatlas2.png", img_alt="Graphe") }}
{{ service_box(href="https://framagit.org/ZettaScript/forceatlas2-rs", title="ForceAtlas2-rs", img="/img/forceatlas2.webp", img_alt="Graphe") }}
{{ service_box(href="//worldwotmap.duniter.org", title="WorldWotMap", img="/img/gbreve.svg", img_alt="Ğ") }}
</div>
@ -82,14 +82,14 @@ insert_anchor_links = "left"
* [Ğ.ML](//xn--tea.ml)&nbsp;: sous-domaines gratuits pour la monnaie libre
* Serveur STUN public&nbsp;: `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)&nbsp;: document partagé de prise de notes en temps réel
## Héberge aussi {#heberge}
<div class="service_boxes">
{{ service_box(href="//dubitaristes.fr", title="Les Dubitaristes Girondins", img="/img/dubitaristes.png", img_alt="Logo Dubitaristes") }}
{{ service_box(href="https://collectifsources.fr", title="Collectif Sources", img="/img/collectifsources.png", img_alt="Logo Collectif Sources") }}
{{ service_box(href="//dubitaristes.fr", title="Les Dubitaristes Girondins", img="/img/dubitaristes.webp", img_alt="Logo Dubitaristes") }}
{{ service_box(href="https://collectifsources.fr", title="Collectif Sources", img="/img/collectifsources.webp", img_alt="Logo Collectif Sources") }}
{{ service_box(href="//juneland.fr", title="Juneland", img="/img/minetest.svg", img_alt="Logo MineTest") }}
</div>

View File

@ -5,14 +5,14 @@ insert_anchor_links = "left"
<div class="service_boxes">
{{ service_box(href="https://flim.txmn.tk", title="PeerTube", img="/img/peertube.svg", img_alt="Logo PeerTube") }}
{{ service_box(href="/framadate", title="Framadate", img="/img/framadate.png", img_alt="Logo Framadate") }}
{{ service_box(href="/framadate", title="Framadate", img="/img/framadate.webp", img_alt="Logo Framadate") }}
{{ service_box(href="/element", title="Matrix / Element", img="/img/element.svg", img_alt="Logo Element") }}
{{ service_box(href="https://forum.progaccess.net", title="Forum ProgAccess", img="/img/progaccess.png", img_alt="Logo ProgAccess") }}
{{ service_box(href="https://forum.progaccess.net", title="Forum ProgAccess", img="/img/progaccess.webp", img_alt="Logo ProgAccess") }}
{{ service_box(href="https://cloud.txmn.tk", title="NextCloud", img="/img/nextcloud.svg", img_alt="Logo NextCloud") }}
{{ service_box(href="/lufi", title="Lufi", img="/img/lufi.svg", img_alt="Logo Lufi") }}
{{ service_box(href="/lutim", title="Lutim", img="/img/lutim.png", img_alt="Logo Lutim") }}
{{ service_box(href="/lutim", title="Lutim", img="/img/lutim.webp", img_alt="Logo Lutim") }}
{{ service_box(href="/l", title="LSTU", img="/img/lstu.svg", img_alt="Logo LSTU") }}
{{ service_box(href="https://pad.txmn.tk", title="Etherpad", img="/img/etherpad.png", img_alt="Logo Etherpad") }}
{{ service_box(href="https://pad.txmn.tk", title="Etherpad", img="/img/etherpad.webp", img_alt="Logo Etherpad") }}
{{ service_box(href="/mumble", title="Mumble", img="/img/mumble.svg", img_alt="Logo Mumble") }}
</div>
@ -30,10 +30,10 @@ insert_anchor_links = "left"
## Projects {#projects}
<div class="service_boxes">
{{ service_box(href="https://progaccess.net", title="ProgAccess", img="/img/progaccess.png", img_alt="Logo ProgAccess") }}
{{ service_box(href="https://progaccess.net", title="ProgAccess", img="/img/progaccess.webp", img_alt="Logo ProgAccess") }}
{{ service_box(href="//zettascript.org/projects/gmixer/", title="ĞMixer", img="/img/gmixer.svg", img_alt="Logo ĞMixer") }}
{{ service_box(href="https://framagit.org/ZettaScript/syeve", title="Syeve", img="/img/syeve.svg", img_alt="Logo Syeve") }}
{{ service_box(href="https://framagit.org/ZettaScript/forceatlas2-rs", title="ForceAtlas2-rs", img="/img/forceatlas2.png", img_alt="Graph") }}
{{ service_box(href="https://framagit.org/ZettaScript/forceatlas2-rs", title="ForceAtlas2-rs", img="/img/forceatlas2.webp", img_alt="Graph") }}
{{ service_box(href="//worldwotmap.duniter.org", title="WorldWotMap", img="/img/gbreve.svg", img_alt="Ğ") }}
</div>
@ -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}
<div class="service_boxes">
{{ service_box(href="//dubitaristes.fr", title="Les Dubitaristes Girondins", img="/img/dubitaristes.png", img_alt="Logo Dubitaristes") }}
{{ service_box(href="https://collectifsources.fr", title="Collectif Sources", img="/img/collectifsources.png", img_alt="Logo Collectif Sources") }}
{{ service_box(href="//dubitaristes.fr", title="Les Dubitaristes Girondins", img="/img/dubitaristes.webp", img_alt="Logo Dubitaristes") }}
{{ service_box(href="https://collectifsources.fr", title="Collectif Sources", img="/img/collectifsources.webp", img_alt="Logo Collectif Sources") }}
{{ service_box(href="//juneland.fr", title="Juneland", img="/img/minetest.svg", img_alt="Logo MineTest") }}
</div>

View File

@ -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&nbsp;:
* 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

65
content/blog/js.md Normal file
View File

@ -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<u8>` 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.

View File

@ -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:

View File

@ -8,7 +8,7 @@ tags = ["Minitel", "rétro", "Arduino"]
**Objectif&nbsp;: 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&nbsp;:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

View File

@ -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;

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
static/img/etherpad.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
static/img/forceatlas2.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

27
static/img/forgejo.svg Normal file
View File

@ -0,0 +1,27 @@
<svg viewBox="0 0 212 212" xmlns="http://www.w3.org/2000/svg">
<style type="text/css">
circle {
fill: none;
stroke: #000;
stroke-width: 15;
}
path {
fill: none;
stroke: #000;
stroke-width: 25;
}
.orange {
stroke:#ff6600;
}
.red {
stroke:#d40000;
}
</style>
<g transform="translate(6,6)">
<path d="M58 168 v-98 a50 50 0 0 1 50-50 h20" class="orange" />
<path d="M58 168 v-30 a50 50 0 0 1 50-50 h20" class="red" />
<circle cx="142" cy="20" r="18" class="orange" />
<circle cx="142" cy="88" r="18" class="red" />
<circle cx="58" cy="180" r="18" class="red" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 677 B

BIN
static/img/framadate.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
static/img/lutim.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
static/img/progaccess.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View File

@ -58,6 +58,6 @@
<a href="https://liberapay.com/tuxmain/donate" title="Liberapay"><img alt="Liberapay" src="/img/liberapay-donate.svg"/></a>
</div>
<br/>
<a href="https://git.txmn.tk/tuxmain/website">Git</a> | <a rel="license" href="//creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a>
<a href="https://git.txmn.tk/tuxmain/website"><img alt="Forĝejo" src="/img/forgejo.svg" style="width:32px;"/> Git/Forĝejo</a> | <a rel="license" href="//creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a>
</footer>
{% endblock body %}