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'est ? | Metal3d</title> 12 <meta 13 name="description" 14 content="Patrice Ferlet, Blog sur l'opensource, Linux, R&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'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'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&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'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… est de retour</h2> 361<p>Le retour du blog m’sieurs dames !</p> 362<p>Tout 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, 363et enfin, je me présente.</p> 364<p>Il y a quelques mois, j’ai abandonné ce blog (mais je suis revenu hein).</p> 365<p>L’ancien blog était développé en Go (comme aujourd’hui dans les faits), car je créais un petit framework rapide pour monter ce 366genre de site. à côté de cela, j’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’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’informatique utilisaient (je le sais par leurs messages de remerciement, j’é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’y ai passé <strong>des heures</strong>, que ce serveur n’était pas gratuit pour moi, et que je l’avais fait pour proposer 376des choses qui pouvaient être hébergées par tout à chacun. Jamais je n’ai empêché qui que ce soit d’utiliser les sources, 377l’outil ou de le modifier, c’
377est contre ma philosophie.</p> 378<p>Mais soyons clairs, j’avais donc besoin d’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’ai décidé de poser un seul encart de pub, 380en bas de page, pour essayer de rentrer dans mes frais. Et ça n’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’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’ai été… comment dire… déçu par les réponses. Parce que, pour commenter un billet, 386il n’y a pas grand monde (je n’en veux à personne, je commente peu aussi), mais pour insulter l’auteur qui cherche à monétiser son site, 387là , on prend bien son temps !</p> 388<p>Mails d’insultes, commentaires désobligeants, critique acerbes, tout⦠Voilà , j’en ai eu marre de modérer ces messages, de mettre des 389filtres dans ma boite mail pour dégager les insultes⦠J’ai tout arrêté.</p> 390<p>Aujourd’hui, j’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’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’ai pas le temps de reprendre mon contenu, et de toutes manières : je n’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’utilise la forme “conventionnelle” (avec tout plein de fautes, je sais !!!)</li> 399<li>Je vous demande de prendre les termes masculins comme étant <strong>“neutres”.</strong></li> 400</ul> 401<p>Je défends bec et ongle la cause féminine, je défends l’égalité, je respecte tout le monde de la même manière. Ne pas utiliser l’é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’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’auteur du blog que vous lisez.</p> 408<p>Mon nom est Patrice Ferlet, je suis “ingénieur en informatique”, c’est large, ce n’est pas précis, c’est même trompeur. Bref, je travaille depuis l’an 2001 dans le domaine de l’informatique.</p> 409<p>Après un périple dans plusieurs entreprises, j’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’ai en réalité commencé ma carrière comme développeur PHP, j’ai beaucoup travaillé sur Copix (un des tout premier framework PHP à l’époque, et franchement il 412marchait bien) dont je faisais partie de l’équipe de développement. Mais voilà ⦠Nous avons pris notre envol sur d’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’ai clairement orienté mon métier vers une discipline qui me correspondait bien plus, à savoir l’architecture logiciel.</p> 415<p>Doucement j’ai basculé sur d’autres sujets.</p> 416<p>à force, j’ai surtout travaillé en Python, puis en Go, et j’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’équipe R&D pour travailler sur ces sujets.</p> 419<p>Et une chose en entrainant une autre, j’ai mis les mains dans le Machine Learning (Keras, TensorFlow…), mais aussi dans
420Angular (rien à voir hein), Java, Ruby, Gstreamer, OpenCV… et même dans le WebGL</p> 421<h3 id="les-années-smile">Les années “Smile”</h3> 422<p>Je travaillais depuis (ho la vache…) 2008 chez <a href="https://smile.fr">Smile</a>. J’y travaillais, entre autre, dans le pôle de 423“Direction de l’innovation” - mes sujets de prédilections sont à ce jour le DevOps et le Machine Learning (TensorFlow, Keras, Scikit-learn… oui, tout en Python). 424Mais à la base, il faut être précis : <em>j’étais développeur Web</em>.</p> 425<p>C’est au fil des ans que j’ai pris des responsabilités, que j’ai monté des équipes, que j’ai formé des gens, que j’ai 426partagé mes connaissances. Et que j’ai appris des autres, que j’ai appris des erreurs, que j’ai appris à ne pas juger, que j’ai appris à écouter, que j’ai appris à comprendre.</p> 427<p>Les choses en entrainant d’autres, j’ai fini par être “Lead Tech” dans mon pôle, et j’ai pris des responsabilités sur des sujets. Et clairement, de “simple développeur” (et ne croyez pas que je dénigre ce métier, c’est un métier passionnant), j’ai fini par faire bien plus de choses que prévues.</p> 428<blockquote> 429<p>Je suis donc, à ce jour, ce que l’on appelle un “Lead Tech”.</p> 430</blockquote> 431<h3 id="laventure-klee-qui-commence">L’aventure “Klee” qui commence</h3> 432<p>Et aujourd’hui, (depuis 2023), c’est chez <a href="https://www.klee-group.com">Klee</a> que je travaille, toujours sur des sujets passionnants, en qualité de “Lead Tech, DevOps”. 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’apporte donc mon lot de connaissances sur Linux, la conteneurisation, les langages que je maitrise, et je m’efforce de rester à jour sur les nouvelles technologies.</p> 435<h3 id="autres-sujets">Autres sujets</h3> 436<p>à côté du taff, c’est Blender qui me prend pas mal de temps <span class="emoji">ð¤</span></p> 437<p>En gros, ce métier n’est pas un labeur à mes yeux. C’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>© 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.