URI:
       # À propos de ce site
       
       Ce site est avant tout un espace de partage.
       Je le souhaite humain avant tout.
       
       Pour cela : 
       
       * Il est pensé pour être le plus léger possible, sans pub, sans tracker,
         sans javascript...
         Ça le rend rapide, lisible même sur du matériel très ancien qui ne
         supporterait pas un chiffrement imposé. Il est donc accessible via
         http et https (et gopher) et peut être consulté sans peine, même avec
         une faible bande passante.
         Le CSS fait moins de 1000B, et moins de 512B une fois gzippé! 
       * Écologique. S'il est léger, il consomme peut de ressources.
         D'après un testeur, si3t.ch est plus écologique que
         [100% des sites webs](https://www.websitecarbon.com/website/si3t-ch/).
       * Accessible : le texte avant tout.
       * Libre : les sources sont disponibles.
       * Utile : J'héberge quelques outils publiquement accessibles ainsi que
         des documents que je considère importants pour tous.
       
       ## Miroirs
       
       En cas de panne de matériel ou de coupure de courant, le si3tch
       est aussi hébergé sur un
  HTML miroir
       qui n'est aute qu'une VM chez 
  HTML openbsd.amsterdam
       
       Au niveau des DNS, si le registre ".ch" a un problème,
       remplacez "si3t.ch" par "si3tch.eu".
       
       Le si3tch est aussi disponible via TOR.  🧅
       
  HTML URL:http://6gvb6fzoxv72mtlpvr2fgj7ytpeggwuerdawspt24njlkwfxir6jncid.onion/
       
  HTML URL:gopher://of2w2p5f4hsslk63hmo6tid6r7inhlxuxviq4pb5cxg45enswpbrfjad.onion
       
       Les liens ".onion" présentent l'avantage de rester identiques en cas de 
       changement d'IP ou de panne des DNS.
       
       Vous aurez besoin de 
  HTML Tor
       pour y accéder.
       
       
       ## Site valide 
       
  HTML HTML ✓
       
  HTML CSS ✓
       
  HTML ATOM ✓
       
       ## Comment fonctionne ce serveur?
       
       ### Matériel
       
       Le si3tch fonctionne sur du un apu2 peu gourmand en énergie :
  HTML URL:https://pcengines.ch/apu2.htm
       
   BIN Photo du si3tch vu de l'extérieur
       
       J'ai aussi un petit onduleur.
       
       ### FAI/DNS
       
       C'est OVH, qui ne m'a jamais déçu.
       
       Ils font office de fournisseur d'accès avec un excellent support, mais
       aussi de registre pour tous mes domaines.
       
       ### Logiciel
       
  HTML OpenBSD
       
  HTML httpd
       
  HTML geomyidae (gopher)
       
       Les pages sont générées avec un Makefile et quelques script pour
       convertir le markdown, mettre les entêtes, générer le blog, le flux
       atom...
       
       Voici les sources : 
       
  HTML URL:https://git.sr.ht/~prx/si3t.ch
       
       ### Génération en détail
       
       Après des tas de tests, au point d'avoir réfléchi à une façon d'écrire
   DIR du texte pour toute la vie
       exceptions:
       
       * Les pages en Markdown
       * Les articles de log/motd en texte brut selon mes règles persos.
       
       Pour rédiger en Markdown, afin d'assurer une lisibilité pérenne et
       éviter des écueils dans le rendu final qui desservent la lecture si elle
       est trop chargée, je m'impose : 
       
       * De ne pas dépasser 3 niveaux d'en-tête (h1, h2, h3)
       * De toujours écrire de la même façon (`*` pour les listes et pas `-`)
       * D'éviter les listes numérotées.
       * D'écrire un lien seul sur sa ligne.
       
       Afin de construire le site, j'abuse des capacités de Makefile.
       Le gros avantage de make est qu'il ne génère QUE les pages dont la
       source est plus récente. Le gain de temps est énorme.
        
       En voici quelques éléments:
       
       ```
       SRC=md
       INDEX=index.${SRC}
       ```
       Je ne veux convertir que les fichier à l'extension `.md` et seulement
       les fichier `index.md`, cela me permet ensuite d'aussi générer des
       gophermap. Eh oui, toutes les pages sont en fait des dossiers avec un
       index. Depuis que j'ai fait ce choix, la gestion du site est nettement
       plus simple.
       
       ```
       SITE=site
       RAW=raw
       ```
       
       J'ai 2 dossiers : un dossier "site" qui contient ce qui est à
       "convertir", un dossier "raw" pour les images et pages html à ne pas
       toucher. Cela m'est indispensable pour des applications comme drawio que
       je veux rendre disponible.
       
       ```
       .SUFFIXES: .${SRC} .html .gph
       ```
       
       Là, c'est toutes les extensions qui seront prises en charge.
       
       
       ```
       # converters
       TOHTML = cmark --smart
       TOGOPHER = awk -f tools/md2gph.awk -v strip=1
       TOMOTD = tools/motd.sh
       ```
       
       On voit ici les outils que j'utilise pour convertir le markdown en
       d'autre formats, ou bien encore le script qui me sert à générer le phlog
       (modt)
       
       ```
       # list pages
       PAGES != find ${SITE} -type f -name 'index.${SRC}'
       LOGS != find ${SITE}/log -type f -name \*.txt -maxdepth 1
       HTMLPAGES := ${PAGES:.${SRC}=.html}
       HTMLRAW != find ${RAW} -type f -name \*.html -o -name index.php
       GOPHERPAGES := ${PAGES:.${SRC}=.gph}
       MOTDDIR = ${SITE}/motd
       MOTD = ${MOTDDIR}/index.gph
       MOTDPOSTS != find ${SITE}/motd/ -type f -name '*.txt' -maxdepth 1
       LOGSGZ := ${LOGS:.txt=.txt.gz}
       ```
       
       On lit ici comment `make` retrouve la liste des pages à convertir :
       c'est la commande `find` qui l'aide. Ensuite, des substitutions me
       permettent de changer les extensions et même de prévoir la compression
       en gzip.
       
       ```
       .${SRC}.html:
       Happy helping ☃ here: You tried to output a spurious TAB character. This will break gopher. Please review your scripts. Have a nice day!
       Happy helping ☃ here: You tried to output a spurious TAB character. This will break gopher. Please review your scripts. Have a nice day!
       Happy helping ☃ here: You tried to output a spurious TAB character. This will break gopher. Please review your scripts. Have a nice day!
       Happy helping ☃ here: You tried to output a spurious TAB character. This will break gopher. Please review your scripts. Have a nice day!
       Happy helping ☃ here: You tried to output a spurious TAB character. This will break gopher. Please review your scripts. Have a nice day!
       Happy helping ☃ here: You tried to output a spurious TAB character. This will break gopher. Please review your scripts. Have a nice day!
       ```
       
       Ici ça explique comment les pages html son générées. On met d'abord le
       haut du fichier html, puis on convertit le markdown, et enfin le bas de
       page. On termine en indiquant le titre de la page dans la balise
       `<title>` et puis en compressant la page au format gzip.
       
       ```
       motd: ${MOTD}
       Happy helping ☃ here: You tried to output a spurious TAB character. This will break gopher. Please review your scripts. Have a nice day!
       Happy helping ☃ here: You tried to output a spurious TAB character. This will break gopher. Please review your scripts. Have a nice day!
       Happy helping ☃ here: You tried to output a spurious TAB character. This will break gopher. Please review your scripts. Have a nice day!
       Happy helping ☃ here: You tried to output a spurious TAB character. This will break gopher. Please review your scripts. Have a nice day!
       ${MOTD}: ${MOTDPOSTS}
       Happy helping ☃ here: You tried to output a spurious TAB character. This will break gopher. Please review your scripts. Have a nice day!
       Happy helping ☃ here: You tried to output a spurious TAB character. This will break gopher. Please review your scripts. Have a nice day!
       ```
       
       La gestion du modt est un peu particulière, car je dois d'abord
       récupérer les posts avec rsync depuis un autre dossier. En effet, je
       synchronise ce dernier sur plusieurs machines. Le génération du
       gophermap est le fruit de magie dans un script.
       
       ```
       # atom depend on logs, only rebuild if there are new entries
       atom: ${ATOM}
       ${ATOM}: ${LOGS}
       Happy helping ☃ here: You tried to output a spurious TAB character. This will break gopher. Please review your scripts. Have a nice day!
       Happy helping ☃ here: You tried to output a spurious TAB character. This will break gopher. Please review your scripts. Have a nice day!
       Happy helping ☃ here: You tried to output a spurious TAB character. This will break gopher. Please review your scripts. Have a nice day!
       Happy helping ☃ here: You tried to output a spurious TAB character. This will break gopher. Please review your scripts. Have a nice day!
       Happy helping ☃ here: You tried to output a spurious TAB character. This will break gopher. Please review your scripts. Have a nice day!
       Happy helping ☃ here: You tried to output a spurious TAB character. This will break gopher. Please review your scripts. Have a nice day!
       Happy helping ☃ here: You tried to output a spurious TAB character. This will break gopher. Please review your scripts. Have a nice day!
       Happy helping ☃ here: You tried to output a spurious TAB character. This will break gopher. Please review your scripts. Have a nice day!
       Happy helping ☃ here: You tried to output a spurious TAB character. This will break gopher. Please review your scripts. Have a nice day!
       Happy helping ☃ here: You tried to output a spurious TAB character. This will break gopher. Please review your scripts. Have a nice day!
       Happy helping ☃ here: You tried to output a spurious TAB character. This will break gopher. Please review your scripts. Have a nice day!
       ```
       
       Ici je construis le flux atom avec le script
   DIR atom.awk
       (j'aime bien awk)
       
       Suivent ensuite des règles pour quelques pages spécifiques : l'accueil
       du log, le "/sitemap", la publication sur git, l'envoi sur mes serveurs
       avec rsync et enfin le nettoyage ou encore le test.
       
       ## Y a quoi d'autre?
       
       J'auto-héberge aussi :
       
       * des sites web,
       * un serveur mail (smtpd),
       * des listes de diffusion (mlmmj),
       * un serveur de messagerie instantanée XMPP (prosody), avec quelques groupes de 
         discussion ou pour papoter avec les copains et la famille,
       * un espace de sauvegarde de données (rsync),
       * un serveur DNS primaire (nsd).
       * un calendrier partagé familial CalDAV
       
       Et pour des copains et copines auto-hébergés :
       
       * un serveur mail backup secondaire pour relayer les messages,
       * un serveur DNS secondaire
       
       Tout ceci sert actuellement à la famille et aux amis proches, mais il 
       reste de l'espace.
       Fais-moi signe si tu veux ta petite place au creux du si3tch ;).