PageSourceSearch

https://www.metal3d.org/about/

html metal3d.org collected 2026-10-03 20:46:07 UTC 27,599 bytes, 644 lines download raw bytes

1<!DOCTYPE html>
2<html lang="fr-fr"><head>
3  <meta charset="utf-8" />
4  <meta
5    name="viewport"
6    content="width=device-width, initial-scale=1, shrink-to-fit=no"
7  />
8  <meta name="generator" content="Hugo 0.160.1"> 
9  <link rel="icon" href="/m3d-logo.svg" />
10  
11  <title>Qui c&#39;est ? | Metal3d</title>
12  <meta
13    name="description"
14    content="Patrice Ferlet, Blog sur l&#39;opensource, Linux, R&amp;D, ML, DevOps..."
15  />
16  
17  <meta name="keywords" content="opensource, linux, golang, python, tensorflow, keras, machine learning, devops, kubernetes, okd, openshift, docker, containers, cloud, cloud native, cloud computing, iaas, paas, saas, infrastructure" />
18   
19  <meta name="twitter:card" content="summary">
20  <meta name="twitter:title" content="Qui c&#39;est ?">
21  <meta name="twitter:description" content="Il… est de retour Le retour du blog m’sieurs dames !
22Tout d’abord, un petit message sur le “retour” du blog. Ensuite, un coup de gueule face à des critiques qu’on me balance sur l’écriture inclusive que je n’utilise pas, et enfin, je me présente.">
23 <meta property="og:url" content="https://www.metal3d.org/about/">
24  <meta property="og:site_name" content="Metal3d">
25  <meta property="og:title" content="Qui c&#39;est ?">
26  <meta property="og:description" content="Il… est de retour Le retour du blog m’sieurs dames !
27Tout d’abord, un petit message sur le “retour” du blog. Ensuite, un coup de gueule face à des critiques qu’on me balance sur l’écriture inclusive que je n’utilise pas, et enfin, je me présente.">
28  <meta property="og:locale" content="fr_fr">
29  <meta property="og:type" content="article">
30    <meta property="article:published_time" content="2019-02-14T18:53:28+01:00">
31    <meta property="article:modified_time" content="2019-02-14T18:53:28+01:00">
32
33
34  <link
35    href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
36    rel="stylesheet"
37    integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T"
38    crossorigin="anonymous"
39  />
40  <link
41    rel="stylesheet"
42    href="https://use.fontawesome.com/releases/v5.0.13/css/all.css"
43    integrity="sha384-DNOHZ68U8hZfKXOrtjWvjxusGo9WQnrNx2sqG0tfsghAvtVlRW3tvkXWZh58N9jp"
44    crossorigin="anonymous"
45  />
46  <link
47    href="https://fonts.googleapis.com/css?family=Righteous%7CMerriweather:300,300i,400,400i,700,700i"
48    rel="stylesheet"
49  />
50  <link href="/css/medium.css" rel="stylesheet"> <link
51  href="/css/additional.css" rel="stylesheet">
52
53    <link href="//cdn.jsdelivr.net/npm/font-logos@1/assets/font-logos.css" rel="stylesheet">
54    <link rel="stylesheet" type='text/css' href="https://cdn.jsdelivr.net/gh/devicons/devicon@latest/devicon.min.css" />
55
56</head>
57<body>
58<nav class="navbar navbar-expand-lg navbar-light bg-white fixed-top mediumnavigation nav-down">
59    <div class="container pr-0">
60        
61        <a class="navbar-brand" href="https://www.metal3d.org//">
62
63            
64            <img src="/m3d-logo.svg" alt="logo">
65            
66        </a>
67        
68
69        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarMediumish" aria-controls="navbarSupportedContent"
70            aria-expanded="false" aria-label="Toggle navigation">
71            <span class="navbar-toggler-icon"></span>
72        </button>
73
74        
75        <div class="collapse navbar-collapse" id="navbarMediumish">
76            
77            <ul class="navbar-nav ml-auto">
78                 
79                <li class="nav-item ">
80                    <a class="nav-link" href="/"><i class='fa fa-home fa-fw'></i> Accueil</a>
81                </li>
82                 
83                <li class="nav-item ">
84                    <a class="nav-link" href="/blog"><i class='fa fa-list fa-fw'></i> Blog</a>
85                </li>
86                 
87                <li class="nav-item ">
88                    <a class="nav-link" href="/about"><i class='fa fa-user fa-fw'></i> À Propos</a>
89                </li>
90                 
91                <li class="nav-item ">
92                    <a class="nav-link" href="/contact"><i class='fa fa-phone fa-fw'></i> Contact</a>
93                </li>
94                
95                <li>
96                <div class="form-group ml-auto">
97                    <input type="text" id="search-query" class="form-control" 
98                    placeholder="Recherche" onchange="location.href='/search?s='+this.value"/>
99                </div>
100                </li>
101            </ul>
102        </div>
103        
104    </div>
105</nav>
106
107
108
109        <div class="site-content">   
110            <div class="container">
111<div class="mainheading">
112    <h1 class="sitetitle">Metal3d</h1>
113    <p class="lead">
114         Opensource, Linux, R&amp;D, ML, DevOps...
115    </p>
116</div><div class="main-content">
117        
118        <div class="container">
119            <div class="row">
120                
121                <div class="col-md-2 pl-0"><div class="share">
122  <p>RSS</p>
123  <a class="ml-1 mr-1" target="_blank" href="/index.xml" title="RSS">
124    ><i class="fas fa-rss social-icon" aria-hidden="true" alt="Rss"></i
125  ></a>
126
127  <p>Share</p>
128  <ul>
129    
130
131    <li class="ml-1 mr-1">
132      <a
133        target="_blank"
134        title="Partager sur Facebook"
135        href="https://facebook.com/sharer.php?u=https%3a%2f%2fwww.metal3d.org%2fabout%2f"
136        onclick="window.open(this.href, 'facebook-share', 'width=550,height=435');return false;"
137      >
138        <i class="fab fa-facebook-f"></i>
139      </a>
140    </li>
141    <li class="ml-1 mr-1"></li>
142
143    <li class="ml-1 mr-1">
144      <a
145        target="_blank"
146        title="Partager sur Xing"
147        href="https://www.xing.com/spi/shares/new?url=https%3a%2f%2fwww.metal3d.org%2fabout%2f"
148        onclick="window.open(this.href, 'xing-share', 'width=550,height=435');return false;"
149      >
150        <i class="fab fa-xing"></i>
151      </a>
152    </li>
153    <li>
154      <a
155        target="_blank"
156        title="Partager sur LinkedIn"
157        href="https://www.linkedin.com/shareArticle?mini=true&url=https%3a%2f%2fwww.metal3d.org%2fabout%2f&title=Qui%20c%27est%20%3f"
158        onclick="window.open(this.href, 'linkedin-share', 'width=550,height=435');return false;"
159      >
160        <i class="fab fa-linkedin-in"></i>
161      </a>
162    </li>
163  </ul>
164
165  
166
167  <div class="sep"></div>
168
169  
170  <strong>Don cryptomonnaie</strong>
171  <div id="cd531" class="donate bitcoin"></div>
172  <div id="cd328" class="donate monero"></div>
173  <div id="cd997" class="donate etherum"></div>
174  <div class="sep"></div>
175  <strong>
175Faire un don en calcul</strong>
176  <p>
177    <button class="btn btn-secondary w-100" id="docker-donation">
178      Avec Docker
179    </button>
180  </p>
181</div>
182<script>
183  !(function (c) {
184    var t = document.createElement("script");
185    (t.type = "text/javascript"),
186      (t.async = !0),
187      (t.onload = c),
188      (t.src = "//lab.subinsb.com/projects/francium/cryptodonate/widget.js");
189    var e = document.getElementsByTagName("script")[0];
190    e.parentNode.insertBefore(t, e);
191  })(function () {
192    Fr.loadCD("cd531", {
193      coin: "bitcoin",
194      address: "1FNKbh4ikXJNhY4zwMqNZzKgmT42EFTDpB",
195      buttonClass: "",
196      dialogClass: "",
197      strings: {
198        button: "Donner BTC",
199        buttonTitle: "Bitcoin",
200        coins: {
201          bitcoin: "Bitcoin",
202          ethereum: "Ether",
203          litecoin: "Litecoin",
204          monero: "Monero",
205        },
206        dialogHeader: "Faire un don de {coinName}",
207        dialogHelper:
208          "Utiliser cette adresse {coin} pour faire un don. Merci !",
209        openInWallet: "Cliquer ici pour envoyer un don à votre portefeuille.",
210      },
211    });
212  });
213</script>
vendor: 1 bytes, line 213
213
214<script>
215  !(function (c) {
216    var t = document.createElement("script");
217    (t.type = "text/javascript"),
218      (t.async = !0),
219      (t.onload = c),
220      (t.src = "//lab.subinsb.com/projects/francium/cryptodonate/widget.js");
221    var e = document.getElementsByTagName("script")[0];
222    e.parentNode.insertBefore(t, e);
223  })(function () {
224    Fr.loadCD("cd328", {
225      coin: "monero",
226      address:
227        "44vjAVKLTFc7jxTv5ij1ifCv2YCFe3bpTgcRyR6uKg84iyFhrCesstmWNUppRCrxCsMorTP8QKxMrD3QfgQ41zsqMgPaXY5",
228      buttonClass: "",
229      dialogClass: "",
230      strings: {
231        button: "Donner XMR",
232        buttonTitle: "Monero",
233        coins: {
234          bitcoin: "Bitcoin",
235          ethereum: "Ether",
236          litecoin: "Litecoin",
237          monero: "Monero",
238        },
239        dialogHeader: "Faire un don de {coinName}",
240        dialogHelper:
241          "Utiliser cette adresse {coin} pour faire un don. Merci !",
242        openInWallet: "Cliquer ici pour envoyer un don à votre portefeuille.",
243      },
244    });
245  });
246</script>
vendor: 1 bytes, line 246
246
247<script>
248  !(function (c) {
249    var t = document.createElement("script");
250    (t.type = "text/javascript"),
251      (t.async = !0),
252      (t.onload = c),
253      (t.src = "//lab.subinsb.com/projects/francium/cryptodonate/widget.js");
254    var e = document.getElementsByTagName("script")[0];
255    e.parentNode.insertBefore(t, e);
256  })(function () {
257    Fr.loadCD("cd997", {
258      coin: "ethereum",
259      address: "0xD543750273337bf17652c4c4080A50075003F220",
260      buttonClass: "",
261      dialogClass: "",
262      strings: {
263        button: "Donner ETH",
264        buttonTitle: "Ethereum",
265        coins: {
266          bitcoin: "Bitcoin",
267          ethereum: "Ether",
268          litecoin: "Litecoin",
269          monero: "Monero",
270        },
271        dialogHeader: "Faire un don de {coinName}",
272        dialogHelper:
273          "Utiliser cette adresse {coin} pour faire un don. Merci !",
274        openInWallet: "Cliquer ici pour envoyer un don à votre portefeuille.",
275      },
276    });
277  });
278</script>
278
279
280<div class="popup shadow container hidden p-4" id="docker-donation-popup">
281  <a class="close-button" title="Cacher">❌</a>
282  <p><strong>Faire un don de temps de calcul avec Docker</strong></p>
283  <p>
284    Ouvrez un terminal et lancez le conteneur Docker qui va miner des ALTcoin à
285    mon compte. Pressez CTRL+C pour stopper le calcul. <br />Ce conteneur
286    utilise 50% de votre CPU <strong>s'il n'est pas utilisé.</strong>
287  </p>
288  <pre><code>docker run --rm -it ghcr.io/metal3d/xmrig
289# ou
290podman run --rm -it ghcr.io/metal3d/xmrig</code>
291    </pre>
292  <p class="text-center">
293    Un <strong>grand merci</strong> pour votre générosité !
294  </p>
295  <p class="text-center" style="font-size: 2em">😘</p>
296</div>
297<script>
298  document.addEventListener("DOMContentLoaded", () => {
299    let o = document.createElement("div");
300    o.classList.add("hidden");
301    o.classList.add("overlay");
302    let first = document.body.children[0];
303    document.body.insertBefore(o, first);
304    let d = document.querySelector("#docker-donation");
305    let p = document.querySelector("#docker-donation-popup");
306    let closeButton = p.querySelector(".close-button");
307    d.addEventListener("click", (evt) => {
308      p.classList.toggle("hidden");
309      o.classList.toggle("hidden");
310      evt.preventDefault();
311    });
312    document.body.addEventListener("click", (evt) => {
313      if (evt.target == closeButton || evt.target == o) {
314        p.classList.add("hidden");
315        o.classList.add("hidden");
316      }
317    });
318  });
319</script>
319
320</div>
321                
322                <div class="col-md-9 flex-first flex-md-unordered">
323                    <div class="mainheading">
324                        
325                        
326                        
327                        
328                        <div class="row post-top-meta">
329                            <div class="col-xs-12 col-md-3 col-lg-2 text-center text-md-left mb-4 mb-md-0 md-nopad-right">
330                                <img class="author-thumb" src="/images/me.jpg" alt="Patrice Ferlet">
331                            </div>
332                            <div class="col-xs-12 col-md-9 col-lg-10 text-center text-md-left md-nopad-left">
333                                <a target="_blank" class="link-dark">Patrice Ferlet</a>
334                                <br>
335                                <span class="author-description">
336                                    Créateur de ce blog.<br>
337                                    <i class="far fa-star"></i>
338                                    Publié le <span class="date-i18n">14 février 2019</span>
339                                    
340                                    <i class="far fa-clock clock"></i>
341                                    Temps de lecture: 6 min
342                                </span><br /><a rel="me" href="https://techlover.eu/@metal3d"><i class="fab fa-mastodon"></i> Me suivre sur Mastodon </a>
343                            </div>
344                        </div>
345                        
346                        
347                        
348                        
349                        <h1 class="posttitle">Qui c&#39;est ?</h1>
350                    </div>
351
352                    
353                    
354                    
355                    
356
357                    
358                    <div class="article-post">
359                        
360                        <h2 id="il-est-de-retour">Il&hellip; est de retour</h2>
361<p>Le retour du blog m&rsquo;sieurs dames !</p>
362<p>Tout d&rsquo;abord, un petit message sur le &ldquo;retour&rdquo; du blog. Ensuite, un coup de gueule face à des critiques qu&rsquo;on me balance sur l&rsquo;écriture inclusive que je n&rsquo;utilise pas,
363et enfin, je me présente.</p>
364<p>Il y a quelques mois, j&rsquo;ai abandonné ce blog (mais je suis revenu hein).</p>
365<p>L&rsquo;ancien blog était développé en Go (comme aujourd&rsquo;hui dans les faits), car je créais un petit framework rapide pour monter ce
366genre de site. À côté de cela, j&rsquo;avais monté des outils pour travailler et que je léguais à la communauté. Je précise, je donnais les
367sources sous licence libre, mais aussi, j&rsquo;hébergeais ces solutions :</p>
368<ul>
369<li>un service PlantUML avec éditeur en ligne + partage</li>
370<li>un émulateur assembleur que pas mal de professeurs d&rsquo;informatique utilisaient (je le sais par leurs messages de remerciement, j&rsquo;étais très heureux)</li>
371<li>un outil de filtrage Bayesien (détection de commentaire spam via une API que je fournissais gratuitement)</li>
372<li>et 5 ou 6 autres trucs, plutôt bien utilisés</li>
373</ul>
374<p>Bilan ⇒ Presque 3 000 connexions par jour sur ce serveur.</p>
375<p>Comprenez bien que j&rsquo;y ai passé <strong>des heures</strong>, que ce serveur n&rsquo;était pas gratuit pour moi, et que je l&rsquo;avais fait pour proposer
376des choses qui pouvaient être hébergées par tout à chacun. Jamais je n&rsquo;ai empêché qui que ce soit d&rsquo;utiliser les sources,
377l&rsquo;outil ou de le modifier, c&rsquo;
377est contre ma philosophie.</p>
378<p>Mais soyons clairs, j&rsquo;avais donc besoin d&rsquo;un serveur assez robuste, qui me coûtait assez cher.</p>
379<p>À un moment donné, ça me revenait assez cher, trop cher. Avec les visites sur mon blog, j&rsquo;ai décidé de poser un seul encart de pub,
380en bas de page, pour essayer de rentrer dans mes frais. Et ça n&rsquo;a pas marché… Vous le sentez venir le coupable ?</p>
381<blockquote>
382<p><strong>Et oui, AdBlock…</strong></p>
383</blockquote>
384<p>De ce fait, j&rsquo;affiche un message si je détecte le bloqueur pour demander de débloquer ce blog, que je ne cherche pas à polluer
385la page, que ça reste discret etc. Et j&rsquo;ai été&hellip; comment dire&hellip; déçu par les réponses. Parce que, pour commenter un billet,
386il n&rsquo;y a pas grand monde (je n&rsquo;en veux à personne, je commente peu aussi), mais pour insulter l&rsquo;auteur qui cherche à monétiser son site,
387là, on prend bien son temps !</p>
388<p>Mails d&rsquo;insultes, commentaires désobligeants, critique acerbes, tout… Voilà, j&rsquo;en ai eu marre de modérer ces messages, de mettre des
389filtres dans ma boite mail pour dégager les insultes… J&rsquo;ai tout arrêté.</p>
390<p>Aujourd&rsquo;hui, j&rsquo;ai de nouveau envie. Je vais tenter une autre approche : faites un don de calcul (regardez sur la colonne de gauche).</p>
391<blockquote>
392<p>Je suis étonné, mais ça fonctionne, j&rsquo;ai régulièrement quelques micro-XMR qui arrivent sur mon portefeuille de crypto, donc <strong>merci à vous !</strong></p>
393</blockquote>
394<h2 id="écriture-inclusive-">Écriture inclusive ?</h2>
395<p>Franchement, je n&rsquo;ai pas le temps de reprendre mon contenu, et de toutes manières : je n&rsquo;aime pas cette écriture.
396Elle impose trop de contraintes, et je sais que le jour où je vais oublier un mot à mettre dans les deux genres, on va me tomber dessus. Donc autant être clair :</p>
397<ul>
398<li>J&rsquo;utilise la forme &ldquo;conventionnelle&rdquo; (avec tout plein de fautes, je sais !!!)</li>
399<li>Je vous demande de prendre les termes masculins comme étant <strong>&ldquo;neutres&rdquo;.</strong></li>
400</ul>
401<p>Je défends bec et ongle la cause féminine, je défends l&rsquo;égalité, je respecte tout le monde de la même manière. Ne pas utiliser l&rsquo;écriture
402inclusive <strong>ne veut en aucun cas dire que je défends un discours patriarcal ou que je me fous des femmes</strong>.</p>
403<p>Partez du principe que, de base, je parle à tout le monde avec respect, que je ne différencie pas les capacités des lecteurs
404(et donc lectrices, je précise une bonne fois pour toutes) en fonction de leur genre.
405Quelle que soit la grammaire. Si par contre un de mes articles vous semble misogyne, n&rsquo;hésitez pas à me le faire remarquer, je corrigerai au plus vite.</p>
406<h2 id="à-propos-de-moi">À propos de moi</h2>
407<p>Je vais enfin parler un peu de moi, rapidement, que vous sachiez qui est l&rsquo;auteur du blog que vous lisez.</p>
408<p>Mon nom est Patrice Ferlet, je suis &ldquo;ingénieur en informatique&rdquo;, c&rsquo;est large, ce n&rsquo;est pas précis, c&rsquo;est même trompeur. Bref, je travaille depuis l&rsquo;an 2001 dans le domaine de l&rsquo;informatique.</p>
409<p>Après un périple dans plusieurs entreprises, j&rsquo;ai fini par me poser dans une boite qui me correspondait bien.</p>
410<h3 id="mes-débuts">Mes débuts</h3>
411<p>J&rsquo;ai en réalité commencé ma carrière comme développeur PHP, j&rsquo;ai beaucoup travaillé sur Copix (un des tout premier framework PHP à l&rsquo;époque, et franchement il
412marchait bien) dont je faisais partie de l&rsquo;équipe de développement. Mais voilà… Nous avons pris notre envol sur d&rsquo;autres sujets, nous
413avons tous changé de boite plusieurs fois, nous nous sommes même perdus de vue. Dommage. Mais…</p>
414<p>Mais finalement, nous avons aussi tous pris des directions passionnantes. Pour ma part, j&rsquo;ai clairement orienté mon métier vers une discipline qui me correspondait bien plus, à savoir l&rsquo;architecture logiciel.</p>
415<p>Doucement j&rsquo;ai basculé sur d&rsquo;autres sujets.</p>
416<p>À force, j&rsquo;ai surtout travaillé en Python, puis en Go, et j&rsquo;ai ajouté dans mes bagages Docker, ensuite Kubernetes, et OpenShift
417(devenu OKD en version communautaire). Ces sujets intéressaient mon ancien directeur, une chance pour moi, il me propose alors de rejoindre
418l&rsquo;équipe R&amp;D pour travailler sur ces sujets.</p>
419<p>Et une chose en entrainant une autre, j&rsquo;ai mis les mains dans le Machine Learning (Keras, TensorFlow&hellip;), mais aussi dans
420Angular (rien à voir hein), Java, Ruby, Gstreamer, OpenCV&hellip; et même dans le WebGL</p>
421<h3 id="les-années-smile">Les années &ldquo;Smile&rdquo;</h3>
422<p>Je travaillais depuis (ho la vache&hellip;) 2008 chez <a href="https://smile.fr">Smile</a>. J&rsquo;y travaillais, entre autre, dans le pôle de
423&ldquo;Direction de l&rsquo;innovation&rdquo; - mes sujets de prédilections sont à ce jour le DevOps et le Machine Learning (TensorFlow, Keras, Scikit-learn&hellip; oui, tout en Python).
424Mais à la base, il faut être précis : <em>j&rsquo;étais développeur Web</em>.</p>
425<p>C&rsquo;est au fil des ans que j&rsquo;ai pris des responsabilités, que j&rsquo;ai monté des équipes, que j&rsquo;ai formé des gens, que j&rsquo;ai
426partagé mes connaissances. Et que j&rsquo;ai appris des autres, que j&rsquo;ai appris des erreurs, que j&rsquo;ai appris à ne pas juger, que j&rsquo;ai appris à écouter, que j&rsquo;ai appris à comprendre.</p>
427<p>Les choses en entrainant d&rsquo;autres, j&rsquo;ai fini par être &ldquo;Lead Tech&rdquo; dans mon pôle, et j&rsquo;ai pris des responsabilités sur des sujets. Et clairement, de &ldquo;simple développeur&rdquo; (et ne croyez pas que je dénigre ce métier, c&rsquo;est un métier passionnant), j&rsquo;ai fini par faire bien plus de choses que prévues.</p>
428<blockquote>
429<p>Je suis donc, à ce jour, ce que l&rsquo;on appelle un &ldquo;Lead Tech&rdquo;.</p>
430</blockquote>
431<h3 id="laventure-klee-qui-commence">L&rsquo;aventure &ldquo;Klee&rdquo; qui commence</h3>
432<p>Et aujourd&rsquo;hui, (depuis 2023), c&rsquo;est chez <a href="https://www.klee-group.com">Klee</a> que je travaille, toujours sur des sujets passionnants, en qualité de &ldquo;Lead Tech, DevOps&rdquo;. Mon rôle est
433toujours de faire en sorte que les équipes techniques puissent travailler dans les meilleures conditions possibles, et que les projets soient menés à bien.
434J&rsquo;apporte donc mon lot de connaissances sur Linux, la conteneurisation, les langages que je maitrise, et je m&rsquo;efforce de rester à jour sur les nouvelles technologies.</p>
435<h3 id="autres-sujets">Autres sujets</h3>
436<p>À côté du taff, c&rsquo;est Blender qui me prend pas mal de temps <span class="emoji">🤘</span></p>
437<p>En gros, ce métier n&rsquo;est pas un labeur à mes yeux. C&rsquo;est une passion dévorante, je ne vois souvent pas les heures passer et
438je déborde pas mal sur mes nuits pour lire, tester, comprendre.</p>
439
440                    </div>
441                    
442
443                    
444                    <div class="after-post-tags">
445                        <ul class="tags">
446                        
447                        </ul>
448                    </div>
449                    
450
451                    
452                    <div class="row PageNavigation d-flex justify-content-between font-weight-bold">
453                    
454                    
455                    <div class="clearfix"></div>
456                    </div>
457                    
458                </div>
459                
460            </div>
461        </div>
462        
463        
464    </div>
465
466
467    
467<script src="/js/donation.js"></script>
467
468    
469    
469<script src="/js/moveToc.js"></script>
469
470    
470<script src="/js/article-date.js"></script>
470
471    
471<script src="/js/article-adaptations.js"></script>
471
472
473            </div>
474<footer class="footer">
475  <div class="container">
476    <div class="row">
477      <div class="col-md-4 col-sm-4 text-center text-lg-left">
478        <strong>Merci de respecter mes droits ;)</strong>
479        <p>&copy; Copyright Patrice Ferlet, tout droits réservés -</p>
480      </div>
481      <div class="col-md-4 col-sm-4 text-center text-lg-center">
482        <strong>Me suivre quelque part ?</strong>
483        <ul class="text-left">
484          <li>
485            <a rel="me" href="https://techlover.eu/@metal3d" target="_blank"
486              ><i class="fab fa-mastodon fa-social"></i> sur Mastodon
487              essentiellement</a
488            >
489          </li>
490          <li>
491            <a rel="me" href="https://github.com/metal3d" target="_blank"
492              ><i class="fab fa-github fa-social"></i> mon github</a
493            >
494          </li>
495          
496        </ul>
497      </div>
498      <div class="col-md-4 col-sm-4 text-center text-lg-right">
499        <strong>Un grand merci à Hugo et au créateur de themes</strong>
500        <p>
501          <a target="_blank" href="https://www.wowthemes.net"
502            >Mediumish Theme</a
503          >
504          by WowThemes.net
505        </p>
506      </div>
507    </div>
508  </div>
509</footer>
510
511
512        </div>
513
514<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
514
515
516<script
517  src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js"
518  integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut"
519  crossorigin="anonymous"
520></script>
520
521
522<script
523  src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"
524  integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM"
525  crossorigin="anonymous"
526></script>
526
527
528
529<script
530  src="https://www.metal3d.org/js/mediumish.4b644048d5c3a7c5f14b51e9d635f2608c1479b99cef7999de9675c419daeb3a.js"
531  integrity="sha256-S2RASNXDp8XxS1Hp1jXyYIwUebmc73mZ3pZ1xBna6zo="
532></script>
532
533
534<link
535  rel="stylesheet"
536  href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.3.1/styles/rainbow.min.css"
537/>
538<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.3.1/highlight.min.js"></script>
vendor: 1 bytes, line 538
538
539<script
540  charset="UTF-8"
541  src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.3.1/languages/go.min.js"
542></script>
vendor: 1 bytes, line 542
542
543<script
544  charset="UTF-8"
545  src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.3.1/languages/shell.min.js"
546></script>
vendor: 1 bytes, line 546
546
547<script
548  charset="UTF-8"
549  src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.3.1/languages/typescript.min.js"
550></script>
vendor: 1 bytes, line 550
550
551<script
552  charset="UTF-8"
553  src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.3.1/languages/ebnf.min.js"
554></script>
vendor: 1 bytes, line 554
554
555<script
556  charset="UTF-8"
557  src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.3.1/languages/latex.min.js"
558></script>
vendor: 1 bytes, line 558
558
559<script
560  charset="UTF-8"
561  src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.3.1/languages/dockerfile.min.js"
562></script>
vendor: 1 bytes, line 562
562
563<script
564  charset="UTF-8"
565  src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.3.1/languages/stylus.min.js"
566></script>
566
567
568<script>
569  document.addEventListener("DOMContentLoaded", (event) => {
570    document.querySelectorAll("pre code").forEach((block) => {
571      if (block.classList.contains("language-mermaid")) return;
572      hljs.highlightElement(block);
573    });
574
575    function setCodeVarEditable(
576      selector = "code",
577      classname = "editable",
578      title = "Click to change the value",
579      prefix = "_change_",
580    ) {
581      
582      const prefixReg = new RegExp(`(${prefix}[^\\b\\n\\s\\t\"\'\.]+)`, "ig");
583      document.querySelectorAll(selector).forEach((element) => {
584        element.innerHTML = element.innerHTML.replaceAll(prefixReg, (m) => {
585          m = m.replace(prefix, "");
586          return `<span class="${classname}" title="${title}">${m}</span>`;
587        });
588      });
589
590      
591      
592      document.addEventListener("click", (evt) => {
593        if (!evt.target.classList.contains(classname)) {
594          return;
595        }
596        const edit = document.createElement("input");
597        edit.classList.add("editable_var");
598        edit.value = evt.target.innerHTML;
599        edit.addEventListener("keyup", (ev) => {
600          
601          if (ev.keyCode == 13 || ev.keyCode == 27) {
602            evt.target.innerHTML = ev.target.value;
603            ev.target.replaceWith(evt.target);
604          }
605        });
606        evt.target.replaceWith(edit);
607        edit.select();
608      });
609    }
610    setTimeout(() => {
611      setCodeVarEditable("pre code");
612    }, 200);
613  });
614</script>
614
615
616
617
618
619<script
620  id="MathJax-script"
621  async
622  src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js"
623></script>
vendor: 1 bytes, line 623
623
624<script>
625  MathJax = {
626    tex: {
627      displayMath: [
628        ["\\[", "\\]"],
629        ["$$", "$$"],
630      ], 
631      inlineMath: [["\\(", "\\)"]], 
632    },
633    loader: {
634      load: ["ui/safe"],
635    },
636  };
637</script>
vendor: 1 bytes, line 637
637
638<script type="module">
639  import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.esm.min.mjs';
640  mermaid.initialize({ startOnLoad: true });
641</script>
641
642
643    </body>
644</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.