Dans le précédent article , j’avais fait un peu le tour de rstudio, beaucoup parlé du markdown mais pas du module que j’utilise , à savoir blogdown.
Contexte
Spoiler alert !! Digression en vue !!
Comme de nombreux geek, j’ai acheté un nom de domaine dans l’idée de partager un peu de connaissance. Et je me suis retrouvé avec un site wordpress sur les bras.
J’ai vite constaté que ça ne me convenait pas, je ne voulait pas consacrer de temps à son apprentissage. Je n’avais pas la prétention de gérer des utilisateurs, ou de publier des newsletter, et encore moins faire de la modération contre des bots.
Archive du blog informatique 15 Mar 2018 - 22 Feb 2020
Durant ma formation à Lyon en 2014/2015, on m’a fait découvrir spip, bof, bof, pas convaincu non plus.
J’ai vite “développé” un simple site en html css, juste pour comprendre comment ça fonctionnait. Un peu de javascript pour faire un joli. Archive du site CV-en-ligne 24 Feb 2015 - 4 Nov 2016
C’était mon CV et lettre de motivations en mode web.
Le web design n’est pas le sujet qui me passionne le plus, mais cela m’a amené à découvrir d’autres choses, comme les fondamentaux du document texte, mais aussi à débugger une application web.
Définitivement le web design, ce n’est pas pour moi, et wordpress encore moins.
Mes tests
ZIM
J’ai testé ZIM aussi , je l’utilisais comme wiki de bureau puis en creusant un peu, j’ai vu qu’on pouvait en faire une version web. J’avais bricolé un peu le template, sans tout casser; j’étais content.
Mais je devais réécrire les chemins dans les pages html, alors j’ai utilisé sed, au début ça ce passait bien, puis je me souviens avoir fait une boulette, j’ai tout pété mon site.
J’étais dépité, souvenez vous: le mieux est l’ennemi du bien. Quand vous avez un truc qui va bien arrêtez vous avant de vouloir faire mieux.
Ensuite, ça a été un fiasco, vu que je bricolais plein de truc en même temps, j’ai foutu le bordel dans les versions de python, et c’est zim qui ne fonctionnait plus.
Moral dans les chaussettes, je n’avais vraiment pas de temps à consacrer à ça, j’étais alors en formation à Marseille avec bien assez de travail sur les bras.
J’ai republié l’ancienne version du site il me semble.
Jekyll et les github-pages
Je me suis ensuite tourné vers github, les github-pages, et jekyll, en quelques mots:
jekyll est un moteur de blog statique, vous rédigez votre article en markdown, vous lancez le processus, et lui ce charge de convertir votre markdown en html, réécrit les liens, met les pages et les images au bon endroit, et c’est tout.
Ce type de site, utilise des thèmes que l’on peut modifier, ou changer assez facilement. Quand on y comprends quelques choses au CSS, ce n’est pas très difficile non plus, mais il faut s’y intéresser un peu.
Mais considérant que c’était tricher que de publier sur la plateforme, j’ai trouvé le moyen de continuer à me compliquer la vie, en persistant à publier sur mon hébergement, rendant ainsi la publication d’articles laborieux et pas plaisant du tout.
Et par dessus tout, je ne me sentais pas la légitimité de publier sur la plateforme, je ne suis pas dev, je ne présente pas un projet qui va changer la vie des gens, je sentais la démarche un peu trop opportuniste.
Le R, RStudio et blogdown
Puis au détour d’une candidature, je découvre le R, RStudio et miraculeusement son module blogdown.
Je me suis beaucoup amusé avec le R, mais je persistais toujours à me compliquer la vie en publiant sur mon hébergement via le FTP, alors qu’en réalité les outils étaient là disponible.
Avec le recul, je me dis que j’étais idiot de persister dans une méthode aussi contraignante.
Archive du site avec l’ancien workflow
Blogdown
Blogdown a été développé par Yihui Xie, également créateur du template hugo-lithium, il travaillait pour posit.co, société éditrice de RStudio. Et a annoncé son départ tout récemment.
Ce module s’installe très facilement dans l’éditeur, il vous faut simplement installer go auparavant.
go étant un langage de programmation développé par google, voir article wikipédia. Source
Dans la console R, il suffit d’entrer:
install.packages("blogdown")
Ce module permet d’exploiter Hugo, qui est un moteur de blog statique.
Tout comme jekyll, il va convertir les documents markdown en html, tout mettre à la bonne place, réécrire les liens. En réalité , il passe les documents textuels à pandoc qui fait la conversion.
Créer un projet
En haut à droite , il y a un sélecteur de projet, et puisque je suis en train d’éditer l’article, je suis dans le projet lithium .Oui, je fais preuve de beaucoup d’imagination.
Nouveau Répertoire
L’assistant s’ouvre , et sélectionnez Nouveau répertoire.
Type de projet
On choisi Website using blogdown. Mais RStudio peut faire beaucoup plus de choses.
Nommage
Débordant d’imagination, je le nomme exemple. Je laisse tout par défaut, et demande à ouvrir une nouvelle session.
On voit dans la console que tout est clairement indiqué. Chose que je n’avais pas lu, la première fois …
Nouveau site exemple
Je suis dans la nouvelle session, et on voit que le répertoire du site exemple est peuplé.
Architechture d’un site hugo
Par défaut, voici le contenu d’un site hugo. Le mien est un peu différent, ça fait un peu plus 2 ans que je l’ai fait, et je l’ai personnalisé récemment, en prenant le temps de bien lire la documentation.
Lorsque vous créez un article, blogdown va le placer automatiquement dans content, qui lui même, une série de sous répertoire classé par date, lorsque vous lancez la construction du site, le processus hugo démarre, modifiant les fichiers selon votre configuration, puis les place dans le répertoire public.
ordinatous@gallyair:~/exemple$ tree -L 1
.
├── config.yaml
├── content
├── exemple.Rproj
├── index.Rmd
├── netlify.toml
├── public
├── R
├── resources
├── static
└── themes
Voici le mien:
Il me semble que j’avais cloné un projet pour le nettoyer et me l’approprier, dans l’ensemble ils sont relativement semblable.
ordinatous@gallyair:~/lithium$ tree -L 1
.
├── content
├── hugo.toml
├── index.Rmd
├── layouts
├── lithium.Rproj
├── netlify.toml
├── public
├── resources
└── themes
-
hugo.toml / config.yaml
Ces 2 fichiers ont la même fonction, c’est la configuration du site, elle est découpée en bloc.
Relativement simple à comprendre, je vais commenter la configuration directement dans le fichier.
# baseurl correspond à l'adresse du site
# c'est cette adresse qui va être écrit dans les fichiers html
baseurl = "https://ordinatous.github.io/blogdown/"
# languageCode c'est simplement la langue du site,
# mais on peut en mettre plusieus.
languageCode = "fr-FR"
# title c'est le titre qui apparait dans l'onglet du navigateur
title = "Les ordinateurs, les autres et moi"
# theme c'est le thème du site, il est placé dans le répertoire theme
# de l'arborescence du site. Celui-ci est justement un thème que j'ai
# forké, et modifié sans tout casser.
theme = "hugo-lithium-toc"
# Je ne l'utilise pas googleAnalytics.
googleAnalytics = ""
# ignoreFiles sont les fichiers a ne pas déplacer dans public.
ignoreFiles = [ "\\.Rmarkdown$", "\\.Rmd$", "_cache$", "\\.knit\\.md$", "\\.utf8\\.md$" ]
[permalinks]
# C'est la définition du nommage des articles, slug est le nom du
# fichier, basé sur le titre de larticle sans les espaces.
post = "/:year/:month/:day/:slug/"
# Les 2 blocs suivant, je n'ai pas encore bien réussi à les configurer.
[pagination]
disableAliases = false
pagerSize = 10
path = 'page'
[taxonomies]
tag = "tags"
category = "categories"
# menu.main c'est la définition de la barre de navigation
# name pour le nom d'affichage
# url le chemin du répertoire
# weight pour l'ordre d'affichage
[[menu.main]]
name = "About"
url = "/about/"
weight = 2
[[menu.main]]
name = "Categories"
url = "/categories/"
weight = 3
[[menu.main]]
name = "Carto"
url = "https://carto.ordinatous.com"
weight = 6
[[menu.main]]
name = "Github"
url = "https://github.com/ordinatous"
weight = 5
[[menu.main]]
name = "Gitlab"
url = "https://gitlab.ordinatous.com/explore"
weight = 4
# params pour les paramètres, à part la description, je n'y ai pas
# touché, ce sont les paramètre de coloration syntaxique.
[params]
MathJaxCDN = "//cdnjs.cloudflare.com/ajax/libs"
MathJaxVersion = "2.7.5"
description = "Un site édité avec Hugo and blogdown à l'aide de Rstudio."
favicon = "favicon.ico"
highlightjsCDN = "//cdnjs.cloudflare.com/ajax/libs"
highlightjsLang = [ "r", "yaml" ]
highlightjsTheme = "github"
highlightjsVersion = "9.12.0"
enableEmoji = "true"
[params.highlight.copy]
enable = true
display = "always"
[params.logo]
alt = "Logo"
height = 50
url = "logo.png"
width = 50
# J'ai tenté d'activer les emoji, mais il me semble que ça fonctionne
# seulement dans le Rmarkdown.
[markup]
[markup.goldmark]
[markup.goldmark.renderer]
unsafe = true
enableEmoji = true
[markup.goldmark.extensions.passthrough]
enable = true
[markup.goldmark.extensions.passthrough.delimiters]
block = [ [ "\\[", "\\]" ], [ "$$", "$$" ] ]
inline = [ [ "\\(", "\\)" ] ]
# C'est ici que j'ai défini l'index toc pour table of content.
[output."blogdown::html_page"]
toc = true
-
Theme hugo-lithium-toc
ls -l themes/hugo-lithium-toc/
total 68
drwxr-xr-x 2 ordinatous ordinatous 4096 7 mars 13:07 archetypes
-rw-r--r-- 1 ordinatous ordinatous 38162 5 mars 14:31 favicon.ico
drwxr-xr-x 2 ordinatous ordinatous 4096 7 mars 13:13 images
drwxr-xr-x 5 ordinatous ordinatous 4096 11 mars 09:36 layouts
-rw-r--r-- 1 ordinatous ordinatous 1082 13 mars 15:53 LICENSE.md
-rw-r--r-- 1 ordinatous ordinatous 1052 30 mars 11:04 README.md
drwxr-xr-x 4 ordinatous ordinatous 4096 7 mars 13:07 static
-rw-r--r-- 1 ordinatous ordinatous 649 30 mars 10:58 theme.toml
Source du thème hugo-lithium-toc
Ce répertoire est assez important, c’est ici qu’est défini l’esthétique du site, en particulier le sous répertoire layout, que j’ai modifié par essais successifs, et arriver à un résultat assez satisfaisant et le publier.
Ainsi que le sous répertoire archetype.
-
Archetype
c’est le model de base d’un article qui est appelé lorsque vous créez un nouvel article.
Je n’ai pas touché à title ni date. draft défini qu’un article est à l’état de brouillon par défaut, il n’est pas traité à chaque reconstruction du site.
J’ai ajouté le toc table of content
cat themes/hugo-lithium-toc/archetypes/default.md
---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
draft: true
toc: true
---
A la création de l’article , j’ai juste a lui donner un titre , et sélectionner
archétype défault.md , ajouter des catégories si je le souhaite, on voit en arrière plan
que l’en-tête du fichier est automatiquement rempli .
-
Layout
Comme je l’ai expliqué en début d’article le css et le webdesign, ce n’est pas trop mon truc. J’ai redoublé d’effort pour m’attacher à comprendre comment cela fonctionnait.
J’ignore pourquoi, mais chaque partie de la page web est découpé en sous partie:
ls -l themes/hugo-lithium-toc/layouts/partials/
total 16
-rw-r--r-- 1 ordinatous ordinatous 563 6 mars 19:43 footer.html
-rw-r--r-- 1 ordinatous ordinatous 222 6 mars 19:43 header.html
-rw-r--r-- 1 ordinatous ordinatous 1257 6 mars 19:43 head.html
-rw-r--r-- 1 ordinatous ordinatous 425 6 mars 19:43 nav.html
Et ces sous partie sont ensuite appelée dans l’index.html:
{{ partial "header.html" . }}
<main class="content" role="main">
<div class="archive">
{{ range (where site.RegularPages "Type" "in" site.Params.mainSections).GroupByDate "2006" }}
<h2 class="archive-title">{{ .Key }}</h2>
{{ range .Pages }}
<article class="archive-item">
<a href="{{ .Permalink }}" class="archive-item-link">{{ .Title }}</a>
<span class="archive-item-date">
{{ .Date.Format "January 2, 2006" }}
</span>
</article>
{{ end }}
{{ end }}
</div>
</main>
{{ partial "footer.html" . }}
-
Catégorie
C’est ici que ça relève du miracle. Je voulais ajouter un menu catégorie, ce qui m’a créé un page catégorie, le truc un peu curieux dans la mise en page c’est que la barre de navigation apparaît au dessus de chaque sujet.
C’est pas moche non plus, je dirais que ça me convient.
ls -l themes/hugo-lithium-toc/layouts/categories/
total 12
-rw-r--r-- 1 ordinatous ordinatous 128 11 mars 10:47 li.html
-rw-r--r-- 1 ordinatous ordinatous 223 13 mars 15:47 list.html
-rw-r--r-- 1 ordinatous ordinatous 285 11 mars 18:00 summary.html
-
Le workflow
Simple, basique
- blogdown::serve_site()
- écrire un article
- passer le mode draft à false
- blogdown::stop_server()
- blogdown::build_site()
- ssh-add ~/.ssh/ma_clé_privé
- git status
- git add *
- git commit -m “MaJ du site”
- git push –set-upstream origin main
Et voilà, les outils étaient là, il suffisait de s’en servir.