Compare commits

...

13 Commits

30 changed files with 106 additions and 65 deletions

1
.gitignore vendored
View File

@ -2,3 +2,4 @@ public/
resources/ resources/
archetypes/ archetypes/
.hugo_build.lock .hugo_build.lock
*.old

0
config.py Normal file
View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 708 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -3,6 +3,7 @@ date = '2025-06-17'
draft = false draft = false
title = 'Lancement du blog, FabNum' title = 'Lancement du blog, FabNum'
summary = "FabNum est une application que j'ai conçue pour identifier et analyser les vulnérabilités de la chaîne de fabrication du numérique. Vous êtes sur le blog qui présentera l'application et les vulnérabilités." summary = "FabNum est une application que j'ai conçue pour identifier et analyser les vulnérabilités de la chaîne de fabrication du numérique. Vous êtes sur le blog qui présentera l'application et les vulnérabilités."
description = "FabNum est une application que j'ai conçue pour identifier et analyser les vulnérabilités de la chaîne de fabrication du numérique. Vous êtes sur le blog qui présentera l'application et les vulnérabilités."
tags = ["fabnum","risques"] tags = ["fabnum","risques"]
categories = ["posts"] categories = ["posts"]
+++ +++
@ -13,7 +14,7 @@ La chaîne de fabrication du numérique, qui s'étend de l'extraction des matiè
Pourtant, cette chaîne reste insuffisamment étudiée dans son entièreté. De nombreuses analyses existantes portant sur la « criticité » des minerais ne vont pas au-delà d'une approche macroéconomique, souvent focalisée sur la seule rareté d'un métal ou sur le degré de concentration de sa production. Pourtant, cette chaîne reste insuffisamment étudiée dans son entièreté. De nombreuses analyses existantes portant sur la « criticité » des minerais ne vont pas au-delà d'une approche macroéconomique, souvent focalisée sur la seule rareté d'un métal ou sur le degré de concentration de sa production.
![Figure 1. Impacts et rétroactions sur la chaîne de fabrication](/posts/images/lancement_du_blog/Impacts_et_retroactions.png) ![Figure 1. Impacts et rétroactions sur la chaîne de fabrication](/posts/images/lancement_du_blog/Impacts_et_retroactions.webp)
Or, dans le contexte actuel de « polycrise globale », marqué par des tensions géopolitiques, des aléas climatiques et une croissance rapide de la demande hors numérique (transition énergétique, défense, etc.), voir schéma ci-dessus, ces approches généralistes révèlent leurs limites. Or, dans le contexte actuel de « polycrise globale », marqué par des tensions géopolitiques, des aléas climatiques et une croissance rapide de la demande hors numérique (transition énergétique, défense, etc.), voir schéma ci-dessus, ces approches généralistes révèlent leurs limites.

View File

@ -3,6 +3,7 @@ date = '2025-06-18T07:50:15+02:00'
draft = false draft = false
title = 'Minerais critiques en rupture' title = 'Minerais critiques en rupture'
summary = 'Pékin décide de restreindre les exportations de certains minerais critiques. Quelles sont les conséquences ?' summary = 'Pékin décide de restreindre les exportations de certains minerais critiques. Quelles sont les conséquences ?'
description = 'Pékin décide de restreindre les exportations de certains minerais critiques. Quelles sont les conséquences ?'
tags = ['fabnum','dysprosium','terbium','samarium','scandium','gadolinium','yttrium'] tags = ['fabnum','dysprosium','terbium','samarium','scandium','gadolinium','yttrium']
categories = ['posts','minerais critiques'] categories = ['posts','minerais critiques']
+++ +++
@ -11,7 +12,7 @@ categories = ['posts','minerais critiques']
Ce cas a été décrit dans cet article de Not Like The Others, [Métaux critiques : Pékin ferme les vannes, les chaînes de production menacées](https://www.nlto.fr/metaux-critiques-pekin-ferme-les-vannes-les-chaines-de-production-menacees/). Ce cas a été décrit dans cet article de Not Like The Others, [Métaux critiques : Pékin ferme les vannes, les chaînes de production menacées](https://www.nlto.fr/metaux-critiques-pekin-ferme-les-vannes-les-chaines-de-production-menacees/).
Que dit cet article ? Que dit cet article à propos des minerais critiques par rapport à une situation géopolitique instable ?
> Les terres rares, groupe de 17 éléments chimiques, sont présentes dans des composants essentiels à une large gamme déquipements : moteurs électriques, disques durs, capteurs optiques, générateurs déoliennes, batteries de véhicules électriques, ou encore dispositifs médicaux. Or, 90 % du raffinage mondial de ces éléments est contrôlé par la Chine, qui fournit directement ou indirectement une part dominante de lapprovisionnement global. > Les terres rares, groupe de 17 éléments chimiques, sont présentes dans des composants essentiels à une large gamme déquipements : moteurs électriques, disques durs, capteurs optiques, générateurs déoliennes, batteries de véhicules électriques, ou encore dispositifs médicaux. Or, 90 % du raffinage mondial de ces éléments est contrôlé par la Chine, qui fournit directement ou indirectement une part dominante de lapprovisionnement global.
> >
@ -51,11 +52,11 @@ Reprenons le cas d'usage précédent et considérons une entreprise (banque en l
Il suffit d'introduire le scénario dans la zone de sélection : Il suffit d'introduire le scénario dans la zone de sélection :
![Figure 1. Filtre du scénario](/posts/images/premier_cas_d_usage/Filtre_du_scenario.png) ![Figure 1. Filtre du scénario](/posts/images/premier_cas_d_usage/Filtre_du_scenario.webp)
Et on obtient le graphe suivant : Et on obtient le graphe suivant :
![Figure 2. Graphe du scénario](/posts/images/premier_cas_d_usage/Graphe_du_scenario.png) ![Figure 2. Graphe du scénario](/posts/images/premier_cas_d_usage/Graphe_du_scenario.webp)
L'analyse du graphe nous donne les informations suivantes : L'analyse du graphe nous donne les informations suivantes :
@ -74,17 +75,17 @@ Vous souhaitez aller plus loin dans l'analyse, ou vous n'êtes pas encore au poi
La sélection pour introduire le scénario est plus simple et directe : La sélection pour introduire le scénario est plus simple et directe :
![Figure 3. Filtre du plan d'action](/posts/images/premier_cas_d_usage/Filtre_du_plan_d_action.png) ![Figure 3. Filtre du plan d'action](/posts/images/premier_cas_d_usage/Filtre_du_plan_d_action.webp)
Le résultat se présente alors en plusieurs sections : Le résultat se présente alors en plusieurs sections :
![Figure 4. Plan d'action - section 1](/posts/images/premier_cas_d_usage/Plan_d_action_section_1.png) ![Figure 4. Plan d'action - section 1](/posts/images/premier_cas_d_usage/Plan_d_action_section_1.webp)
En haut à droite se trouve la zone de sélection avec sur sa droite la liste du top 5 étendu des chemins critiques qui permettent aussi de faire des sélections rapides. En haut à droite se trouve la zone de sélection avec sur sa droite la liste du top 5 étendu des chemins critiques qui permettent aussi de faire des sélections rapides.
En dessous, se trouve les synthèses des criticités. Pour bien comprendre ces graphes, je vous invite à lire les instructions avec la description des indices. En dessous, se trouve les synthèses des criticités. Pour bien comprendre ces graphes, je vous invite à lire les instructions avec la description des indices.
![Figure 5. Plan d'action - vue d'ensemble des criticités](/posts/images/premier_cas_d_usage/Vue_d_ensemble_des_criticites.png) ![Figure 5. Plan d'action - vue d'ensemble des criticités](/posts/images/premier_cas_d_usage/Vue_d_ensemble_des_criticites.webp)
**Comment interpréter ces graphes** **Comment interpréter ces graphes**
@ -96,7 +97,7 @@ La section qui suit est celle qui va permettre d'anticiper les risques et elle p
> En fonction de l'activité de l'entreprise, elle les mettra en œuvre ou demandera à ses fournisseurs de le faire. La figure donne l'exemple de l'opération d'assemblage du smartphone. > En fonction de l'activité de l'entreprise, elle les mettra en œuvre ou demandera à ses fournisseurs de le faire. La figure donne l'exemple de l'opération d'assemblage du smartphone.
![Figure 6. Plan d'action - actions et indicateurs](/posts/images/premier_cas_d_usage/Actions_et_indicateurs.png) ![Figure 6. Plan d'action - actions et indicateurs](/posts/images/premier_cas_d_usage/Actions_et_indicateurs.webp)
Et finalement, si vous souhaitez avoir encore plus détails, vous pouvez lire le détail des opérations en bas de page. Et finalement, si vous souhaitez avoir encore plus détails, vous pouvez lire le détail des opérations en bas de page.
@ -106,4 +107,4 @@ La conclusion est la même que précédemment, mais avec des actions à mettre e
## Point d'attention ## Point d'attention
FabNum est encore en cours de développement. N'hésitez pas à me remonter vos commentaires, suggestions, bugs ; cela permettra de rendre FabNum encore plus pertinente. FabNum est encore en cours de développement. N'hésitez pas à me remonter vos commentaires (dans la zone correspondante en bas d'article), suggestions, bugs ; cela permettra de rendre FabNum encore plus pertinente.

View File

@ -1,4 +1,4 @@
baseURL = 'http://localhost:1313/' baseURL = 'https://fabnum-blog.peccini.fr/'
defaultContentLanguage = "fr" defaultContentLanguage = "fr"
languageCode = "fr-fr" languageCode = "fr-fr"
title = 'FabNum, le blog' title = 'FabNum, le blog'
@ -18,6 +18,7 @@ authorbox = true
comments = true # Enable comments for all site pages comments = true # Enable comments for all site pages
related = true # Enable Related content for single pages related = true # Enable Related content for single pages
relatedMax = 5 relatedMax = 5
customCSS = ["css/custom.css"]
[Params.Entry] [Params.Entry]
meta = ["date", "tags", "categories", "readingtime"] meta = ["date", "tags", "categories", "readingtime"]
toc = true # Enable Table of Contents toc = true # Enable Table of Contents
@ -37,6 +38,13 @@ themeColor = "#1b1b1b"
description = "FabNum, le blog des vulnérabilités de la fabrication du numérique" description = "FabNum, le blog des vulnérabilités de la fabrication du numérique"
orientation = "portrait" orientation = "portrait"
scope = "/" scope = "/"
[Params.Author] # Used in authorbox
name = "Stéphan Peccini"
bio = "Indépendant, conseil autour des risques induit par le numérique, formation et accompagnement autour de la conception plus responsable de service numérique."
avatar = "/images/avatars/spc.jpg"
[Params.Breadcrumb]
enable = true # Enable breadcrumb block globally
homeText = "Accueil" # Home node text
[[menu.main]] [[menu.main]]

28
static/css/custom.css Normal file
View File

@ -0,0 +1,28 @@
article img {
display: block;
margin-left: auto;
margin-right: auto;
}
.comments-box {
border: 1px solid #ccc;
padding: 1.5rem;
margin-top: 2rem;
border-radius: 8px;
background-color: #f9f9f9;
}
.comments-box h2 {
margin-top: 0;
font-size: 1.4rem;
border-bottom: 1px solid #ddd;
padding-bottom: 0.5rem;
}
.isso-text > p {
color: #333 !important;
}
.isso-auth-section label {
color: #333 !important;
}

View File

@ -66,4 +66,4 @@
<script src="{{ . | relURL }}"></script> <script src="{{ . | relURL }}"></script>
{{- end }} {{- end }}
</body> </body>
</html> </html>

View File

@ -1,23 +1,21 @@
{{ define "main" }} {{ define "main" }}
<main class="main"> <main class="main">
{{ partial "breadcrumb.html" . }} {{ partial "breadcrumb.html" . }}
<div class="single block"> <div class="single block">
<article class="entry"> <article class="entry">
{{- partial "entry/featured.html" (dict "page" . "IsSingle" true) }} {{- partial "entry/featured.html" (dict "page" . "IsSingle" true) }} {{-
{{- partial "entry/meta.html" (dict "page" . "class" "mb") }} partial "entry/meta.html" (dict "page" . "class" "mb") }}
<h1 class="entry__title">{{ .Title }}</h1> <h1 class="entry__title">{{ .Title }}</h1>
{{- partial "entry/toc.html" . }} {{- partial "entry/toc.html" . }}
<div class="entry__content">{{ .Content }}</div> <div class="entry__content">{{ .Content }}</div>
{{ if or (.Param "share") (isset $.Params "tags") }} {{ if or (.Param "share") (isset $.Params "tags") }}
<footer class="entry__footer"> <footer class="entry__footer">
{{ partial "entry/tags.html" . }} {{ partial "entry/tags.html" . }} {{ partial "entry/share.html" . }}
{{ partial "entry/share.html" . }} </footer>
</footer> {{ end }}
{{ end }} </article>
</article> <hr />
</div> {{ partial "comments.html" . }}
</main> </div>
{{ partial "authorbox.html" . }} </main>
{{ partial "related.html" . }} {{ partial "authorbox.html" . }} {{ partial "related.html" . }} {{ end }}
{{ partial "comments.html" . }}
{{ end }}

View File

@ -1,21 +1,23 @@
{{- if .Param "authorbox" }} {{- if .Param "authorbox" }}
<div class="authorbox block"> <div class="authorbox block">
<div class="author"> <div class="author">
{{- with .Site.Author.avatar }} {{- with .Site.Params.Author.avatar }}
<figure class="author__avatar"> <figure class="author__avatar">
<img class="author__img" alt="{{ $.Site.Author.name }} avatar" src="{{ $.Site.Author.avatar | relURL }}" height="90" width="90"> <img
</figure> class="author__img"
{{- end }} alt="{{ $.Site.Params.Author.name }} avatar"
<div class="author__body"> src="{{ $.Site.Params.Author.avatar | relURL }}"
<div class="author__name"> height="90"
{{ .Site.Author.name }} width="90"
</div> />
{{- with .Site.Author.bio }} </figure>
<div class="author__bio"> {{- end }}
{{- . -}} <div class="author__body">
</div> <div class="author__name">{{ .Site.Params.Author.name }}</div>
{{- end }} {{- with .Site.Params.Author.bio }}
</div> <div class="author__bio">{{- . -}}</div>
</div> {{- end }}
</div>
</div>
</div> </div>
{{- end }} {{- end }}

View File

@ -1,11 +1,8 @@
{{- $server := "" }} <div class="comments-box">
{{- if ge (int (index (split hugo.Version ".") 1)) "120" }} <section
{{- $server = hugo.IsServer }} id="isso-thread"
{{- else }} data-isso="/isso/"
{{- $server = .Site.IsServer }} data-title="{{ .Title }}"
{{- end }} data-uri="{{ .RelPermalink }}"
{{- if and (.Site.Config.Services.Disqus.Shortname) (.Param "comments") (not $server) }} ></section>
<section class="comments block"> </div>
{{ template "_internal/disqus.html" . }}
</section>
{{- end }}

View File

@ -1,4 +1,9 @@
<header class="header"> <header class="header">
{{ partial "header_logo.html" . }} {{ partial "header_logo.html" . }} {{ partial "header_menu.html" . }} {{ "<!-- isso -->"
{{ partial "header_menu.html" . }} | safeHTML }}
</header> <script
data-isso="{{ .Site.BaseURL }}isso/"
src="{{ .Site.BaseURL }}isso/js/embed.min.js"
></script>
{{ "<!-- end isso -->" | safeHTML }}
</header>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 B

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 B

After

Width:  |  Height:  |  Size: 2.2 KiB