<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>blog[freezed]</title><link href="https://blog.freezed.me/" rel="alternate"/><link href="https://blog.freezed.me/feeds/all.atom.xml" rel="self"/><id>https://blog.freezed.me/</id><updated>2025-11-01T11:31:00+01:00</updated><subtitle>Histoires d'un &lt;foobar&gt; perfectioniste sous pression…</subtitle><entry><title>Est-on (juste) payé à écrire du code ?</title><link href="https://blog.freezed.me/articles/2025/11/est-on-juste-paye-a-ecrire-du-code/" rel="alternate"/><published>2025-11-01T11:31:00+01:00</published><updated>2025-11-01T11:31:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2025-11-01:/articles/2025/11/est-on-juste-paye-a-ecrire-du-code/</id><summary type="html">&lt;p&gt;Lorsque notre travail consiste à écrire du code, l’histoire a l’air simple : nous écrivons du code, on nous donne de l’argent en échange de ce code. C’est tout ? Pas vraiment.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;strong&gt;&lt;a href="https://www.pycon.fr/2025/fr/speakers.html#speaker-UFGYLN" title="Guillaume Ayoub - pycon.fr"&gt;Guillaume Ayoub&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a href="https://www.pycon.fr/2025/fr/talks/long-talk.html#talk-HGJVVF" title="Est-on (juste) payé à écrire du code ? - pycon.fr"&gt;Est-on (juste) payé à écrire du code ?&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://www.pycon.fr/2025/" title="Le site de la PyConFr 2025"&gt;&lt;img alt="logo PyConFr Lyon 2025" src="https://blog.freezed.me/img/pyconfr-25.png" title="Le logo de la PyConFr 2025"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Lorsque notre travail consiste à écrire du code, l’histoire a l’air simple : nous écrivons du code, on nous donne de l’argent en échange de ce code. C’est tout ? Pas vraiment.&lt;/p&gt;
&lt;p&gt;Si ce code est libre, et gratuitement utilisable, d’où vient l’argent ?&lt;/p&gt;
&lt;p&gt;Lorsque l’on se contente de mettre ensemble des logiciels existants, quel code vend-on ?&lt;/p&gt;
&lt;p&gt;Quand on simplifie du code ou que l’on enlève du code mort, mérite-t-on de l’argent pour détruire le travail de quelqu’un d’autre ?&lt;/p&gt;
&lt;p&gt;Puisque les machines savent plutôt bien écrire du code, leur donnera-t-on de l’argent à notre place ?&lt;/p&gt;
&lt;p&gt;Et dans cette histoire, où sont donc passés l’expérience, le savoir-faire, les compétences ? Doit-on oublier la passion, le plaisir ?&lt;/p&gt;
&lt;p&gt;Autant de questions que nous nous poserons au fil d’une balade initiatique, où il sera question de jeu d’échecs, d’éclipses solaires, de Mario Kart, et de journées à ne rien faire…&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Notes personnelles :&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Papa pourquoi tu donne pas ton travail a une IA&lt;ul&gt;
&lt;li&gt;Pourquoi tu ne fais pas jouer une IA a mario Kart a ta place?&lt;/li&gt;
&lt;li&gt;Je crois que j'ai compris&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Minus_World"&gt;Minus_World&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="live-notes"/><category term="pyconfr"/><category term="talk"/><category term="lyon"/><category term="python"/><category term="dev"/></entry><entry><title>Python dans la typographie: de la conception à la post-production</title><link href="https://blog.freezed.me/articles/2025/03/python-dans-la-typographie-de-la-conception-a-la-post-production/" rel="alternate"/><published>2025-03-20T19:00:00+01:00</published><updated>2025-03-20T19:00:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2025-03-20:/articles/2025/03/python-dans-la-typographie-de-la-conception-a-la-post-production/</id><summary type="html">&lt;p&gt;Si on peut visualiser rapidement ce qu’est une police de caractère, on a souvent plus de mal à conceptualiser son ingénierie.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;a href="https://emmamarichal.fr/"&gt;Emma Marichal&lt;/a&gt;, organisé par &lt;a href="https://www.courtbouillon.org/"&gt;CourtBouillon&lt;/a&gt;, &lt;a href="https://stella.coop/"&gt;Stella&lt;/a&gt; et l'&lt;a href="https://www.afpy.org/"&gt;AFPy&lt;/a&gt;. (via &lt;a href="https://www.meetup.com/fr-FR/python-afpy-lyon/events/306010432/"&gt;Meetup&lt;/a&gt;).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Si on peut visualiser rapidement ce qu’est une police de caractère, on a souvent plus de mal à conceptualiser son ingénierie. Pourtant, après une phase de recherche créative, puis le développement d’une police, la phase de post-production est plus que nécessaire pour s’assurer que celle ci fonctionne correctement dans tous les environnements.&lt;/p&gt;
&lt;p&gt;Cette conférence présentera différents outils utilisant Python, ainsi que plusieurs façons d’utiliser des scripts dans la discipline de la typographie, que ce soit dans la phase de conception, développement, et enfin post production.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Notes personnelles :&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;la typo c'est quoi, comment on en fait son métier&lt;/li&gt;
&lt;li&gt;faire des script en python pour automatiser&lt;ul&gt;
&lt;li&gt;des test de rendus&lt;/li&gt;
&lt;li&gt;des opération répétitive (générer des accent sur toutes les lettres, calcul des graisses, etc.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Questions posées :&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;jusque ou je peu aller avec des outils pythons sans compétence typo ?&lt;/li&gt;
&lt;li&gt;depuis quelle année le projet GF existe ? Quel est modèle économique ?&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="afpy"/><category term="talk"/><category term="lyon"/><category term="dev"/><category term="python"/><category term="innovation"/></entry><entry><title>RAG &amp; LLMs : Crée ton bot qui répond à tes issues GitHub</title><link href="https://blog.freezed.me/articles/2024/09/rag-llms-cree-ton-bot-qui-repond-a-tes-issues-github/" rel="alternate"/><published>2024-09-26T18:54:00+02:00</published><updated>2024-09-26T18:54:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2024-09-26:/articles/2024/09/rag-llms-cree-ton-bot-qui-repond-a-tes-issues-github/</id><summary type="html">&lt;p&gt;SUMMARY&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;a href="https://github.com/Wats0ns"&gt;Quentin&lt;/a&gt;, organisé par &lt;a href="https://www.courtbouillon.org/"&gt;CourtBouillon&lt;/a&gt;, &lt;a href="https://stella.coop/"&gt;Stella&lt;/a&gt; et l'&lt;a href="https://www.afpy.org/"&gt;AFPy&lt;/a&gt;. (via &lt;a href="https://www.meetup.com/fr-fr/python-afpy-lyon/events/303348533"&gt;Meetup&lt;/a&gt;).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Et si un bot pouvait gérer vos issues GitHub à votre place ?
Découvrez comment utiliser les modèles de langage (LLMs) et les systèmes Retrieval-Augmented Generation (RAG) pour construire un bot intelligent qui puise dans les infos de votre repo et génère des réponses précises.
Petit tour des différents frameworks, techniques et possibilités pour simplifier la gestion de vos projets GitHub !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Notes personnelles :&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ajout de connaissance a un LLM&lt;ul&gt;
&lt;li&gt;a l'entraînement (cher coûteux complexe)&lt;/li&gt;
&lt;li&gt;faire un re-entraînement (un peu moins cher coûteux complexe)&lt;/li&gt;
&lt;li&gt;a l'appel du modelé (RAG)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Retrieval Augmented Generation (RAG)&lt;ul&gt;
&lt;li&gt;c'est rajouter du contexte au prompt&lt;/li&gt;
&lt;li&gt;c'est quoi un "float" ?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;outillage; langchain et modèle lama&lt;/li&gt;
&lt;li&gt;fonction calling (nouveau standard)&lt;ul&gt;
&lt;li&gt;passe une fonction et le LLM décide si elle doit être exécuter&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Méthode&lt;ul&gt;
&lt;li&gt;vectoriser les données existante (embeding)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;vidéo chaîne "science étonnante" sur le NLP qui démontre la proximité forte entre loup et chien contrairement a loup chat&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="afpy"/><category term="talk"/><category term="lyon"/><category term="dev"/><category term="python"/><category term="ia"/><category term="cli"/></entry><entry><title>42 raisons de croire au Libre à l'Éducation nationale (la dernière va vous étonner)</title><link href="https://blog.freezed.me/articles/2024/05/jdll-lyon-2024-42_raisons_de_croire_au_libre_leducation_nationale_la_derniere_va_vous_etonner/" rel="alternate"/><published>2024-05-25T16:01:00+02:00</published><updated>2024-05-25T16:01:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2024-05-25:/articles/2024/05/jdll-lyon-2024-42_raisons_de_croire_au_libre_leducation_nationale_la_derniere_va_vous_etonner/</id><summary type="html">&lt;p&gt;Et si le ministère reconnaissait enfin l'intérêt et les vertus du Libre dans l'éducation ?&lt;/p&gt;</summary><content type="html">&lt;h3&gt;&lt;a href="https://pretalx.jdll.org/jdll2024/talk/RVPHMC/"&gt;42 raisons de croire au Libre à l'Éducation nationale (la dernière va vous étonner)&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;par &lt;a href="https://fr.wikipedia.org/wiki/Alexis_Kauffmann"&gt;Alexis Kauffmann&lt;/a&gt; - 2024-05-25 16:00&lt;/p&gt;
&lt;p&gt;&lt;a href="https://jdll.org"&gt;&lt;img alt="logo JDLL 2024" src="https://blog.freezed.me/img/jdll-2024.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Et si le ministère reconnaissait enfin l'intérêt et les vertus du Libre dans l'éducation ?
Longtemps critiqué pour son indifférence pour ne pas dire son déni pour ne pas dire son opposition vis-à-vis du logiciel libre, le ministère de l'Éducation nationale semble enfin découvrir son intérêt et ses vertus, comme en témoignent de nombreuses actions, projets et chantiers en cours.
Mais est-ce structurel, conjoncturel ou artificiel ? Et 42 hirondelles font-elles un libre printemps de l'éducation ?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;Notes personnelles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;de plus en plus de pinguoin au ministère&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;des communauté de prof qui font des truc super au libre&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.nuitducode.net/"&gt;la nuit du code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coopmaths.fr/alea/"&gt;MathALEA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://primtux.fr/"&gt;primTux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mymarkmap.netlify.app/"&gt;myMarkmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://epoc.inria.fr/"&gt;ePoc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.forge.apps.education.fr/"&gt;LaForgeEdu&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;centralisation et lié a Tchap&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apps.education.fr/"&gt;apps.education.fr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://getpapillon.xyz/"&gt;papillon&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;question?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;concept de état plateforme&lt;/li&gt;
&lt;li&gt;logo MS exchange sur apps&lt;/li&gt;
&lt;li&gt;l'initiative est prometteuse mais est ce que c'est pas une manière d'occuper les libristes trop bruyant, quelle est&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="talk"/><category term="jdll"/><category term="lyon"/><category term="collectif"/><category term="société"/></entry><entry><title>Contre-histoires féministes de la technique et du «libre»</title><link href="https://blog.freezed.me/articles/2024/05/jdll-lyon-2024-contre_histoires_feministes_de_la_technique_et_du_libre/" rel="alternate"/><published>2024-05-25T15:00:00+02:00</published><updated>2024-05-25T15:00:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2024-05-25:/articles/2024/05/jdll-lyon-2024-contre_histoires_feministes_de_la_technique_et_du_libre/</id><summary type="html">&lt;p&gt;Et si le ministère reconnaissait enfin l'intérêt et les vertus du Libre dans l'éducation ?&lt;/p&gt;</summary><content type="html">&lt;h3&gt;&lt;a href="https://pretalx.jdll.org/jdll2024/talk/LAKDYX/"&gt;Contre-histoires féministes de la technique et du «libre»&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Par &lt;a href="https://khrys.eu.org/"&gt;Khrys&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://jdll.org"&gt;&lt;img alt="logo JDLL 2024" src="https://blog.freezed.me/img/jdll-2024.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;On commencera par un peu d'éduc' pop' autour de (l'Histoire de) la technique puis on s'interrogera sur les liens entre féminisme et librisme, sur des questions comme l'empouvoirement, la gratuité (et le travail gratuit), le care, l'écologie...&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;Notes personnelles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;woman the hunter&lt;ul&gt;
&lt;li&gt;30 a 50% des femmes dans les chasseurs de gros gibier (geo &amp;amp; national geographic)&lt;/li&gt;
&lt;li&gt;Man the hunter (1968)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;outil convivial vs. outil guerrier&lt;ul&gt;
&lt;li&gt;Ursula Le Guin (The carrier bag Theory of fiction)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;l'histoire est raconté par les dominant&lt;/li&gt;
&lt;li&gt;Toute technique est un Pharmakon&lt;/li&gt;
&lt;li&gt;Ada Lovelace (1816)&lt;ul&gt;
&lt;li&gt;fille de lord byron qu'elle n'a pas connu pour cause de VSS et alcoolisme&lt;/li&gt;
&lt;li&gt;élevé en opposition a son père (Math, science) par sa mère&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Marie Sheyley&lt;ul&gt;
&lt;li&gt;Frankenstein ou le Prométhée moderne&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Les ludites mouvement de casseurs de métier a tisser (?)&lt;/li&gt;
&lt;li&gt;cable transatlatique 250 x 950000 tronc de "gutapercha" (arbre aujourd'hui disparu)&lt;/li&gt;
&lt;li&gt;les femes ont été les 1er routeur (début du telephone)&lt;/li&gt;
&lt;li&gt;1ere femme d'Einstein et celle d'Orwell&lt;/li&gt;
&lt;li&gt;Grace Hopper&lt;ul&gt;
&lt;li&gt;invention du compilateur (et du COBOL 1959)&lt;/li&gt;
&lt;li&gt;2000 80% du code mondial était du COBOL&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Brotopia&lt;/li&gt;
&lt;li&gt;Cas du logiciel libres: encore moins de femmes y sont présentes&lt;/li&gt;
&lt;li&gt;Qui a voulu effacer Alice Recoque sur wikipedia&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="talk"/><category term="jdll"/><category term="lyon"/><category term="collectif"/><category term="société"/></entry><entry><title>Qu'est ce que les champignons nous apprennent sur l'intelligence artificielle ?</title><link href="https://blog.freezed.me/articles/2024/04/quest-ce-que-les-champignons-nous-apprennent-sur-lintelligence-artificielle/" rel="alternate"/><published>2024-04-26T14:36:00+02:00</published><updated>2024-04-26T14:36:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2024-04-26:/articles/2024/04/quest-ce-que-les-champignons-nous-apprennent-sur-lintelligence-artificielle/</id><summary type="html">&lt;p&gt;Les champignons sont capables de résoudre des problèmes algorithmiques complexes comme trouver le plus cours chemin ou le voyageur de commerce. Plus intéressant encore, la propagation des champignons suit un mécanisme similaire au fonctionnement des réseaux de neurones utilisés en intelligence artificielle.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;Par &lt;a href="https://mixitconf.org/en/speakers/5629542f-10c1-4e94-be75-2039c99162dd" title="Marine Sobas - SOURCE"&gt;Marine Sobas&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mixitconf.org/2024/qu-est-ce-que-les-champignons-nous-apprennent-sur-l-intelligence-artificielle-" title="Qu'est ce que les champignons nous apprennent sur l'intelligence artificielle ? - mixitconf.org"&gt;Présentation de la conf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/BIAQ-vReeWE" title="Qu'est ce que les champignons nous apprennent sur l'intelligence artificielle ? - youtube.com"&gt;Captation vidéo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://mixitconf.org/2024?agenda=true" title="Agenda des conférences 2024 - mixitconf.org"&gt;&lt;img alt="logo MiXiT 2024" src="https://blog.freezed.me/img/mixit-24.png" title="Logo de la conférence MiXit 2024"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Les champignons sont capables de résoudre des problèmes algorithmiques complexes comme trouver le plus cours chemin ou le voyageur de commerce. Plus intéressant encore, la propagation des champignons suit un mécanisme similaire au fonctionnement des réseaux de neurones utilisés en intelligence artificielle. A première vue, l’analogie entre les deux peut surprendre, mais c’est en fait une excellente porte d’entrée pour revoir ensemble les bases de l’IA et réfléchir à ses implications concrètes et philosophiques.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Notes personnelles :&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;entangled life (Merlin Sheldrake)&lt;/li&gt;
&lt;li&gt;cordyceps : champi qui prend le controle des fourmies&lt;/li&gt;
&lt;li&gt;blob étudié pour sa capacité a travailler en réseau&lt;/li&gt;
&lt;li&gt;Champignon ?&lt;/li&gt;
&lt;li&gt;blobs peuvent résoudre des algorythme&lt;ul&gt;
&lt;li&gt;le plus court chemin&lt;/li&gt;
&lt;li&gt;le voyageur de commerce&lt;/li&gt;
&lt;li&gt;exploration spatiale&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;de quelle propriété fongique on pourrait s'inspirer&lt;ul&gt;
&lt;li&gt;adadptation au changement&lt;/li&gt;
&lt;li&gt;auto guerison&lt;/li&gt;
&lt;li&gt;fusion&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;capacités du mycelium a reproduire des portes logique&lt;/li&gt;
&lt;li&gt;mycelium est-il turing complet ?&lt;ul&gt;
&lt;li&gt;oui&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ordinateur fongique (wetware fongique)&lt;ul&gt;
&lt;li&gt;fruit interface&lt;/li&gt;
&lt;li&gt;mycelium calcul&lt;/li&gt;
&lt;li&gt;réaction en fonction du réseau&lt;/li&gt;
&lt;li&gt;besoin de maitrise les réseau du mycelium et son environment&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;possibilité de developper de capteurs fongiques&lt;ul&gt;
&lt;li&gt;detection de l'hydrocortisone&lt;/li&gt;
&lt;li&gt;choc, humidité, lumiere&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Propriété philosophique ?&lt;/li&gt;
&lt;li&gt;une intelligence sans cerveau&lt;ul&gt;
&lt;li&gt;colloction partagé (proust)  comme une scene au theatre&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;critere de pertinence de l'expe d'exploration lunaire&lt;ul&gt;
&lt;li&gt;capacité a couvrir la suface&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Est-ce que l'on ne touche pas a a un tabou en manipulant du vivant&lt;ul&gt;
&lt;li&gt;cadre légal inexistant&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Questions posées :&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;est-ce que la SF a déjà envisagé des "ordinateurs fongique" (&lt;a href="https://fr.wikipedia.org/wiki/EXistenZ"&gt;eXistenZ&lt;/a&gt; de David Cronenberg, &lt;a href="https://wemakeit.com/projects/l-armee-suisse-contre-les-ma?locale=fr"&gt;L'armée suisse contre les martiens&lt;/a&gt; de Hatman)&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="mixit"/><category term="lyon"/><category term="live-notes"/><category term="innovation"/><category term="cognition"/></entry><entry><title>Abou Dhabi, pôle mondial de la cybersurveillance ?</title><link href="https://blog.freezed.me/articles/2024/04/abou-dhabi-pole-mondial-de-la-cybersurveillance/" rel="alternate"/><published>2024-04-26T13:56:00+02:00</published><updated>2024-04-26T13:56:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2024-04-26:/articles/2024/04/abou-dhabi-pole-mondial-de-la-cybersurveillance/</id><summary type="html">&lt;p&gt;En deux décennies, Abou Dhabi s’est doté d’importants moyens numériques pour encadrer et contrôler sa population, main-d’œuvre étrangère comprise.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;Par &lt;a href="https://www.linkedin.com/in/eva-thi%C3%A9baud-700b84193/" title="Eva Thiebaud - linkedin.com"&gt;Eva Thiebaud&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mixitconf.org/2024/abou-dhabi-pole-mondial-de-la-cybersurveillance" title="Abou Dhabi, pôle mondial de la cybersurveillance ? - mixitconf.org"&gt;Présentation de la conf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/onQVnxSdlFY" title="Abou Dhabi, pôle mondial de la cybersurveillance ? - youtube.com"&gt;Captation vidéo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://mixitconf.org/2024?agenda=true" title="Agenda des conférences 2024 - mixitconf.org"&gt;&lt;img alt="logo MiXiT 2024" src="https://blog.freezed.me/img/mixit-24.png" title="Logo de la conférence MiXit 2024"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;En deux décennies, Abou Dhabi s’est doté d’importants moyens numériques pour encadrer et contrôler sa population, main-d’œuvre étrangère comprise. En parallèle, le pays sert de "hub" aux démocraties pour vendre en toute discrétion leurs technologies à des pays peu recommandables.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Notes personnelles :&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;source guerre au Yemen est les intérêts dans la région&lt;/li&gt;
&lt;li&gt;Qui sont les Émirats-Arabe uni&lt;ul&gt;
&lt;li&gt;Fédération d'Émirat&lt;/li&gt;
&lt;li&gt;voisin : Iran, Arabie Saoudite (Quatar, Abou Dhabi, Dubai)&lt;/li&gt;
&lt;li&gt;roi MBZ (nommé président quand même)&lt;/li&gt;
&lt;li&gt;pays jeune 50 ans&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;populatoin autochtone minauritaires mais au pouvoir&lt;/li&gt;
&lt;li&gt;crainte des populations migrante/expatrié majoritaire&lt;/li&gt;
&lt;li&gt;1e choc invasion du koweit: association forte avec les USA&lt;/li&gt;
&lt;li&gt;2e 11 sept et implication d'Emirati&lt;/li&gt;
&lt;li&gt;3e les printemps arabe&lt;ul&gt;
&lt;li&gt;monté au pouvoir des frère musulman (égypte, frere musulman)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2012 création de la NESA (modele: NSA US)&lt;/li&gt;
&lt;li&gt;Palantir et pegasus utilisé par les 2mirats&lt;/li&gt;
&lt;li&gt;Cyberpoint filiale NESA pour surveillance inopérante sur les contexte US&lt;/li&gt;
&lt;li&gt;Dark Matter créé pour essayer d'augmenter la porté&lt;/li&gt;
&lt;li&gt;forte pression sur les citoyens, ex journaliste Al Jazeira photo en maillot de bain volées et publiées&lt;/li&gt;
&lt;li&gt;conflit F35 / 5G : priorité a la 5G et achat de rafale&lt;/li&gt;
&lt;li&gt;Emirats sont aussi exportateur de techno de surveillance&lt;/li&gt;
&lt;li&gt;2013 Blue code system revente a la syrie de bluecode system&lt;/li&gt;
&lt;li&gt;2021 Advanced Middle East System filiale de Nexa&lt;/li&gt;
&lt;li&gt;Relation avec la france&lt;ul&gt;
&lt;li&gt;partenariat Louvre et la Sorbonne à Abu Dhabi&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Questions posées :&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Compétence au émirats ou zone intermédiaire&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="mixit"/><category term="lyon"/><category term="live-notes"/><category term="citoyen"/><category term="comportement"/><category term="collectif"/></entry><entry><title>Comment retrouver espoir en l'avenir ?</title><link href="https://blog.freezed.me/articles/2024/04/comment-retrouver-espoir-en-lavenir/" rel="alternate"/><published>2024-04-26T11:22:00+02:00</published><updated>2024-04-26T11:22:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2024-04-26:/articles/2024/04/comment-retrouver-espoir-en-lavenir/</id><summary type="html">&lt;p&gt;Dans notre quotidien, les nouvelles alarmantes se multiplient, engendrant une atmosphère souvent teintée de pessimisme.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;Par &lt;a href="https://www.linkedin.com/in/froville/" title="Béatrice Palis - linkedin.com"&gt;Béatrice Palis&lt;/a&gt; &amp;amp; &lt;a href="https://www.linkedin.com/in/beatrice-palis-3b1b88173/" title="Jerome Froville - linkedin.com"&gt;Jérôme Froville&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mixitconf.org/2024/comment-garder-espoir-en-l-avenir-" title="Comment retrouver espoir en l'avenir ? - mixitconf.org"&gt;Présentation de la conf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/uaWxp4rIUuw" title="Comment retrouver espoir en l'avenir ? - youtube.com"&gt;Captation vidéo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://mixitconf.org/2024?agenda=true" title="Agenda des conférences 2024 - mixitconf.org"&gt;&lt;img alt="logo MiXiT 2024" src="https://blog.freezed.me/img/mixit-24.png" title="Logo de la conférence MiXit 2024"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Dans notre quotidien, les nouvelles alarmantes se multiplient, engendrant une atmosphère souvent teintée de pessimisme. Que ce soit les perspectives incertaines liées à l'intelligence artificielle, les conflits en Ukraine et en Israël, les avertissements sur l'épuisement de nos ressources vitales (sable, eau, métaux, énergie...) malgré une économie les considérant comme infinies, la pollution rampante, la dramatique diminution de la biodiversité, ou le dérèglement climatique qui à lui seul pourrait suffire à plomber notre moral, le tableau peut sembler sombre. Cela génère chez certains une forte anxiété. Dans ce contexte difficile, comment garder espoir, voire retrouver une lueur d'optimisme pour l'avenir et se mobiliser pour agir ? Pour nous, Béatrice et Jérôme, c'est une préoccupation qui nous accompagne depuis longtemps et nous vous proposons un voyage à travers les découvertes qui nous ont inspirées et qu'il nous semble essentiel de partager. Elles émanent de concepts fondamentaux ancrés dans l'Agilité, la PNL, la systémique, le coaching ou les sciences sociales. Il est crucial de les explorer, tant pour notre épanouissement individuel que pour le bien des collectifs auxquels nous appartenons (équipe, famille, entreprise, société...). En les intégrant, nous pourrons construire une confiance commune dans nos capacités, surmonter cette anxiété et influencer positivement notre futur. Reprenons espoir ensemble !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Notes personnelles :&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;objectif: que l'on se sente mieux après&lt;/li&gt;
&lt;li&gt;le petit Prince: la réalité est une illusion&lt;/li&gt;
&lt;li&gt;PNL (Béatrice) et agilité (Jérôme) : sœurs de transformation&lt;/li&gt;
&lt;li&gt;les problèmes et les effets&lt;ul&gt;
&lt;li&gt;derègement climatique (src: LFDC/GIEC)&lt;/li&gt;
&lt;li&gt;9 limites planétaires (6 dépassé a ce jour)&lt;/li&gt;
&lt;li&gt;contexte économique et techologique&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;éco-anxiété: désormais une norme&lt;/li&gt;
&lt;li&gt;comportement renforçant l'anxiété&lt;ul&gt;
&lt;li&gt;controle, evitement et co-assurance&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;étapes du changement / courbe du deuil&lt;/li&gt;
&lt;li&gt;pensée analytique (&lt;a href="https://fr.wikipedia.org/wiki/Discours_de_la_m%C3%A9thode"&gt;Descartes 1637&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;pensée systémique (1950 courant térapie fmilialle/breve)&lt;/li&gt;
&lt;li&gt;économie circulaire, gestion de l'eau, la santé&lt;ul&gt;
&lt;li&gt;les problemes doivent etre adressé de manière systémique&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;fonctionnement du cerveau&lt;ul&gt;
&lt;li&gt;se sentir &lt;strong&gt;reconnu&lt;/strong&gt; et en &lt;strong&gt;sécurité&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://duckduckgo.com/?q=5 dysfonctionnement de Patrick Lencioni"&gt;5 dysfonctionnement de Patrick Lencioni&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;croissance post-traumatique&lt;/li&gt;
&lt;li&gt;antifragilité (vs: fragile, résilience, robuste)&lt;ul&gt;
&lt;li&gt;chaos monkey&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;La réalité n'est qu'une illusion, bien que très tenace&lt;/em&gt; (??? Albert Einstein)&lt;/li&gt;
&lt;li&gt;biomimétisme et entraide&lt;ul&gt;
&lt;li&gt;compétion l'emporte en milieu facile&lt;/li&gt;
&lt;li&gt;entraide l'emporte en condition difficile&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;convivialisme&lt;/li&gt;
&lt;li&gt;besoin de récit portant ces nouvelles valeur&lt;/li&gt;
&lt;li&gt;les right-tech (&lt;a href="https://duckduckgo.com/?q=conférence Ludovic Cinquin futurospective digitale"&gt;conférence de Ludovic Cinquin "futurospective digitale ?"&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;changer la valeur des choses&lt;/li&gt;
&lt;li&gt;vers l'agilité radicale&lt;/li&gt;
&lt;li&gt;la congruence&lt;/li&gt;
&lt;li&gt;importance de la posture pour transformer&lt;/li&gt;
&lt;li&gt;le dialogue (david Bohm)&lt;/li&gt;
&lt;li&gt;spirale dynamique un modele d'evolution de la conscience (extension pyramide masslow)&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="mixit"/><category term="lyon"/><category term="live-notes"/><category term="société"/><category term="comportement"/></entry><entry><title>Réinventer les masculinités, un chemin vers plus d’inclusion dans la tech ?</title><link href="https://blog.freezed.me/articles/2024/04/reinventer-les-masculinites-un-chemin-vers-plus-dinclusion-dans-la-tech/" rel="alternate"/><published>2024-04-26T10:05:00+02:00</published><updated>2024-04-26T10:05:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2024-04-26:/articles/2024/04/reinventer-les-masculinites-un-chemin-vers-plus-dinclusion-dans-la-tech/</id><summary type="html">&lt;p&gt;À travers des exemples concrets et des bases théoriques, cette présentation proposera la réinvention des masculinités comme une étape cruciale pour accroître la présence des femmes dans la tech.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;Par &lt;a href="https://mixitconf.org/user/nathan.castelein" title="Nathan Castelein - mixitconf.org"&gt;Nathan Castelein&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mixitconf.org/2024/reinventer-les-masculinites-un-chemin-vers-plus-d-inclusion-dans-la-tech" title="Réinventer les masculinités, un chemin vers plus d’inclusion dans la tech ? - mixitconf.org"&gt;Présentation de la conf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/vwm2pGE84sQ" title="Réinventer les masculinités, un chemin vers plus d’inclusion dans la tech ? - youtube.com"&gt;Captation vidéo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://mixitconf.org/2024?agenda=true" title="Agenda des conférences 2024 - mixitconf.org"&gt;&lt;img alt="logo MiXiT 2024" src="https://blog.freezed.me/img/mixit-24.png" title="Logo de la conférence MiXit 2024"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Moins de 20% de représentation féminine dans le secteur de la tech. Derrière ce constat, la discussion sur les problèmes de sexisme dans notre milieu met en lumière des mécanismes tels que la masculinité toxique, le patriarcat, la virilité dominante, les boys club, les privilèges, … Offrir un espace d’inclusion permettant à chacun et chacune de s’épanouir nécessite une compréhension de ces mécanismes que les hommes, consciemment ou inconsciemment, perpétuent.
Nous verrons comment ces schémas prennent place dans le milieu de l’informatique, et nous aborderons la nécessité de les déconstruire, tout en explorant les questions fondamentales : Déconstruire, mais pour aller où ? Comment les hommes peuvent-ils trouver leur nouvelle place ? À travers des exemples concrets et des bases théoriques, cette présentation proposera la réinvention des masculinités comme une étape cruciale pour accroître la présence des femmes dans la tech. Elle soulignera également que ces mécanismes, préjudiciables aux femmes, peuvent aussi avoir des répercussions néfastes sur les hommes. Enfin, elle proposera des pistes et des solutions pour entamer le chemin vers de nouvelles masculinités, notamment grâce à mon expérience personnelle au sein d’un groupe d’hommes qui cherche à redéfinir la masculinité collective.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Notes personnelles :&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;constat et cadre&lt;ul&gt;
&lt;li&gt;frequentation des métiers tech&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;1 femme sur 2 quitte la tech avant 35ans&lt;/li&gt;
&lt;li&gt;46% des femmes dans la tech déclare avoir subit du sexisme&lt;/li&gt;
&lt;li&gt;transidentité mise en difficulté aujourd'hui&lt;/li&gt;
&lt;li&gt;Roller Derby&lt;ul&gt;
&lt;li&gt;sport pratique et géré par des femme&lt;/li&gt;
&lt;li&gt;initiative pom pom boy&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;les scrimmage people en 2016&lt;ul&gt;
&lt;li&gt;collectif de 20 en 2024&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;objectif partager les choses possible&lt;/li&gt;
&lt;li&gt;quel chemin vers moins de masculinités&lt;ul&gt;
&lt;li&gt;Raewyn connell, sociologue australienne&lt;/li&gt;
&lt;li&gt;pionniere sur les études des masculinités&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;définir la masculinités&lt;ul&gt;
&lt;li&gt;"Quelle sont les attentes quand on est défini comme un homme"?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;hierarchie des masculinité&lt;ul&gt;
&lt;li&gt;hégémonique&lt;ul&gt;
&lt;li&gt;forme culturellement glorifiée&lt;/li&gt;
&lt;li&gt;critère et définition dynimique et idéale (non-atteignable)&lt;/li&gt;
&lt;li&gt;virilité est une expression de cette masculinité&lt;/li&gt;
&lt;li&gt;lien avec la mascu toxique&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;marginalisé&lt;ul&gt;
&lt;li&gt;ex. footballeur, mis en avant, mais racisé et discriminé a ce titre&lt;/li&gt;
&lt;li&gt;personnes handicapée resteront handicapée&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;subordonnée&lt;ul&gt;
&lt;li&gt;personne exhibant des comportements qui vont a l'encontre de la masc hégé&lt;/li&gt;
&lt;li&gt;ex. se raser le jambes (souhait vs cycliste)&lt;/li&gt;
&lt;li&gt;masculinité homosexuelle&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;complice (en N2)&lt;ul&gt;
&lt;li&gt;peu de candidat au modele hégémonique&lt;/li&gt;
&lt;li&gt;bénéficie des du modèle sans le vouloir (ruissellement)&lt;/li&gt;
&lt;li&gt;reste silencieuse&lt;/li&gt;
&lt;li&gt;position majoritaire par défaut&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Les limites du modèle et comment se positionner&lt;ul&gt;
&lt;li&gt;L'homosocialité préférence pour les personnes  sans dépasser "une limite"&lt;/li&gt;
&lt;li&gt;aimer l'autre genre, mais jamais les glorifier&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Sortir de la complicité&lt;/li&gt;
&lt;li&gt;la roue des privilèges&lt;ul&gt;
&lt;li&gt;Sylvia Duckworth&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;s'éduquer&lt;ul&gt;
&lt;li&gt;beaucoup de ressource dispo mais faut chercher&lt;/li&gt;
&lt;li&gt;podcast: Mainsplainig &amp;amp; les couilles sur la table&lt;/li&gt;
&lt;li&gt;séries: Boys boys boys (ARTE), et maintenant on fait quoi&lt;/li&gt;
&lt;li&gt;livre: on ne nait pas mec (), Masculinités (collectif)&lt;/li&gt;
&lt;li&gt;fun: Drag race france (franceTV), pom pom boys (pierr chassagneux, M6)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;reqtion&lt;ul&gt;
&lt;li&gt;être a l'écoute et réagir&lt;/li&gt;
&lt;li&gt;dans tous les contexte&lt;/li&gt;
&lt;li&gt;union fait la force&lt;/li&gt;
&lt;li&gt;réagir face a soit même et faire de la place&lt;ul&gt;
&lt;li&gt;mansplaining et manterrupting&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;sortir de la précarité emotionnelle&lt;ul&gt;
&lt;li&gt;46% souffert d'injonction&lt;/li&gt;
&lt;li&gt;19% 19% d'hommes en situaytion de detresse psy élevé qui consulte&lt;/li&gt;
&lt;li&gt;exprimer ces emotions&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;le faire pour des raisons saines&lt;/li&gt;
&lt;li&gt;Pertes et gain&lt;ul&gt;
&lt;li&gt;partager aux autres c'est perdre c'est perdre pour soit&lt;/li&gt;
&lt;li&gt;une société plus éthique&lt;/li&gt;
&lt;li&gt;de nouvelles liberté&lt;/li&gt;
&lt;li&gt;qui je suis au lien de qui j'aimerai être&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;"boy scout rule": laisser l'endroit &lt;strong&gt;plus propre&lt;/strong&gt; qu'a votre arrivée&lt;/li&gt;
&lt;li&gt;"derrière un homme déconstruit il y a des feministes épuisées"&lt;/li&gt;
&lt;li&gt;question&lt;ul&gt;
&lt;li&gt;les media apporte un espoir pour mettre en avant les alternative&lt;/li&gt;
&lt;li&gt;type de masculinités dans la tech: complice mais tendance au boys club&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Questions posées :&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;photo secrète ?&lt;/li&gt;
&lt;li&gt;le Ruissellement ça fonctionne ?&lt;/li&gt;
&lt;li&gt;place des personnes genrées femme assimilé aux masculinités  servant ainsi de gardienne&lt;/li&gt;
&lt;li&gt;vécu déconstruction perso vs pro ?&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="mixit"/><category term="lyon"/><category term="live-notes"/><category term="comportement"/><category term="société"/><category term="collectif"/></entry><entry><title>Faut-il numériser ?</title><link href="https://blog.freezed.me/articles/2024/04/faut-il-numeriser/" rel="alternate"/><published>2024-04-26T09:28:00+02:00</published><updated>2024-04-26T09:28:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2024-04-26:/articles/2024/04/faut-il-numeriser/</id><summary type="html">&lt;p&gt;Récits d’exploration et de recherches de 2017 à 2024&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;Par &lt;a href="https://mixitconf.org/en/speakers/307a046c-9f3b-49fb-9634-188a6cdc9c4b" title="Gauthier Roussilhe - mixitconf.org"&gt;Gauthier Roussilhe&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mixitconf.org/en/2024/faut-il-numeriser-recits-d-exploration-et-de-recherches-de-2017-a-2024" title="Faut-il numériser ? - mixitconf.org"&gt;Présentation de la conf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/h09oafWk6Us" title="Faut-il numériser ? - youtube.com"&gt;Captation vidéo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://mixitconf.org/2024?agenda=true" title="Agenda des conférences 2024 - mixitconf.org"&gt;&lt;img alt="logo MiXiT 2024" src="https://blog.freezed.me/img/mixit-24.png" title="Logo de la conférence MiXit 2024"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Cela fait quelques années que l’empreinte environnementale du secteur numérique est devenue un sujet d’actualité. Maintenant l’enjeu des bénéfices environnementaux de la numérisation est aussi soulevé. Ces deux élément sont les faces d’une même pièce qui pose une question centrale : comment savoir s’il faut pour contribuer à la transition écologique ? C’est cette question que j’ai commencé à explorer en 2018 et qui m’a amené hors de ma discipline et de mon métier original. Cette conférence est le récit d’explorations des infrastructures numériques de la Bretagne à Taïwan mais aussi des institutions publiques qui régissent la numérisation, de l’État à la Commission Européenne. Tout cela pour poursuivre inlassablement toujours la même question : faut-il numériser pour aider à la transition écologique ?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Notes personnelles :&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;L'analyse environnementale&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;l'ecoconception est trop souvent oubliée&lt;ul&gt;
&lt;li&gt;le numérique est il vraiment nécessaire?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Pas de formation sur l'analyse globale et complet des cycle de vie produit&lt;/li&gt;
&lt;li&gt;Livre "network of new york"&lt;/li&gt;
&lt;li&gt;le deploiement du reseau suit les trace laissé par d'autre activité (chemin grumier en montagne)&lt;/li&gt;
&lt;li&gt;Histoire de l'antenne relai installé avec une génératrices et un réservoir de gazole non routier pour respecter les injonction du "New deal Mobile"&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Taiwan&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;consommation d'eau de l'industrie des semiconducteur (SC)&lt;/li&gt;
&lt;li&gt;suppression de l'agriculture pour affecter l'eau a la fabrication de SC&lt;/li&gt;
&lt;li&gt;Politique opendata de Taiwan incroyable (Ministre Audraey Tang?)&lt;/li&gt;
&lt;li&gt;efficacité de la gravure  diminue depui le seuil 10nm&lt;/li&gt;
&lt;li&gt;"le verrou carbone de l'industrie electronique"&lt;ul&gt;
&lt;li&gt;subvention de la R&amp;amp;D SC sur fond public&lt;/li&gt;
&lt;li&gt;pas d'energie a taiwan: import d'energie (charbon et gaz)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;stress hydrique lié a la densité population/industrie&lt;/li&gt;
&lt;li&gt;demande eau = 1% mais pas répartie sur le téritoire&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;(partie 3)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;estimation du gain de la numérisation: 30 ans d'histoire&lt;/li&gt;
&lt;li&gt;Methode de calcul "The enablement ..."&lt;ul&gt;
&lt;li&gt;exemple airBnB&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;pas d'etude fiable pour estimer les réduction GES
    -&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Axes recherche&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;potentiel != effet dans un contexte&lt;ul&gt;
&lt;li&gt;teletravail Paris vs Province&lt;/li&gt;
&lt;li&gt;effet positif seron décroissant&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;solution numérique != effet environnementaux&lt;/li&gt;
&lt;li&gt;solution numérique = contexte spécifique != effet environnementaux&lt;/li&gt;
&lt;li&gt;l'effet rebond&lt;/li&gt;
&lt;li&gt;utilisation des arbre des conséquences&lt;ul&gt;
&lt;li&gt;commerce en ligne&lt;/li&gt;
&lt;li&gt;taux de retour vs reduction deplacement  et livraison a domicile&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Faut il numériser?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;on sait toujours pas&lt;/li&gt;
&lt;li&gt;ça dépend du contexte&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Questions posées :&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lien avec question de l'eau dans Grésivaudan&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="mixit"/><category term="keynote"/><category term="lyon"/><category term="live-notes"/><category term="citoyen"/><category term="comportement"/><category term="collectif"/></entry><entry><title>Comment programmer un émulateur NES ?</title><link href="https://blog.freezed.me/articles/2023/09/comment-programmer-un-emulateur-nes/" rel="alternate"/><published>2023-09-20T18:37:00+02:00</published><updated>2023-09-20T18:37:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2023-09-20:/articles/2023/09/comment-programmer-un-emulateur-nes/</id><summary type="html">&lt;p&gt;Découvrir une architecture possible d'un émulateur, et comment en implémenter un en nous focalisant sur le CPU, la mémoire, et les fameuses ROMs&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;em&gt;Guillaume Roche&lt;/em&gt; &lt;a href="https://gitlab.com/guillaumeroche/"&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt;&lt;sup&gt;,&lt;/sup&gt;&lt;a href="https://gitlab.com/guillaumeroche/"&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; organisé par &lt;a href="https://www.courtbouillon.org/"&gt;CourtBouillon&lt;/a&gt;, &lt;a href="https://www.genymobile.com/"&gt;Genymobile&lt;/a&gt; et l'&lt;a href="https://www.afpy.org/"&gt;AFPy&lt;/a&gt; (via &lt;a href="https://www.meetup.com/python-afpy-lyon/events/295796925/"&gt;Meetup&lt;/a&gt;).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Pour ce meetup de rentrée, Guillaume nous parle d’émulation, de simulation, de virtualisation… et d’un peu de C++ !&lt;/p&gt;
&lt;p&gt;Ces différents concepts permettent d'exécuter des programmes hors du cadre matériel et logiciel pour lequel ils ont été conçu. Si le cas d'usage le plus populaire aujourd'hui est le rétro-gaming, Il en existe une multitude. Il est d'ailleurs probable que vous utilisiez au quotidien ces technologies.&lt;/p&gt;
&lt;p&gt;Passionné par ces aspects, je me suis lancé le défi d'implémenter un émulateur d'une console NES. Pourquoi la NES ? C'est une machine relativement simple, extrêmement bien documentée, et de nombreux émulateurs open-source existants peuvent nous aider.&lt;/p&gt;
&lt;p&gt;Je vous propose de découvrir avec moi une architecture possible d'un émulateur, et comment en implémenter un en nous focalisant sur le CPU, la mémoire, et les fameuses ROMs. Nous évoquerons également comment rendre notre émulateur le plus fidèle possible. Enfin, nous verrons quelle stratégie de tests peuvent s’appliquer sur des projets d'émulateurs.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h1&gt;Notes personnelles&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Définitions&lt;ul&gt;
&lt;li&gt;Simulation? Réimplémenter le comportent d'un OS (WINE)&lt;/li&gt;
&lt;li&gt;Émulation? Réimplémenter le hardware&lt;/li&gt;
&lt;li&gt;Virtualisation? Émulation avec accès direct au hardware&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;implementation&lt;ul&gt;
&lt;li&gt;NES CPU : MOS 6502&lt;/li&gt;
&lt;li&gt;les registres: un objet&lt;/li&gt;
&lt;li&gt;Initialisation CPU&lt;/li&gt;
&lt;li&gt;types d'instruction&lt;/li&gt;
&lt;li&gt;le code &lt;code&gt;C++&lt;/code&gt; de cet émulateur : &lt;a href="https://gitlab.com/guillaumeroche/Nestor"&gt;&lt;code&gt;guillaumeroche/Nestor&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Précision de l'émulation&lt;ul&gt;
&lt;li&gt;partit pris on aurait pu vouloir ciler la perf&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ressources&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.nesdev.org/NESDoc.pdf"&gt;Nintendo Entertainment System Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.6502.org/tutorials/6502opcodes.html"&gt;NMOS 6502 Opcodes&lt;/a&gt;, by John Pickens, Updated by Bruce Clark and by Ed Spittles&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nesdev.org/wiki/Nesdev_Wiki"&gt;Nesdev Wiki&lt;/a&gt;, the source for all your NES programming needs&lt;/li&gt;
&lt;li&gt;[Vidéo]: &lt;a href="https://www.youtube.com/watch?v=PwZEBE66an0"&gt;NES Architecture Explained&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[NES online code tester] : &lt;a href="https://skilldrick.github.io/easy6502/"&gt;Easy 6502&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[NES online code tester] : &lt;a href="http://8bitworkshop.com/"&gt;8 bit workshop&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="afpy"/><category term="talk"/><category term="lyon"/><category term="dev"/><category term="python"/><category term="performance"/><category term="diy"/></entry><entry><title>Rust Lyon Meetup #4</title><link href="https://blog.freezed.me/articles/2023/05/rust-lyon-meetup-4/" rel="alternate"/><published>2023-05-24T19:00:00+02:00</published><updated>2023-05-24T19:00:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2023-05-24:/articles/2023/05/rust-lyon-meetup-4/</id><summary type="html">&lt;p&gt;Rencontre autour du langage de programmation Rust&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;a href="https://fr.linkedin.com/in/maxime-mikotajewski-86112a10b"&gt;Maxime Mikotajewski&lt;/a&gt; &amp;amp; &lt;a href="https://fr.linkedin.com/in/nolwenndoucet"&gt;Nolwenn Doucet&lt;/a&gt;, organisé par &lt;a href="https://www.meetup.com/fr-FR/rust-lyon/"&gt;Rust Lyon Meetup&lt;/a&gt;. (via &lt;a href="https://www.meetup.com/fr-FR/rust-lyon/events/293322211"&gt;Meetup&lt;/a&gt;).&lt;/p&gt;
&lt;h3&gt;Rust Lyon Meetup #4&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Rencontre autour du langage de programmation Rust, de ses usages, de son évolution, de sa pratique, entre personnes l'utilisant ou curieuses de le découvrir.&lt;/p&gt;
&lt;p&gt;Au programme de la soirée : quelques présentations (voir ci-dessous), puis ensuite discussions en plus petits groupes et réseautage.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h1&gt;Notes personnelles&lt;/h1&gt;
&lt;h2&gt;Mon apprentissage de Rust&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Base&lt;ul&gt;
&lt;li&gt;Rust book&lt;/li&gt;
&lt;li&gt;Rust by examples&lt;/li&gt;
&lt;li&gt;Rustlings&lt;/li&gt;
&lt;li&gt;exercism&lt;/li&gt;
&lt;li&gt;lifetimes katas&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;au dela des bases&lt;ul&gt;
&lt;li&gt;clippy&lt;/li&gt;
&lt;li&gt;livres:&lt;ul&gt;
&lt;li&gt;Rust for Rustaceans (Jon Gj???)&lt;/li&gt;
&lt;li&gt;Zero to production in Rust, Luca Palmieri&lt;/li&gt;
&lt;li&gt;Rust in action, Tim McNamara: plutôt orienté systèmes)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ensuite…&lt;ul&gt;
&lt;li&gt;This week in Rust (newsletters)&lt;/li&gt;
&lt;li&gt;Rust magazine (magazine en ligne)&lt;/li&gt;
&lt;li&gt;Awesome Rust mentors (annuaire)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Conclusion&lt;ul&gt;
&lt;li&gt;qualité de l'ecosysteme&lt;/li&gt;
&lt;li&gt;petit manque de contenu intermédiaire&lt;/li&gt;
&lt;li&gt;qualité de la communauté&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Q/A:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Programming Rust (O'reilly)&lt;/li&gt;
&lt;li&gt;Crust of Rust (youtube - Jon Gj???)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;La valeur de &lt;em&gt;Value Objects&lt;/em&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;😅&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="talk"/><category term="lyon"/><category term="dev"/><category term="rust"/></entry><entry><title>CoWorks : créer des microservices en utilisant Flask/AWS Lamba et Airflow</title><link href="https://blog.freezed.me/articles/2023/04/coworks-creer-des-microservices-en-utilisant-flaskaws-lamba-et-airflow/" rel="alternate"/><published>2023-04-27T19:00:00+02:00</published><updated>2023-04-27T19:00:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2023-04-27:/articles/2023/04/coworks-creer-des-microservices-en-utilisant-flaskaws-lamba-et-airflow/</id><summary type="html"/><content type="html">&lt;p&gt;Par &lt;a href="https://fr.linkedin.com/in/gdoumenc"&gt;Guillaume Doumenc&lt;/a&gt;, organisé par &lt;a href="https://www.courtbouillon.org/"&gt;CourtBouillon&lt;/a&gt;, &lt;a href="https://stella.coop/"&gt;Stella&lt;/a&gt; et l'&lt;a href="https://www.afpy.org/"&gt;AFPy&lt;/a&gt; (via &lt;a href="https://www.meetup.com/python-afpy-lyon/events/292447608/"&gt;Meetup&lt;/a&gt;).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://fr.linkedin.com/in/gdoumenc"&gt;Guillaume&lt;/a&gt; vient nous présenter &lt;a href="https://github.com/gdoumenc/coworks"&gt;CoWorks&lt;/a&gt;, un framework unifié de microservices serverless basé sur les technologies AWS (API Gateway, AWS Lambda), le framework Flask (Flask/Click) et la plateforme Airflow.&lt;/p&gt;
&lt;p&gt;Dans cette présentation, nous verrons :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un aperçu des concepts : tech vs business micro-services&lt;/li&gt;
&lt;li&gt;les avantages du framework : modularité, maintenance, capacité de mise à l'échelle&lt;/li&gt;
&lt;li&gt;un retour d'expérience d'un client − NeoRezo&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h1&gt;Notes personnelles&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;123 imprim il y a 10 ans&lt;ul&gt;
&lt;li&gt;Django&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://neorezo.io/"&gt;NeoRezo&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;Web2print marketplace provider&lt;/li&gt;
&lt;li&gt;intranet eshop pour matériel de communication d'entreprise multisite&lt;/li&gt;
&lt;li&gt;Toujours Django&lt;/li&gt;
&lt;li&gt;Intérêt dans le produits AWS lambda&lt;ul&gt;
&lt;li&gt;Framework kalis (?)&lt;ul&gt;
&lt;li&gt;mais pas de terraform&lt;/li&gt;
&lt;li&gt;pas d'asynchronisme&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Création de &lt;a href="https://github.com/gdoumenc/coworks"&gt;Coworks&lt;/a&gt; pour utiliser Python dans AWS Lambda en microservice&lt;/li&gt;
&lt;li&gt;Technologies&lt;ul&gt;
&lt;li&gt;Pas de nouveauté, utiliser les tech au fond, avant de changer&lt;/li&gt;
&lt;li&gt;AWS: API Gateway + Lambda&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.terraform.io/"&gt;Terraform&lt;/a&gt;: génère une infra chez AWS ou autre provider / environnement&lt;/li&gt;
&lt;li&gt;&lt;a href="https://airflow.apache.org/"&gt;Airflow&lt;/a&gt; author, schedule and monitor workflows.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://flask.palletsprojects.com/"&gt;Flask&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;2 niveaux de services&lt;ul&gt;
&lt;li&gt;synchrone / backend&lt;/li&gt;
&lt;li&gt;asynchrone / métier&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Tech microservices&lt;ul&gt;
&lt;li&gt;Stateless&lt;/li&gt;
&lt;li&gt;Full flask&lt;ul&gt;
&lt;li&gt;toute les extensions&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Biz microservice&lt;ul&gt;
&lt;li&gt;statefull&lt;/li&gt;
&lt;li&gt;4 taches&lt;ol&gt;
&lt;li&gt;transform&lt;/li&gt;
&lt;li&gt;call&lt;/li&gt;
&lt;li&gt;listen&lt;/li&gt;
&lt;li&gt;read&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Usage feedback&lt;ul&gt;
&lt;li&gt;catalog complexe&lt;/li&gt;
&lt;li&gt;grande disparité de produits/clients&lt;/li&gt;
&lt;li&gt;~100 tech MS&lt;ul&gt;
&lt;li&gt;~50 Biz MS&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;~25 déploiements / jour&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Bilan&lt;ul&gt;
&lt;li&gt;positif: agilité, modularité, processus parametrable&lt;/li&gt;
&lt;li&gt;Négatif: Performance&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;misc&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.astronomer.io/"&gt;Astronomer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="afpy"/><category term="talk"/><category term="lyon"/><category term="dev"/><category term="python"/><category term="aws"/><category term="aws-lambda"/><category term="serverless"/><category term="web"/><category term="flask"/><category term="micro-services"/><category term="performance"/></entry><entry><title>Clôture du dimanche</title><link href="https://blog.freezed.me/articles/2023/02/cloture-du-dimanche/" rel="alternate"/><published>2023-02-19T15:47:00+01:00</published><updated>2023-02-19T15:47:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2023-02-19:/articles/2023/02/cloture-du-dimanche/</id><summary type="html">&lt;p&gt;Session de clôture de la PyConFR 2023.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;strong&gt;&lt;a href="https://fr.linkedin.com/in/mdebnet"&gt;Marc Debureaux&lt;/a&gt;&lt;/strong&gt; - Salle &lt;a href="https://fr.wikipedia.org/wiki/Alfred_Wegener"&gt;Alfred Wegener&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a href="https://www.pycon.fr/2023/fr/talks/"&gt;Clôture du dimanche&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://www.pycon.fr/2023/"&gt;&lt;img alt="logo PyConFr Bordeaux 2023" src="https://blog.freezed.me/img/200-pycon-fr-23.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Session de clôture de la PyConFR 2023.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h1&gt;Notes personnelles&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Remerciements&lt;/li&gt;
&lt;li&gt;Venez nous voir: afpy.org&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="live-notes"/><category term="pyconfr"/><category term="talk"/><category term="bordeaux"/><category term="keynote"/></entry><entry><title>pip install malware</title><link href="https://blog.freezed.me/articles/2023/02/pip-install-malware/" rel="alternate"/><published>2023-02-19T14:01:00+01:00</published><updated>2023-02-19T14:01:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2023-02-19:/articles/2023/02/pip-install-malware/</id><summary type="html">&lt;p&gt;Almost all projects depend on external packages, but did you know how easy it can be to install something nasty instead of the dependency you want ?&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;strong&gt;&lt;a href="https://uk.linkedin.com/in/maxkahan"&gt;Max Kahan&lt;/a&gt;&lt;/strong&gt; − Salle &lt;a href="https://fr.wikipedia.org/wiki/Rosalind_Franklin"&gt;Rosalind Franklin&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.pycon.fr/2023/"&gt;&lt;img alt="logo PyConFr Bordeaux 2023" src="https://blog.freezed.me/img/200-pycon-fr-23.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;pip install malware: it’s that easy. Almost all projects depend on external packages, but did you know how easy it can be to install something nasty instead of the dependency you want ? I'll be showing this live, as I make malware and infect my own computer with it during the talk !&lt;/p&gt;
&lt;p&gt;You might remember classic typosquatting examples like goggle.com, but it’s now common to see malicious code hidden in spoofed or otherwise fraudulent PyPI packages or nested dependencies. Malware developers can also use techniques like starjacking to appear legitimate, so these unpleasant packages become even more difficult to spot. It’s estimated that over 3 % of packages on PyPI could be using this technique.&lt;/p&gt;
&lt;p&gt;By the end of this talk, you’ll know how to protect yourself when installing and updating dependencies and you’ll leave with a checklist to follow to help you stay safe in future.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://"&gt;Support&lt;/a&gt; / &lt;a href="https://www.pycon.fr/2023/fr/talks/30m.html#pip-install-malware"&gt;Abstract&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Notes personnelles :&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;disclamer&lt;ul&gt;
&lt;li&gt;malware evolve&lt;/li&gt;
&lt;li&gt;not a security talk&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;cost of malware&lt;ul&gt;
&lt;li&gt;4.06 M€ cost of malware&lt;/li&gt;
&lt;li&gt;19% are from&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;developers are now a target&lt;/li&gt;
&lt;li&gt;PyPI risk&lt;ul&gt;
&lt;li&gt;typo squatting&lt;ul&gt;
&lt;li&gt;estimated typosquatted package on PyPI: 3%&lt;/li&gt;
&lt;li&gt;downloaded estimated 0.5%&lt;/li&gt;
&lt;li&gt;real malware targetting &lt;code&gt;requests&lt;/code&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;rrequests&lt;/code&gt;, &lt;code&gt;_equests&lt;/code&gt;,  …&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pycurl&lt;/code&gt; -&amp;gt; &lt;code&gt;libcurl&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;dot-env&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;repo change for a malicious mainten€r&lt;/li&gt;
&lt;li&gt;starjacking&lt;ul&gt;
&lt;li&gt;malwar shows lots of popularity on github&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DEMO&lt;/strong&gt; Do not install this: &lt;a href="https://pypi.org/project/not-the-vonage-python-sdk/"&gt;&lt;code&gt;https://pypi.org/project/not-the-vonage-python-sdk/&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;What ca I do&lt;ul&gt;
&lt;li&gt;consider defensing typosquatting&lt;/li&gt;
&lt;li&gt;preempt you package typo errors&lt;/li&gt;
&lt;li&gt;do no type package name, use config files&lt;/li&gt;
&lt;li&gt;use scanning tools&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="live-notes"/><category term="pyconfr"/><category term="talk"/><category term="bordeaux"/><category term="python"/><category term="security"/><category term="packaging"/></entry><entry><title>Python web performance 101</title><link href="https://blog.freezed.me/articles/2023/02/python-web-performance-101/" rel="alternate"/><published>2023-02-19T12:05:00+01:00</published><updated>2023-02-19T12:05:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2023-02-19:/articles/2023/02/python-web-performance-101/</id><summary type="html">&lt;p&gt;Python web performance 101: uncovering the root causes&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;strong&gt;&lt;a href="https://github.com/aptakhin/"&gt;Alex Ptakhin&lt;/a&gt;&lt;/strong&gt; − Salle &lt;a href="https://fr.wikipedia.org/wiki/Rosalind_Franklin"&gt;Rosalind Franklin&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a href="https://www.pycon.fr/2023/fr/talks/30m.html#python-web-performance-101-unc"&gt;Python web performance 101&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://www.pycon.fr/2023/"&gt;&lt;img alt="logo PyConFr Bordeaux 2023" src="https://blog.freezed.me/img/200-pycon-fr-23.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Web engineers meet issues with performance with fast-growing or even maintaining existing products. It’s always unexpected and we have limited time for decisions. With our hero, we meet real-faced RAM, CPU and IO problems and learn troubleshooting approaches to monolithic and distributed systems.&lt;/p&gt;
&lt;p&gt;We try different existing tools from Python and the cloud ecosystem including, but not limited to: cProfile, yappi, memory-profiler and tracing.&lt;/p&gt;
&lt;p&gt;This talk will be more focused on backend parts and designed for intermediate-level web engineers, but all skill levels are welcome.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://github.com/aptakhin/talks/tree/main/2023-Python-Web-Performance-101"&gt;Support&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Notes personnelles&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;li&gt;Temporary solution: update hardware to get time for debug&lt;/li&gt;
&lt;li&gt;tools&lt;ul&gt;
&lt;li&gt;&lt;code&gt;time.?perf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cProfile&lt;/code&gt; / &lt;a href="https://jiffyclub.github.io/snakeviz/"&gt;&lt;code&gt;snakeziz&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;/!\ mesurement change system behavior&lt;/li&gt;
&lt;li&gt;&lt;code&gt;py-spy&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;yappi&lt;/code&gt; for &lt;code&gt;asyncio&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sys.getsizeof&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tracemalloc&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;memory-profiler&lt;/code&gt;: require code changes&lt;/li&gt;
&lt;li&gt;&lt;code&gt;memray&lt;/code&gt;: looks promising&lt;/li&gt;
&lt;li&gt;Tracing: OpenTelemetry&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Things to remember&lt;ol&gt;
&lt;li&gt;getting time by adding ressources worth it&lt;/li&gt;
&lt;li&gt;Monitor application errors&lt;/li&gt;
&lt;li&gt;Measuring something can change the behaviour of the system&lt;/li&gt;
&lt;li&gt;Tuning is good, and remember, pure Python is not about the performance&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="live-notes"/><category term="pyconfr"/><category term="talk"/><category term="bordeaux"/><category term="python"/><category term="dev"/></entry><entry><title>Documentation, logiciel libre et pérennité en arts numériques</title><link href="https://blog.freezed.me/articles/2023/02/documentation-logiciel-libre-et-perennite-en-arts-numeriques/" rel="alternate"/><published>2023-02-19T11:01:00+01:00</published><updated>2023-02-19T11:01:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2023-02-19:/articles/2023/02/documentation-logiciel-libre-et-perennite-en-arts-numeriques/</id><summary type="html">&lt;p&gt;SUMMARY&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;strong&gt;&lt;a href="https://codame.com/artists/edith-viau"&gt;Édith Viau&lt;/a&gt;&lt;/strong&gt; - Salle [Thomas Edison][tedison]&lt;/p&gt;
&lt;h3&gt;&lt;a href="https://www.pycon.fr/2023/fr/talks/1h.html#documentation-logiciel-libre-e"&gt;Documentation, logiciel libre et pérennité en arts numériques&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://www.pycon.fr/2023/"&gt;&lt;img alt="logo PyConFr Bordeaux 2023" src="https://blog.freezed.me/img/200-pycon-fr-23.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Les arts numériques posent des défis de conservation et de préservation importants, de par leurs contraintes matérielles et logicielles.&lt;/p&gt;
&lt;p&gt;Une utilisation judicieuse de composantes sous licence libre peut favoriser la pérennité des oeuvres réalisées avec les technologies modernes.&lt;/p&gt;
&lt;p&gt;Une documentation technique adéquate constitue un facteur de succès important pour un tel projet. Voici quelques réflexions sur le sujet ainsi que des lignes directrices pour vous guider, basés sur notre expérience avec Sphinx, le logiciel utilisé pour la documentation de Python, au Metalab, le laboratoire de recherche et développement de la Société des arts technologiques (Montréal, Québec, Canada).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://"&gt;Support&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Notes personnelles&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;presentation&lt;ul&gt;
&lt;li&gt;contributrice traduction python&lt;/li&gt;
&lt;li&gt;responsable documentation au &lt;a href="https://sat.qc.ca/en/metalab"&gt;Metalab de la Société des Arts Technologique (SAT)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Comment commencer une doc&lt;ul&gt;
&lt;li&gt;pratique: on part de la matière et&lt;/li&gt;
&lt;li&gt;technique&lt;/li&gt;
&lt;li&gt;pour les AN&lt;/li&gt;
&lt;li&gt;il faut choisir (tentative d'épuisement d'un lieu pParisien G Perec 1975)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Qu'est ce qui est important?&lt;ul&gt;
&lt;li&gt;documentation vs. interface: machine Antycithère&lt;/li&gt;
&lt;li&gt;essentiel: le pourquoi et le quoi&lt;/li&gt;
&lt;li&gt;conseils doc utile sans être complète&lt;ul&gt;
&lt;li&gt;écrire pour soi: ce que j'aurai aimé quand j'ai commencé&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sphinx-quickstart&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;documenter celon le cas d'usage&lt;ul&gt;
&lt;li&gt;guide de refence ou tuto?&lt;/li&gt;
&lt;li&gt;Hello world ou exemple complexe?&lt;/li&gt;
&lt;li&gt;utilisateur débutant ou confirmé&lt;/li&gt;
&lt;li&gt;spécificité des AN: des artistes en résidences&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;éditer pour les autres&lt;ul&gt;
&lt;li&gt;évaluer rapidement l'outil&lt;/li&gt;
&lt;li&gt;comment il s'imbrique avec les outils existant'&lt;/li&gt;
&lt;li&gt;tuto et démo pour artistes&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Pourquoi documenter lorsque l'on fait le dev?&lt;ul&gt;
&lt;li&gt;améliorer l'existant&lt;/li&gt;
&lt;li&gt;clarifier ses idées&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;On documente quoi?&lt;ul&gt;
&lt;li&gt;la carte ou le territoire?&lt;/li&gt;
&lt;li&gt;ennoncé les choix arbitraires des choix motivés&lt;/li&gt;
&lt;li&gt;garder le lien avec les communautés&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Exemple #1 &lt;a href="http://sat-metalab.gitlab.io/splash/doxygen/index.html"&gt;&lt;code&gt;splash&lt;/code&gt;&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;minimiser les prérequis: avoir un objet modélisable disponible partout?&lt;ul&gt;
&lt;li&gt;cube: objet simple mais peu de personne en ont a dspo&lt;/li&gt;
&lt;li&gt;un coin de mur! tout le monde en a un et on peut joindre un modèle 3D dans la doc que tout le monde pourra utiliser&lt;/li&gt;
&lt;li&gt;construire sur les acquis:  on commence avec un projecteur, plus de projecteurs dans des étapes suivantes&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;REX&lt;/li&gt;
&lt;li&gt;Exemple #2 &lt;a href="https://gitlab.com/sat-mtl/tools/livepose"&gt;&lt;code&gt;LivePose&lt;/code&gt;&lt;/a&gt;: ML pour AN&lt;ul&gt;
&lt;li&gt;besoin de communiquer avec d'autres outils&lt;/li&gt;
&lt;li&gt;rédiger un liens JS&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt; comment faire une doc utile sans être complète&lt;ul&gt;
&lt;li&gt;ce que l'on fait&lt;/li&gt;
&lt;li&gt;pourquoi on le fait'&lt;/li&gt;
&lt;li&gt;ce qui n'est pas dans le code (carte vs. territoire)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Références&lt;ul&gt;
&lt;li&gt;Blender docs: pair documenting&lt;/li&gt;
&lt;li&gt;Diàtaxis: architecture de la documentation&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=s6lXWgnTmRE"&gt;How to make sense of any mess&lt;/a&gt;: Quand on a beaucoup de doc à (re)structurer…&lt;/li&gt;
&lt;li&gt;Write the Docs&lt;/li&gt;
&lt;li&gt;Rédaction technique en information - UdeSherbrooke&lt;/li&gt;
&lt;li&gt;Rafael Lozano-Hemmer: Best practices for conservation of media arts texte - (vidéo est à voir)&lt;/li&gt;
&lt;li&gt;Doc Sphinx&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Questinos:&lt;ul&gt;
&lt;li&gt;intéret de git: oui mais peut-être plus encore de la CI&lt;/li&gt;
&lt;li&gt;test s'assurant que l'outil n'a pas été mis a jour sans la doc: non, mais c'est un sujet en discussion dans la communauté Read the docs&lt;/li&gt;
&lt;li&gt;mesurer si les utilisateurs ont été perdu ou gagné? Collecte de retour utilisateurs multi-canaux&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="live-notes"/><category term="pyconfr"/><category term="talk"/><category term="bordeaux"/><category term="python"/><category term="documentation"/><category term="logiciel-libre"/></entry><entry><title>Trying no GIL on scientific programming</title><link href="https://blog.freezed.me/articles/2023/02/trying-no-gil-on-scientific-programming/" rel="alternate"/><published>2023-02-19T10:33:00+01:00</published><updated>2023-02-19T10:33:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2023-02-19:/articles/2023/02/trying-no-gil-on-scientific-programming/</id><summary type="html">&lt;p&gt;What is no-gil Python and how it may improve the performance of some scientific calculations&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;strong&gt;&lt;a href="https://cheuk.dev/"&gt;Cheuk Ting Ho&lt;/a&gt;&lt;/strong&gt; - Salle &lt;a href="https://fr.wikipedia.org/wiki/Thomas_Edison"&gt;Thomas Edison&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a href="https://www.pycon.fr/2023/fr/talks/30m.html#trying-no-gil-on-scientific-pr"&gt;Trying no GIL on scientific programming&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://www.pycon.fr/2023/"&gt;&lt;img alt="logo PyConFr Bordeaux 2023" src="https://blog.freezed.me/img/200-pycon-fr-23.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In this talk, we will have a look at what is no-gil Python and how it may improve the performance of some scientific calculations. First of all, we will touch upon the background knowledge of the Python GIL, what is it and why it is needed. On the contrary, why it is stopping multi-threaded CPU processes to take advantage of multi-core machines.&lt;/p&gt;
&lt;p&gt;After that, we will have a look at no-gil Python, a fork of CPython 3.9 by Same Gross. How it provides an alternative to using Python with no GIL and demonstrates it could be the future of the newer versions of Python. With that, we will try out this version of Python in some popular yet calculation-heavy algorithms in scientific programming and data sciences e.g. PCA, clustering, categorization and data manipulation with Scikit-learn and Pandas. We will compare the performance of this no-gil version with the original standard CPython distribution.&lt;/p&gt;
&lt;p&gt;This talk is for Pythonistas who have intermediate knowledge of Python and are interested in using Python for scientific programming or data science. It may shine some light on having a more efficient way of using Python in their tasks and interest in trying the no-gil version of Python.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://"&gt;Support&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Notes personnelles :&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GIL&lt;ul&gt;
&lt;li&gt;Global Interpreter Lock&lt;/li&gt;
&lt;li&gt;only a single thread is used to run Python&lt;/li&gt;
&lt;li&gt;limit access to only one oobject by one thread&lt;/li&gt;
&lt;li&gt;driver metapnor&lt;/li&gt;
&lt;li&gt;other program have multiple locks tools (more complicated)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;No GIL?&lt;ul&gt;
&lt;li&gt;4 attempts before (greg stein 2016, Adam Olsen 2007, Larry Hasting 2016)&lt;/li&gt;
&lt;li&gt;Sam Gross&lt;/li&gt;
&lt;li&gt;Why?: N cores == speed x N&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Challenges&lt;ul&gt;
&lt;li&gt;reference counting / bias reference counting&lt;/li&gt;
&lt;li&gt;make commonly used object immortal (no ref count)&lt;/li&gt;
&lt;li&gt;make some objects deferred ref counting (add counts at GC)&lt;/li&gt;
&lt;li&gt;thread safety for objects (&lt;code&gt;dict()&lt;/code&gt; &amp;amp; &lt;code&gt;°list()&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;using small locks&lt;/li&gt;
&lt;li&gt;manually write the lock orders using CPython API&lt;/li&gt;
&lt;li&gt;replace built-in allocator &lt;code&gt;pynalloc&lt;/code&gt; with &lt;code&gt;mimalloc&lt;/code&gt; (thread safety)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Scientific uses?&lt;/li&gt;
&lt;li&gt;my tries&lt;ul&gt;
&lt;li&gt;on &lt;a href="https://github.com/Cheukting/test-nogil"&gt;Github &lt;code&gt;Cheukting/test-nogil&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;no-GIL not really faster in most experiment&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Why didn't see a improvement&lt;ul&gt;
&lt;li&gt;C extention already use C multi-threading&lt;/li&gt;
&lt;li&gt;C extentions may expect a GIL&lt;/li&gt;
&lt;li&gt;Compatibilty issues?&lt;/li&gt;
&lt;li&gt;tries only on dual cores&lt;/li&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;notes&lt;ul&gt;
&lt;li&gt;Sam Groth Europython keynote&lt;/li&gt;
&lt;li&gt;Blog post Lukasz Langa&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="live-notes"/><category term="pyconfr"/><category term="talk"/><category term="bordeaux"/><category term="python"/><category term="dev"/><category term="performance"/></entry><entry><title>Assemblée générale de l’AFPy</title><link href="https://blog.freezed.me/articles/2023/02/assemblee-generale-de-lafpy/" rel="alternate"/><published>2023-02-19T09:22:00+01:00</published><updated>2023-02-19T09:22:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2023-02-19:/articles/2023/02/assemblee-generale-de-lafpy/</id><summary type="html">&lt;p&gt;SUMMARY&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;strong&gt;&lt;a href="https://fr.linkedin.com/in/mdebnet"&gt;Marc Debureaux&lt;/a&gt;&lt;/strong&gt; - Salle &lt;a href="https://fr.wikipedia.org/wiki/Alfred_Wegener"&gt;Alfred Wegener&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a href="https://www.pycon.fr/2023/fr/talks/plenary.html#assemblee-generale-de-lafpy"&gt;Assemblée générale de l’AFPy&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://www.pycon.fr/2023/"&gt;&lt;img alt="logo PyConFr Bordeaux 2023" src="https://blog.freezed.me/img/200-pycon-fr-23.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Assemblée générale de l'Association Francophone Python, organisatrice de l'événement. Vous pouvez venir pour connaître le bilan de cette année et participer aux choix des prochaines éditions. Les membres à jour de cotisation peuvent également prendre part aux votes et candidater pour faire partie du comité de direction.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Notes personnelles :&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bilan moral&lt;ul&gt;
&lt;li&gt;reprise pyconfr après 2 ans d'arrêt&lt;/li&gt;
&lt;li&gt;pas de problème majeurs&lt;/li&gt;
&lt;li&gt;Strasbourg n'a pas pu se concrétiser pour pyconfr 22/23 pour cause de travaux réalisé pendant la CoViD&lt;/li&gt;
&lt;li&gt;Projets de partenariat avec l'&lt;a href="https://www.europython-society.org/"&gt;Euro Python Society&lt;/a&gt;: Collaboration informelle à développer&lt;/li&gt;
&lt;li&gt;Réflexion autour de la convergence entre les engagements associatifs des membres&lt;/li&gt;
&lt;li&gt;Bilan positifs&lt;/li&gt;
&lt;li&gt;2 abstentions&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Bilan financier&lt;ul&gt;
&lt;li&gt;Comptes publics: https://git.afpy.org/afpy/gestion&lt;/li&gt;
&lt;li&gt;2022, année blanche, fond de roulement 1210€&lt;/li&gt;
&lt;li&gt;Plus de serveur à payé suite au sponsoring de &lt;a href="https://gandi.net"&gt;Gandi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Bilan PyConFr excédentaire (provisoire) ~30k€&lt;/li&gt;
&lt;li&gt;PyConFr 19 ~40k€: augmentation générales des tarifs. Prestations non retenu en 2023: salle réception offerte, pas de transcription dans les vidéos&lt;/li&gt;
&lt;li&gt;2 abstentions&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Status&lt;ul&gt;
&lt;li&gt;Invalidation de la préfecture: retour sur le contexte&lt;/li&gt;
&lt;li&gt;modif: art. 1 (domiciliation), art.9  (nombres de membres et durée des mandats)&lt;/li&gt;
&lt;li&gt;2 abstentions&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Renouvelement du comité directeur&lt;ul&gt;
&lt;li&gt;démissionnaire de fait: Marc, Lucie&lt;/li&gt;
&lt;li&gt;candidats: Nicolas Ledez, Lucie Anglade, Marc Debureaux&lt;ul&gt;
&lt;li&gt;Présidente: Lucie Anglade&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="live-notes"/><category term="pyconfr"/><category term="bordeaux"/><category term="python"/><category term="collectif"/></entry><entry><title>Clôture du samedi</title><link href="https://blog.freezed.me/articles/2023/02/cloture-du-samedi/" rel="alternate"/><published>2023-02-18T17:09:00+01:00</published><updated>2023-02-18T17:09:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2023-02-18:/articles/2023/02/cloture-du-samedi/</id><summary type="html"/><content type="html">&lt;p&gt;Par &lt;strong&gt;&lt;a href="https://fr.linkedin.com/in/mdebnet"&gt;Marc Debureaux&lt;/a&gt;&lt;/strong&gt; - Salle &lt;a href="https://fr.wikipedia.org/wiki/Alfred_Wegener"&gt;Alfred Wegener&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a href="https://www.pycon.fr/2023/fr/talks/plenary.html#cloture-du-samedi-saturday-clo"&gt;Clôture du samedi&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://www.pycon.fr/2023/"&gt;&lt;img alt="logo PyConFr Bordeaux 2023" src="https://blog.freezed.me/img/200-pycon-fr-23.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Session de clôture de la journée du samedi.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h1&gt;Notes personnelles&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Récupération des tours de cou en fin d'évenement, pour lavage réutilisation&lt;/li&gt;
&lt;li&gt;Appel&lt;ul&gt;
&lt;li&gt;aux volontaires pour rejoindre l'association&lt;/li&gt;
&lt;li&gt;aux futurs site pour recevoir une prochaine éditions&lt;/li&gt;
&lt;li&gt;aux rassemblements locaux&lt;/li&gt;
&lt;li&gt;aux&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;400 membres AFPy à ce jours&lt;/li&gt;
&lt;li&gt;17-21 juillet: &lt;a href="https://europython.eu"&gt;EuroPyton Prague&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;Participation payante&lt;/li&gt;
&lt;li&gt;Bourse possible&lt;/li&gt;
&lt;li&gt;CFP: 6 mars&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="live-notes"/><category term="pyconfr"/><category term="talk"/><category term="bordeaux"/><category term="python"/><category term="keynote"/></entry><entry><title>Histoires d'un admin stockage perfectionniste sous pression</title><link href="https://blog.freezed.me/articles/2023/02/histoires-dun-admin-stockage-perfectionniste-sous-pression/" rel="alternate"/><published>2023-02-18T14:30:00+01:00</published><updated>2023-02-18T14:30:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2023-02-18:/articles/2023/02/histoires-dun-admin-stockage-perfectionniste-sous-pression/</id><summary type="html">&lt;p&gt;ZFS est un outil passionnant qui va au-delà d'un système de fichier.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Le 18 février 2023 j'ai partagé cette présentation à Bordeaux dans le cadre de la &lt;a href="https://www.pycon.fr/2023/fr/talks/1h.html#zfs-un-stockage-fiable-puissan" title="Histoires d'un admin stockage perfectionniste sous pression - pycon.fr"&gt;PyConFr 2023&lt;/a&gt;, en salle &lt;a href="https://fr.wikipedia.org/wiki/Henri_Poincaré" title="Henri Poincaré - fr.wikipedia.org"&gt;Henri Poincaré&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.pycon.fr/2023/" title="Le site de la PyConFr 2023"&gt;&lt;img alt="logo PyConFr Bordeaux 2023" src="https://blog.freezed.me/img/200-pycon-fr-23.png" title="Le logo de la PyConFr 2023"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://www.pycon.fr/2023/fr/talks/1h.html#zfs-un-stockage-fiable-puissan" title="Histoires d'un admin stockage perfectionniste sous pression - pycon.fr"&gt;Présentation&lt;/a&gt; | &lt;a href="https://dl.afpy.org/pycon-fr-23//Fred%20-%20ZFS%20un%20stockage%20fiable%2C%20puissant%20et%20accessible.mp4" title="Captation de la présentation 'Histoires d'un admin stockage perfectionniste sous pression' - dl.afpy.org"&gt;captation&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;J'y ai présenté &lt;a href="https://openzfs.org" title="Le site de l'OpenZFS project"&gt;ZFS&lt;/a&gt; un système de fichier qui est aussi un gestionnaire de volumes.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;ZFS&lt;/code&gt; est un outil passionnant qui va au-delà d'un système de fichier. Cette présentation se veut techniquement accessible et vise à partager ma découverte de cet outil pour (peut-être) vous donner envie de l'essayer.&lt;/p&gt;
&lt;p&gt;Né au début des années 2000 au sein de &lt;em&gt;Sun Microsytems&lt;/em&gt;, ZFS est aujourd'hui développé au travers du projet &lt;a href="https://openzfs.org" title="Le site de l'OpenZFS project"&gt;openZFS&lt;/a&gt; pour les noyaux &lt;em&gt;Linux&lt;/em&gt; et &lt;em&gt;freeBSD&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://openzfs.org" title="Le site de l'OpenZFS project"&gt;&lt;img alt="openzfs logo" src="https://blog.freezed.me/img/openzfs.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Supports de présentation&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://blog.freezed.me/pdf/20230218-pyconfr-openzfs-fr.pdf"&gt;🇫🇷&lt;/a&gt; |
&lt;a href="https://blog.freezed.me/pdf/20230218-pyconfr-openzfs-en.pdf"&gt;🇬🇧&lt;/a&gt; |
&lt;a href="https://gitlab.com/ftalk/openzfs/-/tree/pyconfr-23?ref_type=tags"&gt;📝 &lt;code&gt;ftalk/openzfs&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Captation&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://dl.afpy.org/pycon-fr-23//Fred%20-%20ZFS%20un%20stockage%20fiable%2C%20puissant%20et%20accessible.mp4" title="Captation de la présentation 'Histoires d'un admin stockage perfectionniste sous pression' - dl.afpy.org"&gt;&lt;img alt="Vignette de la captation de la présentation 'Histoires d'un admin stockage perfectionniste sous pression'" src="https://blog.freezed.me/img/20230218-pyconfr-openzfs-fr.jpg"&gt;&lt;/a&gt;&lt;/p&gt;</content><category term="Conférences"/><category term="talk"/><category term="bordeaux"/><category term="python"/><category term="storage"/><category term="zfs"/><category term="admin"/><category term="cli"/><category term="backup"/><category term="pyconfr"/></entry><entry><title>Writing Great Test Documentation</title><link href="https://blog.freezed.me/articles/2023/02/writing-great-test-documentation/" rel="alternate"/><published>2023-02-18T14:00:00+01:00</published><updated>2023-02-18T14:00:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2023-02-18:/articles/2023/02/writing-great-test-documentation/</id><summary type="html">&lt;p&gt;SUMMARY&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;strong&gt;&lt;a href="https://jdkandersson.com"&gt;David Andersson&lt;/a&gt;&lt;/strong&gt; - Salle &lt;a href="https://fr.wikipedia.org/wiki/Henri_Poincaré"&gt;Henri Poincaré&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a href="https://www.pycon.fr/2023/fr/talks/30m.html#writing-great-test-documentati"&gt;Writing Great Test Documentation&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://www.pycon.fr/2023/"&gt;&lt;img alt="logo PyConFr Bordeaux 2023" src="https://blog.freezed.me/img/200-pycon-fr-23.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Have you ever needed to understand a new project and started reading the tests only to find that you have no idea what the tests are doing? In this talk we will discuss how to write great test documentation to make this a thing of the past! Writing great test documentation as you are writing tests will improve your tests and help you and others reading the tests later. We will first look at why test documentation is important both when writing tests and for future readers, then look at a framework that helps give some structure to your test documentation. Next, we will look at a showcase of the flake8-test-docs tool that automates test documentation checks to ensure your documentation is great! Finally we briefly discuss how this framework would apply in more advanced cases, such as when you are using fixtures or parametrising tests.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://"&gt;Support&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Notes personnelles&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Presentation&lt;ul&gt;
&lt;li&gt;Travailpour Cannonical&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Pourquoi documenter ses test?&lt;ul&gt;
&lt;li&gt;démarche similaire au TDD&lt;/li&gt;
&lt;li&gt;exprimer l'intention avant le code&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Documenter les étapes: prérequis, objectif d'execution et résultat attendus&lt;/li&gt;
&lt;li&gt;Example&lt;ul&gt;
&lt;li&gt;utiliser les docstring et documenter en 3 paragraphes reprenant les 3 étapes:&lt;ol&gt;
&lt;li&gt;prérequis&lt;/li&gt;
&lt;li&gt;execution souhaité&lt;/li&gt;
&lt;li&gt;résultat attendu&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Requirements&lt;/li&gt;
&lt;li&gt;Formaliser la structure de la documentation&lt;ul&gt;
&lt;li&gt;nommer le paragraphes&lt;/li&gt;
&lt;li&gt;indenter quand le pragraphe continue&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Automatiser&lt;ul&gt;
&lt;li&gt;&lt;code&gt;flake8-test-docs&lt;/code&gt;: utilisé depuis plusieurs mois&lt;ul&gt;
&lt;li&gt;docstring manquant&lt;/li&gt;
&lt;li&gt;paragraphe manquant&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="live-notes"/><category term="pyconfr"/><category term="talk"/><category term="bordeaux"/><category term="python"/><category term="méthode"/><category term="dev"/><category term="tdd"/></entry><entry><title>Rejoignez le Fediverse, ajoutez ActivityPub à votre site !</title><link href="https://blog.freezed.me/articles/2023/02/rejoignez-le-fediverse-ajoutez-activitypub-a-votre-site/" rel="alternate"/><published>2023-02-18T12:08:00+01:00</published><updated>2023-02-18T12:08:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2023-02-18:/articles/2023/02/rejoignez-le-fediverse-ajoutez-activitypub-a-votre-site/</id><summary type="html">&lt;p&gt;SUMMARY&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;strong&gt;&lt;a href="https://deuchnord.fr/"&gt;Jérôme Tanghe&lt;/a&gt;&lt;/strong&gt; − Salle &lt;a href="https://fr.wikipedia.org/wiki/Rosalind_Franklin"&gt;Rosalind Franklin&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a href="https://www.pycon.fr/2023/fr/talks/30m.html#rejoignez-le-fediverse-ajoutez"&gt;Rejoignez le Fediverse, ajoutez ActivityPub à votre site !&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://www.pycon.fr/2023/"&gt;&lt;img alt="logo PyConFr Bordeaux 2023" src="https://blog.freezed.me/img/200-pycon-fr-23.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;En 2022, Elon Musk rachète Twitter. S'ensuit une série de décisions désastreuses amenant de nombreux internautes à se réfugier sur Mastodon, un réseau social qui revendique ne pas être à vendre, et qui a la particularité d'être distribué : le logiciel, publié sous licence libre, est installé sur des serveurs administrés par des volontaires, capables de communiquer entre eux grâce à un protocole nommé ActivityPub&lt;/p&gt;
&lt;p&gt;Ce protocole est par ailleurs également utilisé par de plus en plus nombreux logiciels, comme Pixelfed (partage de photos), PeerTube (vidéos) ou Writely (blogs), ce qui les rend capables de communiquer entre eux, créant le "Fediverse".&lt;/p&gt;
&lt;p&gt;Durant cette conférence, je vous expliquerai comment fonctionne ce protocole et comment l'implémenter sur votre propre site.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h1&gt;Notes personnelles&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Présentation&lt;/li&gt;
&lt;li&gt;Évolution de l'usage de mastodon&lt;/li&gt;
&lt;li&gt;Fediverse&lt;/li&gt;
&lt;li&gt;ActivityPub&lt;ul&gt;
&lt;li&gt;basé sur REST    p JSON-LD&lt;/li&gt;
&lt;li&gt;communication inter-serveurs&lt;/li&gt;
&lt;li&gt;peut faire exploser le cerveau&lt;/li&gt;
&lt;li&gt;n'est pas reservé aux réseaux sociaux'&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Brancher le blg.afpy.org au Fediverse&lt;ul&gt;
&lt;li&gt;&lt;code&gt;@actualites@afpy.org&lt;/code&gt; =&amp;gt;  &lt;code&gt;@&amp;lt;USER&amp;gt;@&amp;lt;SERVER&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;acteur du contenu: &lt;code&gt;&amp;lt;USER&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;webfinger&lt;/em&gt;: permet la découvrabilité&lt;/li&gt;
&lt;li&gt;&lt;em&gt;outbox&lt;/em&gt;: un boite au lettre extérieur, visible publiquement&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Flux ActivityPub mis à jour avec un flux RSS&lt;/li&gt;
&lt;li&gt;pour les sites statique aussi&lt;/li&gt;
&lt;li&gt;liens complémentaires&lt;ul&gt;
&lt;li&gt;Spécification officielle : https://www.w3.org/TR/activitypub/ (très lisible, profitez-en !)&lt;/li&gt;
&lt;li&gt;La documentation de Mastodon pour signer ses messages : https://docs.joinmastodon.org/spec/security/&lt;/li&gt;
&lt;li&gt;Pour suivre les statistiques du Fediverse : https://fediverse.observer&lt;/li&gt;
&lt;li&gt;Le projet f2ap : https://github.com/Deuchnord/f2ap&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/capjamesg/micropub"&gt;Micropub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="live-notes"/><category term="pyconfr"/><category term="talk"/><category term="bordeaux"/><category term="python"/><category term="activitypub"/><category term="dev"/><category term="web"/><category term="innovation"/><category term="privacy"/></entry><entry><title>Faire du Python professionnel</title><link href="https://blog.freezed.me/articles/2023/02/faire-du-python-professionnel/" rel="alternate"/><published>2023-02-18T10:57:00+01:00</published><updated>2023-02-18T10:57:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2023-02-18:/articles/2023/02/faire-du-python-professionnel/</id><summary type="html">&lt;p&gt;Arrêtez de bidouiller!&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;strong&gt;&lt;a href="https://fr.linkedin.com/in/eric-dasse-b68a56119"&gt;Éric Dasse&lt;/a&gt;&lt;/strong&gt; &amp;amp; &lt;strong&gt;&lt;a href="https://dmerej.info/blog/pages/about/"&gt;Dimitri Merejkowsky&lt;/a&gt;&lt;/strong&gt; - Salle &lt;a href="https://fr.wikipedia.org/wiki/Charles_Darwin"&gt;Charles Darwin&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a href="https://www.pycon.fr/2023/fr/talks/"&gt;Faire du Python professionnel&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://www.pycon.fr/2023/"&gt;&lt;img alt="logo PyConFr Bordeaux 2023" src="https://blog.freezed.me/img/200-pycon-fr-23.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Python a la réputation d'être un langage de programmation avec une grande simplicité syntaxique. L'avantage, c'est qu'il est facile à apprendre et donc à mettre en place dans un projet même avec relativement peu d'expérience. Il donne la possibilité d'écrire du code presque exactement comme il nous apparait à l'esprit.&lt;/p&gt;
&lt;p&gt;Toutefois, cette même simplicité peut aussi jouer en la défaveur d'un projet sur le long terme si certaines bonnes pratiques ne sont pas mises en place, soit parce qu'on n'est pas informé de ces bonnes pratiques, soit parce qu'on pense gagner du temps en les ignorant.&lt;/p&gt;
&lt;p&gt;Dans cette présentation, on vous propose de découvrir comment donner un ton plus professionnel à votre code Python afin de construire vos projets sur de bonnes bases.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://"&gt;Support&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Notes personnelles&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;présentation&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.arolla.fr/"&gt;arolla - software gardening&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Python craft&lt;ul&gt;
&lt;li&gt;syntaxe simple&lt;/li&gt;
&lt;li&gt;beaucoup de liberté et ça peut &lt;strong&gt;beaucoup&lt;/strong&gt; dégénérer&lt;/li&gt;
&lt;li&gt;je peu faire beaucoup de très mauvaise qualité&lt;/li&gt;
&lt;li&gt;mais aussi de très bonne qualité&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Bidouiller c'est quoi?&lt;ul&gt;
&lt;li&gt;juste marche&lt;/li&gt;
&lt;li&gt;sans considérere le futur, meilleure approche&lt;/li&gt;
&lt;li&gt;du script&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;le danger:&lt;ul&gt;
&lt;li&gt;maintenance complexe&lt;/li&gt;
&lt;li&gt;empoisonne la collaboration&lt;/li&gt;
&lt;li&gt;dette technique&lt;/li&gt;
&lt;li&gt;cercle vicieux, théorie des tas/vitre cassé&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;pourquoi le &lt;em&gt;clean-code&lt;/em&gt;?&lt;ul&gt;
&lt;li&gt;intention plus claire&lt;/li&gt;
&lt;li&gt;pour ajouter plus facilement du code&lt;/li&gt;
&lt;li&gt;éviter la peur de son propre code&lt;/li&gt;
&lt;li&gt;debug&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://peps.python.org/pep-0020/"&gt;Zen of Python - PEP 02&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;usage des &lt;code&gt;fstring&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;remplacer &lt;code&gt;get&lt;/code&gt; qui est trop répendu&lt;/li&gt;
&lt;li&gt;usage des clés explicites, sans relire le &lt;code&gt;dict()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://peps.python.org/pep-0008/"&gt;PEP 8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Conventions&lt;ul&gt;
&lt;li&gt;&lt;code&gt;_prefix&lt;/code&gt; pour indiqué le caractère privé&lt;/li&gt;
&lt;li&gt;&lt;code&gt;snake_case_for_variable_and_function&lt;/code&gt;, &lt;code&gt;CapitalizedCaseForClasses&lt;/code&gt;, &lt;code&gt;CONSTANTE_CAPITALIZED&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;refleter le métier dans les noms&lt;/li&gt;
&lt;li&gt;éviter les abbreviations&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;recommandations&lt;ul&gt;
&lt;li&gt;ne pas comparer les booleens &lt;code&gt;if valeur&lt;/code&gt; au lien de &lt;code&gt;if valeur == True&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;is not&lt;/code&gt; au lieu de &lt;code&gt;not … is&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;préférer le &lt;code&gt;startswith&lt;/code&gt; &amp;amp; &lt;code&gt;endswith&lt;/code&gt; au lieu du &lt;em&gt;slicing&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;préférer les &lt;em&gt;comprehension lists&lt;/em&gt; (mais pas trop non plus)&lt;/li&gt;
&lt;li&gt;utiliser le multiparadigme&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;la POO&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Classe :&lt;/strong&gt; Cas d'usage pertinent ou pas&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Encapsulation :&lt;/strong&gt; protection de variable (càd non modifiable par accident)&lt;/li&gt;
&lt;li&gt;Les fonctions sont des objets et manipulable comme telles&lt;/li&gt;
&lt;li&gt;Python aime les &lt;em&gt;design pattern&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Des fonctionnalités attendue&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;outils:&lt;ul&gt;
&lt;li&gt;&lt;code&gt;black&lt;/code&gt;, &lt;code&gt;flake8&lt;/code&gt;, &lt;code&gt;mypy&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;flake8&lt;/code&gt; flake8-comprehention&lt;/li&gt;
&lt;li&gt;&lt;code&gt;black&lt;/code&gt; a été testé avec différents paramètres pour choisir les paramètres par défaut&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mypy&lt;/code&gt;: &lt;em&gt;exemple dans les slides&lt;/em&gt;, n'intervient pas sur le &lt;em&gt;runmtime&lt;/em&gt;&lt;ul&gt;
&lt;li&gt;&lt;em&gt;static python&lt;/em&gt; = &lt;code&gt;python&lt;/code&gt; + &lt;code&gt;mypy&lt;/code&gt; en mode strict&lt;ul&gt;
&lt;li&gt;ça devient un autre language&lt;/li&gt;
&lt;li&gt;vérifier si ça vaut le coup&lt;/li&gt;
&lt;li&gt;demande des concepts avancé (covariance, contravariance, dependant types, …)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;-&amp;gt; on trouve des bug, du code à améliorer, refacto moins risqué&lt;/li&gt;
&lt;li&gt;-&amp;gt; évitez la complexité, les annotations sans les &lt;em&gt;lint&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;-&amp;gt; les bons arguments contres: https://dev.to/etenil/why-i-stay-away-from-python-type-annotations-2041&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;pas de démo&lt;/li&gt;
&lt;li&gt;conclusion&lt;ul&gt;
&lt;li&gt;vous avez le choix avec python&lt;/li&gt;
&lt;li&gt;on peut allez très loin en restant sur python à condition d'ajouter de la rigueur et de l'outillage&lt;/li&gt;
&lt;li&gt;on a pas parlé des test, de SOLID, &lt;em&gt;clean-code&lt;/em&gt;, …&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="live-notes"/><category term="pyconfr"/><category term="talk"/><category term="bordeaux"/><category term="python"/><category term="dev"/><category term="méthode"/></entry><entry><title>Je suis nul·le !</title><link href="https://blog.freezed.me/articles/2023/02/je-suis-nulle/" rel="alternate"/><published>2023-02-18T10:35:00+01:00</published><updated>2023-02-18T10:35:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2023-02-18:/articles/2023/02/je-suis-nulle/</id><summary type="html">&lt;p&gt;Je ne sais rien faire de vraiment utile. Toutes les personnes que je côtoie sont bien meilleures que moi.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;strong&gt;&lt;a href="https://"&gt;Guillaume Ayoub&lt;/a&gt;&lt;/strong&gt; - Salle &lt;a href="https://fr.wikipedia.org/wiki/Henri_Poincaré"&gt;Henri Poincaré&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a href="https://www.pycon.fr/2023/fr/talks/30m.html#je-suis-nul-le"&gt;Je suis nul·le !&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://www.pycon.fr/2023/"&gt;&lt;img alt="logo PyConFr Bordeaux 2023" src="https://blog.freezed.me/img/200-pycon-fr-23.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Je ne sais rien faire de vraiment utile. Toutes les personnes que je côtoie sont bien meilleures que moi. C’est pour cela que je n’ai rien à dire d’intéressant, et encore moins le talent pour faire une conférence. Si vous avez le sentiment d’être un peu comme moi, venez m’aider !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://"&gt;Support&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Notes personnelles&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;présentation trop rapide&lt;/li&gt;
&lt;li&gt;je suis nul dans pleins de situations&lt;ul&gt;
&lt;li&gt;chercher des financement pour un logiciel libre&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;ce que je fais ne sert a rien&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;trop compliqué&lt;/li&gt;
&lt;li&gt;ça n'à aucune utilité pour la société&lt;/li&gt;
&lt;li&gt;ma famille croit que je répare dis fours à micro-onde&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;je n'ai aucune légitimité&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;mes diplômes sont insufisant&lt;/li&gt;
&lt;li&gt;trop peu d'expérience&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;je n'ai jamais rien inventé&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;je n'ai jamais eu une idée révolutionnaire&lt;/li&gt;
&lt;li&gt;mon code est banal&lt;/li&gt;
&lt;li&gt;ma vie estune suite de lecture de de tuto et de doc&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;la terre entière est meilleure que moi&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Conclusion alernative…&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="live-notes"/><category term="pyconfr"/><category term="talk"/><category term="bordeaux"/><category term="python"/><category term="réparation"/><category term="électroménager"/><category term="méthode"/></entry><entry><title>Django Admin comme framework pour développer des outils internes</title><link href="https://blog.freezed.me/articles/2023/02/django-admin-comme-framework-pour-developper-des-outils-internes/" rel="alternate"/><published>2023-02-18T10:05:00+01:00</published><updated>2023-02-18T10:05:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2023-02-18:/articles/2023/02/django-admin-comme-framework-pour-developper-des-outils-internes/</id><summary type="html">&lt;p&gt;Comment remplacer Excel©® par Django Admin&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;strong&gt;&lt;a href="https://romain-clement.net/"&gt;Romain Clement&lt;/a&gt;&lt;/strong&gt; - Salle &lt;a href="https://fr.wikipedia.org/wiki/Charles_Darwin"&gt;Charles Darwin&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a href="https://www.pycon.fr/2023/fr/talks/30m.html#django-admin-comme-framework-p"&gt;Django Admin comme framework pour développer des outils internes&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://www.pycon.fr/2023/"&gt;&lt;img alt="logo PyConFr Bordeaux 2023" src="https://blog.freezed.me/img/200-pycon-fr-23.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Si vous développez des applications avec le framework Django, vous connaissez sûrement Django Admin pour introspecter votre base de données et effectuer quelques opérations de maintenance. Mais savez-vous qu'il est possible de développer des applications complètes grâce à Django Admin ?&lt;/p&gt;
&lt;p&gt;Django Admin possède des secrets bien gardés mais une fois découverts, beaucoup de possibilités s'offrent à nous. De la gestion de permissions avancée à l'ajout de pages et formulaires personnalisés en passant par l'intégration d'automatisations, développer des outils métiers devient un jeu d'enfant.&lt;/p&gt;
&lt;p&gt;Dans cette présentation, je vous partagerez mon retour d'expérience sur l'utilisation de Django Admin comme framework à part entière dans le cadre de développement d'applications internes centrées sur les données.&lt;/p&gt;
&lt;p&gt;Les applications "no-code" n'ont qu'à bien se tenir !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://"&gt;Support&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Notes personnelles&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Comment remplacer Excel©® par Django Admin&lt;ul&gt;
&lt;li&gt;prolifération de tableaux dans tous les services&lt;/li&gt;
&lt;li&gt;objectifs:&lt;ul&gt;
&lt;li&gt;centraliser rles données&lt;/li&gt;
&lt;li&gt;uniformiser&lt;/li&gt;
&lt;li&gt;calcul&lt;/li&gt;
&lt;li&gt;contrôle d'accès&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;les choix alternatifs&lt;ul&gt;
&lt;li&gt;sur mesure&lt;/li&gt;
&lt;li&gt;low/nocode&lt;/li&gt;
&lt;li&gt;django-admin&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Avec un modèle de donnée basique, outilages fournis&lt;ul&gt;
&lt;li&gt;accès restreints par groupe&lt;/li&gt;
&lt;li&gt;ajout de vues&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Trucs et astuces&lt;ul&gt;
&lt;li&gt;utiliser &lt;code&gt;fieldset&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;vue agrégée: non managé par django (&lt;code&gt;managed = False&lt;/code&gt;) et vue en pure SQL&lt;/li&gt;
&lt;li&gt;contrôle d'accès&lt;/li&gt;
&lt;li&gt;route configurable&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;partit avant la fin…&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;❓Quel &lt;em&gt;pour/contre&lt;/em&gt; : django &lt;em&gt;client&lt;/em&gt; vs. django &lt;em&gt;admin&lt;/em&gt;&lt;/p&gt;</content><category term="Bloc-notes"/><category term="live-notes"/><category term="pyconfr"/><category term="talk"/><category term="bordeaux"/><category term="python"/><category term="django"/><category term="business"/><category term="dev"/><category term="logiciel-libre"/><category term="web"/></entry><entry><title>Session d'ouverture</title><link href="https://blog.freezed.me/articles/2023/02/session-douverture/" rel="alternate"/><published>2023-02-18T09:22:00+01:00</published><updated>2023-02-18T09:22:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2023-02-18:/articles/2023/02/session-douverture/</id><summary type="html">&lt;p&gt;Session d'ouverture de PyConFr 2023&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;strong&gt;&lt;a href="https://fr.linkedin.com/in/mdebnet"&gt;Marc Debureaux&lt;/a&gt;&lt;/strong&gt; - Salle &lt;a href="https://fr.wikipedia.org/wiki/Alfred_Wegener"&gt;Alfred Wegener&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a href="https://www.pycon.fr/2023/fr/talks/plenary.html#accueil-welcome"&gt;Session d'ouverture&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://www.pycon.fr/2023/"&gt;&lt;img alt="logo PyConFr Bordeaux 2023" src="https://blog.freezed.me/img/200-pycon-fr-23.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Session d'ouverture de PyConFr 2023.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h1&gt;Notes personnelles&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;streaming: &lt;a href="https://www.raffut.media/"&gt;raffut_media&lt;/a&gt; sur &lt;a href="https://indymotion.fr/c/raffut_media/videos"&gt;Peer Tube&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;tours des &lt;a href="https://www.pycon.fr/2023/fr/sponsors.html"&gt;sponsors&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="live-notes"/><category term="pyconfr"/><category term="talk"/><category term="bordeaux"/><category term="keynote"/></entry><entry><title>Keynote de cloture</title><link href="https://blog.freezed.me/articles/2023/02/keynote-de-cloture/" rel="alternate"/><published>2023-02-02T18:15:00+01:00</published><updated>2023-02-02T18:15:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2023-02-02:/articles/2023/02/keynote-de-cloture/</id><summary type="html">&lt;p&gt;45 min d'intéractions tech, voilà le challenge qu'ils vont relever !&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;a href="https://www.linkedin.com/in/octave-klaba-3a0b3632"&gt;Octave Klaba&lt;/a&gt; &amp;amp; &lt;a href="https://www.linkedin.com/in/thierrysouche"&gt;Thierry Souche&lt;/a&gt; - &lt;a href="https://verytechtrip.ovhcloud.com/fr/very-tech-trip/sessions/"&gt;&lt;strong&gt;KEYNOTE&lt;/strong&gt; &lt;em&gt;Very Tech Trip&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Keynote de cloture&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;45 min d'intéractions tech, voilà le challenge qu'ils vont relever !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h1&gt;Notes personnelles&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;Les termes bio climat et écologie sont absents du programme de cette journée, alors que ce sont des enjeux colossaux pour l'humanité. L'industrie de l'informatique se met-elle la tête dans le sable?&lt;ul&gt;
&lt;li&gt;Octave: &lt;em&gt;Tout nos produits sont bio&lt;/em&gt;. (…)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Demain: plus d'informaticien, ou moins d'informaticien? Et quel informaticien?&lt;ul&gt;
&lt;li&gt;Thierry: Informaticien, ça ne veut plus dire grand choses…&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Pensez vous vraiment que l'IPv6 sera la norme en entreprise dans le futur? Où en est le déploiement de soluution IPv6 failover chez OVHcloud?&lt;ul&gt;
&lt;li&gt;Octave: &lt;em&gt;Y'a des claques qui se perdent autour du déploiement d'IPv6…&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Soutenez vous toujours le monde de l'OpenSource? Quels sont vos engagements?&lt;ul&gt;
&lt;li&gt;Thierry: Oui…&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;OVHcloud a fait plusieurs aquisitions ces dernières années: OpenIO, ForePaas… Est-ce le signe que le métier d'OVHcloud évolue, de la gestion d'infra / fourniture de IaaS vers la conception de logiciels pour consommer…&lt;ul&gt;
&lt;li&gt;Octave: Oui…&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Comment gérez vous les cycles de vie des machines? Que sont devenues les offres Kimsufi et SoYouStart qui permettaient de donner une seconde vie aux serveurs OVHcloud?&lt;ul&gt;
&lt;li&gt;Thierry: Récap de waterfalling et explications des gamme Rise / eco&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Comment OVHcloud dont le métier est plutôt la centralisation et la mutualisation des infrastructures, peut-il nous accompagner sur le Edge Computing?&lt;ul&gt;
&lt;li&gt;Thierry &amp;amp; Octave …&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;dernière question manquante&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="Bloc-notes"/><category term="vtt"/><category term="ovh"/><category term="paris"/><category term="keynote"/><category term="business"/></entry><entry><title>Ma donnée est mon asset !</title><link href="https://blog.freezed.me/articles/2023/02/ma-donnee-est-mon-asset/" rel="alternate"/><published>2023-02-02T17:35:00+01:00</published><updated>2023-02-02T17:35:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2023-02-02:/articles/2023/02/ma-donnee-est-mon-asset/</id><summary type="html">&lt;p&gt;Partageons les bonnes pratiques à suivre pour protéger ses jeux de données&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;a href="https://www.linkedin.com/in/charlotte-letamendia-434a162/"&gt;Charlotte Letamendia&lt;/a&gt; - &lt;a href="https://verytechtrip.ovhcloud.com/fr/very-tech-trip/sessions/"&gt;&lt;strong&gt;TALK&lt;/strong&gt; &lt;em&gt;Very Tech Trip&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Ma donnée est mon asset ! Partageons les bonnes pratiques à suivre pour protéger ses jeux de données&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Dans ce talk, nous parlons Object Storage et API S3 pour vous apprendre à suivre les bonnes pratiques de sécurité et garantir l'immutabilités de vos back-ups. Face à l'augmentation du risque de hacking, sous différentes formes, nous souhaitons rappeler quelques basiques de la sécurité de données adaptés à l'object storage. Vous apprendrez à utiliser les API S3 et mettre en place l'encryption S3-SSE, les user policy, le versioning, l'object lock, dans l'objectif de protéger la donnée et ainsi renforcer la résilience de vos infrastructures.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h1&gt;Notes personnelles&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Donnée double tous les 18 mois&lt;/li&gt;
&lt;li&gt;Cas lors de l'usage avec stocage S3&lt;/li&gt;
&lt;li&gt;Risques&lt;ul&gt;
&lt;li&gt;humain: suppression, écrasement&lt;/li&gt;
&lt;li&gt;pannes: matériel, datacentre, origine géograpique&lt;/li&gt;
&lt;li&gt;attack: malware, ransomware, virus, sabotage, DDOS, etc…&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Règles et options &lt;code&gt;s3&lt;/code&gt;&lt;ol&gt;
&lt;li&gt;versionning&lt;/li&gt;
&lt;li&gt;immutabilité&lt;/li&gt;
&lt;li&gt;replication (multi région) 3 copies / 2 media / 1 offsite&lt;/li&gt;
&lt;li&gt;chiffrer&lt;/li&gt;
&lt;li&gt;ajuster les droits d'accès au minimum&lt;ul&gt;
&lt;li&gt;user et bucket&lt;/li&gt;
&lt;li&gt;revue régulière&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;example, rapport de risque météo pour aviation&lt;ul&gt;
&lt;li&gt;fichiers grib émit toutes les 6h (pas de diff)&lt;/li&gt;
&lt;li&gt;=&amp;gt; Demo&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="vtt"/><category term="ovh"/><category term="talk"/><category term="paris"/><category term="backup"/><category term="object"/><category term="storage"/><category term="security"/><category term="méthode"/><category term="cli"/></entry><entry><title>De la première ligne de code au succès : REX d’un projet open source</title><link href="https://blog.freezed.me/articles/2023/02/de-la-premiere-ligne-de-code-au-succes-rex-dun-projet-open-source/" rel="alternate"/><published>2023-02-02T16:50:00+01:00</published><updated>2023-02-02T16:50:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2023-02-02:/articles/2023/02/de-la-premiere-ligne-de-code-au-succes-rex-dun-projet-open-source/</id><summary type="html">&lt;p&gt;Un petit projet qui a commencé un été sans aucune ambition, pour aider ma guilde à mieux gérer la fabrication d'objets en équipe dans un jeu en ligne&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;a href="https://https://www.linkedin.com/in/flavien-normand-908171101"&gt;Flavien Normand&lt;/a&gt; - &lt;a href="https://verytechtrip.ovhcloud.com/fr/very-tech-trip/sessions/"&gt;&lt;strong&gt;TALK&lt;/strong&gt; &lt;em&gt;Very Tech Trip&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;De la première ligne de code au succès : REX d’un projet open source&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Je vous propose un REX sur le projet &lt;a href="https://ffxivteamcraft.com/"&gt;FFXIV Teamcraft&lt;/a&gt;, un petit projet qui a commencé un été sans aucune ambition, pour aider ma guilde à mieux gérer la fabrication d'objets en équipe dans un jeu en ligne. Aujourd'hui, il est traduit en 10 langues et utilisé par des milliers de personnes dans le monde, plus de 200 000 utilisateurs actifs mensuel, le tout Open Source, avec les moyens du bord.&lt;/p&gt;
&lt;p&gt;Cette présentation raconte l'histoire derrière ce projet, les problèmes rencontrés, les risques (techniques comme autres), elle détaille aussi tout ce que j'ai pu y gagner, et y perdre. C'est également l'occasion de parler de la communauté, de l'impact que celle-ci a, des rencontres, des échanges, et de tout ce qui a pu être appris.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h1&gt;Notes personnelles&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ffxiv-teamcraft"&gt;Teamcraft&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Final fantaisy 14: fabrication d'objets&lt;ul&gt;
&lt;li&gt;recette imbriqué et deviennent vite complexe&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Stack: firebase, angular&lt;/li&gt;
&lt;li&gt;Chiffres&lt;ul&gt;
&lt;li&gt;Création 15/8/17&lt;/li&gt;
&lt;li&gt;400000 actifs mensuels&lt;/li&gt;
&lt;li&gt;4M de liste créée&lt;/li&gt;
&lt;li&gt;9995 commit&lt;/li&gt;
&lt;li&gt;850 github stars&lt;/li&gt;
&lt;li&gt;10 langues: par &lt;a href="https://crowdin.com/"&gt;crowdin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Devel&lt;ul&gt;
&lt;li&gt;Creation: Angular + material design&lt;/li&gt;
&lt;li&gt;amélioration&lt;/li&gt;
&lt;li&gt;refactoring complet: andesign (design system alibaba)&lt;/li&gt;
&lt;li&gt;arrivé d'electron: fonctionnalité superposable au jeu&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nmap&lt;/code&gt;: lire les flux réseaux. Pas de lecture mémoire&lt;/li&gt;
&lt;li&gt;activité&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Financement&lt;ul&gt;
&lt;li&gt;Patreon (crowdfunding)&lt;/li&gt;
&lt;li&gt;playwire (regie pub)&lt;/li&gt;
&lt;li&gt;jour mis a dispo pour open source par employeur (zenika)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Avantage&lt;ul&gt;
&lt;li&gt;Grosse communauté internationnale&lt;/li&gt;
&lt;li&gt;bac a sable perso&lt;/li&gt;
&lt;li&gt;projet vitrine efficace CV&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Inconvéniant&lt;ul&gt;
&lt;li&gt;très peu de contact avec Square Enix&lt;/li&gt;
&lt;li&gt;beaucoup de temps passé (~6000h / 2-4h/j )&lt;/li&gt;
&lt;li&gt;beaucoup de stress&lt;/li&gt;
&lt;li&gt;confusion projet OSS / produit pro avec les utilisateurs&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="vtt"/><category term="ovh"/><category term="talk"/><category term="paris"/><category term="gaming"/><category term="collectif"/><category term="dev"/><category term="logiciel-libre"/><category term="gui"/></entry><entry><title>Cosplay et Tech : la grande aventure 🚀</title><link href="https://blog.freezed.me/articles/2023/02/cosplay-et-tech-la-grande-aventure/" rel="alternate"/><published>2023-02-02T16:00:00+01:00</published><updated>2023-02-02T16:00:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2023-02-02:/articles/2023/02/cosplay-et-tech-la-grande-aventure/</id><summary type="html">&lt;p&gt;Venez assister à la rencontre de la créativité et de la tech présentée par deux personnages de la série Netflix Arcane, Viktor et Heimerdinger, en Cosplay !&lt;/p&gt;</summary><content type="html">&lt;p&gt;ar &lt;a href="https://www.linkedin.com/in/thierrychantier"&gt;Thierry &lt;em&gt;Viktor&lt;/em&gt; Chantier&lt;/a&gt; &amp;amp; &lt;a href="https://www.linkedin.com/in/pierre-tibulle-68674812b"&gt;Pierre &lt;em&gt;Heimerdinger&lt;/em&gt; Tibulle&lt;/a&gt; - &lt;a href="https://verytechtrip.ovhcloud.com/fr/very-tech-trip/sessions/"&gt;&lt;strong&gt;TALK&lt;/strong&gt; &lt;em&gt;Very Tech Trip&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Cosplay et Tech : la grande aventure 🚀&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;"Viktor continue ses recherches sur la magie HexTech pour trouver une thérapie. De son côté Heimerdinger prend conscience des risques et cherche à contrôler toute cette puissance !"&lt;/p&gt;
&lt;p&gt;Venez assister à la rencontre de la créativité et de la tech présentée par deux personnages de la série Netflix Arcane, Viktor et Heimerdinger, en Cosplay !&lt;/p&gt;
&lt;p&gt;Le cosplay associe des compétences artistiques, artisanales et techniques lors de la création des costumes, mais il prend une toute autre dimension en lui greffant de l'électronique et toute une infrastructure informatique !&lt;/p&gt;
&lt;p&gt;Après une petite introduction au Cosplay, nous vous détaillerons la construction des costumes et accessoires présentés. Vous serez également acteurs de ce talk via diverses interactions rendues possibles par des outils que vous avez l'habitude de mettre en place au quotidien. Venez apprendre en vous amusant !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h1&gt;Notes personnelles&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Cosplay?&lt;ul&gt;
&lt;li&gt;Costume - Play&lt;/li&gt;
&lt;li&gt;Faire sois même et/ou acheter&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Pierre:&lt;ul&gt;
&lt;li&gt;c'est de l'émotion, fabrique tout sois même&lt;/li&gt;
&lt;li&gt;&lt;a href="https://leagueoflegends.fandom.com/wiki/Heimerdinger/Arcane"&gt;Heimerdinger&lt;/a&gt;: LOL / Arcane&lt;/li&gt;
&lt;li&gt;fabrique sois même: couture&lt;/li&gt;
&lt;li&gt;Scan de visage&lt;/li&gt;
&lt;li&gt;Mousse de matelas pour volume&lt;/li&gt;
&lt;li&gt;teinture de fourure&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Thierry: &lt;em&gt;Et si on mettait de la tech?&lt;/em&gt;&lt;ul&gt;
&lt;li&gt;des oreilles qui bougent&lt;/li&gt;
&lt;li&gt;Une Arcane box en impression 3D&lt;ul&gt;
&lt;li&gt;software: mosquitto (MQTT), python, LDP, …&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;demo&lt;/li&gt;
&lt;li&gt;Les évolutions&lt;ul&gt;
&lt;li&gt;Dataviz (look steampunk)&lt;/li&gt;
&lt;li&gt;monitorer physiquement&lt;/li&gt;
&lt;li&gt;connecter le masque&lt;/li&gt;
&lt;li&gt;faire interagir le public avec le masque&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="vtt"/><category term="ovh"/><category term="talk"/><category term="paris"/><category term="cosplay"/><category term="iot"/><category term="diy"/><category term="live-coding"/><category term="observability"/></entry><entry><title>DLL Side Loading &amp; Process Injection : comment ça marche ?</title><link href="https://blog.freezed.me/articles/2023/02/dll-side-loading-process-injection-comment-ca-marche/" rel="alternate"/><published>2023-02-02T14:58:00+01:00</published><updated>2023-02-02T14:58:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2023-02-02:/articles/2023/02/dll-side-loading-process-injection-comment-ca-marche/</id><summary type="html">&lt;p&gt;Cette session de live coding sera l'occasion de rentrer dans le détail de ces deux techniques en implémentant les deux techniques.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;a href="https://www.linkedin.com/in/%F0%9F%94%91-s%C3%A9bastien-m%C3%A9riot-8b1b74a"&gt;Sebastien Meriot&lt;/a&gt; - &lt;a href="https://verytechtrip.ovhcloud.com/fr/very-tech-trip/sessions/"&gt;&lt;strong&gt;DEMO&lt;/strong&gt; &lt;em&gt;Very Tech Trip&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;DLL Side Loading &amp;amp; Process Injection : comment ça marche ?&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Les logiciels malveillants modernes utilisent aujourd'hui quasiment tous ces deux techniques. La première vise à changer le comportement d'un exécutable en venant modifier une DLL chargée dynamiquement. Cette DLL viendra alors procéder à l'altération en mémoire d'un processus en cours d'exécution pour changer son comportement et le faire exécuter du code malveillant. C'est ainsi un excellent moyen d'évader les antivirus qui ne se doutent pas qu'un processus légitime, signé par un éditeur de confiance, puisse exécuter du code malveillant.&lt;/p&gt;
&lt;p&gt;Cette session de live coding sera l'occasion de rentrer dans le détail de ces deux techniques en implémentant les deux techniques. L'antivirus nous détectera-t-il ?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h1&gt;Notes personnelles&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Échapper a la détection des antivirus&lt;/li&gt;
&lt;li&gt;Injection de process?&lt;ul&gt;
&lt;li&gt;voir `MITRE|ATT&amp;amp;CK&lt;/li&gt;
&lt;li&gt;utiliser un process de confiance: &lt;code&gt;explorer.exe&lt;/code&gt; sous windows, un antivirus, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Example: calculatrice windows&lt;ul&gt;
&lt;li&gt;win achi: loader / runing process&lt;/li&gt;
&lt;li&gt;side loading: 2 soft de confiance sont utilisé pour créer un thread&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;demo&lt;/li&gt;
&lt;li&gt;Contre messure (windows): config &lt;code&gt;sysmon&lt;/code&gt; pour le SIEM&lt;ul&gt;
&lt;li&gt;SwiftOnSecurity Config&lt;/li&gt;
&lt;li&gt;TrustedSec Guide&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="vtt"/><category term="ovh"/><category term="talk"/><category term="paris"/><category term="security"/><category term="live-coding"/><category term="admin"/><category term="logs"/></entry><entry><title>Et si nous créions le .vtt ?: Et si nous créions le .vtt ?</title><link href="https://blog.freezed.me/articles/2023/02/et-si-nous-creions-le-vtt-et-si-nous-creions-le-vtt/" rel="alternate"/><published>2023-02-02T14:15:00+01:00</published><updated>2023-02-02T14:15:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2023-02-02:/articles/2023/02/et-si-nous-creions-le-vtt-et-si-nous-creions-le-vtt/</id><summary type="html">&lt;p&gt;De l'idée de création jusqu'à la mise en vente de l'extension .vtt, nous découvrirons ensemble le fonctionnement des DNS et des noms de domaine.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;a href="https://www.linkedin.com/in/ericvvergne"&gt;Eric Vergne&lt;/a&gt; &amp;amp; &lt;a href="https://www.linkedin.com/in/benoitmasson"&gt;Benoît Masson&lt;/a&gt; - &lt;a href="https://verytechtrip.ovhcloud.com/fr/very-tech-trip/sessions/"&gt;&lt;strong&gt;TALK&lt;/strong&gt; &lt;em&gt;Very Tech Trip&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://ovh.to/tFHgKiH"&gt;&lt;strong&gt;Support de présentation&lt;/strong&gt;&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Et si nous créions le &lt;code&gt;.vtt&lt;/code&gt; ?&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Les noms de domaine et les DNS font partit des services primaires d'internet. De l'idée de création jusqu'à la mise en vente de l'extension .vtt, nous découvrirons ensemble le fonctionnement des DNS et des noms de domaine. Les termes Registry, Registrar, Icann, DNS racine/autoritaire et Resolver, Whois, EPP et gouvernance d'internet ne vous seront alors plus inconnus. Vous comprendrez également pourquoi ce milieu est si sensible au changement.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h1&gt;Notes personnelles&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Pourquoi?&lt;ul&gt;
&lt;li&gt;ne plus partatger de fichier &lt;code&gt;/etc/hosts&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Comment?&lt;ul&gt;
&lt;li&gt;Créer des autorité de délégations pour les extentions&lt;/li&gt;
&lt;li&gt;&lt;code&gt;www.verytechtrip.com&lt;/code&gt;&lt;ul&gt;
&lt;li&gt;Résolveur: FAI, Cloudflare, Gxxgle, …&lt;/li&gt;
&lt;li&gt;&lt;code&gt;computer&lt;/code&gt; -&amp;gt; &lt;code&gt;resolver&lt;/code&gt; -&amp;gt; who manage .com?&lt;/li&gt;
&lt;li&gt;&lt;code&gt;computer&lt;/code&gt; -&amp;gt; &lt;code&gt;resolver&lt;/code&gt; -&amp;gt; who manage .verytechtrip.com?&lt;/li&gt;
&lt;li&gt;&lt;code&gt;computer&lt;/code&gt; -&amp;gt; &lt;code&gt;resolver&lt;/code&gt; -&amp;gt; answers `computer&lt;/li&gt;
&lt;li&gt;(again): &lt;code&gt;computer&lt;/code&gt; -&amp;gt; &lt;code&gt;resolver&lt;/code&gt; -&amp;gt; answers &lt;code&gt;computer&lt;/code&gt; &lt;strong&gt;from cache&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;13 servers DNS root (IP 32bits)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Acteurs&lt;ul&gt;
&lt;li&gt;ICANN / registrar / registry&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Comment devenir &lt;em&gt;registry&lt;/em&gt;?&lt;ul&gt;
&lt;li&gt;beaucoup de demande?&lt;/li&gt;
&lt;li&gt;pourquoi faire?&lt;/li&gt;
&lt;li&gt;créer le dossier de demande&lt;ul&gt;
&lt;li&gt;prix 2012: 185000$ / demain: 250000$&lt;/li&gt;
&lt;li&gt;plusieurs étapes et délai long et prolongeables&lt;/li&gt;
&lt;li&gt;Objections: &lt;code&gt;.wine&lt;/code&gt;, &lt;code&gt;.amazon&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;vente aux enchères:&lt;ol&gt;
&lt;li&gt;&lt;code&gt;.tech&lt;/code&gt; - 5 millions euro (dot tech, then radix)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.blog&lt;/code&gt; - 15M (automattic &amp;lt;- wordpress)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.app&lt;/code&gt;  - 25M (google)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.shop&lt;/code&gt; - 41.5M (GMO registry)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.web&lt;/code&gt;  - 135M (Nu Dot Co &amp;lt;- verisign) = 11 ans plus tard toujours pas de résolution du conflit&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Deploy an infrastructure&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="vtt"/><category term="ovh"/><category term="talk"/><category term="paris"/><category term="dns"/><category term="domain"/></entry><entry><title>Trouve les bottlenecks de ton application grâce au tracing !</title><link href="https://blog.freezed.me/articles/2023/02/trouve-les-bottlenecks-de-ton-application-grace-au-tracing/" rel="alternate"/><published>2023-02-02T13:30:00+01:00</published><updated>2023-02-02T13:30:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2023-02-02:/articles/2023/02/trouve-les-bottlenecks-de-ton-application-grace-au-tracing/</id><summary type="html">&lt;p&gt;Par &lt;a href="https://www.linkedin.com/in/victor-coutellier"&gt;Victor Coutellier&lt;/a&gt; - &lt;a href="https://verytechtrip.ovhcloud.com/fr/very-tech-trip/sessions/"&gt;&lt;strong&gt;TALK&lt;/strong&gt; &lt;em&gt;Very Tech Trip&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Support&lt;/strong&gt;: sur &lt;a href="https://github.com/alistarle/vtt-tracing"&gt;&lt;code&gt;github.com/alistarle/vtt-tracing&lt;/code&gt;&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Trouve les bottlenecks de ton application grâce au tracing !&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;La dimension mondiale d'OVHcloud implique de surveiller la performance de nos APIs au même titre que leur fonctionnement. De nombreux outils existent aujourd'hui pour intégrer simplement du tracing …&lt;/p&gt;&lt;/blockquote&gt;</summary><content type="html">&lt;p&gt;Par &lt;a href="https://www.linkedin.com/in/victor-coutellier"&gt;Victor Coutellier&lt;/a&gt; - &lt;a href="https://verytechtrip.ovhcloud.com/fr/very-tech-trip/sessions/"&gt;&lt;strong&gt;TALK&lt;/strong&gt; &lt;em&gt;Very Tech Trip&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Support&lt;/strong&gt;: sur &lt;a href="https://github.com/alistarle/vtt-tracing"&gt;&lt;code&gt;github.com/alistarle/vtt-tracing&lt;/code&gt;&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Trouve les bottlenecks de ton application grâce au tracing !&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;La dimension mondiale d'OVHcloud implique de surveiller la performance de nos APIs au même titre que leur fonctionnement. De nombreux outils existent aujourd'hui pour intégrer simplement du tracing dans votre application quel que soit son langage et ainsi identifier vos potentiels bottleneck avant même le passage en production. Nous vous invitons à découvrir comment, au sein de l'équipe Public Cloud, nous avons mis en place une de ces solutions afin de réduire considérablement le temps de génération des token d'authentification.&lt;/p&gt;
&lt;p&gt;Au programme:
* Ajoutez OpenTracing dans ton application pour générer des traces utiles en un minimum de code
* Déployez Grafana Tempo pour stocker et visualiser tes traces
* Conseils pour identifier les usual suspect&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h1&gt;Notes personnelles&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Openstack keystone / IAM OVH&lt;ul&gt;
&lt;li&gt;700 ms pour avoir un token&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Troubleshooting&lt;ul&gt;
&lt;li&gt;on ne veu ps changer le code pour ajouter du tracing&lt;/li&gt;
&lt;li&gt;=&amp;gt; autoinstrumentation&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://opentelemetry.io"&gt;&lt;code&gt;opentelemetry-instrument&lt;/code&gt;&lt;/a&gt; dispo natif pour&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.net&lt;/code&gt;, &lt;code&gt;python&lt;/code&gt;, &lt;code&gt;java&lt;/code&gt;, &lt;code&gt;node&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Python use case&lt;ul&gt;
&lt;li&gt;usage des &lt;code&gt;hook&lt;/code&gt; des dépendances&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Architecture OpenTelemetry&lt;ul&gt;
&lt;li&gt;Keystone / Grafana + tempo / OTEL operator / OTEL collector / Instrumentation Open telemetry&lt;/li&gt;
&lt;li&gt;=&amp;gt; demo&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Possible sur tout infra&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="vtt"/><category term="ovh"/><category term="talk"/><category term="paris"/><category term="python"/><category term="performance"/><category term="dev"/><category term="devops"/><category term="observability"/></entry><entry><title>Data, IA... et si c'était la solution pour comprendre la langue des signes ?</title><link href="https://blog.freezed.me/articles/2023/02/data-ia-et-si-cetait-la-solution-pour-comprendre-la-langue-des-signes/" rel="alternate"/><published>2023-02-02T11:00:00+01:00</published><updated>2023-02-02T11:00:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2023-02-02:/articles/2023/02/data-ia-et-si-cetait-la-solution-pour-comprendre-la-langue-des-signes/</id><summary type="html">&lt;p&gt;Entraîner un modèle c'est bien, l'utiliser c'est mieux&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;a href="https://www.linkedin.com/in/elea-petton"&gt;Elea Petton&lt;/a&gt; &amp;amp; &lt;a href="https://www.linkedin.com/in/claire-gallot-b80b72153/"&gt;Claire Gallot&lt;/a&gt; - &lt;a href="https://verytechtrip.ovhcloud.com/fr/very-tech-trip/sessions/"&gt;&lt;strong&gt;DEMO&lt;/strong&gt; &lt;em&gt;Very Tech Trip&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Dans le domaine de l'Intelligence Artificielle, nous parlons souvent de Machine Learning ou de Deep Learning. Mais au final que signifient ces termes et surtout comment peuvent-ils nous aider dans la vie courante ?
Durant ce talk nous allons tout d'abord tenter de comprendre la place qu'occupe l'IA dans le vaste domaine de la santé. Nous montrerons ensuite l'importance de la donnée et nous développerons une app d'IA capable de détecter et d'interpréter le langage des signes. Ce talk permettra de montrer comment il est possible de traiter la donnée brute rapidement pour l'adapter un algorithme d'IA grâce à Apache Spark. Nous verrons aussi comment utiliser le traitement d'image distribué comme moyen d'enrichir ses données d'entraînement. La seconde étape consistera à entraîner un modèle de détection d'objets à reconnaître les différents signes de l'alphabet ASL (American Sign Language) au travers d'un notebook Jupyter.&lt;/p&gt;
&lt;p&gt;Entraîner un modèle c'est bien, l'utiliser c'est mieux ! Les développeurs et développeuses apprendront à créer une app d'intelligence artificielle à partir du modèle entraîné pour de la détection de signes sur images ou flux vidéos. Pour finir, nous verrons comment déployer cette application avec Docker pour pouvoir la rendre accessible. Cette application permettra à quiconque de comprendre le langage des signes avec une détection et une retranscription écrite.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h1&gt;Notes personnelles&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Claire: Data convergeance team&lt;/li&gt;
&lt;li&gt;Éléa: ML engineer&lt;/li&gt;
&lt;li&gt;Objectif: interpréter le langage des signes&lt;ul&gt;
&lt;li&gt;IA au service de l'accessibilité&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;dataset de la langue des signe libre de droit (USA)&lt;ul&gt;
&lt;li&gt;1728 images&lt;/li&gt;
&lt;li&gt;26 classes&lt;/li&gt;
&lt;li&gt;photo de petite taille centré sur les main&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Réussir a détecter les mains&lt;ul&gt;
&lt;li&gt;algo YOLOv7: You Only Look Once: algo mono passage&lt;/li&gt;
&lt;li&gt;live demo: V pas très fiable, O mieux&lt;/li&gt;
&lt;li&gt;=&amp;gt; résultats faibles&lt;/li&gt;
&lt;li&gt;DB trop faible&lt;/li&gt;
&lt;li&gt;sous représentation: coleurs de peau, présence de tatouage/bijou, fond uniforme, pas de main d'enfants&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Vers un meilleurs modèle&lt;ul&gt;
&lt;li&gt;augmenter de dataset: un nouveau ou améliorer le dataset existant&lt;/li&gt;
&lt;li&gt;améliorer le dataset existant&lt;ul&gt;
&lt;li&gt;image flip: représentation des gauchers&lt;/li&gt;
&lt;li&gt;image shift&lt;/li&gt;
&lt;li&gt;changer la luminosité, saturation, blur, etc.&lt;/li&gt;
&lt;li&gt;-&amp;gt;&lt;a href=""&gt;&lt;code&gt;albumentation&lt;/code&gt;&lt;/a&gt; lib python&lt;ul&gt;
&lt;li&gt;3h pour augmenter le dataset x3&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;utiliser du calcul distribué &lt;a href=""&gt;&lt;code&gt;apache spark&lt;/code&gt;&lt;/a&gt; =&amp;gt; 3min de temps de traitement&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;_plus le temps de suivre,&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="vtt"/><category term="ovh"/><category term="talk"/><category term="paris"/><category term="ia"/><category term="méthode"/><category term="python"/><category term="dev"/><category term="numérisation"/></entry><entry><title>Keynote d'ouverture</title><link href="https://blog.freezed.me/articles/2023/02/keynote-douverture/" rel="alternate"/><published>2023-02-02T09:30:00+01:00</published><updated>2023-02-02T09:30:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2023-02-02:/articles/2023/02/keynote-douverture/</id><summary type="html">&lt;p&gt;Session d'ouverture du Very Tech Trip.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;em&gt;Octave Klaba, Thierry Souche, Laurent Berger, Pierre Lamarche, Yaniv Fdida&lt;/em&gt; - &lt;a href="https://verytechtrip.ovhcloud.com/fr/very-tech-trip/sessions/"&gt;&lt;strong&gt;KEYNOTE&lt;/strong&gt; &lt;em&gt;Very Tech Trip&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Keynote #1&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;5 speakers passionnés par leur métier, tombés dans la marmite de la Tech dès leur plus jeune âge. Pour évoquer les thèmes du cloud native &amp;amp; move to cloud, d'infra, hardware &amp;amp; sustainable cloud, de data &amp;amp; IA, du web et partager leur vision de la souveraineté technologique et opérationnelle et de la sécurité.&lt;/p&gt;
&lt;p&gt;1 heure pour faire le tour de la Tech, voilà leur défi.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h1&gt;Notes personnelles&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/octave-klaba-3a0b3632"&gt;Octave Klaba&lt;/a&gt;, intro et plan en 5 axes&lt;ol&gt;
&lt;li&gt;géographie&lt;ul&gt;
&lt;li&gt;Ajout de zone: Paris 23, Canada 23, ALlemagne 24, US, Inde, Suisse,&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;produits&lt;ul&gt;
&lt;li&gt;public cloud &lt;a href="https://www.linkedin.com/in/lberger"&gt;Laurent Berger&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;IAM, KMS, Metal cloud&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/thierrysouche"&gt;Thierry Souche&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="¡https://www.forepaas.com"&gt;ForePaas&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/lilianlisanti"&gt;Lilian Lisanti&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;em&gt;lift and shift&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Dernière techno VMware (vSphere 8 arrive)&lt;/li&gt;
&lt;li&gt;Nutanix: managed, packaged, BYOL&lt;/li&gt;
&lt;li&gt;NetApp: EFS, chez PCC&lt;/li&gt;
&lt;li&gt;SAD: Hardware &amp;amp; VMwane VSAN certifié SAP HANA&lt;/li&gt;
&lt;li&gt;Backup: Veeam, Zerto&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/pierrelamarche"&gt;Pierre Lamarche&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;intégration de git, OVH web statistic&lt;/li&gt;
&lt;li&gt;mail: opensource zimbra, SNC&lt;/li&gt;
&lt;li&gt;VOIP: nouvelle offre softphone, intégration ITSN &amp;amp; CMS&lt;/li&gt;
&lt;li&gt;marque blanche: mail et VOIP&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/yaniv-fdida-876b153b"&gt;Yaniv Fdida&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;plus de densité compute / storage / memory / GPU&lt;/li&gt;
&lt;li&gt;de la beta pour client&lt;/li&gt;
&lt;li&gt;immersion cooling&lt;/li&gt;
&lt;li&gt;network: aggregation 4 lien 25G, vRack services Endpoint, IPv6 dans le vRack, DDoS monitoring&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/octave-klaba-3a0b3632"&gt;Octave Klaba&lt;/a&gt;, Hybrid Cloud&lt;ul&gt;
&lt;li&gt;edge computing&lt;/li&gt;
&lt;li&gt;verticale: healthcare, spatial, quantum&lt;/li&gt;
&lt;li&gt;WTF: C'est la terre qui est inspirante&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="vtt"/><category term="ovh"/><category term="keynote"/><category term="paris"/><category term="business"/></entry><entry><title>Découvrez ZFS : un stockage fiable, puissant et accessible</title><link href="https://blog.freezed.me/articles/2023/02/decouvrez-zfs-un-stockage-fiable-puissant-et-accessible/" rel="alternate"/><published>2023-02-02T00:00:00+01:00</published><updated>2023-02-02T00:00:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2023-02-02:/articles/2023/02/decouvrez-zfs-un-stockage-fiable-puissant-et-accessible/</id><summary type="html">&lt;p&gt;Découvrez ZFS: un stockage fiable, puissant et accessible.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Le 2 février 2023 j'ai partagé cette présentation dans le cadre du &lt;a href="https://verytechtrip.ovhcloud.com/fr/"&gt;VeryTechTrip OVH&lt;/a&gt; à Paris.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://player.vimeo.com/video/804391464"&gt;&lt;img alt="logo VTT 2023" src="https://blog.freezed.me/img/vtt-2023.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;J'y ai présenté &lt;a href="https://openzfs.org"&gt;ZFS&lt;/a&gt; un système de fichier qui est aussi un gestionnaire de volumes.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;ZFS&lt;/code&gt; est un outil passionnant qui va au-delà d'un système de fichier. Cette présentation se veut techniquement accessible et vise à partager ma découverte de cet outil pour (peut-être) vous donner envie de l'essayer.&lt;/p&gt;
&lt;p&gt;Né au début des années 2000 au sein de &lt;em&gt;Sun Microsytems&lt;/em&gt;, ZFS est aujourd'hui développé au travers du projet &lt;a href="https://openzfs.org"&gt;openZFS&lt;/a&gt; pour les noyaux &lt;em&gt;Linux&lt;/em&gt; et &lt;em&gt;freeBSD&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt="openzfs logo" src="https://blog.freezed.me/img/openzfs.png"&gt;&lt;/p&gt;
&lt;h3&gt;Supports de présentation :&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://blog.freezed.me/pdf/20230203-vtt-openzfs-fr.pdf"&gt;🇫🇷&lt;/a&gt; |
&lt;a href="https://blog.freezed.me/pdf/20230203-vtt-openzfs-en.pdf"&gt;🇬🇧&lt;/a&gt; |
&lt;a href="https://gitlab.com/ftalk/openzfs/-/tree/vtt/"&gt;📝 &lt;code&gt;ftalk/openzfs&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Captation&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://player.vimeo.com/video/804391464"&gt;Lien vers la captation vidéo&lt;/a&gt;&lt;/p&gt;</content><category term="Conférences"/><category term="vtt"/><category term="talk"/><category term="paris"/><category term="storage"/><category term="zfs"/><category term="admin"/><category term="cli"/><category term="backup"/></entry><entry><title>Déconfigurer des «Legacy mountpoints» ZFS</title><link href="https://blog.freezed.me/articles/2022/12/unset-zfs-legacy-mountpoint-proxmox-ovh-installation/" rel="alternate"/><published>2022-12-12T23:38:00+01:00</published><updated>2022-12-12T23:38:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2022-12-12:/articles/2022/12/unset-zfs-legacy-mountpoint-proxmox-ovh-installation/</id><summary type="html">&lt;p&gt;Déconfigurer des &lt;em&gt;Legacy mountpoints&lt;/em&gt; ZFS sur un serveur &lt;em&gt;OVH baremetal&lt;/em&gt; installé avec Proxmox et ZFS&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;a href="https://proxmox.com/en/"&gt;Proxmox&lt;/a&gt; installé sur &lt;a href="https://openzfs.org"&gt;ZFS&lt;/a&gt; avec un modèle d'installation &lt;a href="https://www.ovhcloud.com/en-ie/bare-metal/"&gt;OVHcloud baremetal&lt;/a&gt; utilise les &lt;em&gt;Legacy mountpoints&lt;/em&gt; (gestion par &lt;code&gt;/etc/fstab&lt;/code&gt;). Cette configuration est valide mais prive le système de l'héritage des propriétés entre &lt;em&gt;datasets&lt;/em&gt; ZFS. Rendons la gestion des points de montages à ZFS avec très peu de configuration.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;situation initiale sur proxmox après l'installation&lt;/em&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;root@server:~#&lt;span class="w"&gt; &lt;/span&gt;zfs&lt;span class="w"&gt; &lt;/span&gt;list
NAME&lt;span class="w"&gt;      &lt;/span&gt;USED&lt;span class="w"&gt;  &lt;/span&gt;AVAIL&lt;span class="w"&gt;     &lt;/span&gt;REFER&lt;span class="w"&gt;  &lt;/span&gt;MOUNTPOINT
zp0&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;.29G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;.75T&lt;span class="w"&gt;       &lt;/span&gt;96K&lt;span class="w"&gt;  &lt;/span&gt;none
zp0/zd0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;91&lt;/span&gt;.8M&lt;span class="w"&gt;   &lt;/span&gt;932M&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;91&lt;/span&gt;.8M&lt;span class="w"&gt;  &lt;/span&gt;legacy
zp0/zd1&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;.20G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;.75T&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;.20G&lt;span class="w"&gt;  &lt;/span&gt;legacy
zp0/zd2&lt;span class="w"&gt;   &lt;/span&gt;104K&lt;span class="w"&gt;  &lt;/span&gt;1024M&lt;span class="w"&gt;      &lt;/span&gt;104K&lt;span class="w"&gt;  &lt;/span&gt;legacy

root@server:~#&lt;span class="w"&gt; &lt;/span&gt;grep&lt;span class="w"&gt; &lt;/span&gt;zp0&lt;span class="w"&gt; &lt;/span&gt;/etc/fstab
zp0/zd1&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt;           &lt;/span&gt;zfs&lt;span class="w"&gt; &lt;/span&gt;defaults&lt;span class="w"&gt;                                        &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
zp0/zd0&lt;span class="w"&gt; &lt;/span&gt;/boot&lt;span class="w"&gt;       &lt;/span&gt;zfs&lt;span class="w"&gt; &lt;/span&gt;defaults,x-systemd.requires&lt;span class="o"&gt;=&lt;/span&gt;zfs-import.target&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
zp0/zd2&lt;span class="w"&gt; &lt;/span&gt;/var/lib/vz&lt;span class="w"&gt; &lt;/span&gt;zfs&lt;span class="w"&gt; &lt;/span&gt;defaults,x-systemd.requires&lt;span class="o"&gt;=&lt;/span&gt;zfs-import.target&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;reboot en customer rescue pour reconfigurer les points de montages&lt;/em&gt;…&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;root@rescue-customer-eu&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;nsxxxxx.ip-x-x-x.eu&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;~&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# modprobe zfs&lt;/span&gt;
root@rescue-customer-eu&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;nsxxxxx.ip-x-x-x.eu&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;~&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# zpool import -f -N -R /mnt zp0&lt;/span&gt;
root@rescue-customer-eu&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;nsxxxxx.ip-x-x-x.eu&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;~&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# zfs set mountpoint=/ zp0/zd1&lt;/span&gt;
root@rescue-customer-eu&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;nsxxxxx.ip-x-x-x.eu&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;~&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# zfs set mountpoint=/boot zp0/zd0&lt;/span&gt;
root@rescue-customer-eu&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;nsxxxxx.ip-x-x-x.eu&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;~&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# zfs set mountpoint=/var/lib/vz zp0/zd2&lt;/span&gt;
root@rescue-customer-eu&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;nsxxxxx.ip-x-x-x.eu&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;~&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# zfs get -r mounted zp0&lt;/span&gt;
NAME&lt;span class="w"&gt;     &lt;/span&gt;PROPERTY&lt;span class="w"&gt;  &lt;/span&gt;VALUE&lt;span class="w"&gt;    &lt;/span&gt;SOURCE
zp0&lt;span class="w"&gt;      &lt;/span&gt;mounted&lt;span class="w"&gt;   &lt;/span&gt;no&lt;span class="w"&gt;       &lt;/span&gt;-
zp0/zd0&lt;span class="w"&gt;  &lt;/span&gt;mounted&lt;span class="w"&gt;   &lt;/span&gt;yes&lt;span class="w"&gt;      &lt;/span&gt;-
zp0/zd1&lt;span class="w"&gt;  &lt;/span&gt;mounted&lt;span class="w"&gt;   &lt;/span&gt;yes&lt;span class="w"&gt;      &lt;/span&gt;-
zp0/zd2&lt;span class="w"&gt;  &lt;/span&gt;mounted&lt;span class="w"&gt;   &lt;/span&gt;yes&lt;span class="w"&gt;      &lt;/span&gt;-

root@rescue-customer-eu&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;nsxxxxx.ip-x-x-x.eu&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;~&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# grep zp0 /mnt/etc/fstab&lt;/span&gt;
zp0/zd1&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt;           &lt;/span&gt;zfs&lt;span class="w"&gt; &lt;/span&gt;defaults&lt;span class="w"&gt;                                        &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
zp0/zd0&lt;span class="w"&gt; &lt;/span&gt;/boot&lt;span class="w"&gt;       &lt;/span&gt;zfs&lt;span class="w"&gt; &lt;/span&gt;defaults,x-systemd.requires&lt;span class="o"&gt;=&lt;/span&gt;zfs-import.target&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
zp0/zd2&lt;span class="w"&gt; &lt;/span&gt;/var/lib/vz&lt;span class="w"&gt; &lt;/span&gt;zfs&lt;span class="w"&gt; &lt;/span&gt;defaults,x-systemd.requires&lt;span class="o"&gt;=&lt;/span&gt;zfs-import.target&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;

root@rescue-customer-eu&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;nsxxxxx.ip-x-x-x.eu&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;~&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# sed -i &amp;#39;/^zp0/d&amp;#39; /mnt/etc/fstab&lt;/span&gt;
root@rescue-customer-eu&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;nsxxxxx.ip-x-x-x.eu&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;~&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# grep zp0 /mnt/etc/fstab&lt;/span&gt;
root@rescue-customer-eu&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;nsxxxxx.ip-x-x-x.eu&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;~&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# zpool export -a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;reboot sur Proxmox, et voilà!&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;root@server:~#&lt;span class="w"&gt; &lt;/span&gt;zfs&lt;span class="w"&gt; &lt;/span&gt;list&lt;span class="w"&gt; &lt;/span&gt;-r
NAME&lt;span class="w"&gt;      &lt;/span&gt;USED&lt;span class="w"&gt;  &lt;/span&gt;AVAIL&lt;span class="w"&gt;     &lt;/span&gt;REFER&lt;span class="w"&gt;  &lt;/span&gt;MOUNTPOINT
zp0&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;.29G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;.75T&lt;span class="w"&gt;       &lt;/span&gt;96K&lt;span class="w"&gt;  &lt;/span&gt;none
zp0/zd0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;91&lt;/span&gt;.8M&lt;span class="w"&gt;   &lt;/span&gt;932M&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;91&lt;/span&gt;.8M&lt;span class="w"&gt;  &lt;/span&gt;/boot
zp0/zd1&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;.20G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;.75T&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;.20G&lt;span class="w"&gt;  &lt;/span&gt;/
zp0/zd2&lt;span class="w"&gt;   &lt;/span&gt;104K&lt;span class="w"&gt;  &lt;/span&gt;1024M&lt;span class="w"&gt;      &lt;/span&gt;104K&lt;span class="w"&gt;  &lt;/span&gt;/var/lib/vz
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;References&lt;/em&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.freebsd.org/cgi/man.cgi?query=zfs&amp;amp;apropos=0&amp;amp;sektion=8&amp;amp;manpath=FreeBSD+14.0-CURRENT&amp;amp;arch=default&amp;amp;format=html"&gt;FreeBSD Manual Pages - &lt;code&gt;ZFS(8)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/cd/E19253-01/819-5461/gbaln/index.html"&gt;Oracle Solaris ZFS Administration Guide - Legacy Mount Points&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Merci &lt;em&gt;Louis&lt;/em&gt; 🤝&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="zfs"/><category term="proxmox"/><category term="ovh"/><category term="admin"/><category term="shell"/><category term="cli"/><category term="storage"/><category term="backup"/></entry><entry><title>Unset ZFS legacy mountpoints</title><link href="https://blog.freezed.me/articles/2022/12/unset-zfs-legacy-mountpoint-proxmox-ovh-installation/en/" rel="alternate"/><published>2022-12-12T23:38:00+01:00</published><updated>2022-12-12T23:38:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2022-12-12:/articles/2022/12/unset-zfs-legacy-mountpoint-proxmox-ovh-installation/en/</id><summary type="html">&lt;p&gt;Unset ZFS legacy mountpoints on an OVH baremetal server installed with Proxmox and ZFS&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;a href="https://proxmox.com/en/"&gt;Proxmox&lt;/a&gt; with a &lt;a href="https://openzfs.org"&gt;ZFS&lt;/a&gt; root file system on an &lt;a href="https://www.ovhcloud.com/en-ie/bare-metal/"&gt;OVHcloud baremetal server&lt;/a&gt; use &lt;em&gt;Legacy mountpoints&lt;/em&gt; (managed via &lt;code&gt;/etc/fstab&lt;/code&gt;). This is a valid setup but avoid using properties inheritance between datasets. Let’s get gives back to ZFS the mountpoint management with a few configuration.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;initial situation on proxmox after installation&lt;/em&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;root@server:~#&lt;span class="w"&gt; &lt;/span&gt;zfs&lt;span class="w"&gt; &lt;/span&gt;list
NAME&lt;span class="w"&gt;      &lt;/span&gt;USED&lt;span class="w"&gt;  &lt;/span&gt;AVAIL&lt;span class="w"&gt;     &lt;/span&gt;REFER&lt;span class="w"&gt;  &lt;/span&gt;MOUNTPOINT
zp0&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;.29G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;.75T&lt;span class="w"&gt;       &lt;/span&gt;96K&lt;span class="w"&gt;  &lt;/span&gt;none
zp0/zd0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;91&lt;/span&gt;.8M&lt;span class="w"&gt;   &lt;/span&gt;932M&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;91&lt;/span&gt;.8M&lt;span class="w"&gt;  &lt;/span&gt;legacy
zp0/zd1&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;.20G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;.75T&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;.20G&lt;span class="w"&gt;  &lt;/span&gt;legacy
zp0/zd2&lt;span class="w"&gt;   &lt;/span&gt;104K&lt;span class="w"&gt;  &lt;/span&gt;1024M&lt;span class="w"&gt;      &lt;/span&gt;104K&lt;span class="w"&gt;  &lt;/span&gt;legacy

root@server:~#&lt;span class="w"&gt; &lt;/span&gt;grep&lt;span class="w"&gt; &lt;/span&gt;zp0&lt;span class="w"&gt; &lt;/span&gt;/etc/fstab
zp0/zd1&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt;           &lt;/span&gt;zfs&lt;span class="w"&gt; &lt;/span&gt;defaults&lt;span class="w"&gt;                                        &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
zp0/zd0&lt;span class="w"&gt; &lt;/span&gt;/boot&lt;span class="w"&gt;       &lt;/span&gt;zfs&lt;span class="w"&gt; &lt;/span&gt;defaults,x-systemd.requires&lt;span class="o"&gt;=&lt;/span&gt;zfs-import.target&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
zp0/zd2&lt;span class="w"&gt; &lt;/span&gt;/var/lib/vz&lt;span class="w"&gt; &lt;/span&gt;zfs&lt;span class="w"&gt; &lt;/span&gt;defaults,x-systemd.requires&lt;span class="o"&gt;=&lt;/span&gt;zfs-import.target&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;reboot to customer rescue to set mountpoints&lt;/em&gt;…&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;root@rescue-customer-eu&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;nsxxxxx.ip-x-x-x.eu&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;~&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# modprobe zfs&lt;/span&gt;
root@rescue-customer-eu&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;nsxxxxx.ip-x-x-x.eu&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;~&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# zpool import -f -N -R /mnt zp0&lt;/span&gt;
root@rescue-customer-eu&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;nsxxxxx.ip-x-x-x.eu&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;~&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# zfs set mountpoint=/ zp0/zd1&lt;/span&gt;
root@rescue-customer-eu&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;nsxxxxx.ip-x-x-x.eu&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;~&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# zfs set mountpoint=/boot zp0/zd0&lt;/span&gt;
root@rescue-customer-eu&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;nsxxxxx.ip-x-x-x.eu&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;~&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# zfs set mountpoint=/var/lib/vz zp0/zd2&lt;/span&gt;
root@rescue-customer-eu&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;nsxxxxx.ip-x-x-x.eu&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;~&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# zfs get -r mounted zp0&lt;/span&gt;
NAME&lt;span class="w"&gt;     &lt;/span&gt;PROPERTY&lt;span class="w"&gt;  &lt;/span&gt;VALUE&lt;span class="w"&gt;    &lt;/span&gt;SOURCE
zp0&lt;span class="w"&gt;      &lt;/span&gt;mounted&lt;span class="w"&gt;   &lt;/span&gt;no&lt;span class="w"&gt;       &lt;/span&gt;-
zp0/zd0&lt;span class="w"&gt;  &lt;/span&gt;mounted&lt;span class="w"&gt;   &lt;/span&gt;yes&lt;span class="w"&gt;      &lt;/span&gt;-
zp0/zd1&lt;span class="w"&gt;  &lt;/span&gt;mounted&lt;span class="w"&gt;   &lt;/span&gt;yes&lt;span class="w"&gt;      &lt;/span&gt;-
zp0/zd2&lt;span class="w"&gt;  &lt;/span&gt;mounted&lt;span class="w"&gt;   &lt;/span&gt;yes&lt;span class="w"&gt;      &lt;/span&gt;-

root@rescue-customer-eu&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;nsxxxxx.ip-x-x-x.eu&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;~&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# grep zp0 /mnt/etc/fstab&lt;/span&gt;
zp0/zd1&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt;           &lt;/span&gt;zfs&lt;span class="w"&gt; &lt;/span&gt;defaults&lt;span class="w"&gt;                                        &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
zp0/zd0&lt;span class="w"&gt; &lt;/span&gt;/boot&lt;span class="w"&gt;       &lt;/span&gt;zfs&lt;span class="w"&gt; &lt;/span&gt;defaults,x-systemd.requires&lt;span class="o"&gt;=&lt;/span&gt;zfs-import.target&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
zp0/zd2&lt;span class="w"&gt; &lt;/span&gt;/var/lib/vz&lt;span class="w"&gt; &lt;/span&gt;zfs&lt;span class="w"&gt; &lt;/span&gt;defaults,x-systemd.requires&lt;span class="o"&gt;=&lt;/span&gt;zfs-import.target&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;

root@rescue-customer-eu&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;nsxxxxx.ip-x-x-x.eu&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;~&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# sed -i &amp;#39;/^zp0/d&amp;#39; /mnt/etc/fstab&lt;/span&gt;
root@rescue-customer-eu&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;nsxxxxx.ip-x-x-x.eu&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;~&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# grep zp0 /mnt/etc/fstab&lt;/span&gt;
root@rescue-customer-eu&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;nsxxxxx.ip-x-x-x.eu&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;~&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# zpool export -a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;reboot to proxmox, et voilà!&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;root@server:~#&lt;span class="w"&gt; &lt;/span&gt;zfs&lt;span class="w"&gt; &lt;/span&gt;list&lt;span class="w"&gt; &lt;/span&gt;-r
NAME&lt;span class="w"&gt;      &lt;/span&gt;USED&lt;span class="w"&gt;  &lt;/span&gt;AVAIL&lt;span class="w"&gt;     &lt;/span&gt;REFER&lt;span class="w"&gt;  &lt;/span&gt;MOUNTPOINT
zp0&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;.29G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;.75T&lt;span class="w"&gt;       &lt;/span&gt;96K&lt;span class="w"&gt;  &lt;/span&gt;none
zp0/zd0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;91&lt;/span&gt;.8M&lt;span class="w"&gt;   &lt;/span&gt;932M&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;91&lt;/span&gt;.8M&lt;span class="w"&gt;  &lt;/span&gt;/boot
zp0/zd1&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;.20G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;.75T&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;.20G&lt;span class="w"&gt;  &lt;/span&gt;/
zp0/zd2&lt;span class="w"&gt;   &lt;/span&gt;104K&lt;span class="w"&gt;  &lt;/span&gt;1024M&lt;span class="w"&gt;      &lt;/span&gt;104K&lt;span class="w"&gt;  &lt;/span&gt;/var/lib/vz
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;References&lt;/em&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.freebsd.org/cgi/man.cgi?query=zfs&amp;amp;apropos=0&amp;amp;sektion=8&amp;amp;manpath=FreeBSD+14.0-CURRENT&amp;amp;arch=default&amp;amp;format=html"&gt;FreeBSD Manual Pages - &lt;code&gt;ZFS(8)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/cd/E19253-01/819-5461/gbaln/index.html"&gt;Oracle Solaris ZFS Administration Guide - Legacy Mount Points&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Thank you &lt;em&gt;Louis&lt;/em&gt; 🤝&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="zfs"/><category term="proxmox"/><category term="ovh"/><category term="admin"/><category term="shell"/><category term="cli"/><category term="storage"/><category term="backup"/></entry><entry><title>Un IDE pour les gouverner tous</title><link href="https://blog.freezed.me/articles/2022/11/un-ide-pour-les-gouverner-tous/" rel="alternate"/><published>2022-11-16T19:00:00+01:00</published><updated>2022-11-16T19:00:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2022-11-16:/articles/2022/11/un-ide-pour-les-gouverner-tous/</id><summary type="html"/><content type="html">&lt;p&gt;Par &lt;a href="https://github.com/voltux/"&gt;Ioannis&lt;/a&gt;, organisé par &lt;a href="https://www.courtbouillon.org/"&gt;CourtBouillon&lt;/a&gt;, &lt;a href="https://stella.coop/"&gt;Stella&lt;/a&gt; et l'&lt;a href="https://www.afpy.org/"&gt;AFPy&lt;/a&gt;. (via &lt;a href="https://www.meetup.com/fr-FR/python-afpy-lyon/events/289353961/"&gt;Meetup&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Support&lt;/strong&gt;: sur &lt;a href="https://github.com/voltux/nvim_ide_presentation"&gt;&lt;code&gt;voltux/nvim_ide_presentation&lt;/code&gt;&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Un IDE pour les gouverner tous&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Besoin de développer un projet avec toutes les fonctionnalités d'un IDE:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En éditant du code plus vite que la lumière&lt;/li&gt;
&lt;li&gt;Sans environnement graphique (VM, container, ssh...)&lt;/li&gt;
&lt;li&gt;Sans droits admin&lt;/li&gt;
&lt;li&gt;Avec des ressources très limitées&lt;/li&gt;
&lt;li&gt;Sur des environnements toujours différents&lt;/li&gt;
&lt;li&gt;Sur un outil configurable de A à Z&lt;/li&gt;
&lt;li&gt;Sur un outil open source&lt;/li&gt;
&lt;li&gt;Sur un outil qui gère aussi vos slides de présentation et votre Todo liste&lt;/li&gt;
&lt;li&gt;De façon à pouvoir se la jouer auprès de ses collègues&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si la réponse est oui à au moins une de ces questions, venez découvrir Neovim et son écosystème de plugins en tant que IDE Python.&lt;/p&gt;
&lt;p&gt;On va monter un docker debian, créer un utilisateur sans droits admin, installer tous les outils dont on a besoin et travailler sur un petit code sympathique pour remplir des sudoku&lt;/p&gt;
&lt;p&gt;On va bien sûr utiliser Neovim aussi pour afficher les slides!&lt;/p&gt;
&lt;p&gt;Retrouvez les ressources de cette présentation sur &lt;a href="https://github.com/voltux/nvim_ide_presentation"&gt;GitHub&lt;/a&gt; !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h1&gt;Notes personnelles&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Ioannis&lt;ul&gt;
&lt;li&gt;Ingénieur mathématique, professeur, traducteur et journaliste&lt;/li&gt;
&lt;li&gt;déteste les sudokus&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Historique&lt;ol&gt;
&lt;li&gt;&lt;code&gt;ed&lt;/code&gt; -&amp;gt; &lt;code&gt;em&lt;/code&gt; -&amp;gt; &lt;code&gt;ex&lt;/code&gt; -&amp;gt; &lt;code&gt;vi&lt;/code&gt; -&amp;gt; &lt;code&gt;vim&lt;/code&gt; (Bram Moolenaar - 1991)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;neovim&lt;/code&gt; (community -&amp;gt; 2015): modernisation et intégration de &lt;code&gt;lua&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Démarrer&lt;ul&gt;
&lt;li&gt;Modale:&lt;ul&gt;
&lt;li&gt;Normal&lt;/li&gt;
&lt;li&gt;Insertion&lt;/li&gt;
&lt;li&gt;Visuel&lt;/li&gt;
&lt;li&gt;Commande&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vimtutor&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;https://vim-adventures.com&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:h …&lt;/code&gt; page d'aide'&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Construire sa configuration de zéro pour ne pas se perdre et répondre à ces besoin&lt;/li&gt;
&lt;li&gt;Fonctionnalité très avancée: &lt;ul&gt;
&lt;li&gt;macros&lt;/li&gt;
&lt;li&gt;explorateur de fichier&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Language_Server_Protocol"&gt;Language Server Protocol&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Liste de course&lt;ul&gt;
&lt;li&gt;ligne "centrée"&lt;/li&gt;
&lt;li&gt;navigateur fichier&lt;/li&gt;
&lt;li&gt;terminal (fenêtre ou pas ?)&lt;/li&gt;
&lt;li&gt;fenetrage&lt;/li&gt;
&lt;li&gt;snippet&lt;/li&gt;
&lt;li&gt;LSP&lt;/li&gt;
&lt;li&gt;undo arborescent&lt;/li&gt;
&lt;li&gt;surround&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="afpy"/><category term="talk"/><category term="lyon"/><category term="dev"/><category term="cli"/><category term="python"/><category term="ovh"/><category term="git"/><category term="live-coding"/></entry><entry><title>Développeur à 50 ans</title><link href="https://blog.freezed.me/articles/2022/10/developpeur-a-50-ans/" rel="alternate"/><published>2022-10-19T19:00:00+02:00</published><updated>2022-10-19T19:00:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2022-10-19:/articles/2022/10/developpeur-a-50-ans/</id><summary type="html">&lt;p&gt;Peut on avoir commencé à coder avant ce siècle et continuer à occuper un poste dans l'IT après 50 ans?&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;a href="https://twitter.com/bmarron"&gt;Benjamin Marron&lt;/a&gt;, organisé par &lt;a href="https://www.courtbouillon.org/"&gt;CourtBouillon&lt;/a&gt;, &lt;a href="https://stella.coop/"&gt;Stella&lt;/a&gt; et l'&lt;a href="https://www.afpy.org/"&gt;AFPy&lt;/a&gt;. (via &lt;a href="https://www.meetup.com/python-afpy-lyon/events/288986395/"&gt;Meetup&lt;/a&gt;).&lt;/p&gt;
&lt;h3&gt;Développeur à 50 ans&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Peut on avoir commencé à coder avant ce siècle et continuer à occuper un poste dans l'IT après 50 ans ?&lt;/p&gt;
&lt;p&gt;Basé sur une histoire vraie, ce talk retrace mon parcours professionnel et ma manière de suivre l’évolution des métiers dans la tech et le développement lors de la dernière décennie.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h1&gt;Notes personnelles&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;vieux ou pas vieux?&lt;ul&gt;
&lt;li&gt;crise de milieu de vie&lt;/li&gt;
&lt;li&gt;bilan de compétence&lt;/li&gt;
&lt;li&gt;Devoxx&lt;/li&gt;
&lt;li&gt;Pyramide des ages: 2015 quarantenaire 11%&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Choix de carrière&lt;ul&gt;
&lt;li&gt;organisation hérité de l'industrie&lt;/li&gt;
&lt;li&gt;chemin de carrière unique&lt;/li&gt;
&lt;li&gt;contrainte difficile a vivre&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;La formation&lt;ul&gt;
&lt;li&gt;de nouveaux collègues&lt;/li&gt;
&lt;li&gt;de nouveaux métiers&lt;/li&gt;
&lt;li&gt;mais pour chaque nouvelles semaines&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Retour aux sources&lt;ul&gt;
&lt;li&gt;Agilité  c'est sympa&lt;/li&gt;
&lt;li&gt;les PME/PMI aussi&lt;/li&gt;
&lt;li&gt;des nouvelles voies de carrière (lead / senior/ devrel)&lt;/li&gt;
&lt;li&gt;des nouvelles manières de vendre du service&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Pyramide des ages 2022&lt;ul&gt;
&lt;li&gt;quarantenaire 22%&lt;/li&gt;
&lt;li&gt;cinquantenaire 8%&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.enfrasys.fr/"&gt;enfrasys&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;électricien, automaticiens&lt;/li&gt;
&lt;li&gt;tunnel, ferroviaire&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="afpy"/><category term="talk"/><category term="lyon"/><category term="dev"/></entry><entry><title>Histoires d'un S.R.E. perfectionniste sous pression</title><link href="https://blog.freezed.me/articles/2022/09/histoires-dun-sre-perfectionniste-sous-pression/" rel="alternate"/><published>2022-09-29T19:00:00+02:00</published><updated>2022-09-29T19:00:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2022-09-29:/articles/2022/09/histoires-dun-sre-perfectionniste-sous-pression/</id><summary type="html">&lt;p&gt;Maintenir une infrastructure en conditions opérationnelles demande un certain nombre de choses, dont l'accès à des logs de la dites infrastructure.&lt;/p&gt;</summary><content type="html">&lt;h3&gt;Lire un flux Logs Data Plateform avec de bonnes pratiques python.&lt;/h3&gt;
&lt;p&gt;Cette présentation c’est déroulée dans le cadre des &lt;a href="https://www.afpy.org/"&gt;rencontres lyonnaises et mensuelles de l'AFPy&lt;/a&gt; organisées par &lt;a href="https://www.courtbouillon.org/"&gt;CourtBouillon&lt;/a&gt;, &lt;a href="https://stella.coop/"&gt;Stella&lt;/a&gt; et l'&lt;a href="https://www.afpy.org/"&gt;AFPy&lt;/a&gt;. (via &lt;a href="https://www.meetup.com/fr-FR/python-afpy-lyon/events/287980312/"&gt;Meetup&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;img alt="logo AFPy Lyon" src="https://blog.freezed.me/img/afpylyon-200.png"&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Maintenir une infrastructure en conditions opérationnelles demande un certain nombre de choses, dont l'accès à des logs de la dites infrastructure.&lt;/p&gt;
&lt;p&gt;Parmi les outils disponibles nous allons utiliser dans cette présentation le service &lt;a href="https://www.ovhcloud.com/fr/logs-data-platform/"&gt;Logs Data Platform&lt;/a&gt; qui utilise &lt;a href="https://opensearch.org/"&gt;OpenSearch&lt;/a&gt; (entre autre).&lt;/p&gt;
&lt;p&gt;LDP (pour les intimes) est un service &lt;a href="https://www.ovhcloud.com/fr/"&gt;OVHcloud&lt;/a&gt; et cette présentation vous proposera de découvrir comment accéder à des logs LDP en utilisant Python.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Support de présentation : &lt;a href="https://blog.freezed.me/pdf/20220929-afpy-ldpy.pdf"&gt;📦️ archive&lt;/a&gt; / &lt;a href="https://gitlab.com/ftalk/ldpy/-/blob/afpy/PITCHME.pdf"&gt;📝 &lt;code&gt;ftalk/ldpy&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dépôt de code: &lt;a href="https://gitlab.com/forga/tool/ovh/ldpy"&gt;&lt;code&gt;forga/tool/ovh/ldpy&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="Conférences"/><category term="afpy"/><category term="talk"/><category term="lyon"/><category term="dev"/><category term="cli"/><category term="python"/><category term="helloworld"/><category term="logs"/><category term="ovh"/><category term="ldp"/></entry><entry><title>L’enfer du packaging Python</title><link href="https://blog.freezed.me/articles/2022/05/lenfer-du-packaging-python/" rel="alternate"/><published>2022-05-18T19:00:00+02:00</published><updated>2022-05-18T19:00:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2022-05-18:/articles/2022/05/lenfer-du-packaging-python/</id><summary type="html">&lt;p&gt;Mais pourquoi diable est-ce l’enfer de créer et partager des paquets Python ?&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;a href="https://yabz.fr/"&gt;Guillaume Ayoub&lt;/a&gt; (&lt;sup&gt;&lt;a href="https://www.afpy.org/"&gt;1&lt;/a&gt;, &lt;a href="https://github.com/liZe"&gt;2&lt;/a&gt;&lt;/sup&gt;), organisé par &lt;a href="https://www.courtbouillon.org/"&gt;CourtBouillon&lt;/a&gt;, &lt;a href="https://stella.coop/"&gt;Stella&lt;/a&gt; et l'&lt;a href="https://www.afpy.org/"&gt;AFPy&lt;/a&gt;. (via &lt;a href="https://www.meetup.com/fr-FR/Python-AFPY-Lyon/events/285563922/"&gt;Meetup&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Support&lt;/strong&gt;: sur &lt;a href="https://www.courtbouillon.org/static/presentations/L%E2%80%99enfer%20du%20packaging.pdf"&gt;&lt;code&gt;courtbouillon.org&lt;/code&gt;&lt;/a&gt; ou &lt;a href="https://blog.freezed.me/articles/2022/05/lenfer-du-packaging-python/pdf/20220518-afpy-lyon-enfer_packaging-python.pdf"&gt;archive&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ce mois-ci, Guillaume vient nous parler de packaging Python !&lt;/p&gt;
&lt;p&gt;🔥🎁🔥&lt;/p&gt;
&lt;p&gt;Écrire du code en Python, c’est sympa. Vous êtes là, vous devez donc être un petit peu d’accord avec cela. Mais si, passée votre timidité, vous avez le courage de partager votre code avec les autres, alors vous voilà face à un problème de taille : le packaging. Vous cherchez tant bien que mal la documentation associée, vous trouvez nombre d’informations contradictoires, vous finissez après des heures d’effort sur d’obscurs forums au fin fond de la toile… 😢&lt;/p&gt;
&lt;p&gt;👿 Mais pourquoi diable est-ce l’enfer de créer et partager des paquets Python ? 👿&lt;/p&gt;
&lt;p&gt;Nous parlerons durant cette présentation de l’histoire du packaging Python, des nombreux problèmes rencontrés au fil de son existence, et des manières récentes et agréables de faire des paquets avec le sourire. 😁&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h1&gt;Notes personnelles&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;la méthode: usage des wheels&lt;ul&gt;
&lt;li&gt;code source =&amp;gt; wheel (zip)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;PEP:&lt;ul&gt;
&lt;li&gt;&lt;a href="https://peps.python.org/pep-0427/"&gt;PEP 427 – The Wheel Binary Package Format 1.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://peps.python.org/pep-0517/"&gt;PEP 517 – A build-system independent format for source trees (architecture des pacquets)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://peps.python.org/pep-0518/"&gt;PEP 518 – Specifying Minimum Build System Requirements for Python Projects (&lt;code&gt;pyproject.toml&lt;/code&gt;)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://peps.python.org/pep-0621/"&gt;PEP 621 – Storing project metadata in &lt;code&gt;pyproject.toml&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://peps.python.org/pep-0660/"&gt;PEP 660 – Editable installs for pyproject.toml based builds (wheel based) (intallation éditable)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;outillage de base&lt;ul&gt;
&lt;li&gt;adieu &lt;code&gt;distutils&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;setuptools&lt;/code&gt; pour quelques rares cas particuliers&lt;ul&gt;
&lt;li&gt;&lt;code&gt;wheel&lt;/code&gt; (pacquet)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;build&lt;/code&gt; peut utiliser des constructeurs de wheel&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pip&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;WIP: &lt;code&gt;installer&lt;/code&gt; (lire la wheel) hors BS, pour se passer&lt;/li&gt;
&lt;li&gt;&lt;code&gt;installer&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;twine&lt;/code&gt; pour publier sur PyPI&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Outillage avancé&lt;ul&gt;
&lt;li&gt;&lt;code&gt;flit&lt;/code&gt; moins vaste (juste des wheels) utilise tout les fichiers versionnés&lt;/li&gt;
&lt;li&gt;&lt;code&gt;poetry&lt;/code&gt; très vaste&lt;/li&gt;
&lt;li&gt;`…&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Condition un &lt;code&gt;pip&lt;/code&gt; récent&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Bonus :&lt;/strong&gt; Origine du nom &lt;em&gt;wheel&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://discuss.python.org/t/where-the-name-wheel-comes-from/6708"&gt;Where the name “Wheel” comes from? - python.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Cheese_Shop_sketch"&gt;Cheese Shop sketch&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="talk"/><category term="lyon"/><category term="afpy"/><category term="dev"/><category term="packaging"/><category term="python"/></entry><entry><title>Pijul, contrôle de version et théorie des patchs</title><link href="https://blog.freezed.me/articles/2022/04/pijul-controle-de-version-et-theorie-des-patchs/" rel="alternate"/><published>2022-04-03T16:00:00+02:00</published><updated>2022-04-03T16:00:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2022-04-03:/articles/2022/04/pijul-controle-de-version-et-theorie-des-patchs/</id><summary type="html">&lt;p&gt;Pijul est un système de contrôle de versions basé sur une théorie mathématique des changements.&lt;/p&gt;</summary><content type="html">&lt;h3&gt;&lt;a href="https://pretalx.jdll.org/jdll2022/talk/M3GRXV/"&gt;Pijul, contrôle de version et théorie des patchs&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;par &lt;a href="https://fr.linkedin.com/in/pierre-%C3%A9tienne-meunier-1b93b619b"&gt;Pierre-Étienne Meunier&lt;/a&gt; - 2022-04-03 16:00–16:55 Studio danse&lt;/p&gt;
&lt;p&gt;&lt;img alt="logo JDLL 2022" src="https://blog.freezed.me/img/jdll-2022.jpg"&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://pijul.org/"&gt;Pijul&lt;/a&gt; est un système de contrôle de versions basé sur une théorie mathématique des changements.&lt;/p&gt;
&lt;p&gt;Le contrôle de versions est un outil fondamental du développement. Or, les outils existants (Git, SVN, Mercurial…) sont d'une telle complexité que de nombreux autres domaines du travail informatique ne peuvent pas l'utiliser. De plus, cette complexité crée des processus rigides et des tâches inutiles, ce qui gaspille un temps d'ingénierie conséquent à l'échelle globale.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://pijul.org/"&gt;Pijul&lt;/a&gt; prétend résoudre une partie de ces problèmes en utilisant une théorie mathématique solide, tout en étant totalement transparente pour l'utilisateur. En particulier, la commutation de patchs permet une utilisation intuitive et un passage à de très grandes échelles.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;[MàJ du 3/10/22]:&lt;/em&gt; &lt;a href="https://www.videos-libr.es/w/5obLQ8WGTScXyCMSHTDFsK"&gt;Lien vers la captation vidéo&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Notes personnelles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Système distribué&lt;/li&gt;
&lt;li&gt;conflit&lt;ul&gt;
&lt;li&gt;algèbre a la rescousse&lt;ul&gt;
&lt;li&gt;associativité&lt;/li&gt;
&lt;li&gt;commutativité&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Le problème de la fusion a 3 branches (&lt;a href="https://pijul.org/manual/why_pijul.html#associativity"&gt;voir&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Quelles structure de donnée?&lt;ul&gt;
&lt;li&gt;Proposition de &lt;a href="https://fr.linkedin.com/in/smimram"&gt;Samuel Mimran&lt;/a&gt; (polytechnique)&lt;ul&gt;
&lt;li&gt;modélisation en graph&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Définition de conflit&lt;ul&gt;
&lt;li&gt;sommet&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;En pratique&lt;ul&gt;
&lt;li&gt;en rust&lt;/li&gt;
&lt;li&gt;beta depuis 18/1/22&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.rs/sanakirja/latest/sanakirja/"&gt;&lt;code&gt;sanakirja&lt;/code&gt;&lt;/a&gt;: lib structure de données transactionnelle&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.rs/crate/libpijul/1.0.0-beta.1"&gt;&lt;code&gt;libpijul&lt;/code&gt;&lt;/a&gt;: les algo de cet présentation&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nest.pijul.com/pijul/pijul"&gt;&lt;code&gt;pijul&lt;/code&gt;&lt;/a&gt;: ligne de commande et réseau&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.rs/thrussh/latest/thrussh/"&gt;&lt;code&gt;trussh&lt;/code&gt;&lt;/a&gt;: implémentation SSH client et serveur rust&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;hébergement: &lt;a href="https://nest.pijul.com"&gt;&lt;code&gt;nest.pijul.com&lt;/code&gt;&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;-&amp;gt; &lt;a href="https://git-man-page-generator.lokaltog.net/#ZXhwbG9kZSQkc3RhZ2U="&gt;générateur de page de manuel git&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Bonus&lt;ul&gt;
&lt;li&gt;&lt;em&gt;cherry-picking&lt;/em&gt;, clones, partiels, &lt;a href="https://pijul.org/manual/why_pijul.html#change-commutation"&gt;commutation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;patch détachable&lt;/li&gt;
&lt;li&gt;peut fonctionner en lecture seule&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="talk"/><category term="jdll"/><category term="lyon"/><category term="git"/><category term="mercurial"/><category term="innovation"/><category term="performance"/><category term="rust"/><category term="citoyen"/></entry><entry><title>Modèles économiques du Logiciel Libre et l'association PLOSS RA</title><link href="https://blog.freezed.me/articles/2022/04/modeles-economiques-du-logiciel-libre-et-lassociation-ploss-ra/" rel="alternate"/><published>2022-04-03T15:00:00+02:00</published><updated>2022-04-03T15:00:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2022-04-03:/articles/2022/04/modeles-economiques-du-logiciel-libre-et-lassociation-ploss-ra/</id><summary type="html">&lt;p&gt;SUMMARY&lt;/p&gt;</summary><content type="html">&lt;h3&gt;&lt;a href="https://pretalx.jdll.org/jdll2022/talk/DGFJXP/"&gt;Présentation des modèles économiques du Logiciel Libre et de l'association PLOSS RA&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;par &lt;a href="https://fr.linkedin.com/in/clementoudot"&gt;Clément Oudot&lt;/a&gt; - &lt;a href="https://fr.linkedin.com/in/patrickabiven"&gt;Patrick Abiven&lt;/a&gt; - 2022-04-03 15:00–15:55, Vie citoyenne&lt;/p&gt;
&lt;p&gt;&lt;img alt="logo JDLL 2022" src="https://blog.freezed.me/img/jdll-2022.jpg"&gt;&lt;/p&gt;
&lt;p&gt;PLOSS RA regroupe des entreprises locales participant à l'écosystème du Logiciel Libre.&lt;/p&gt;
&lt;p&gt;Le logiciel libre est aujourd'hui utilisé dans des contextes personnels, associatifs, éducatifs et professionnels. De nombreuses sociétés proposent aujourd'hui des services autour du libre et contribuent à cet écosystème. Il existe de nombreux modèles économiques permettant à ces entreprises de se développer, nous les présenterons en fournissant quelques exemples d'entreprises locales membres de &lt;a href="https://www.ploss-ra.fr/"&gt;PLOSS RA&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;[Lien vers la captation vidéo][captation]&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Notes personnelles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PLOSS RAA&lt;ul&gt;
&lt;li&gt;Adhérant au &lt;a href="https://cnll.fr/"&gt;CNLL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;~35 entreprise du numérique&lt;/li&gt;
&lt;li&gt;action: Campus du lbre, FLOSScon, etc.&lt;/li&gt;
&lt;li&gt;action collectives:&lt;/li&gt;
&lt;li&gt;force de proposition&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.rpll.fr/-2022-"&gt;RPLL 2022&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;28 juin 2022 a l'hotel de région&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;LL marché en forte croissance&lt;/li&gt;
&lt;li&gt;LL dans le marché IT 2017&lt;ul&gt;
&lt;li&gt;9.9% FR (2020: 11.1%)&lt;/li&gt;
&lt;li&gt;6.4% D&lt;/li&gt;
&lt;li&gt;6.5% GB&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;emploi FR&lt;ul&gt;
&lt;li&gt;45000 - 2017&lt;/li&gt;
&lt;li&gt;56000 - 2020&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Naissance de l'économie du libre&lt;ul&gt;
&lt;li&gt;sans rareté pas d'économie&lt;/li&gt;
&lt;li&gt;Le LL n'est pas rare, c'est le service associé qui est vendu&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Les acteurs ont des métiers différents&lt;/li&gt;
&lt;li&gt;communautaire / entreprise&lt;ol&gt;
&lt;li&gt;OS/libre mais sans support&lt;/li&gt;
&lt;li&gt;définition variable&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.worteks.com/"&gt;Worteks&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;expertise&lt;/li&gt;
&lt;li&gt;200+ clients&lt;/li&gt;
&lt;li&gt;5 an ancienneté&lt;/li&gt;
&lt;li&gt;50 / 50 public/privé&lt;/li&gt;
&lt;li&gt;70% france&lt;/li&gt;
&lt;li&gt;85% europe&lt;/li&gt;
&lt;li&gt;red hat / &lt;a href="https://www.bluemind.net/"&gt;bluemind&lt;/a&gt; / &lt;a href="https://www.onlyoffice.com/fr/"&gt;onlyoffice&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apitech.net/"&gt;Apitech&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;80% d'activité en LL&lt;/li&gt;
&lt;li&gt;1991 / 22 personnes&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;[MàJ du 3/10/22]:&lt;/em&gt; [captation]: https://www.videos-libr.es/w/98huApkGUVavSsFBr5cSyY&lt;/p&gt;</content><category term="Bloc-notes"/><category term="talk"/><category term="jdll"/><category term="lyon"/><category term="collectif"/><category term="logiciel libre"/></entry><entry><title>Histoires d'un sportif perfectionniste sous pression [JDLL]</title><link href="https://blog.freezed.me/articles/2022/04/histoires-dun-sportif-perfectionniste-sous-pression-jdll/" rel="alternate"/><published>2022-04-03T14:00:00+02:00</published><updated>2022-04-03T14:00:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2022-04-03:/articles/2022/04/histoires-dun-sportif-perfectionniste-sous-pression-jdll/</id><summary type="html">&lt;p&gt;Garder le contrôle sur les données que je partage avec des services en ligne.&lt;/p&gt;</summary><content type="html">&lt;h3&gt;Garder le contrôle sur les données que je partage avec des services en ligne.&lt;/h3&gt;
&lt;p&gt;Les 2 &amp;amp; 3 avril 2022 se sont déroulées les &lt;a href="https://jdll.org"&gt;Journées du Logiciel Libre&lt;/a&gt; à Lyon.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://pretalx.jdll.org/jdll2022/talk/MKNM8H/"&gt;&lt;img alt="logo JDLL 2022" src="https://blog.freezed.me/img/jdll-2022.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Strava&lt;/em&gt;, &lt;em&gt;runkeeper&lt;/em&gt;, &lt;em&gt;runtastic&lt;/em&gt;, … sont des réseaux sociaux pour les activités sportives basé sur l'usage de grandes quantité de données géolocalisés pour fournir en retour divers services.&lt;/p&gt;
&lt;p&gt;Le fonctionnement par défaut ne permet pas facilement de limiter les données transmises et le coût d'usage en données personnel devient très vite élevé si on n'utilise pas la totalité des services proposé.&lt;/p&gt;
&lt;p&gt;J'ai souhaité construire un outil qui permettrait de choisir les données que je transmet, me permettant de bénéficier des quelques services de mon choix en limitant les données utilisé par les services qui ne m'intéressent pas.&lt;/p&gt;
&lt;p&gt;C'est un projet expérimental et ouvert qui permet de mettre en lumière l’économie de la donnée des grands services en ligne.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Support de présentation : &lt;a href="https://blog.freezed.me/pdf/20220403-jdll-geostrapy.pdf"&gt;📦️ archive&lt;/a&gt; / &lt;a href="https://lab.frogg.it/fcode/geostrapy/-/blob/13-jdll-talk/docs/20220403-jdll-geostrapy.pdf"&gt;📝 &lt;code&gt;fcode/geostrapy&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dépôt de code: &lt;a href="https://lab.frogg.it/fcode/geostrapy"&gt;&lt;code&gt;fcode/geostrapy&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;[MàJ du 3/10/22]:&lt;/em&gt; &lt;a href="https://www.videos-libr.es/w/wEsek34z3YQpExgs2HLHLH"&gt;Lien vers la captation vidéo&lt;/a&gt;&lt;/p&gt;</content><category term="Conférences"/><category term="jdll"/><category term="talk"/><category term="lyon"/><category term="dev"/><category term="cli"/><category term="python"/><category term="privacy"/></entry><entry><title>Accompagnement émancipateur au numérique</title><link href="https://blog.freezed.me/articles/2022/04/accompagnement-emancipateur-au-numerique/" rel="alternate"/><published>2022-04-03T13:00:00+02:00</published><updated>2022-04-03T13:00:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2022-04-03:/articles/2022/04/accompagnement-emancipateur-au-numerique/</id><summary type="html">&lt;p&gt;Réflexions pour un accompagnement au numérique qui fasse sens.&lt;/p&gt;</summary><content type="html">&lt;h3&gt;&lt;a href="https://pretalx.jdll.org/jdll2022/talk/HLGAA8/"&gt;Qu'est-ce que c'est, un accompagnement émancipateur au numérique ?&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;par &lt;a href="https://letab.li/"&gt;Julie / Romain&lt;/a&gt; - 2022-04-03 13:00–13:55, Vie citoyenne&lt;/p&gt;
&lt;p&gt;&lt;img alt="logo JDLL 2022" src="https://blog.freezed.me/img/jdll-2022.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Réflexions pour un accompagnement au numérique qui fasse sens.&lt;/p&gt;
&lt;p&gt;Comment accompagner au mieux un large public dans ses choix d'outils et d'usages numériques ? Comment ne pas proposer des solutions toutes faites ? Le logiciel libre est-il toujours la meilleure solution ? Comment produire des changements durables ? À partir de retours d'expérience de formations, ateliers, cryptoparties ou install partys, on vous propose des axes de réflexion collective.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;[MàJ du 3/10/22]:&lt;/em&gt; &lt;a href="https://www.videos-libr.es/w/q1XEHTex9TspGZ3p37dhGG"&gt;Lien vers la captation vidéo&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Notes personnelles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;C'est quoi un accompagnement émancipateur?&lt;ul&gt;
&lt;li&gt;Se passer des accompagnateurs&lt;/li&gt;
&lt;li&gt;choix fait par la personne forme&lt;/li&gt;
&lt;li&gt;prendre en compte les besoin et contrainte&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Partir de la personne, voir travail de &lt;a href="https://fr.wikipedia.org/wiki/Carl_Rogers"&gt;Karl Rogers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Sortir de la position d'experte (&lt;a href="https://www.fayard.fr/pluriel/la-nuit-des-proletaires-9782818502969"&gt;Jacques Ranciere - la nuit des prolétaires&lt;/a&gt;)&lt;ul&gt;
&lt;li&gt;a éviter: "Qui ne connais pas?" / "Tout le monde connaît!"&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="talk"/><category term="jdll"/><category term="lyon"/><category term="logiciel libre"/><category term="collectif"/><category term="citoyen"/></entry><entry><title>Ceph, le stockage du futur</title><link href="https://blog.freezed.me/articles/2022/04/ceph-le-stockage-du-futur/" rel="alternate"/><published>2022-04-03T12:00:00+02:00</published><updated>2022-04-03T12:00:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2022-04-03:/articles/2022/04/ceph-le-stockage-du-futur/</id><summary type="html">&lt;p&gt;Présentation de Ceph, une plateforme libre de stockage distribué.&lt;/p&gt;</summary><content type="html">&lt;h3&gt;&lt;a href="https://pretalx.jdll.org/jdll2022/talk/SBZZGF/"&gt;Ceph, le stockage du futur&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;par &lt;a href="http://www.gcolpart.com/"&gt;Gregory Colpart&lt;/a&gt; - 2022-04-03 12:00–12:55 Salle des cultures&lt;/p&gt;
&lt;p&gt;&lt;img alt="logo JDLL 2022" src="https://blog.freezed.me/img/jdll-2022.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Présentation de &lt;a href="https://ceph.io/en/"&gt;Ceph&lt;/a&gt;, une plateforme libre de stockage distribué.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://ceph.io/en/"&gt;Ceph&lt;/a&gt; est une plateforme libre de stockage distribué. &lt;a href="https://ceph.io/en/"&gt;Ceph&lt;/a&gt; permet de stocker des objets répartis sur plusieurs nœuds de façon redondante. Cela permet de multiples cas d'usage : archiver de grand volume de données (Po), partager des fichiers entre serveurs… mais surtout cela devient un outil de base des solutions libres de virtualisation/conteneurisation (KVM, Proxmox, OpenStack, Kubernetes…) et des solutions de « Cloud Storage » chez DigitalOcean, OVH, etc. Comment fonctionne Ceph en interne ? Revenons sur les mécanismes de base de la technologie : OSD, PG, monitor, etc. Comment utiliser Ceph concrètement ? Parlons de l'installation et l'utilisation en mode bloc (rdb) ou en mode filesystem (CephFS).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;[MàJ du 3/10/22]:&lt;/em&gt; &lt;a href="https://www.videos-libr.es/w/8eh1ikxAD2PBNWjB6ew8gV"&gt;Lien vers la captation vidéo&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Notes personnelles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;gérant &lt;a href="https://evolix.com/presentation.html"&gt;evolix&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;infogérant, hébergement, HA,&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ceph = céphalopode&lt;ul&gt;
&lt;li&gt;historique stockage:&lt;ul&gt;
&lt;li&gt;main préhistorique, écriture mésopotamien, métiers a tisser, HDD, baie stockage&lt;/li&gt;
&lt;li&gt;NDB&lt;/li&gt;
&lt;li&gt;DRBD&lt;/li&gt;
&lt;li&gt;LVM&lt;/li&gt;
&lt;li&gt;ZFS, BTRFS&lt;/li&gt;
&lt;li&gt;GFS, Lustre, GlusterFS, ...&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;disque distribué auto-réparant&lt;/li&gt;
&lt;li&gt;historique Ceph:&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Sage_Weil"&gt;Sage Weil&lt;/a&gt;
        - co-fondateur &lt;a href="https://www.dreamhost.com/"&gt;DreamHost&lt;/a&gt; en 97
        - these &lt;a href="https://ceph.io/assets/pdfs/weil-thesis.pdf"&gt;&lt;em&gt;Ceph: Reliable, Scalable, and High-Performance Distributed Storage&lt;/em&gt;&lt;/a&gt;
        - co-fondateur &lt;a href="https://en.wikipedia.org/wiki/Inktank_Storage"&gt;Inktank Storage&lt;/a&gt; en
                - racheté par RedHat en 2014&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;LGPL / github / Linux / freeBSD&lt;/li&gt;
&lt;li&gt;Concept&lt;ul&gt;
&lt;li&gt;fiable, pas de SPOF, zero downtime&lt;/li&gt;
&lt;li&gt;extensible&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;cas d'usage&lt;ul&gt;
&lt;li&gt;CERN big bang III&lt;/li&gt;
&lt;li&gt;gros volumes&lt;/li&gt;
&lt;li&gt;partage multi-serveur&lt;/li&gt;
&lt;li&gt;stockage objet compatible S3&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OSD&lt;/strong&gt;: &lt;em&gt;Object Storage Device&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PG&lt;/strong&gt;: &lt;em&gt;Placement Group&lt;/em&gt;&lt;ul&gt;
&lt;li&gt;128 a 1024 PGs par pool&lt;/li&gt;
&lt;li&gt;PG repartit sur 3 OSD&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Pool&lt;ul&gt;
&lt;li&gt;plusieurs pool par cluster&lt;/li&gt;
&lt;li&gt;1 pool par usage&lt;/li&gt;
&lt;li&gt;1 pool par type de disque (SSD, HDD, ...)&lt;/li&gt;
&lt;li&gt;mode réplication ou &lt;em&gt;erasure coding&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Accès&lt;ul&gt;
&lt;li&gt;&lt;em&gt;file&lt;/em&gt;: cephFS&lt;/li&gt;
&lt;li&gt;&lt;em&gt;block&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;object&lt;/em&gt; (compatible S3)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Comment ça marche&lt;ul&gt;
&lt;li&gt;des démons&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="talk"/><category term="jdll"/><category term="lyon"/><category term="storage"/><category term="ceph"/></entry><entry><title>JdLL - La Meta conference</title><link href="https://blog.freezed.me/articles/2022/04/jdll-la-meta-conference/" rel="alternate"/><published>2022-04-02T16:00:00+02:00</published><updated>2022-04-02T16:00:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2022-04-02:/articles/2022/04/jdll-la-meta-conference/</id><summary type="html">&lt;p&gt;Mais au fait, d'où ça sort les JdLL ? Qui les organise ? Comment ?&lt;/p&gt;</summary><content type="html">&lt;h3&gt;&lt;a href="https://pretalx.jdll.org/jdll2022/talk/EZLCWX/"&gt;JdLL - La Meta conference&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;par &lt;a href="https://stephane.parunakian.fr/"&gt;Stéphane Parunakian&lt;/a&gt; &amp;amp; &lt;a href="https://hexaltation.org/"&gt;Grégoire Cutzach&lt;/a&gt; - 2022-04-02 16:00–16:55 Atelier du mouvement&lt;/p&gt;
&lt;p&gt;&lt;img alt="logo JDLL 2022" src="https://blog.freezed.me/img/jdll-2022.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Mais au fait, d'où ça sort les JdLL ? Qui les organise ? Comment ?&lt;/p&gt;
&lt;p&gt;Les Journées du Logiciel Libre, ça existe depuis 1998 et elles ont bien évoluées depuis !&lt;/p&gt;
&lt;p&gt;[Lien vers la captation vidéo][captation]&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Notes personnelles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1997 -&amp;gt; 1999 mais rien de formel&lt;/li&gt;
&lt;li&gt;2012 a la MPT - Salle des Rancy&lt;/li&gt;
&lt;li&gt;Organisé par: ALDIL / MPT / Illyse / bénévoles&lt;/li&gt;
&lt;li&gt;Plusieurs rôle, pas fixe d'années en années&lt;/li&gt;
&lt;li&gt;Budget: papier, alimentation bénévoles, matériel,&lt;/li&gt;
&lt;li&gt;Difficulté: équipe changeante et personnel non technique&lt;/li&gt;
&lt;li&gt;Outil état des lieux 2015&lt;ul&gt;
&lt;li&gt;Liste de diffusion interne&lt;/li&gt;
&lt;li&gt;Formulaire sur site jdll.org&lt;/li&gt;
&lt;li&gt;Et c'est tout&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Mise en place outil&lt;ul&gt;
&lt;li&gt;mattermost&lt;/li&gt;
&lt;li&gt;redmine -&amp;gt; échec&lt;/li&gt;
&lt;li&gt;Rapla -&amp;gt; bien mais pas super adapté aux jdll&lt;/li&gt;
&lt;li&gt;etherpad -&amp;gt; en prod mais a repasser&lt;/li&gt;
&lt;li&gt;pretalx&lt;/li&gt;
&lt;li&gt;nextcloud&lt;/li&gt;
&lt;li&gt;site: grav&lt;/li&gt;
&lt;li&gt;git: démarrage cette annee&lt;/li&gt;
&lt;li&gt;peertube&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Avenir&lt;ul&gt;
&lt;li&gt;outil, mise a jours, etc.&lt;/li&gt;
&lt;li&gt;Petites nouveauté: concert, projection&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;fonte des bénévoles&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;[MàJ du 3/10/22]:&lt;/em&gt; [captation]: https://www.videos-libr.es/w/3gt9rF4NsWdiwkCeeQ6rwE&lt;/p&gt;</content><category term="Bloc-notes"/><category term="talk"/><category term="jdll"/><category term="lyon"/><category term="collectif"/><category term="méthode"/></entry><entry><title>Histoires d'un sysadmin perfectionniste sous pression</title><link href="https://blog.freezed.me/articles/2022/04/histoires-dun-sysadmin-perfectionniste-sous-pression/" rel="alternate"/><published>2022-04-02T13:00:00+02:00</published><updated>2022-04-02T13:00:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2022-04-02:/articles/2022/04/histoires-dun-sysadmin-perfectionniste-sous-pression/</id><summary type="html">&lt;p&gt;Découvrez ZFS: un stockage fiable, puissant et accessible.&lt;/p&gt;</summary><content type="html">&lt;h3&gt;Découvrez &lt;code&gt;ZFS&lt;/code&gt;: un stockage fiable, puissant et accessible.&lt;/h3&gt;
&lt;p&gt;Les 2 &amp;amp; 3 avril 2022 se sont déroulées les &lt;a href="https://jdll.org"&gt;Journées du Logiciel Libre&lt;/a&gt; à Lyon.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://pretalx.jdll.org/jdll2022/talk/AHEQRE/"&gt;&lt;img alt="logo JDLL 2022" src="https://blog.freezed.me/img/jdll-2022.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;J'y ai présenté &lt;a href="https://openzfs.org"&gt;ZFS&lt;/a&gt; un système de fichier qui est aussi un gestionnaire de volumes.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;ZFS&lt;/code&gt; est un outil passionnant qui va au-delà d'un système de fichier. Cette présentation se veut techniquement accessible et vise à partager ma découverte de cet outil pour (peut-être) vous donner envie de l'essayer.&lt;/p&gt;
&lt;p&gt;Né au début des années 2000 au sein de &lt;em&gt;Sun Microsytems&lt;/em&gt;, ZFS est aujourd'hui développé au travers du projet &lt;a href="https://openzfs.org"&gt;openZFS&lt;/a&gt; pour les noyaux &lt;em&gt;Linux&lt;/em&gt; et &lt;em&gt;freeBSD&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt="openzfs logo" src="https://blog.freezed.me/img/openzfs.png"&gt;&lt;/p&gt;
&lt;p&gt;Support de présentation : &lt;a href="https://blog.freezed.me/pdf/20220402-jdll-openzfs.pdf"&gt;📦️ archive&lt;/a&gt; / &lt;a href="https://lab.frogg.it/ftalk/openzfs/-/blob/jdll/pdf/20220402-jdll-openzfs.pdf"&gt;📝 &lt;code&gt;ftalk/openzfs&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;[MàJ du 3/10/22]:&lt;/em&gt; &lt;a href="https://www.videos-libr.es/w/tnRUMm49tErvDhAT97pP2F"&gt;Lien vers la captation vidéo&lt;/a&gt;&lt;/p&gt;</content><category term="Conférences"/><category term="jdll"/><category term="talk"/><category term="lyon"/><category term="storage"/><category term="zfs"/><category term="admin"/><category term="cli"/><category term="backup"/></entry><entry><title>Quand une institution publique s'intéresse à un commun</title><link href="https://blog.freezed.me/articles/2022/04/quand-une-institution-publique-sinteresse-a-un-commun/" rel="alternate"/><published>2022-04-02T11:00:00+02:00</published><updated>2022-04-02T11:00:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2022-04-02:/articles/2022/04/quand-une-institution-publique-sinteresse-a-un-commun/</id><summary type="html">&lt;p&gt;Le ministère de la Culture a lancé un dictionnaire collaboratif numérique à partir du Wiktionnaire.&lt;/p&gt;</summary><content type="html">&lt;h3&gt;&lt;a href="https://pretalx.jdll.org/jdll2022/talk/ACWCTJ/"&gt;Quand une institution publique s'intéresse à un commun, le cas du Dictionnaire des francophones&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;par &lt;a href="https://www.univ-lyon3.fr/gasparini-noe"&gt;Noé Gasparini&lt;/a&gt; - 2022-04-02 11:00–11:55 Atelier du mouvement&lt;/p&gt;
&lt;p&gt;&lt;img alt="logo JDLL 2022" src="https://blog.freezed.me/img/jdll-2022.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Le ministère de la Culture a lancé un dictionnaire collaboratif numérique à partir du Wiktionnaire.&lt;/p&gt;
&lt;p&gt;En 2018, le président de la République française initie un nouveau plan pour la langue française incluant un nouvel objet numérique, le Dictionnaire des francophones. Celui-ci s'adresse à l'ensemble des francophones et propose d'adapter l'ordre de son contenu selon les lieux d'usage du français. Cette nouvelle base de connaissances libre intègre plusieurs ressources existantes, dont le Wiktionnaire, un dictionnaire collaboratif libre, projet frère de Wikipédia. Un projet libre qui fonctionnait déjà bien et se trouve ainsi ré-affiché au sein d'une nouvelle interface proposée par une institution publique.&lt;/p&gt;
&lt;p&gt;Un commun propulsé par une institution publique ? Le Wiktionnaire a-t-il ainsi gagné ses lettres de noblesse ou vient-il de se faire forker ? Quels sont les valeurs des deux objets numériques ? Sont-ils concurrents ou plutôt copains ?&lt;/p&gt;
&lt;p&gt;Venez en apprendre un peu plus sur ces différents projets, par les personnes impliquées, et poser vos questions sur cette initiative originale de création d'un nouveau commun à partir d'un commun existant.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;[MàJ du 3/10/22]:&lt;/em&gt; &lt;a href="https://www.videos-libr.es/w/oyzhSH1TodQDKyVBJY66Xb"&gt;Lien vers la captation vidéo&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Notes personnelles:&lt;/p&gt;
&lt;p&gt;N/A&lt;/p&gt;</content><category term="Bloc-notes"/><category term="talk"/><category term="jdll"/><category term="lyon"/><category term="collectif"/><category term="citoyen"/></entry><entry><title>Histoires d'un sportif perfectionniste sous pression [AFPy]</title><link href="https://blog.freezed.me/articles/2022/03/histoires-dun-sportif-perfectionniste-sous-pression-afpy/" rel="alternate"/><published>2022-03-31T19:00:00+02:00</published><updated>2022-03-31T19:00:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2022-03-31:/articles/2022/03/histoires-dun-sportif-perfectionniste-sous-pression-afpy/</id><summary type="html">&lt;p&gt;Garder le contrôle sur les données que je partage avec des services en ligne.&lt;/p&gt;</summary><content type="html">&lt;h3&gt;Garder le contrôle sur les données que je partage avec des services en ligne.&lt;/h3&gt;
&lt;p&gt;Cette présentation c’est déroulée dans le cadre des &lt;a href="https://www.afpy.org/"&gt;rencontres lyonnaises et mensuelles de l'AFPy&lt;/a&gt; organisées par &lt;a href="https://www.courtbouillon.org/"&gt;CourtBouillon&lt;/a&gt;, &lt;a href="https://stella.coop/"&gt;Stella&lt;/a&gt; et l'&lt;a href="https://www.afpy.org/"&gt;AFPy&lt;/a&gt;. (via &lt;a href="https://www.meetup.com/Python-AFPY-Lyon/events/282750718/"&gt;Meetup&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;img alt="logo AFPy Lyon" src="https://blog.freezed.me/img/afpylyon-200.png"&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Strava&lt;/em&gt;, &lt;em&gt;runkeeper&lt;/em&gt;, &lt;em&gt;runtastic&lt;/em&gt;, … sont des réseaux sociaux pour les activités sportives basé sur l'usage de grandes quantité de données géolocalisés pour fournir en retour divers services.&lt;/p&gt;
&lt;p&gt;Le fonctionnement par défaut ne permet pas facilement de limiter les données transmises et le coût d'usage en données personnel devient très vite élevé si on n'utilise pas la totalité des services proposé.&lt;/p&gt;
&lt;p&gt;J'ai souhaité construire un outil qui permettrait de choisir les données que je transmet, me permettant de bénéficier des quelques services de mon choix en limitant les données utilisé par les services qui ne m'intéressent pas.&lt;/p&gt;
&lt;p&gt;C'est un projet expérimental et ouvert qui permet de mettre en lumière l’économie de la donnée des grands services en ligne.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Support de présentation : &lt;a href="https://blog.freezed.me/pdf/20220331-afpy-geostrapy.pdf"&gt;📦️ archive&lt;/a&gt; / &lt;a href="https://lab.frogg.it/fcode/geostrapy/-/blob/12-afpy-talk/docs/20220331-afpy-geostrapy.pdf"&gt;📝 &lt;code&gt;fcode/geostrapy&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dépôt de code: &lt;a href="https://lab.frogg.it/fcode/geostrapy"&gt;&lt;code&gt;fcode/geostrapy&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="Conférences"/><category term="afpy"/><category term="talk"/><category term="lyon"/><category term="dev"/><category term="cli"/><category term="python"/><category term="privacy"/></entry><entry><title>Manipuler des PDF en Python</title><link href="https://blog.freezed.me/articles/2021/11/manipuler-des-pdf-en-python/" rel="alternate"/><published>2021-11-25T19:00:00+01:00</published><updated>2021-11-25T19:00:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2021-11-25:/articles/2021/11/manipuler-des-pdf-en-python/</id><summary type="html">&lt;p&gt;Tour des outils python permettant de manipuler du PDF dans différentes situations.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;a href="https://yabz.fr/"&gt;Guillaume Ayoub&lt;/a&gt; (&lt;sup&gt;&lt;a href="https://www.afpy.org/"&gt;1&lt;/a&gt;, &lt;a href="https://github.com/liZe"&gt;2&lt;/a&gt;&lt;/sup&gt;), organisé par &lt;a href="https://www.courtbouillon.org/"&gt;CourtBouillon&lt;/a&gt;, &lt;a href="https://stella.coop/"&gt;Stella&lt;/a&gt; et l'&lt;a href="https://www.afpy.org/"&gt;AFPy&lt;/a&gt;.  (via &lt;a href="https://www.meetup.com/fr-FR/Python-AFPY-Lyon/events/jkcfnryccpbgc/"&gt;Meetup&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Support&lt;/strong&gt;: sur &lt;a href="https://www.courtbouillon.org/static/presentations/Manipuler%20des%20PDF%20en%20Python.pdf"&gt;&lt;code&gt;courtbouillon.org&lt;/code&gt;&lt;/a&gt; ou &lt;a href="https://blog.freezed.me/articles/2021/11/manipuler-des-pdf-en-python/pdf/20211125-manipuler_des_pdf_en_python.pdf"&gt;archive&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Il existe de nombreuses bibliothèques pour créer et modifier des documents PDF en Python, et il est parfois difficile de savoir quel outil choisir. Comme souvent, la réponse dépend de ce que l’on veut faire !&lt;/p&gt;
&lt;p&gt;Nous ferons un petit tour des différents besoins que vous pourriez avoir concernant la manipulation des PDF, que ce soit pour créer des documents simples ou complexes, apporter des modifications à des PDF existants, ou accéder à certaines informations de leur contenu. Et bien sûr, nous découvrirons également des outils adaptés à la résolution de ces problèmes.&lt;/p&gt;
&lt;p&gt;Si vous cherchez l’inspiration pour automatiser certaines tâches (pas particulièrement joyeuses…) que vous faites à la main sur vos documents, vous pourriez découvrir deux ou trois solutions qui pourraient bien vous faire gagner du temps !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h1&gt;Notes personnelles&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;Présentation basique de la structure d'un PDF&lt;/li&gt;
&lt;li&gt;Lib de récup python&lt;ul&gt;
&lt;li&gt;&lt;a href="https://readthedocs.org/projects/pdfminer-docs/downloads/pdf/latest/"&gt;pdfminer&lt;/a&gt;: récupération de texte&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pypdf2.readthedocs.io/en/latest/index.html"&gt;PyPDF2&lt;/a&gt;; récupération de métadonnées&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Lib d'affichage GPL/AGPL&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.ghostscript.com/"&gt;Ghostscript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitlab.freedesktop.org/poppler/poppler"&gt;Poppler&lt;/a&gt; (ex xpdf):&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Transformer en image&lt;ul&gt;
&lt;li&gt;binding python &lt;a href="https://gitlab.freedesktop.org/poppler/poppler"&gt;Poppler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;binding python &lt;a href="https://www.ghostscript.com/"&gt;Ghostscript&lt;/a&gt; pas super fiable&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Modifier un PDF en python&lt;ul&gt;
&lt;li&gt;Rotation: &lt;a href="https://pypi.org/project/pdfrw/"&gt;pdfrw&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fusion 2 PDF: &lt;a href="https://pypdf2.readthedocs.io/en/latest/index.html"&gt;PyPDF2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Créer un PDF&lt;ul&gt;
&lt;li&gt;Manuellement : difficile, long et maitrise de la spec nécessaire. Résultat image vectorielle. Ex. &lt;a href="https://www.courtbouillon.org/pydyf"&gt;pydyf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;interface haut niveau: liberté et faciliter une mise en page basique. Ex. &lt;a href="https://pypi.org/project/borb/"&gt;borb&lt;/a&gt; (basique et récente), &lt;a href="https://pypi.org/project/reportlab/"&gt;reportlab&lt;/a&gt; (historique et plus complète). Double licence libre/payant. Emprisonnement haut niveau du code python&lt;/li&gt;
&lt;li&gt;depuis HTML/CSS: Mise en page complexe, standards solides, pas précis au pixel. Ex. &lt;a href="https://weasyprint.org/"&gt;Weasyprint&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;</content><category term="Bloc-notes"/><category term="talk"/><category term="afpy"/><category term="lyon"/><category term="pdf"/><category term="dev"/><category term="python"/><category term="cli"/></entry><entry><title>Iaas (Interruption as a Sageness)</title><link href="https://blog.freezed.me/articles/2021/11/iaas-interruption-as-a-sageness/" rel="alternate"/><published>2021-11-12T19:00:00+01:00</published><updated>2021-11-12T19:00:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2021-11-12:/articles/2021/11/iaas-interruption-as-a-sageness/</id><summary type="html">&lt;p&gt;Par &lt;a href="https://davidaparicio.gitlab.io/website/"&gt;David Aparicio&lt;/a&gt; &lt;a href="https://gitlab.com/davidaparicio"&gt;&lt;code&gt;1&lt;/code&gt;&lt;/a&gt; &lt;a href="https://github.com/davidaparicio"&gt;&lt;code&gt;2&lt;/code&gt;&lt;/a&gt;, organisé par &lt;a href="https://cafedevops.org/"&gt;Café Devops&lt;/a&gt; (via &lt;a href="https://www.meetup.com/fr-FR/cafe-devops-lyon/events/281097147/"&gt;Meetup&lt;/a&gt;). Support (et sources) dispo sur &lt;a href="https://davidaparicio.gitlab.io/website/talks/CafeDevOps2021_IaaS.pdf"&gt;davidaparicio.gitlab.io&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Père Castor, raconte nous une histoire (d'OPS)
L'échec comme une source de connaissance. Pouvons-nous apprendre des erreurs des plus grands ?&lt;/p&gt;
&lt;p&gt;Nous allons, pour cela, faire la revue de quelques grands incidents …&lt;/p&gt;&lt;/blockquote&gt;</summary><content type="html">&lt;p&gt;Par &lt;a href="https://davidaparicio.gitlab.io/website/"&gt;David Aparicio&lt;/a&gt; &lt;a href="https://gitlab.com/davidaparicio"&gt;&lt;code&gt;1&lt;/code&gt;&lt;/a&gt; &lt;a href="https://github.com/davidaparicio"&gt;&lt;code&gt;2&lt;/code&gt;&lt;/a&gt;, organisé par &lt;a href="https://cafedevops.org/"&gt;Café Devops&lt;/a&gt; (via &lt;a href="https://www.meetup.com/fr-FR/cafe-devops-lyon/events/281097147/"&gt;Meetup&lt;/a&gt;). Support (et sources) dispo sur &lt;a href="https://davidaparicio.gitlab.io/website/talks/CafeDevOps2021_IaaS.pdf"&gt;davidaparicio.gitlab.io&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Père Castor, raconte nous une histoire (d'OPS)
L'échec comme une source de connaissance. Pouvons-nous apprendre des erreurs des plus grands ?&lt;/p&gt;
&lt;p&gt;Nous allons, pour cela, faire la revue de quelques grands incidents de la dernière décennie : Github, Google, Amazon, Facebook, Apple, Microsoft, Gitlab ou plus récemment Fastly À travers la lecture des post-mortems des incidents, nous analyserons la root cause, la mise en place de la remédiation, et en extraire des bonnes pratiques.&lt;/p&gt;
&lt;p&gt;Notre speaker, David Aparicio, est ingénieur passionné en Informatique, diplômé INSA Lyon 2014, après deux années passées à UNICAMP au Brésil, il participe activement à la communauté, à travers des Meetups et des conférences. Sa devise: « Nul développeur n'est censé ignorer la sécurité »
Si vous voulez également vous lancer comme speaker, voici ses &lt;a href="https://youtu.be/LWxe41DaONw"&gt;5 conseils pour soumettre son CfP&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;Notes personnelles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Post Mortem&lt;/em&gt; : base du talk&lt;/li&gt;
&lt;li&gt;Date du 1er bug de Grace Hooper: 1947&lt;ul&gt;
&lt;li&gt;vrai insecte&lt;/li&gt;
&lt;li&gt;innondation&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Elliot Alderson, Allsafe corp. : Drop table sur le mauvais env&lt;ul&gt;
&lt;li&gt;Victimes: AWS, GitLab, Digital Ocean, OVHcloud,&lt;/li&gt;
&lt;li&gt;Conseils:&lt;ul&gt;
&lt;li&gt;Approbation manuelle/revue&lt;/li&gt;
&lt;li&gt;Audit/protege&lt;ul&gt;
&lt;li&gt;SIEM (analyse de loqs orienté sécu)&lt;/li&gt;
&lt;li&gt;RBAC (Role Bse Access control)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;credentials protégés (Vault, Keepass, etc.)&lt;/li&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;David au bord de la piscine, tel d'astreinte sonne: incident sur le legacy&lt;ol&gt;
&lt;li&gt;Reboot: OK&lt;/li&gt;
&lt;li&gt;tel re-sonne&lt;/li&gt;
&lt;li&gt;analyse&lt;/li&gt;
&lt;li&gt;patch KISS: reload du service si pas avail en crontab, toujours en prod au bout d'un an (TPCM: Touche Pas C'est Magique)&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;SPOF&lt;ul&gt;
&lt;li&gt;Incident majeur 8 juin sur un grande quantité de service web&lt;/li&gt;
&lt;li&gt;Origine: Fastly&lt;/li&gt;
&lt;li&gt;CDN = SPOF&lt;/li&gt;
&lt;li&gt;Promesse HTTP4 ou 5 de mieux exploiter les CDN&lt;/li&gt;
&lt;li&gt;Conseil:&lt;ul&gt;
&lt;li&gt;Personnaliser les message d'erreurs&lt;/li&gt;
&lt;li&gt;Tester demande clients (E2E/Staging/Red-Black plate-forme)&lt;/li&gt;
&lt;li&gt;Procedure du IT Road book&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;OVH&lt;ul&gt;
&lt;li&gt;Incident datalake legacy -&amp;gt;_flap sur zookeeper
- ? Doubler la HIP de la JVM
- ? Fine-tunning rde JVM&lt;/li&gt;
&lt;li&gt;-&amp;gt; mise en cron d'une commande de nettoyage de la DB&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Blast effect : Zookeper, key-val store, base de beaucoup de système distribué, créé en même temps qu'Hadoop&lt;/li&gt;
&lt;li&gt;Conseils :&lt;ul&gt;
&lt;li&gt;Protocole d'incident :&lt;ul&gt;
&lt;li&gt;war room&lt;/li&gt;
&lt;li&gt;doc collab&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;maintenir les version a jour des lib&lt;/li&gt;
&lt;li&gt;circuit breaker&lt;/li&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Criteo&lt;ul&gt;
&lt;li&gt;Conseils :&lt;ul&gt;
&lt;li&gt;tests de perf&lt;/li&gt;
&lt;li&gt;monito des KPI OS&lt;/li&gt;
&lt;li&gt;Observabilité / sonde&lt;/li&gt;
&lt;li&gt;Serveur de delestage&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;NewsBlur : Mise en prod d'un MongoDB de dev&lt;/li&gt;
&lt;li&gt;Twitch : 130G de DB publié&lt;ul&gt;
&lt;li&gt;Avoid HDD (Hype Driven Development)&lt;/li&gt;
&lt;li&gt;CI/CD&lt;/li&gt;
&lt;li&gt;DevSecOps: test auto de secu (admin:admin, )&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;DNS :&lt;ul&gt;
&lt;li&gt;Slack&lt;/li&gt;
&lt;li&gt;FB&lt;/li&gt;
&lt;li&gt;Conseils:&lt;ul&gt;
&lt;li&gt;ne pas changer ses DNS pour 1.1.1.1 / 8.8.8.8 permanently&lt;/li&gt;
&lt;li&gt;séparation des préoccupation&lt;/li&gt;
&lt;li&gt;Ne pas se contenter de l'audit&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Split-brain&lt;ul&gt;
&lt;li&gt;Github&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;SRE blameless culture&lt;/li&gt;
&lt;li&gt;QA / Chaos monkey&lt;/li&gt;
&lt;li&gt;Formation des équipes&lt;/li&gt;
&lt;li&gt;Tester les backups&lt;/li&gt;
&lt;li&gt;CI/CD avec devSecOps&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Wheel of misfortune&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="talk"/><category term="lyon"/><category term="admin"/><category term="incident"/><category term="méthode"/><category term="dev"/></entry><entry><title>Using QEMU as KVM</title><link href="https://blog.freezed.me/articles/2021/09/using-qemu-as-kvm/" rel="alternate"/><published>2021-09-14T22:59:00+02:00</published><updated>2021-09-14T22:59:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2021-09-14:/articles/2021/09/using-qemu-as-kvm/</id><summary type="html">&lt;p&gt;These are legacy notes probably obsolete&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;strong&gt;&lt;code&gt;/!\&lt;/code&gt; These are legacy notes probably obsolete &lt;code&gt;/!\&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.soyoustart.com/fr/serveurs-essential/"&gt;&lt;em&gt;So You Start&lt;/em&gt; dedicated servers&lt;/a&gt; did not provide &lt;a href="https://www.soyoustart.com/fr/kvm-ip.xml"&gt;free KVM&lt;/a&gt; to run a random OS iso.
Let's try with &lt;a href="https://github.com/qemu/qemu#readme"&gt;&lt;code&gt;QEMU&lt;/code&gt;&lt;/a&gt; running an iso uploaded locally.&lt;/p&gt;
&lt;p&gt;In &lt;em&gt;rescue mode&lt;/em&gt;, download a live iso locally, install and run &lt;code&gt;QEMU&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;apt&lt;span class="w"&gt; &lt;/span&gt;update&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;apt&lt;span class="w"&gt; &lt;/span&gt;upgrade
apt&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;qemu-system-x86&lt;span class="w"&gt; &lt;/span&gt;vim
wget&lt;span class="w"&gt; &lt;/span&gt;--no-check-certificate&lt;span class="w"&gt; &lt;/span&gt;-O&lt;span class="w"&gt; &lt;/span&gt;/tmp/installer.iso&lt;span class="w"&gt; &lt;/span&gt;https://cdimage.debian.org/mirror/cdimage/release/current-live/amd64/iso-hybrid/debian-live-11.1.0-amd64-standard.iso
qemu-system-x86_64&lt;span class="w"&gt; &lt;/span&gt;-net&lt;span class="w"&gt; &lt;/span&gt;nic&lt;span class="w"&gt; &lt;/span&gt;-net&lt;span class="w"&gt; &lt;/span&gt;user,hostfwd&lt;span class="o"&gt;=&lt;/span&gt;tcp::80-:80,hostfwd&lt;span class="o"&gt;=&lt;/span&gt;tcp::443-:443&lt;span class="w"&gt; &lt;/span&gt;-m&lt;span class="w"&gt; &lt;/span&gt;4096M&lt;span class="w"&gt; &lt;/span&gt;-localtime&lt;span class="w"&gt; &lt;/span&gt;-enable-kvm&lt;span class="w"&gt; &lt;/span&gt;-hda&lt;span class="w"&gt; &lt;/span&gt;/dev/sda&lt;span class="w"&gt;  &lt;/span&gt;-vnc&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0.0.0:0&lt;span class="w"&gt; &lt;/span&gt;/tmp/installer.iso&lt;span class="w"&gt; &lt;/span&gt;-boot&lt;span class="w"&gt; &lt;/span&gt;d
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Refs &amp;amp; sources&lt;/em&gt;  :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://rinaldojonathan.com/en/cara-buat-virtual-kvm-di-server-ovh-kimsufi-soyoustart/"&gt;&lt;em&gt;How to create Virtual KVM on Kimsufi / OVH / SoYouStart&lt;/em&gt;&lt;/a&gt; by &lt;a href="https://rinaldojonathan.com/en/author/admin/"&gt;&lt;em&gt;Rinaldo Jonathan&lt;/em&gt;&lt;/a&gt; (30/5/2019)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://serverfault.com/q/1078487/369964"&gt;&lt;em&gt;Booting a Debian Live ISO on QEMU&lt;/em&gt;&lt;/a&gt;, my question on &lt;em&gt;serverfault.com&lt;/em&gt; (23/9/2021)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ahelpme.com/howto/qemu-full-virtualization-cpu-emulations-enable-disable-cpu-flags-instruction-sets/"&gt;&lt;em&gt;QEMU full virtualization – CPU emulations (enable/disable CPU flags/instruction sets)&lt;/em&gt;&lt;/a&gt; by &lt;a href="https://ahelpme.com/author/admincho/"&gt;&lt;em&gt;neoX&lt;/em&gt;&lt;/a&gt; (3/4/2018)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://unix.stackexchange.com/q/124681/280824"&gt;&lt;em&gt;How to SSH from host to guest using QEMU?&lt;/em&gt;&lt;/a&gt; by &lt;a href="https://unix.stackexchange.com/users/29330/jobin"&gt;&lt;em&gt;jobin&lt;/em&gt;&lt;/a&gt; on &lt;em&gt;unix.stackexchanqe.com&lt;/em&gt; (14/4/2014)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://serverfault.com/q/404195/369964"&gt;&lt;em&gt;KVM: Which CPU features make VMs run better?&lt;/em&gt;&lt;/a&gt; by &lt;a href="https://serverfault.com/users/90762/pythonlearner"&gt;&lt;em&gt;PythonLearner&lt;/em&gt;&lt;/a&gt; on &lt;em&gt;serverfault.com&lt;/em&gt; (2/7/12)&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="debian"/><category term="ovh"/><category term="admin"/><category term="shell"/><category term="cli"/><category term="virtualisation"/><category term="qemu"/><category term="kvm"/><category term="vieillerie"/></entry><entry><title>IFTTD #14.exe - Coder peu, coder mieux</title><link href="https://blog.freezed.me/articles/2021/05/ifttd-14exe-coder-peu-coder-mieux/" rel="alternate"/><published>2021-05-14T22:51:00+02:00</published><updated>2021-05-14T22:51:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2021-05-14:/articles/2021/05/ifttd-14exe-coder-peu-coder-mieux/</id><summary type="html">&lt;p&gt;Participation au résumé de l'épisode #14 du podcast IFTTD&lt;/p&gt;</summary><content type="html">&lt;p&gt;J'ai eu le plaisir de participer au &lt;em&gt;compilé&lt;/em&gt; de l'épisode #14 du podcast &lt;em&gt;If This Then Dev&lt;/em&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La page de ce &lt;em&gt;compilé&lt;/em&gt; : &lt;em&gt;&lt;a href="https://art19.com/shows/ifttd-if-this-then-dev/episodes/fbc2a15a-40c2-4b86-a5a5-8eed914c871b"&gt;#14.exe vu par Frederic Zind - Coder peu, coder mieux&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Le site du podcast &lt;strong&gt;IFTTD&lt;/strong&gt; : &lt;a href="https://ifttd.io"&gt;&lt;code&gt;ifttd.io&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;La page de l'épisode #14 : &lt;em&gt;&lt;a href="https://ifttd.io/14-coder-peu-coder-mieux-dimitri-baeli/"&gt;Dimitri Baeli : Coder peu, coder mieux&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="Conférences"/><category term="talk"/><category term="podcast"/><category term="agile"/><category term="méthode"/><category term="collectif"/><category term="extrem-programming"/><category term="ifttd"/><category term="git"/><category term="dev"/><category term="performance"/></entry><entry><title>Tuto : script durable en Python</title><link href="https://blog.freezed.me/articles/2021/04/tuto-script-durable-python-stdlib/" rel="alternate"/><published>2021-04-23T00:44:00+02:00</published><updated>2021-12-02T00:19:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2021-04-23:/articles/2021/04/tuto-script-durable-python-stdlib/</id><summary type="html">&lt;p&gt;Python est livré avec les piles, profitons-en.&lt;/p&gt;</summary><content type="html">&lt;h1&gt;💡 C'est quoi l'idée ?&lt;/h1&gt;
&lt;p&gt;Un guide de construction d'un script python CLI robuste et maintenable même plusieurs mois après l'avoir laissé de côté! Python est &lt;a href="https://docs.python.org/3/tutorial/stdlib.html#batteries-included"&gt;&lt;em&gt;livré avec les piles&lt;/em&gt;&lt;/a&gt;, profitons-en et utilisons pour ça :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;les tests : &lt;a href="https://docs.python.org/3/library/doctest.html"&gt;&lt;code&gt;doctest&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;les logs : &lt;a href="https://docs.python.org/3/library/logging.html"&gt;&lt;code&gt;logging&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;les arguments de la CLI : &lt;a href="https://docs.python.org/3/library/argparse.html"&gt;&lt;code&gt;argparse&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;C'est le 1er tuto dans la liste &lt;a href="https://gitlab.com/forga/process/fr/embarquement"&gt;&lt;em&gt;«Parcours de tutorat»&lt;/em&gt;&lt;/a&gt;, &lt;em&gt;Un script durable en Python&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Plus de détails dans ma proposition de réalisation :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/forga/process/fr/embarquement/-/issues/6"&gt;le ticket associé&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/free_zed/mypsb/-/commits/tuto-pysdur"&gt;les commits&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;🌐 Quel est le contexte ?&lt;/h1&gt;
&lt;p&gt;Le groupe &lt;a href="https://gitlab.com/forga/"&gt;&lt;code&gt;forga&lt;/code&gt;&lt;/a&gt; a pour objectif de proposer une organisation facilitant :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;♻️ la réutilisation de code&lt;/li&gt;
&lt;li&gt;📝 la documentation (de code ou d'autre chose)&lt;/li&gt;
&lt;li&gt;🤝 la collaboration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ce groupe à été brièvement abordé dans une &lt;a href="https://blog.freezed.me/articles/2019/10/histoires-dun-salarie-perfectionniste-sous-pression/"&gt;présentation&lt;/a&gt; pour le groupe &lt;em&gt;GitLab FR&lt;/em&gt;.&lt;/p&gt;
&lt;h1&gt;🤝 Merci qui ?&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Vincent Bernat&lt;/em&gt; pour son billet de blog dont je me suis complètement inspiré :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://vincent.bernat.ch/fr/blog/2019-script-python-durable"&gt;🇫🇷 &lt;em&gt;Écrire un script Python durable&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://vincent.bernat.ch/en/blog/2019-sustainable-python-script"&gt;🇬🇧 &lt;em&gt;Writing sustainable Python scripts&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="Réalisations"/><category term="forga"/><category term="cli"/><category term="python"/><category term="git"/><category term="dry"/><category term="gitlab"/><category term="agile"/><category term="tuto"/><category term="méthode"/><category term="collectif"/><category term="dev"/></entry><entry><title>Étendre une «pool» ZFS racine après une installation Ubuntu</title><link href="https://blog.freezed.me/articles/2021/01/extend-zfs-root-pool-after-ubuntu-installation/" rel="alternate"/><published>2021-01-03T21:55:00+01:00</published><updated>2021-04-30T00:00:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2021-01-03:/articles/2021/01/extend-zfs-root-pool-after-ubuntu-installation/</id><summary type="html">&lt;p&gt;1ère étape après une installation d'Ubuntu sur ZFS&lt;/p&gt;</summary><content type="html">&lt;p&gt;Depuis &lt;a href="https://ubuntu.com/blog/enhancing-our-zfs-support-on-ubuntu-19-10-an-introduction"&gt;Eoan Ermine (Ubuntu 19.10)&lt;/a&gt;, l'installeur Ubuntu (pour &lt;em&gt;desktop&lt;/em&gt;) peut utiliser &lt;a href="https://github.com/openzfs/zfs"&gt;ZFS&lt;/a&gt; comme système de fichier racine.&lt;/p&gt;
&lt;p&gt;La version LTS du moment, &lt;a href="https://ubuntu.com/blog/zfs-focus-on-ubuntu-20-04-lts-whats-new"&gt;Focal Fossa (Ubuntu 20.04)&lt;/a&gt; propose seulement une installation mono-disque, voici comment transformer une installation mono-disque en une installation à &lt;em&gt;disques miroirs&lt;/em&gt; pour utiliser la résilience des données fournie par ZFS.&lt;/p&gt;
&lt;p&gt;🚧 &lt;em&gt;ZFS on root reste expérimental&lt;/em&gt; 🚧&lt;/p&gt;
&lt;h2&gt;🔧 Mode d'emploi&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sda&lt;/code&gt; est le disque utilisé par l'installeur&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sdb&lt;/code&gt; est le disque que l'on va ajouter pour créer un miroir&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;user&lt;/span&gt;&lt;span class="nv"&gt;@focal&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lsblk&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;
&lt;span class="n"&gt;NAME&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nl"&gt;MAJ&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;MIN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RM&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="k"&gt;SIZE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TYPE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MOUNTPOINT&lt;/span&gt;
&lt;span class="n"&gt;sda&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;931&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="n"&gt;G&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;disk&lt;/span&gt;
&lt;span class="err"&gt;├─&lt;/span&gt;&lt;span class="n"&gt;sda1&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;513&lt;/span&gt;&lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;part&lt;/span&gt;
&lt;span class="err"&gt;├─&lt;/span&gt;&lt;span class="n"&gt;sda2&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;K&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;part&lt;/span&gt;
&lt;span class="err"&gt;├─&lt;/span&gt;&lt;span class="n"&gt;sda5&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;G&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;part&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;SWAP&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;├─&lt;/span&gt;&lt;span class="n"&gt;sda6&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;G&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;part&lt;/span&gt;
&lt;span class="err"&gt;└─&lt;/span&gt;&lt;span class="n"&gt;sda7&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;927&lt;/span&gt;&lt;span class="n"&gt;G&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;part&lt;/span&gt;
&lt;span class="n"&gt;sdb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;931&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="n"&gt;G&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;disk&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;user@focal:~$&lt;span class="w"&gt; &lt;/span&gt;blkid
/dev/sda1:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;UUID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;BFE4-2413&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;TYPE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;vfat&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PARTUUID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;f0771fca-01&amp;quot;&lt;/span&gt;
/dev/sda5:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;UUID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;42456868-afc5-4dea-8b73-11257b84890e&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;TYPE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;swap&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PARTUUID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;f0771fca-05&amp;quot;&lt;/span&gt;
/dev/sda6:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;LABEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;bpool&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;UUID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;11578277722432725130&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;UUID_SUB&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;9520999198366150859&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;TYPE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;zfs_member&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PARTUUID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;f0771fca-06&amp;quot;&lt;/span&gt;
/dev/sda7:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;LABEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;rpool&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;UUID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;13693210375688435814&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;UUID_SUB&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;8709443765040685487&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;TYPE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;zfs_member&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PARTUUID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;f0771fca-07&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ubuntu crée 2 &lt;a href="https://www.freebsd.org/doc/handbook/zfs-term.html#zfs-term-pool"&gt;&lt;code&gt;pools&lt;/code&gt;&lt;/a&gt; :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;bpool&lt;/code&gt; : contient la &lt;em&gt;pool&lt;/em&gt; de &lt;code&gt;boot&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rpool&lt;/code&gt; : contient la &lt;em&gt;pool&lt;/em&gt; avec tout le système de fichier&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;user@focal:~$&lt;span class="w"&gt; &lt;/span&gt;zpool&lt;span class="w"&gt; &lt;/span&gt;list
NAME&lt;span class="w"&gt;    &lt;/span&gt;SIZE&lt;span class="w"&gt;  &lt;/span&gt;ALLOC&lt;span class="w"&gt;   &lt;/span&gt;FREE&lt;span class="w"&gt;  &lt;/span&gt;CKPOINT&lt;span class="w"&gt;  &lt;/span&gt;EXPANDSZ&lt;span class="w"&gt;   &lt;/span&gt;FRAG&lt;span class="w"&gt;    &lt;/span&gt;CAP&lt;span class="w"&gt;  &lt;/span&gt;DEDUP&lt;span class="w"&gt;    &lt;/span&gt;HEALTH&lt;span class="w"&gt;  &lt;/span&gt;ALTROOT
bpool&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;,88G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;91&lt;/span&gt;,2M&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;,79G&lt;span class="w"&gt;        &lt;/span&gt;-&lt;span class="w"&gt;         &lt;/span&gt;-&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;%&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;%&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;.00x&lt;span class="w"&gt;    &lt;/span&gt;ONLINE&lt;span class="w"&gt;  &lt;/span&gt;-
rpool&lt;span class="w"&gt;   &lt;/span&gt;920G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;,19G&lt;span class="w"&gt;   &lt;/span&gt;917G&lt;span class="w"&gt;        &lt;/span&gt;-&lt;span class="w"&gt;         &lt;/span&gt;-&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;%&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;%&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;.00x&lt;span class="w"&gt;    &lt;/span&gt;ONLINE&lt;span class="w"&gt;  &lt;/span&gt;-
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;user@focal:~$&lt;span class="w"&gt; &lt;/span&gt;zpool&lt;span class="w"&gt; &lt;/span&gt;status
&lt;span class="w"&gt;  &lt;/span&gt;pool:&lt;span class="w"&gt; &lt;/span&gt;bpool
&lt;span class="w"&gt; &lt;/span&gt;state:&lt;span class="w"&gt; &lt;/span&gt;ONLINE
&lt;span class="w"&gt;  &lt;/span&gt;scan:&lt;span class="w"&gt; &lt;/span&gt;none&lt;span class="w"&gt; &lt;/span&gt;requested
config:

&lt;span class="w"&gt;    &lt;/span&gt;NAME&lt;span class="w"&gt;           &lt;/span&gt;STATE&lt;span class="w"&gt;     &lt;/span&gt;READ&lt;span class="w"&gt; &lt;/span&gt;WRITE&lt;span class="w"&gt; &lt;/span&gt;CKSUM
&lt;span class="w"&gt;    &lt;/span&gt;bpool&lt;span class="w"&gt;          &lt;/span&gt;ONLINE&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;f0771fca-06&lt;span class="w"&gt;  &lt;/span&gt;ONLINE&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;

errors:&lt;span class="w"&gt; &lt;/span&gt;No&lt;span class="w"&gt; &lt;/span&gt;known&lt;span class="w"&gt; &lt;/span&gt;data&lt;span class="w"&gt; &lt;/span&gt;errors

&lt;span class="w"&gt;  &lt;/span&gt;pool:&lt;span class="w"&gt; &lt;/span&gt;rpool
&lt;span class="w"&gt; &lt;/span&gt;state:&lt;span class="w"&gt; &lt;/span&gt;ONLINE
&lt;span class="w"&gt;  &lt;/span&gt;scan:&lt;span class="w"&gt; &lt;/span&gt;none&lt;span class="w"&gt; &lt;/span&gt;requested
config:

&lt;span class="w"&gt;    &lt;/span&gt;NAME&lt;span class="w"&gt;           &lt;/span&gt;STATE&lt;span class="w"&gt;     &lt;/span&gt;READ&lt;span class="w"&gt; &lt;/span&gt;WRITE&lt;span class="w"&gt; &lt;/span&gt;CKSUM
&lt;span class="w"&gt;    &lt;/span&gt;rpool&lt;span class="w"&gt;          &lt;/span&gt;ONLINE&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;f0771fca-07&lt;span class="w"&gt;  &lt;/span&gt;ONLINE&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Lancer &lt;code&gt;fdisk&lt;/code&gt; pour copier  la table de partition de &lt;code&gt;sda&lt;/code&gt; vers &lt;code&gt;sdb&lt;/code&gt; avec un fichier de script compatible &lt;code&gt;sfdisk&lt;/code&gt; (&lt;a href="https://manpages.ubuntu.com/manpages/focal/en/man8/fdisk.8.html#script%20files"&gt;&lt;em&gt;voir la page de manuel&lt;/em&gt;&lt;/a&gt;).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;user@focal:~$&lt;span class="w"&gt; &lt;/span&gt;fdisk&lt;span class="w"&gt; &lt;/span&gt;/dev/sda&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;#copy to file with O&lt;/span&gt;
user@focal:~$&lt;span class="w"&gt; &lt;/span&gt;fdisk&lt;span class="w"&gt; &lt;/span&gt;/dev/sdb&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;#import from file with I&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;user@focal:~$&lt;span class="w"&gt; &lt;/span&gt;lsblk&lt;span class="w"&gt; &lt;/span&gt;-a
NAME&lt;span class="w"&gt;   &lt;/span&gt;MAJ:MIN&lt;span class="w"&gt; &lt;/span&gt;RM&lt;span class="w"&gt;   &lt;/span&gt;SIZE&lt;span class="w"&gt; &lt;/span&gt;RO&lt;span class="w"&gt; &lt;/span&gt;TYPE&lt;span class="w"&gt; &lt;/span&gt;MOUNTPOINT
sda&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;:0&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;931&lt;/span&gt;,5G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;disk
├─sda1&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;:1&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;513M&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;part
├─sda2&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;:2&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;1K&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;part
├─sda5&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;:5&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;2G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;part&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;SWAP&lt;span class="o"&gt;]&lt;/span&gt;
├─sda6&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;:6&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;2G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;part
└─sda7&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;:7&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;927G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;part
sdb&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;:16&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;931&lt;/span&gt;,5G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;disk
├─sdb1&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;:17&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;513M&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;part
├─sdb2&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;:18&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;1K&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;part
├─sdb5&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;:21&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;2G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;part
├─sdb6&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;:22&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;2G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;part
└─sdb7&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;:23&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;927G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;part
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://www.freebsd.org/doc/handbook/zfs-zpool.html#zfs-zpool-attach"&gt;Attacher&lt;/a&gt; les partitions jumelles a leur &lt;em&gt;pool&lt;/em&gt; :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;user@focal:~$&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;zpool&lt;span class="w"&gt; &lt;/span&gt;attach&lt;span class="w"&gt; &lt;/span&gt;bpool&lt;span class="w"&gt; &lt;/span&gt;f0771fca-06&lt;span class="w"&gt; &lt;/span&gt;/dev/sdb6
user@focal:~$&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;zpool&lt;span class="w"&gt; &lt;/span&gt;attach&lt;span class="w"&gt; &lt;/span&gt;rpool&lt;span class="w"&gt; &lt;/span&gt;f0771fca-07&lt;span class="w"&gt; &lt;/span&gt;/dev/sdb7
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;🎉 Tada!&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;user@focal:~$&lt;span class="w"&gt; &lt;/span&gt;zpool&lt;span class="w"&gt; &lt;/span&gt;status
&lt;span class="w"&gt;  &lt;/span&gt;pool:&lt;span class="w"&gt; &lt;/span&gt;bpool
&lt;span class="w"&gt; &lt;/span&gt;state:&lt;span class="w"&gt; &lt;/span&gt;ONLINE
&lt;span class="w"&gt;  &lt;/span&gt;scan:&lt;span class="w"&gt; &lt;/span&gt;resilvered&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;92&lt;/span&gt;,2M&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;days&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;00&lt;/span&gt;:00:01&lt;span class="w"&gt; &lt;/span&gt;with&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;errors&lt;span class="w"&gt; &lt;/span&gt;on&lt;span class="w"&gt; &lt;/span&gt;Sun&lt;span class="w"&gt; &lt;/span&gt;Jan&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;22&lt;/span&gt;:22:09&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2021&lt;/span&gt;
config:

&lt;span class="w"&gt;    &lt;/span&gt;NAME&lt;span class="w"&gt;             &lt;/span&gt;STATE&lt;span class="w"&gt;     &lt;/span&gt;READ&lt;span class="w"&gt; &lt;/span&gt;WRITE&lt;span class="w"&gt; &lt;/span&gt;CKSUM
&lt;span class="w"&gt;    &lt;/span&gt;bpool&lt;span class="w"&gt;            &lt;/span&gt;ONLINE&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;mirror-0&lt;span class="w"&gt;       &lt;/span&gt;ONLINE&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;f0771fca-06&lt;span class="w"&gt;  &lt;/span&gt;ONLINE&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;sdb6&lt;span class="w"&gt;         &lt;/span&gt;ONLINE&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;

errors:&lt;span class="w"&gt; &lt;/span&gt;No&lt;span class="w"&gt; &lt;/span&gt;known&lt;span class="w"&gt; &lt;/span&gt;data&lt;span class="w"&gt; &lt;/span&gt;errors

&lt;span class="w"&gt;  &lt;/span&gt;pool:&lt;span class="w"&gt; &lt;/span&gt;rpool
&lt;span class="w"&gt; &lt;/span&gt;state:&lt;span class="w"&gt; &lt;/span&gt;ONLINE
&lt;span class="w"&gt;  &lt;/span&gt;scan:&lt;span class="w"&gt; &lt;/span&gt;resilvered&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;,05G&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;days&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;00&lt;/span&gt;:01:06&lt;span class="w"&gt; &lt;/span&gt;with&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;errors&lt;span class="w"&gt; &lt;/span&gt;on&lt;span class="w"&gt; &lt;/span&gt;Sun&lt;span class="w"&gt; &lt;/span&gt;Jan&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;22&lt;/span&gt;:24:05&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2021&lt;/span&gt;
remove:&lt;span class="w"&gt; &lt;/span&gt;Removal&lt;span class="w"&gt; &lt;/span&gt;of&lt;span class="w"&gt; &lt;/span&gt;vdev&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;copied&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;,36M&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;0h0m,&lt;span class="w"&gt; &lt;/span&gt;completed&lt;span class="w"&gt; &lt;/span&gt;on&lt;span class="w"&gt; &lt;/span&gt;Sun&lt;span class="w"&gt; &lt;/span&gt;Jan&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;21&lt;/span&gt;:14:16&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2021&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;456&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;memory&lt;span class="w"&gt; &lt;/span&gt;used&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;removed&lt;span class="w"&gt; &lt;/span&gt;device&lt;span class="w"&gt; &lt;/span&gt;mappings
config:

&lt;span class="w"&gt;    &lt;/span&gt;NAME&lt;span class="w"&gt;             &lt;/span&gt;STATE&lt;span class="w"&gt;     &lt;/span&gt;READ&lt;span class="w"&gt; &lt;/span&gt;WRITE&lt;span class="w"&gt; &lt;/span&gt;CKSUM
&lt;span class="w"&gt;    &lt;/span&gt;rpool&lt;span class="w"&gt;            &lt;/span&gt;ONLINE&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;mirror-0&lt;span class="w"&gt;       &lt;/span&gt;ONLINE&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;f0771fca-07&lt;span class="w"&gt;  &lt;/span&gt;ONLINE&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;sdb7&lt;span class="w"&gt;         &lt;/span&gt;ONLINE&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;

errors:&lt;span class="w"&gt; &lt;/span&gt;No&lt;span class="w"&gt; &lt;/span&gt;known&lt;span class="w"&gt; &lt;/span&gt;data&lt;span class="w"&gt; &lt;/span&gt;errors
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;📝 MàJ du 30/4/2021&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Étapes compatible avec l'installeur de la &lt;a href="https://discourse.ubuntu.com/t/hirsute-hippo-release-notes/19221"&gt;version &lt;code&gt;21.04&lt;/code&gt; «&lt;em&gt;Hirsute Hippo&lt;/em&gt;»&lt;/a&gt;.&lt;ul&gt;
&lt;li&gt;la numérotation des partitions semble être continue désormais&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Étendre la &lt;code&gt;swap&lt;/code&gt; avec la partition disponible sur le disque ajouté :&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;user@hirsute:~$&lt;span class="w"&gt; &lt;/span&gt;free&lt;span class="w"&gt; &lt;/span&gt;-h
&lt;span class="w"&gt;              &lt;/span&gt;total&lt;span class="w"&gt;       &lt;/span&gt;utilisé&lt;span class="w"&gt;      &lt;/span&gt;libre&lt;span class="w"&gt;     &lt;/span&gt;partagé&lt;span class="w"&gt; &lt;/span&gt;tamp/cache&lt;span class="w"&gt;   &lt;/span&gt;disponible
Mem:&lt;span class="w"&gt;           &lt;/span&gt;11Gi&lt;span class="w"&gt;       &lt;/span&gt;974Mi&lt;span class="w"&gt;        &lt;/span&gt;10Gi&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;7&lt;/span&gt;,0Mi&lt;span class="w"&gt;       &lt;/span&gt;259Mi&lt;span class="w"&gt;        &lt;/span&gt;10Gi
Swap:&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;,0Gi&lt;span class="w"&gt;      &lt;/span&gt;0B&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;,0Gi

user@hirsute:~$&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;mkswap&lt;span class="w"&gt; &lt;/span&gt;/dev/sdb5
Configure&lt;span class="w"&gt; &lt;/span&gt;l&lt;span class="s1"&gt;&amp;#39;espace d&amp;#39;&lt;/span&gt;échange&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;swap&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;en&lt;span class="w"&gt; &lt;/span&gt;version&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;taille&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;GiB&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2147479552&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;octets&lt;span class="o"&gt;)&lt;/span&gt;
pas&lt;span class="w"&gt; &lt;/span&gt;d&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;étiquette,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;UUID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;bbbbbbbb-bbbbb-bbbb-bbbb-bbbbbbb

user@hirsute:~$&lt;span class="w"&gt; &lt;/span&gt;grep&lt;span class="w"&gt; &lt;/span&gt;swap&lt;span class="w"&gt; &lt;/span&gt;/etc/fstab
&lt;span class="nv"&gt;UUID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;aaaaaaaa-aaaaa-aaaa-aaaa-aaaaaaa&lt;span class="w"&gt;   &lt;/span&gt;none&lt;span class="w"&gt;    &lt;/span&gt;swap&lt;span class="w"&gt;    &lt;/span&gt;sw&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="nv"&gt;UUID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;bbbbbbbb-bbbbb-bbbb-bbbb-bbbbbbb&lt;span class="w"&gt;   &lt;/span&gt;none&lt;span class="w"&gt;    &lt;/span&gt;swap&lt;span class="w"&gt;    &lt;/span&gt;sw&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;

user@hirsute:~$&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;swapon&lt;span class="w"&gt; &lt;/span&gt;-U&lt;span class="w"&gt; &lt;/span&gt;bbbbbbbb-bbbbb-bbbb-bbbb-bbbbbbb

user@hirsute:~$&lt;span class="w"&gt; &lt;/span&gt;free&lt;span class="w"&gt; &lt;/span&gt;-h
&lt;span class="w"&gt;              &lt;/span&gt;total&lt;span class="w"&gt;       &lt;/span&gt;utilisé&lt;span class="w"&gt;      &lt;/span&gt;libre&lt;span class="w"&gt;     &lt;/span&gt;partagé&lt;span class="w"&gt; &lt;/span&gt;tamp/cache&lt;span class="w"&gt;   &lt;/span&gt;disponible
Mem:&lt;span class="w"&gt;           &lt;/span&gt;11Gi&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;,0Gi&lt;span class="w"&gt;        &lt;/span&gt;10Gi&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;7&lt;/span&gt;,0Mi&lt;span class="w"&gt;       &lt;/span&gt;261Mi&lt;span class="w"&gt;        &lt;/span&gt;10Gi
Swap:&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;,0Gi&lt;span class="w"&gt;      &lt;/span&gt;0B&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;,0Gi
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;🔖 Références&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.freebsd.org/doc/handbook/zfs-term.html"&gt;&lt;em&gt;ZFS Features and Terminology&lt;/em&gt;&lt;/a&gt; - &lt;code&gt;www.freebsd.org&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.freebsd.org/doc/handbook/zfs-quickstart.html"&gt;&lt;em&gt;The Z File System (ZFS)&lt;/em&gt;&lt;/a&gt; - &lt;code&gt;www.freebsd.org&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openzfs/zfs"&gt;&lt;em&gt;OpenZFS&lt;/em&gt;&lt;/a&gt; - &lt;code&gt;github.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ubuntu.com/blog/enhancing-our-zfs-support-on-ubuntu-19-10-an-introduction"&gt;&lt;em&gt;Enhancing our ZFS support on Ubuntu 19.10 – an introduction&lt;/em&gt;&lt;/a&gt; - &lt;code&gt;ubuntu.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ubuntu.com/blog/zfs-focus-on-ubuntu-20-04-lts-whats-new"&gt;&lt;em&gt;ZFS focus on Ubuntu 20.04 LTS: what’s new?&lt;/em&gt;&lt;/a&gt; - &lt;code&gt;ubuntu.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://manpages.ubuntu.com/manpages/focal/en/man8/zpool.8.html"&gt;&lt;em&gt;zpool manpage&lt;/em&gt;&lt;/a&gt; - &lt;code&gt;manpages.ubuntu.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://manpages.ubuntu.com/manpages/focal/en/man8/zfs.8.html"&gt;&lt;em&gt;zfs manpage&lt;/em&gt;&lt;/a&gt; - &lt;code&gt;manpages.ubuntu.com&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="Bloc-notes"/><category term="zfs"/><category term="ubuntu"/><category term="admin"/><category term="shell"/><category term="cli"/><category term="performance"/><category term="logiciel libre"/></entry><entry><title>Extend a ZFS root pool after Ubuntu installation</title><link href="https://blog.freezed.me/articles/2021/01/extend-zfs-root-pool-after-ubuntu-installation/en/" rel="alternate"/><published>2021-01-03T21:55:00+01:00</published><updated>2021-04-30T00:00:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2021-01-03:/articles/2021/01/extend-zfs-root-pool-after-ubuntu-installation/en/</id><summary type="html">&lt;p&gt;1st step after installing Ubuntu on ZFS&lt;/p&gt;</summary><content type="html">&lt;p&gt;Since &lt;a href="https://ubuntu.com/blog/enhancing-our-zfs-support-on-ubuntu-19-10-an-introduction"&gt;Eoan Ermine (Ubuntu 19.10)&lt;/a&gt;, Ubuntu installer (for desktop) can use &lt;a href="https://github.com/openzfs/zfs"&gt;ZFS&lt;/a&gt; as root file-system.&lt;/p&gt;
&lt;p&gt;The current LTS, &lt;a href="https://ubuntu.com/blog/zfs-focus-on-ubuntu-20-04-lts-whats-new"&gt;Focal Fossa (Ubuntu 20.04)&lt;/a&gt; provides only a mono-disk installation, here's how to enhance a mono-disk installation into a mirrored-disk installation to use data resilience provided by ZFS.&lt;/p&gt;
&lt;p&gt;🚧 &lt;em&gt;ZFS on root is still experimental&lt;/em&gt; 🚧&lt;/p&gt;
&lt;h2&gt;🔧 Howto&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sda&lt;/code&gt; is the disk used by installer&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sdb&lt;/code&gt; is the disk we're going to add to create a mirror&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;user&lt;/span&gt;&lt;span class="nv"&gt;@focal&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lsblk&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;
&lt;span class="n"&gt;NAME&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nl"&gt;MAJ&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;MIN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RM&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="k"&gt;SIZE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TYPE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MOUNTPOINT&lt;/span&gt;
&lt;span class="n"&gt;sda&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;931&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="n"&gt;G&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;disk&lt;/span&gt;
&lt;span class="err"&gt;├─&lt;/span&gt;&lt;span class="n"&gt;sda1&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;513&lt;/span&gt;&lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;part&lt;/span&gt;
&lt;span class="err"&gt;├─&lt;/span&gt;&lt;span class="n"&gt;sda2&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;K&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;part&lt;/span&gt;
&lt;span class="err"&gt;├─&lt;/span&gt;&lt;span class="n"&gt;sda5&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;G&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;part&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;SWAP&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;├─&lt;/span&gt;&lt;span class="n"&gt;sda6&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;G&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;part&lt;/span&gt;
&lt;span class="err"&gt;└─&lt;/span&gt;&lt;span class="n"&gt;sda7&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;927&lt;/span&gt;&lt;span class="n"&gt;G&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;part&lt;/span&gt;
&lt;span class="n"&gt;sdb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;931&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="n"&gt;G&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;disk&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;user@focal:~$&lt;span class="w"&gt; &lt;/span&gt;blkid
/dev/sda1:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;UUID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;BFE4-2413&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;TYPE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;vfat&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PARTUUID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;f0771fca-01&amp;quot;&lt;/span&gt;
/dev/sda5:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;UUID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;42456868-afc5-4dea-8b73-11257b84890e&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;TYPE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;swap&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PARTUUID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;f0771fca-05&amp;quot;&lt;/span&gt;
/dev/sda6:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;LABEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;bpool&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;UUID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;11578277722432725130&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;UUID_SUB&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;9520999198366150859&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;TYPE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;zfs_member&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PARTUUID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;f0771fca-06&amp;quot;&lt;/span&gt;
/dev/sda7:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;LABEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;rpool&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;UUID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;13693210375688435814&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;UUID_SUB&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;8709443765040685487&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;TYPE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;zfs_member&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PARTUUID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;f0771fca-07&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ubuntu creates 2 &lt;a href="https://www.freebsd.org/doc/handbook/zfs-term.html#zfs-term-pool"&gt;&lt;code&gt;pools&lt;/code&gt;&lt;/a&gt; :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;bpool&lt;/code&gt; : containing boot &lt;em&gt;pool&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rpool&lt;/code&gt; : containing root &lt;em&gt;pool&lt;/em&gt;, with all file-system&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;user@focal:~$&lt;span class="w"&gt; &lt;/span&gt;zpool&lt;span class="w"&gt; &lt;/span&gt;list
NAME&lt;span class="w"&gt;    &lt;/span&gt;SIZE&lt;span class="w"&gt;  &lt;/span&gt;ALLOC&lt;span class="w"&gt;   &lt;/span&gt;FREE&lt;span class="w"&gt;  &lt;/span&gt;CKPOINT&lt;span class="w"&gt;  &lt;/span&gt;EXPANDSZ&lt;span class="w"&gt;   &lt;/span&gt;FRAG&lt;span class="w"&gt;    &lt;/span&gt;CAP&lt;span class="w"&gt;  &lt;/span&gt;DEDUP&lt;span class="w"&gt;    &lt;/span&gt;HEALTH&lt;span class="w"&gt;  &lt;/span&gt;ALTROOT
bpool&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;,88G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;91&lt;/span&gt;,2M&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;,79G&lt;span class="w"&gt;        &lt;/span&gt;-&lt;span class="w"&gt;         &lt;/span&gt;-&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;%&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;%&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;.00x&lt;span class="w"&gt;    &lt;/span&gt;ONLINE&lt;span class="w"&gt;  &lt;/span&gt;-
rpool&lt;span class="w"&gt;   &lt;/span&gt;920G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;,19G&lt;span class="w"&gt;   &lt;/span&gt;917G&lt;span class="w"&gt;        &lt;/span&gt;-&lt;span class="w"&gt;         &lt;/span&gt;-&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;%&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;%&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;.00x&lt;span class="w"&gt;    &lt;/span&gt;ONLINE&lt;span class="w"&gt;  &lt;/span&gt;-
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;user@focal:~$&lt;span class="w"&gt; &lt;/span&gt;zpool&lt;span class="w"&gt; &lt;/span&gt;status
&lt;span class="w"&gt;  &lt;/span&gt;pool:&lt;span class="w"&gt; &lt;/span&gt;bpool
&lt;span class="w"&gt; &lt;/span&gt;state:&lt;span class="w"&gt; &lt;/span&gt;ONLINE
&lt;span class="w"&gt;  &lt;/span&gt;scan:&lt;span class="w"&gt; &lt;/span&gt;none&lt;span class="w"&gt; &lt;/span&gt;requested
config:

&lt;span class="w"&gt;    &lt;/span&gt;NAME&lt;span class="w"&gt;           &lt;/span&gt;STATE&lt;span class="w"&gt;     &lt;/span&gt;READ&lt;span class="w"&gt; &lt;/span&gt;WRITE&lt;span class="w"&gt; &lt;/span&gt;CKSUM
&lt;span class="w"&gt;    &lt;/span&gt;bpool&lt;span class="w"&gt;          &lt;/span&gt;ONLINE&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;f0771fca-06&lt;span class="w"&gt;  &lt;/span&gt;ONLINE&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;

errors:&lt;span class="w"&gt; &lt;/span&gt;No&lt;span class="w"&gt; &lt;/span&gt;known&lt;span class="w"&gt; &lt;/span&gt;data&lt;span class="w"&gt; &lt;/span&gt;errors

&lt;span class="w"&gt;  &lt;/span&gt;pool:&lt;span class="w"&gt; &lt;/span&gt;rpool
&lt;span class="w"&gt; &lt;/span&gt;state:&lt;span class="w"&gt; &lt;/span&gt;ONLINE
&lt;span class="w"&gt;  &lt;/span&gt;scan:&lt;span class="w"&gt; &lt;/span&gt;none&lt;span class="w"&gt; &lt;/span&gt;requested
config:

&lt;span class="w"&gt;    &lt;/span&gt;NAME&lt;span class="w"&gt;           &lt;/span&gt;STATE&lt;span class="w"&gt;     &lt;/span&gt;READ&lt;span class="w"&gt; &lt;/span&gt;WRITE&lt;span class="w"&gt; &lt;/span&gt;CKSUM
&lt;span class="w"&gt;    &lt;/span&gt;rpool&lt;span class="w"&gt;          &lt;/span&gt;ONLINE&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;f0771fca-07&lt;span class="w"&gt;  &lt;/span&gt;ONLINE&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Run &lt;code&gt;fdisk&lt;/code&gt; to copy &lt;code&gt;sda&lt;/code&gt; partition table to &lt;code&gt;sdb&lt;/code&gt; using sfdisk compatible script files (&lt;a href="https://manpages.ubuntu.com/manpages/focal/en/man8/fdisk.8.html#script%20files"&gt;&lt;em&gt;see manpage&lt;/em&gt;&lt;/a&gt;).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;user@focal:~$&lt;span class="w"&gt; &lt;/span&gt;fdisk&lt;span class="w"&gt; &lt;/span&gt;/dev/sda&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;#copy to file with O&lt;/span&gt;
user@focal:~$&lt;span class="w"&gt; &lt;/span&gt;fdisk&lt;span class="w"&gt; &lt;/span&gt;/dev/sdb&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;#import from file with I&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;user@focal:~$&lt;span class="w"&gt; &lt;/span&gt;lsblk&lt;span class="w"&gt; &lt;/span&gt;-a
NAME&lt;span class="w"&gt;   &lt;/span&gt;MAJ:MIN&lt;span class="w"&gt; &lt;/span&gt;RM&lt;span class="w"&gt;   &lt;/span&gt;SIZE&lt;span class="w"&gt; &lt;/span&gt;RO&lt;span class="w"&gt; &lt;/span&gt;TYPE&lt;span class="w"&gt; &lt;/span&gt;MOUNTPOINT
sda&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;:0&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;931&lt;/span&gt;,5G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;disk
├─sda1&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;:1&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;513M&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;part
├─sda2&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;:2&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;1K&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;part
├─sda5&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;:5&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;2G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;part&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;SWAP&lt;span class="o"&gt;]&lt;/span&gt;
├─sda6&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;:6&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;2G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;part
└─sda7&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;:7&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;927G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;part
sdb&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;:16&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;931&lt;/span&gt;,5G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;disk
├─sdb1&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;:17&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;513M&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;part
├─sdb2&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;:18&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;1K&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;part
├─sdb5&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;:21&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;2G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;part
├─sdb6&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;:22&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;2G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;part
└─sdb7&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;:23&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;927G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;part
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://www.freebsd.org/doc/handbook/zfs-zpool.html#zfs-zpool-attach"&gt;Attach&lt;/a&gt; the twin partitions on pools :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;user@focal:~$&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;zpool&lt;span class="w"&gt; &lt;/span&gt;attach&lt;span class="w"&gt; &lt;/span&gt;bpool&lt;span class="w"&gt; &lt;/span&gt;f0771fca-06&lt;span class="w"&gt; &lt;/span&gt;/dev/sdb6
user@focal:~$&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;zpool&lt;span class="w"&gt; &lt;/span&gt;attach&lt;span class="w"&gt; &lt;/span&gt;rpool&lt;span class="w"&gt; &lt;/span&gt;f0771fca-07&lt;span class="w"&gt; &lt;/span&gt;/dev/sdb7
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;🎉 Tada!&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;user@focal:~$&lt;span class="w"&gt; &lt;/span&gt;zpool&lt;span class="w"&gt; &lt;/span&gt;status
&lt;span class="w"&gt;  &lt;/span&gt;pool:&lt;span class="w"&gt; &lt;/span&gt;bpool
&lt;span class="w"&gt; &lt;/span&gt;state:&lt;span class="w"&gt; &lt;/span&gt;ONLINE
&lt;span class="w"&gt;  &lt;/span&gt;scan:&lt;span class="w"&gt; &lt;/span&gt;resilvered&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;92&lt;/span&gt;,2M&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;days&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;00&lt;/span&gt;:00:01&lt;span class="w"&gt; &lt;/span&gt;with&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;errors&lt;span class="w"&gt; &lt;/span&gt;on&lt;span class="w"&gt; &lt;/span&gt;Sun&lt;span class="w"&gt; &lt;/span&gt;Jan&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;22&lt;/span&gt;:22:09&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2021&lt;/span&gt;
config:

&lt;span class="w"&gt;    &lt;/span&gt;NAME&lt;span class="w"&gt;             &lt;/span&gt;STATE&lt;span class="w"&gt;     &lt;/span&gt;READ&lt;span class="w"&gt; &lt;/span&gt;WRITE&lt;span class="w"&gt; &lt;/span&gt;CKSUM
&lt;span class="w"&gt;    &lt;/span&gt;bpool&lt;span class="w"&gt;            &lt;/span&gt;ONLINE&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;mirror-0&lt;span class="w"&gt;       &lt;/span&gt;ONLINE&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;f0771fca-06&lt;span class="w"&gt;  &lt;/span&gt;ONLINE&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;sdb6&lt;span class="w"&gt;         &lt;/span&gt;ONLINE&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;

errors:&lt;span class="w"&gt; &lt;/span&gt;No&lt;span class="w"&gt; &lt;/span&gt;known&lt;span class="w"&gt; &lt;/span&gt;data&lt;span class="w"&gt; &lt;/span&gt;errors

&lt;span class="w"&gt;  &lt;/span&gt;pool:&lt;span class="w"&gt; &lt;/span&gt;rpool
&lt;span class="w"&gt; &lt;/span&gt;state:&lt;span class="w"&gt; &lt;/span&gt;ONLINE
&lt;span class="w"&gt;  &lt;/span&gt;scan:&lt;span class="w"&gt; &lt;/span&gt;resilvered&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;,05G&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;days&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;00&lt;/span&gt;:01:06&lt;span class="w"&gt; &lt;/span&gt;with&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;errors&lt;span class="w"&gt; &lt;/span&gt;on&lt;span class="w"&gt; &lt;/span&gt;Sun&lt;span class="w"&gt; &lt;/span&gt;Jan&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;22&lt;/span&gt;:24:05&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2021&lt;/span&gt;
remove:&lt;span class="w"&gt; &lt;/span&gt;Removal&lt;span class="w"&gt; &lt;/span&gt;of&lt;span class="w"&gt; &lt;/span&gt;vdev&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;copied&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;,36M&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;0h0m,&lt;span class="w"&gt; &lt;/span&gt;completed&lt;span class="w"&gt; &lt;/span&gt;on&lt;span class="w"&gt; &lt;/span&gt;Sun&lt;span class="w"&gt; &lt;/span&gt;Jan&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;21&lt;/span&gt;:14:16&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2021&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;456&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;memory&lt;span class="w"&gt; &lt;/span&gt;used&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;removed&lt;span class="w"&gt; &lt;/span&gt;device&lt;span class="w"&gt; &lt;/span&gt;mappings
config:

&lt;span class="w"&gt;    &lt;/span&gt;NAME&lt;span class="w"&gt;             &lt;/span&gt;STATE&lt;span class="w"&gt;     &lt;/span&gt;READ&lt;span class="w"&gt; &lt;/span&gt;WRITE&lt;span class="w"&gt; &lt;/span&gt;CKSUM
&lt;span class="w"&gt;    &lt;/span&gt;rpool&lt;span class="w"&gt;            &lt;/span&gt;ONLINE&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;mirror-0&lt;span class="w"&gt;       &lt;/span&gt;ONLINE&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;f0771fca-07&lt;span class="w"&gt;  &lt;/span&gt;ONLINE&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;sdb7&lt;span class="w"&gt;         &lt;/span&gt;ONLINE&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;

errors:&lt;span class="w"&gt; &lt;/span&gt;No&lt;span class="w"&gt; &lt;/span&gt;known&lt;span class="w"&gt; &lt;/span&gt;data&lt;span class="w"&gt; &lt;/span&gt;errors
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;📝 30/4/2021 edit&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Steps compatible with &lt;a href="https://discourse.ubuntu.com/t/hirsute-hippo-release-notes/19221"&gt;version &lt;code&gt;21.04&lt;/code&gt; «&lt;em&gt;Hirsute Hippo&lt;/em&gt;»&lt;/a&gt; instaler;&lt;ul&gt;
&lt;li&gt;the partition numbering seems to be continuous now&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Enlarge &lt;code&gt;swap&lt;/code&gt; with the available partition on the added disk&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;user@hirsute:~$&lt;span class="w"&gt; &lt;/span&gt;free&lt;span class="w"&gt; &lt;/span&gt;-h
&lt;span class="w"&gt;              &lt;/span&gt;total&lt;span class="w"&gt;       &lt;/span&gt;utilisé&lt;span class="w"&gt;      &lt;/span&gt;libre&lt;span class="w"&gt;     &lt;/span&gt;partagé&lt;span class="w"&gt; &lt;/span&gt;tamp/cache&lt;span class="w"&gt;   &lt;/span&gt;disponible
Mem:&lt;span class="w"&gt;           &lt;/span&gt;11Gi&lt;span class="w"&gt;       &lt;/span&gt;974Mi&lt;span class="w"&gt;        &lt;/span&gt;10Gi&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;7&lt;/span&gt;,0Mi&lt;span class="w"&gt;       &lt;/span&gt;259Mi&lt;span class="w"&gt;        &lt;/span&gt;10Gi
Swap:&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;,0Gi&lt;span class="w"&gt;      &lt;/span&gt;0B&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;,0Gi

user@hirsute:~$&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;mkswap&lt;span class="w"&gt; &lt;/span&gt;/dev/sdb5
Configure&lt;span class="w"&gt; &lt;/span&gt;l&lt;span class="s1"&gt;&amp;#39;espace d&amp;#39;&lt;/span&gt;échange&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;swap&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;en&lt;span class="w"&gt; &lt;/span&gt;version&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;taille&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;GiB&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2147479552&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;octets&lt;span class="o"&gt;)&lt;/span&gt;
pas&lt;span class="w"&gt; &lt;/span&gt;d&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;étiquette,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;UUID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;bbbbbbbb-bbbbb-bbbb-bbbb-bbbbbbb

user@hirsute:~$&lt;span class="w"&gt; &lt;/span&gt;grep&lt;span class="w"&gt; &lt;/span&gt;swap&lt;span class="w"&gt; &lt;/span&gt;/etc/fstab
&lt;span class="nv"&gt;UUID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;aaaaaaaa-aaaaa-aaaa-aaaa-aaaaaaa&lt;span class="w"&gt;   &lt;/span&gt;none&lt;span class="w"&gt;    &lt;/span&gt;swap&lt;span class="w"&gt;    &lt;/span&gt;sw&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="nv"&gt;UUID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;bbbbbbbb-bbbbb-bbbb-bbbb-bbbbbbb&lt;span class="w"&gt;   &lt;/span&gt;none&lt;span class="w"&gt;    &lt;/span&gt;swap&lt;span class="w"&gt;    &lt;/span&gt;sw&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;

user@hirsute:~$&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;swapon&lt;span class="w"&gt; &lt;/span&gt;-U&lt;span class="w"&gt; &lt;/span&gt;bbbbbbbb-bbbbb-bbbb-bbbb-bbbbbbb

user@hirsute:~$&lt;span class="w"&gt; &lt;/span&gt;free&lt;span class="w"&gt; &lt;/span&gt;-h
&lt;span class="w"&gt;              &lt;/span&gt;total&lt;span class="w"&gt;       &lt;/span&gt;utilisé&lt;span class="w"&gt;      &lt;/span&gt;libre&lt;span class="w"&gt;     &lt;/span&gt;partagé&lt;span class="w"&gt; &lt;/span&gt;tamp/cache&lt;span class="w"&gt;   &lt;/span&gt;disponible
Mem:&lt;span class="w"&gt;           &lt;/span&gt;11Gi&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;,0Gi&lt;span class="w"&gt;        &lt;/span&gt;10Gi&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;7&lt;/span&gt;,0Mi&lt;span class="w"&gt;       &lt;/span&gt;261Mi&lt;span class="w"&gt;        &lt;/span&gt;10Gi
Swap:&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;,0Gi&lt;span class="w"&gt;      &lt;/span&gt;0B&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;,0Gi
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;🔖 References&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.freebsd.org/doc/handbook/zfs-term.html"&gt;&lt;em&gt;ZFS Features and Terminology&lt;/em&gt;&lt;/a&gt; - &lt;code&gt;www.freebsd.org&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.freebsd.org/doc/handbook/zfs-quickstart.html"&gt;&lt;em&gt;The Z File System (ZFS)&lt;/em&gt;&lt;/a&gt; - &lt;code&gt;www.freebsd.org&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openzfs/zfs"&gt;&lt;em&gt;OpenZFS&lt;/em&gt;&lt;/a&gt; - &lt;code&gt;github.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ubuntu.com/blog/enhancing-our-zfs-support-on-ubuntu-19-10-an-introduction"&gt;&lt;em&gt;Enhancing our ZFS support on Ubuntu 19.10 – an introduction&lt;/em&gt;&lt;/a&gt; - &lt;code&gt;ubuntu.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ubuntu.com/blog/zfs-focus-on-ubuntu-20-04-lts-whats-new"&gt;&lt;em&gt;ZFS focus on Ubuntu 20.04 LTS: what’s new?&lt;/em&gt;&lt;/a&gt; - &lt;code&gt;ubuntu.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://manpages.ubuntu.com/manpages/focal/en/man8/zpool.8.html"&gt;&lt;em&gt;zpool manpage&lt;/em&gt;&lt;/a&gt; - &lt;code&gt;manpages.ubuntu.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://manpages.ubuntu.com/manpages/focal/en/man8/zfs.8.html"&gt;&lt;em&gt;zfs manpage&lt;/em&gt;&lt;/a&gt; - &lt;code&gt;manpages.ubuntu.com&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="Bloc-notes"/><category term="zfs"/><category term="ubuntu"/><category term="admin"/><category term="shell"/><category term="cli"/><category term="performance"/><category term="logiciel libre"/></entry><entry><title>Histoires d'un collègue perfectionniste sous pression</title><link href="https://blog.freezed.me/articles/2020/10/histoires-dun-collegue-perfectionniste-sous-pression/" rel="alternate"/><published>2020-10-07T19:00:00+02:00</published><updated>2020-10-07T19:00:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2020-10-07:/articles/2020/10/histoires-dun-collegue-perfectionniste-sous-pression/</id><summary type="html">&lt;p&gt;S'organiser à petite échelle avec GitLab&lt;/p&gt;</summary><content type="html">&lt;h2&gt;S'organiser à petite échelle avec GitLab&lt;/h2&gt;
&lt;p&gt;Une expérience d'organisation inspirée par la lecture (partielle) du &lt;a href="https://about.gitlab.com/handbook/"&gt;Handbook GitLab&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Un cas d'usage de GitLab qui concerne les (très) petites équipes/organisations.
À base de &lt;a href="https://docs.gitlab.com/ce/user/group/subgroups/"&gt;sous-groupes&lt;/a&gt;, &lt;a href="https://about.gitlab.com/stages-devops-lifecycle/continuous-integration/"&gt;CI/CD&lt;/a&gt;, &lt;a href="https://about.gitlab.com/stages-devops-lifecycle/pages/"&gt;&lt;code&gt;pages&lt;/code&gt;&lt;/a&gt;, documentation unique, &lt;a href="https://pip.pypa.io/en/stable/"&gt;&lt;code&gt;pip&lt;/code&gt;&lt;/a&gt; et &lt;a href="https://djangoproject.com"&gt;Django&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Dans cette présentation je reviens sur l'expérience de mes derniers mois de développeur solo accueillant un nouveau collègue.&lt;/p&gt;
&lt;p&gt;Cette &lt;a href="https://www.meetup.com/fr-FR/GitLab-Meetup-France/events/273510158/"&gt;présentation à distance et publique&lt;/a&gt; c'est déroulée dans le cadre des &lt;a href="https://www.meetup.com/fr-FR/GitLab-Meetup-France/"&gt;rencontres GitLab Francophones&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Le support est disponible en cliquant &lt;strong&gt;sur le logo&lt;/strong&gt; &lt;em&gt;GitLab Virtual Meetup&lt;/em&gt; ci-dessous.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://gitpitch.com/ftalk/2020-gitlab/stable?grs=gitlab"&gt;&lt;img alt="logo GitLab" src="https://blog.freezed.me/img/gitlab-virtual-meetup-s.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;La présentation a été enregistrée et est disponible ici : &lt;a href="https://www.youtube.com/watch?v=urvBh7-4RFo"&gt;youtu.be/urvBh7-4RFo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Les liens évoqués sont listés chronologiquement :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://about.gitlab.com/community/contribute/code-of-conduct/"&gt;Code de conduite GitLab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://about.gitlab.com/company/culture/all-remote/guide/"&gt;&lt;em&gt;All remote guide&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://about.gitlab.com/resources/ebook-remote-playbook/"&gt;Livre blanc &lt;em&gt;travail à distance&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://about.gitlab.com/handbook/about/#count-handbook-pages"&gt;Handbook GitLab : ~8500 pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="www.linkedin.com/posts/derfabianpeter_opensource-activity-6717786219301892097-jr6U"&gt;&lt;em&gt;Sid's fix typo&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.gitlab.com/ee/user/packages/"&gt;&lt;em&gt;Packages &amp;amp; Registries&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://about.gitlab.com/releases/"&gt;Livraison de GitLab&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="Conférences"/><category term="forga"/><category term="talk"/><category term="git"/><category term="gitlab"/><category term="devops"/><category term="django"/><category term="dev"/><category term="admin"/><category term="python"/><category term="packaging"/><category term="pip"/><category term="ci"/><category term="cd"/><category term="dry"/><category term="agile"/><category term="méthode"/><category term="collectif"/><category term="statique"/><category term="gitlab-pages"/><category term="web"/><category term="mkdocs"/></entry><entry><title>S'organiser avec GitLab</title><link href="https://blog.freezed.me/articles/2020/09/gitlab-team-organisation-code-reuse-documentation-and-collaboraton/" rel="alternate"/><published>2020-09-15T01:10:00+02:00</published><updated>2020-09-15T01:10:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2020-09-15:/articles/2020/09/gitlab-team-organisation-code-reuse-documentation-and-collaboraton/</id><summary type="html">&lt;p&gt;Ce groupe a pour objectif de proposer une organisation facilitant la réutilisation de code, la documentation et la collaboration&lt;/p&gt;</summary><content type="html">&lt;h1&gt;💡 C'est quoi l'idée ?&lt;/h1&gt;
&lt;p&gt;Le groupe &lt;a href="https://gitlab.com/forga/"&gt;&lt;code&gt;forga&lt;/code&gt;&lt;/a&gt; (&lt;a href="https://gitlab.com/forga/"&gt;&lt;code&gt;https://gitlab.com/forga/&lt;/code&gt;&lt;/a&gt;) a pour objectif de proposer une organisation facilitant :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;♻️ la réutilisation de code;&lt;/li&gt;
&lt;li&gt;📝 la documentation (de code ou d'autre chose);&lt;/li&gt;
&lt;li&gt;🤝 la collaboration;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://gitlab.com/forga/"&gt;&lt;img alt="Vue arborescente du groupe forga" src="https://blog.freezed.me/img/forga-tree-s.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Il utilise les &lt;a href="https://docs.gitlab.com/ce/user/group/"&gt;groupes&lt;/a&gt;/&lt;a href="https://docs.gitlab.com/ce/user/group/subgroups/"&gt;sous-groupes&lt;/a&gt; , les &lt;a href="https://about.gitlab.com/stages-devops-lifecycle/pages/"&gt;&lt;code&gt;pages&lt;/code&gt;&lt;/a&gt;, et d'autres fonctionnalités de &lt;em&gt;GitLab&lt;/em&gt; pour permettre l'organisation :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;de dépôts &lt;code&gt;git&lt;/code&gt; rassemblé par usages (dans une arborescence);&lt;/li&gt;
&lt;li&gt;de la gestion des accès utilisateurs en lot;&lt;/li&gt;
&lt;li&gt;d'URLs sémantiques pour les pages web statiques de documentation;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le contenu traite du développement dans un contexte Python &amp;amp; Django, mais tout type de language/&lt;em&gt;framework&lt;/em&gt; y trouvera sa place.&lt;/p&gt;
&lt;h2&gt;⚠️ Avertissement&lt;/h2&gt;
&lt;p&gt;C'est un projet expérimental en cours de développement.&lt;/p&gt;
&lt;p&gt;Certains aspects ont été mis en place dans un contexte professionnel, d'autres sont des expérimentations personnelles.&lt;/p&gt;
&lt;h1&gt;📦 Qu'est ce qu'il y a dedans ?&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;un &lt;a href="https://gitlab.com/forga/process/fr/embarquement/"&gt;outil de mentorat&lt;/a&gt; des nouveaux utilisateur·ice·s (orienté Python/Django/UML);&lt;/li&gt;
&lt;li&gt;une &lt;a href="https://forga.gitlab.io/process/fr/manuel/"&gt;source de documentation unique&lt;/a&gt; : &lt;em&gt;le manuel&lt;/em&gt;;&lt;/li&gt;
&lt;li&gt;des paquets &lt;a href="https://www.djangoproject.com/"&gt;Django&lt;/a&gt; :&lt;ul&gt;
&lt;li&gt;un &lt;a href="https://gitlab.com/forga/tool/django/core/"&gt;démarrage rapide&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;une &lt;a href="https://gitlab.com/forga/tool/django/one_to_one/"&gt;application installables directement avec &lt;code&gt;pip&lt;/code&gt;&lt;/a&gt;;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;un &lt;a href="https://gitlab.com/forga/customer/acme/"&gt;projet client&lt;/a&gt; réutilisant les paquets Django mentionnés ci-dessus;&lt;/li&gt;
&lt;li&gt;des &lt;a href="https://gitlab.com/forga/devel/third-party/"&gt;projets tiers&lt;/a&gt; utilisé en interne;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Et sinon vous pouvez toujours &lt;a href="https://gitlab.com/forga/"&gt;visiter l'URL du groupe&lt;/a&gt; et dérouler le contenus des sous-groupes pour vous faire une idée.&lt;/p&gt;
&lt;h1&gt;🤝 Envie de contribuer ?&lt;/h1&gt;
&lt;p&gt;Avec plaisir !&lt;/p&gt;
&lt;p&gt;Il y a quelques conventions (&lt;a href="https://forga.gitlab.io/process/fr/manuel/convention/git/"&gt;git&lt;/a&gt; &amp;amp; &lt;a href="https://forga.gitlab.io/process/fr/manuel/convention/python/"&gt;python&lt;/a&gt;) présentées dans &lt;a href="https://forga.gitlab.io/process/fr/manuel/"&gt;le manuel&lt;/a&gt; ainsi qu'un &lt;a href="https://forga.gitlab.io/process/fr/manuel/human/code-of-conduct/"&gt;code de conduite&lt;/a&gt;.&lt;/p&gt;</content><category term="Réalisations"/><category term="forga"/><category term="django"/><category term="python"/><category term="packaging"/><category term="pip"/><category term="ci"/><category term="cd"/><category term="git"/><category term="dry"/><category term="gitlab"/><category term="agile"/><category term="méthode"/><category term="collectif"/><category term="dev"/><category term="devops"/><category term="statique"/><category term="gitlab-pages"/><category term="web"/><category term="mkdocs"/></entry><entry><title>Get organized with GitLab</title><link href="https://blog.freezed.me/articles/2020/09/gitlab-team-organisation-code-reuse-documentation-and-collaboraton/en/" rel="alternate"/><published>2020-09-15T01:10:00+02:00</published><updated>2020-09-15T01:10:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2020-09-15:/articles/2020/09/gitlab-team-organisation-code-reuse-documentation-and-collaboraton/en/</id><summary type="html">&lt;p&gt;The goal of this group is to provide an organization that facilitates code reuse, documentation and collaboration&lt;/p&gt;</summary><content type="html">&lt;h1&gt;💡 What's the idea ?&lt;/h1&gt;
&lt;p&gt;The &lt;a href="https://gitlab.com/forga/"&gt;&lt;code&gt;forga&lt;/code&gt;&lt;/a&gt; group (&lt;a href="https://gitlab.com/forga/"&gt;&lt;code&gt;https://gitlab.com/forga/&lt;/code&gt;&lt;/a&gt;) aims to provide an organization that facilitates :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;♻️ the reuse of code;&lt;/li&gt;
&lt;li&gt;📝 documentation (of code or anything else);&lt;/li&gt;
&lt;li&gt;🤝 collaboration;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://gitlab.com/forga/"&gt;&lt;img alt="Tree view for forga group" src="https://blog.freezed.me/img/forga-tree-s.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It uses the &lt;a href="https://docs.gitlab.com/ce/user/group/"&gt;groups&lt;/a&gt;/&lt;a href="https://docs.gitlab.com/ce/user/group/subgroups/"&gt;subgroups&lt;/a&gt;, &lt;a href="https://about.gitlab.com/stages-devops-lifecycle/pages/"&gt;pages&lt;/a&gt;, and other &lt;em&gt;GitLab&lt;/em&gt; features to enable organization :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;of &lt;code&gt;git&lt;/code&gt; repositories grouped by usage (in a tree structure);&lt;/li&gt;
&lt;li&gt;batch user access management;&lt;/li&gt;
&lt;li&gt;semantic URLs for static documentation web pages;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The content deals with development in a Python &amp;amp; Django context, but any kind of language/&lt;em&gt;framework&lt;/em&gt; will find its place there.&lt;/p&gt;
&lt;h2&gt;⚠️ Warning&lt;/h2&gt;
&lt;p&gt;It is an experimental project under development.&lt;/p&gt;
&lt;p&gt;Some aspects have been set up in a professional context, others are personal experiments.&lt;/p&gt;
&lt;h1&gt;📦 What's in it ?&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;an &lt;a href="https://gitlab.com/forga/process/fr/embarquement/"&gt;mentorship tool&lt;/a&gt; for new users (French version for Python/Django/UML);&lt;/li&gt;
&lt;li&gt;a &lt;a href="https://forga.gitlab.io/process/fr/manuel/"&gt;single source of documentation&lt;/a&gt;· &lt;em&gt;le Manuel&lt;/em&gt; (French version);&lt;/li&gt;
&lt;li&gt;some &lt;a href="https://www.djangoproject.com/"&gt;Django&lt;/a&gt; packages:&lt;ul&gt;
&lt;li&gt;a &lt;a href="https://gitlab.com/forga/tool/django/core/"&gt;bootstrap project&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;an &lt;a href="https://gitlab.com/forga/tool/django/one_to_one/"&gt;application directly installable with &lt;code&gt;pip&lt;/code&gt;&lt;/a&gt;;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a &lt;a href="https://gitlab.com/forga/customer/acme/"&gt;customer project&lt;/a&gt; reusing the Django packages above;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/forga/devel/third-party/"&gt;third-party projects&lt;/a&gt; used internally;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;And if not, you can always &lt;a href="https://gitlab.com/forga/"&gt;visit the group URL&lt;/a&gt; and scroll down the contents of the subgroups to get an idea.&lt;/p&gt;
&lt;h1&gt;🤝 Want to contribute ?&lt;/h1&gt;
&lt;p&gt;With pleasure!&lt;/p&gt;
&lt;p&gt;There are some conventions (&lt;a href="https://forga.gitlab.io/process/fr/manuel/convention/git/"&gt;git&lt;/a&gt; &amp;amp; &lt;a href="https://forga.gitlab.io/process/fr/manuel/convention/python/"&gt;python&lt;/a&gt;) presented in &lt;a href="https://forga.gitlab.io/process/fr/manuel/"&gt;the manual&lt;/a&gt; and a &lt;a href="https://forga.gitlab.io/process/fr/manuel/human/code-of-conduct/"&gt;code of conduct&lt;/a&gt;.&lt;/p&gt;</content><category term="Réalisations"/><category term="forga"/><category term="django"/><category term="python"/><category term="packaging"/><category term="pip"/><category term="ci"/><category term="cd"/><category term="git"/><category term="dry"/><category term="gitlab"/><category term="agile"/><category term="méthode"/><category term="collectif"/><category term="dev"/><category term="devops"/><category term="statique"/><category term="gitlab-pages"/><category term="web"/><category term="mkdocs"/></entry><entry><title>Un nouveau thème pour ce blog</title><link href="https://blog.freezed.me/articles/2020/09/un-nouveau-theme-pour-ce-blog/" rel="alternate"/><published>2020-09-07T01:26:00+02:00</published><updated>2020-09-07T01:26:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2020-09-07:/articles/2020/09/un-nouveau-theme-pour-ce-blog/</id><summary type="html">&lt;p&gt;Il était temps de passer à un thème responsive&lt;/p&gt;</summary><content type="html">&lt;p&gt;Enfin un thème &lt;em&gt;responsive&lt;/em&gt;, basé sur le thème &lt;code&gt;uberspot&lt;/code&gt; de &lt;a href="https://gitlab.com/axil"&gt;Achilleas Pipinellis&lt;/a&gt; publié sous licence &lt;a href="https://creativecommons.org/licenses/by/4.0/deed.fr"&gt;CC BY 4.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Mes adaptations :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;lien vers le commit de &lt;em&gt;build&lt;/em&gt; du site;&lt;/li&gt;
&lt;li&gt;suppression de &lt;em&gt;templates&lt;/em&gt; (&lt;code&gt;disqus&lt;/code&gt;, &lt;code&gt;js_https&lt;/code&gt;, etc.);&lt;/li&gt;
&lt;li&gt;suppression des &lt;em&gt;pluggins&lt;/em&gt;;&lt;/li&gt;
&lt;li&gt;personnalisation de quelques blocs;&lt;/li&gt;
&lt;li&gt;suppression de la &lt;strong&gt;page d'accueil&lt;/strong&gt; de l'ancien thème et intégration de son contenu dans la &lt;strong&gt;page contact&lt;/strong&gt;;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Plus d'info sur ce thème sur &lt;a href="https://axilleas.me/en/blog/2014/pelican-new-theme-redesign/"&gt;le post originel de son auteur&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Merci à lui.&lt;/p&gt;</content><category term="Bloc-notes"/><category term="pelican"/><category term="web"/><category term="gitlab-pages"/><category term="ci"/><category term="statique"/></entry><entry><title>e-Workshop : introduction à Ansible</title><link href="https://blog.freezed.me/articles/2020/07/e-workshop-introduction-a-ansible/" rel="alternate"/><published>2020-07-29T19:00:00+02:00</published><updated>2020-07-29T19:00:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2020-07-29:/articles/2020/07/e-workshop-introduction-a-ansible/</id><summary type="html">&lt;p&gt;L'objectif de cet atelier est de découvrir Ansible par la pratique.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;a href="https://www.linkedin.com/in/pierre-beucher/"&gt;Pierre Beucher&lt;/a&gt; et organisé par &lt;a href="http://www.abbeal.com/"&gt;Abbeal&lt;/a&gt; &amp;amp; &lt;a href="https://crafteo.io/"&gt;Crafteo&lt;/a&gt; (via &lt;a href="https://www.meetup.com/fr-FR/meetup-group-IzAHXpzE/events/271984246/"&gt;Meetup&lt;/a&gt;).&lt;/p&gt;
&lt;h1&gt;Atelier pratique d'introduction à Ansible&lt;/h1&gt;
&lt;p&gt;L'objectif du meetup est de découvrir &lt;a href="https://www.ansible.com/"&gt;Ansible&lt;/a&gt; sous forme d'un atelier pratique. A la fin de la séance, nous aurons introduit les concepts de base d'Ansible:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Qu'est-ce qu'Ansible et l'Infrastructure as Code?&lt;/li&gt;
&lt;li&gt;Écrire et utiliser un Playbook Ansible&lt;/li&gt;
&lt;li&gt;Inventaires, Tâches, Modules, Variables et Templates&lt;/li&gt;
&lt;li&gt;Découper un Playbook en Rôles&lt;/li&gt;
&lt;li&gt;Ansible Galaxy&lt;/li&gt;
&lt;li&gt;Overview des features avancées d'Ansible&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Assurez-vous d'avoir un système Linux (préférablement Ubuntu 18 ou 20) directement sur votre machine ou avec une VM&lt;/p&gt;
&lt;p&gt;Pour pleinement profiter de l'atelier il est conseillé d'avoir les connaissances suivantes:
- Connaissance de base en système Linux
- Connaissance de base en réseau: savoir ce qu'est une adresse IP, un port, un nom d’hôte, etc.
- Connaissance de base en système de fichier Linux (connaître une arborescence de fichier, gérer les droits, etc.)
- Savoir utiliser un shell Linux (commandes de base type apt-get install)
- Savoir utiliser un éditeur en console (type vi ou nano) ou avec interface graphique&lt;/p&gt;
&lt;p&gt;15 places disponibles !&lt;/p&gt;
&lt;p&gt;Nous vous attendons nombreux avec le sourire &amp;amp; l'envie d'échanger !&lt;/p&gt;
&lt;h2&gt;Workshop&lt;/h2&gt;
&lt;p&gt;2 machines par élèves (construite avec &lt;a href="https://github.com/PierreBeucher/cloud-sandbox-manager"&gt;&lt;code&gt;PierreBeucher/cloud-sandbox-manager&lt;/code&gt;&lt;/a&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ubuntu@user1.training.crafteo.io&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ubuntu@user2.training.crafteo.io&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Base de travail&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/PierreBeucher/workshop-ansible-playbook"&gt;&lt;code&gt;PierreBeucher/workshop-ansible-playbook&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Exercices&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;partie 1: &lt;a href="http://ansible.training.crafteo.io/hello"&gt;hello world&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;partie 2: &lt;a href="http://ansible.training.crafteo.io/tasks"&gt;les tâches&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;docs : &lt;a href="https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html"&gt;filtres&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;partie 3: &lt;a href="http://ansible.training.crafteo.io/vars"&gt;les variables&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;docs : &lt;a href="https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable"&gt;variable precedence&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;partie 4: &lt;a href="http://ansible.training.crafteo.io/roles"&gt;les roles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;partie 5: &lt;a href="http://ansible.training.crafteo.io/galaxy"&gt;Ansible Galaxy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Dépôt de travail :&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/free_zed/ansible-crafteo"&gt;&lt;code&gt;free_zed/ansible-crafteo&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Notes personnelles&lt;/h2&gt;
&lt;p&gt;r-----------------&lt;/p&gt;
&lt;p&gt;r-----------------&lt;/p&gt;
&lt;p&gt;r-----------------&lt;/p&gt;
&lt;p&gt;Voir pour fusionner les exemples ici avec &lt;a href="https://gitlab.com/free_zed/myasb"&gt;&lt;code&gt;free_zed/myasb&lt;/code&gt;&lt;/a&gt; pour ajouter à &lt;a href="https://gitlab.com/forga/process"&gt;&lt;code&gt;forga/process&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;</content><category term="Bloc-notes"/><category term="workshop"/><category term="lyon"/><category term="ansible"/><category term="devops"/></entry><entry><title>Accueil d'un stagiaire à distance</title><link href="https://blog.freezed.me/articles/2020/07/accueil-dun-stagiaire-a-distance/" rel="alternate"/><published>2020-07-21T21:32:00+02:00</published><updated>2020-07-21T21:32:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2020-07-21:/articles/2020/07/accueil-dun-stagiaire-a-distance/</id><summary type="html">&lt;p&gt;Essai de traduction de 2 articles traitant de l'accueil de stagiaire à distance et bref retour d'expérience.&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;h2&gt;Contexte ?&lt;/h2&gt;
&lt;p&gt;En plein &lt;em&gt;confinement CoViD-19&lt;/em&gt;, confirmation est faite de l'arrivée d'un nouveau collaborateur pour un stage de 6 mois à mes côtés. La situation est une première pour moi a plusieurs niveau : c'est mon 1er mentorat d'une telle durée dans mon nouveau métier et ça commencera 100% à distance.&lt;/p&gt;
&lt;h2&gt;De quoi s'agit-il ?&lt;/h2&gt;
&lt;p&gt;Ce billet est une traduction libre, personnelle, synthétisée et certainement imparfaites des pages suivantes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🇬🇧 «&lt;a href="https://about.gitlab.com/company/culture/all-remote/internship/"&gt;Considerations for remote internships&lt;/a&gt;» par &lt;a href="https://about.gitlab.com/company/"&gt;&lt;em&gt;GitLab&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;🇬🇧 «&lt;a href="https://www.hbs.edu/recruiting/blog/post/best-practices-for-creating-a-successful-virtual-internship"&gt;Best practices for creating a successful virtual internship&lt;/a&gt;» par &lt;a href="https://www.linkedin.com/in/beccacarnahan"&gt;&lt;em&gt;Rebecca Carnahan&lt;/em&gt;&lt;/a&gt; (&lt;em&gt;Harvard Business School Blog&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;J'y ai ajouté quelques notes personnelles en fin de billet.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Remarques concernant les stages à distance&lt;/h2&gt;
&lt;h3&gt;Anticipation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;anticiper les méthodes de travail&lt;/li&gt;
&lt;li&gt;s'attendre à ce que les stagiaires aient besoin de beaucoup d'aide&lt;/li&gt;
&lt;li&gt;prévoir une communication claire et asynchrones&lt;/li&gt;
&lt;li&gt;mentor et stagiaire doivent apprécier et respecter l'autonomie&lt;/li&gt;
&lt;li&gt;formation du mentor (centrée sur l'empathie)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Une bonne compréhension des tâches professionnelles d'un stagiaire à distance ne garantie absolument pas sa gestion des problèmes d'environnement de travail.&lt;/p&gt;
&lt;p&gt;Ne pas s'attendre à ce que le stagiaire sache comment bien travailler dans un environnement distant, surtout si c'est sa 1ère expérience professionnelle. Divers guides sur le travail à distance peuvent être utile, mais attention à ceux ayant pour prérequis/à priori une précédente expérience professionnelle en présentielle.&lt;/p&gt;
&lt;h3&gt;Sécurité psychologique&lt;/h3&gt;
&lt;p&gt;Sur site la proximité crée généralement de la sécurité psychologique permettant au stagiaire de poser des questions au fur et à mesure qu'elles se présentent, sans crainte de s'imposer.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;prise de contact à l'initiative du mentor avec le stagiaire à un rythme régulier (une fois par heure)&lt;/li&gt;
&lt;li&gt;rappel quotidien que les stagiaires sont libres de se questionner le mentor aussi souvent que nécessaire, comme si il était dans la même pièce&lt;/li&gt;
&lt;li&gt;avoir un salon vidéo toujours ouvert où le stagiaire peut voir au moins une autre personne travailler (2ème écran)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;En cas d'embauche&lt;/h3&gt;
&lt;p&gt;Rechercher les compétences suivantes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;une capacité d'auto-apprentissage&lt;/li&gt;
&lt;li&gt;l'autonomie&lt;/li&gt;
&lt;li&gt;appétence pour la documentation&lt;/li&gt;
&lt;li&gt;capacité à travailler de manière asynchrone&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si le stagiaire est sans expérience professionnelle, les questions suivante permettent de se faire une idée :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Avez-vous déjà suivi un cours ou une formation en ligne ? Si oui, décrivez votre processus pour gérer votre propre temps, respecter les délais, demander de l'aide et résoudre les problèmes :&lt;/p&gt;
&lt;p&gt;Êtes-vous un membre actif d'une communauté en ligne, ou avez-vous une expérience de la gestion logistique à distance pour des événements/réunions sur site ?&lt;/p&gt;
&lt;p&gt;Avez-vous déjà travaillé en indépendant pour des clients à distance et seriez-vous prêt à fournir des références sur demande ?&lt;/p&gt;
&lt;p&gt;Avez-vous réfléchi à l'endroit où vous travailleriez à distance si on vous offrait ce stage ?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ne pas s'attendre à une réponse précise à cette question, car même les cadres supérieurs doivent expérimenter les espaces de travail, mais il est utile de comprendre si le candidat a tenu compte de cet élément :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Parlez-moi d'une époque où vous avez fait avancer un projet de groupe dans un lieu physique différent de celui des autres membres&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;Les étudiants universitaires auront de fortes chances d'avoir travaillé à distance. Cherchez des détails sur la façon dont ils l'ont apprécié, les défis qu'ils ont relevés et comment ils y ont fait face.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Durée du stage&lt;/h3&gt;
&lt;p&gt;Rallonger du temps de stage permet de créer un moment d'acclimatation au travail à distance (3 mois sur site ~ 4 mois à distance)&lt;/p&gt;
&lt;h3&gt;Début / fin de stage sur site&lt;/h3&gt;
&lt;p&gt;Sans être obligatoire, envisager une semaine de stage sur site. Surtout pour une embauche de plusieurs stagiaires au sein d'une même équipe.&lt;/p&gt;
&lt;p&gt;Une dernière semaine sur site peut être utile pour réaliser un bilan et la suite.&lt;/p&gt;
&lt;h3&gt;Gérer les attentes&lt;/h3&gt;
&lt;p&gt;Calibrer les attentes et ce que l'on évalue est important, car les stagiaires à distance apprennent essentiellement deux choses :
- le travail lui-même
- la façon de bien travailler à distance (sans bureau)&lt;/p&gt;
&lt;p&gt;Cela peut s'avérer particulièrement difficile quand l'éloignement est important : ces entreprises ont tendance à être très efficaces. Quand ce sont les résultats, et non les heures, qui sont mesurés, il y a une tendance naturelle à s'attendre à la rapidité. Le stagiaire à distance apprend deux grandes leçons en même temps et les progrès peuvent sembler plus lents que ceux auxquels on s'attend.&lt;/p&gt;
&lt;h3&gt;La sélectionner des projets proposés&lt;/h3&gt;
&lt;p&gt;Certains projets et certaines tâches sont plus facilement réalisés par le personnel &lt;em&gt;junior&lt;/em&gt;. En outre, certaines tâches sont plus facilement accomplies de manière asynchrone.&lt;/p&gt;
&lt;p&gt;Veiller à ne pas se décharger des «&lt;em&gt;vampires énergétiques&lt;/em&gt;» sur le stagiaire à distance, mais plutôt choisir des projets complets qu'il peut commencer et terminer en quelques mois.&lt;/p&gt;
&lt;p&gt;Il est également important de sélectionner des projets importants ou impliquant un grand groupe de collaborateurs : cela permet de s'assurer que de nombreuses personnes s'investiront dans la réussite du stagiaire, et d'élargir le champ des mentors disponibles qui connaissent bien le projet et peuvent intervenir/aider.&lt;/p&gt;
&lt;p&gt;Dans la mesure du possible, évitez les travaux où le temps est compté. Les grands projets de stage sont généralement considérés comme "agréables à réaliser" par le personnel à plein temps. Il s'agit de projets dont tout le monde reconnaît qu'ils seraient bénéfiques pour l'organisation, mais qui n'atteignent pas le niveau de priorité nécessaire pour exiger l'attention de la hiérarchie.&lt;/p&gt;
&lt;h3&gt;Publier votre stratégie et votre embarquement&lt;/h3&gt;
&lt;p&gt;C'est offrir un contexte abondant à la question :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Comment se passe le travail dans votre entreprise ?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Cela témoigne du respect des demandeurs d'emploi et permet que les candidats soient en accord avec vos valeurs.&lt;/p&gt;
&lt;p&gt;Il est difficile d'embaucher des stagiaires à distance. Une organisation ne devrait pas rendre les choses plus difficiles en dissimulant sa vision et ses valeurs jusqu'à l'embauche d'un stagiaire. Compte tenu de la durée remarquablement courte de l'expérience de stage, il est essentiel d'agir de manière transparente afin de créer un alignement aussi large que possible avant le départ.&lt;/p&gt;
&lt;h3&gt;Mais alors, pourquoi proposer des stages à distance ?&lt;/h3&gt;
&lt;h4&gt;Avantage concurrentiel à l'embauche&lt;/h4&gt;
&lt;p&gt;Nous pensons [&lt;em&gt;GitLab inc.&lt;/em&gt;, NdT] que le travail à distance est l'avenir du travail, et la possibilité de travailler là où l'on est le plus épanoui deviendra bientôt la norme. Les entreprises qui sont construites pour soutenir le travail à distance (par exemple les entreprises qui créent des produits numériques), mais qui refusent d'offrir une telle flexibilité, seront peu sollicitées par les meilleurs talents. Cela inclut les stagiaires les plus prometteurs.&lt;/p&gt;
&lt;p&gt;Autrement dit, offrir des stages à distance aujourd'hui constitue un avantage concurrentiel pour attirer des stagiaires ambitieux et compétents, mais cela va bientôt devenir une exigence pratique.&lt;/p&gt;
&lt;h4&gt;Diversité&lt;/h4&gt;
&lt;p&gt;En engageant des stagiaires à distance, les organisations sont en mesure d'élargir leur champ d'action habituel et de recruter des talents dans des régions mal desservies du globe. La diversité culturelle et géographique est importante pour la réussite et le dynamisme à long terme d'une entreprise.&lt;/p&gt;
&lt;h4&gt;Un regard neuf&lt;/h4&gt;
&lt;p&gt;Les stagiaires sont capables d'offrir des perspectives intéressantes. Étant donné que beaucoup ne travaillent que quelques mois, ils sont capables d'évaluer une organisation avec un regard neuf, et ils ont peu à perdre en offrant un retour d'information transparent en cours de route.&lt;/p&gt;
&lt;p&gt;Les stagiaires qui sont à l'université ou récemment diplômés peuvent aussi apporter de nouveaux outils et de nouvelles méthodologies.&lt;/p&gt;
&lt;h4&gt;Remarques relatives aux stagiaires&lt;/h4&gt;
&lt;p&gt;Les stagiaires qui envisagent de postuler pour un stage à distance plutôt que pour un stage sur site doivent suivre les conseils ci-dessus afin de mieux comprendre le point de vue de l'employeur.&lt;/p&gt;
&lt;p&gt;Il est important de reconnaître que les attentes seront probablement plus élevées dans un stage à distance, alors que les ressources peuvent être moindres si l'entreprise ne dispose pas d'une infrastructure de stage mature.&lt;/p&gt;
&lt;p&gt;Il est important de poser des questions pendant la phase d'entretien afin de comprendre l'environnement de travail. Vous devez vous assurer d'avoir un mentor à distance ou un référent d'accueil qui sera disponible pour répondre aux questions relatives au travail à distance.&lt;/p&gt;
&lt;p&gt;Le travail à distance vous oblige à faire des choses que vous devriez faire de toute façon, mais plus rapidement et plus intentionnellement. C'est un excellent contexte pour les stagiaires, qui peuvent non seulement acquérir une expérience professionnelle, mais aussi travailler dans un environnement où ils sont maître de leur espace, de leur temps et de leur approche.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Bonnes pratiques pour créer un stage à distance réussi&lt;/h2&gt;
&lt;h3&gt;Une communication claire&lt;/h3&gt;
&lt;p&gt;S'assurer que :
- toutes leurs parties prenantes soient bien informées de l'avenir de leurs projet
- les étudiants savent à quoi s'attendre et quand&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.linkedin.com/in/mollydecastro"&gt;Molly DeCastro&lt;/a&gt; a commencé à constater un mouvement vers les stages à distance de la part de plusieurs entreprises technologiques qui recrutent, à &lt;a href="https://www.hbs.edu/"&gt;HBS&lt;/a&gt; ou en dehors.&lt;/p&gt;
&lt;p&gt;Une action claire associée à une communication directe avec les stagiaires est bénéfique même si les détails du stage ne sont pas encore finalisés. Dans un environnement économique incertain, les stagiaires sont préoccupés par l'annulation des stages. Par conséquent, le fait d'agir rapidement pour faire avancer un stage à distance contribue grandement à établir la confiance. En outre, en prenant une décision au plus vite et en la faisant connaître au(x) nouveau(x) stagiaire(s), votre entreprise aura plus de temps pour élaborer une expérience de stage aussi efficace que si elle était sur site.&lt;/p&gt;
&lt;h3&gt;Conception du stage à distance&lt;/h3&gt;
&lt;p&gt;Pour concevoir un stage à distance efficace, regardez ce qui a fait le succès des stages sur site dans votre entreprise et dans d'autres. &lt;a href="https://www.linkedin.com/in/fitzpatrickkristen"&gt;Kristen Fitzpatrick&lt;/a&gt; (HBS 2003), directrice générale de &lt;em&gt;Career &amp;amp; Professional Development&lt;/em&gt;, a noté les points communs entre les grandes expériences de stage :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Les stages réussis profitent à la fois aux organisations et aux étudiants en donnant la possibilité à une personne ayant un regard neuf de jeter un regard sur la façon dont les choses sont faites, et en permettant aux étudiants de mettre à profit leur expérience antérieure dans une nouvelle situation. Les étudiants ayant vécu des expériences particulièrement positives font souvent remarquer qu'ils se sont sentis intégrés dans le travail de l'équipe et que les gens de l'organisation se sont souciés de ce sur quoi ils travaillaient.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Pour reproduire cette intégration, réfléchissez à la manière dont vous pouvez créer une structure en ligne de soutien, de mentorat et de formation continue. Les étapes que &lt;em&gt;K. Fitzpatrick&lt;/em&gt; suggère souvent :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;des rencontres régulières en face à face avec entre stagiaire et mentor&lt;/li&gt;
&lt;li&gt;un point au milieu [du stage NdT]&lt;/li&gt;
&lt;li&gt;une présentation à la fin [du stage NdT] avec les dirigeants en visioconférence&lt;/li&gt;
&lt;li&gt;un travail quotidien par chat, outils de gestion de projet et e-mail&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Non seulement ces étapes annoncées donneront à votre stagiaire des jalons à atteindre, mais ils lui permettront également de faire connaissance avec les membres de l'équipe et les dirigeants à distance.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.linkedin.com/in/darrenmurph"&gt;Darren Murph&lt;/a&gt;, responsable du travail à distance chez &lt;em&gt;GitLab&lt;/em&gt;, souligne également l'importance de choisir les projets appropriés pour les stagiaires à distance :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Il est important de sélectionner des projets qui sont importants ou notables pour un grand groupe. Cela permet de s'assurer que de nombreuses personnes de l'organisation sont investies dans la réussite du stagiaire, et cela élargit le champ des mentors disponibles qui connaissent le projet et peuvent intervenir et aider à travers les fuseaux horaires.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Vous pouvez également envisager un stage en rotation qui donnera aux étudiants un aperçu des différents aspects de votre entreprise tout en n'étant pas sur place avec votre équipe. &lt;a href="https://www.linkedin.com/in/keirsten-sires-83928853"&gt;Keirsten Sires&lt;/a&gt;, consultant en matière de stages à distance et fondateur et PDG de &lt;em&gt;LRT Sports&lt;/em&gt;, utilise ce modèle depuis quatre ans dans le cadre du stage de rotation à distance de 10 semaines de l'entreprise. Les étudiants passent par cinq rotations avec des projets assignés chaque semaine et revus par des mentors. La dernière rotation permet aux stagiaires de choisir le domaine d'activité qui les intéresse le plus pour réaliser un projet final. Elle a également souligné la nécessité d'être flexible au sein de votre structure :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Notre stage est très différent de ce qu'il était lorsque nous avons commencé. Vous devez être dynamique dans ce processus et obtenir un retour d'information. Ensuite, si quelque chose ne fonctionne pas, n'essayez pas de le forcer.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Embarquer à distance&lt;/h3&gt;
&lt;p&gt;Une expérience d'embarquement à distance pour vos stagiaires ne sera pas remplie de poignées de main autour du bureau et d'un déjeuner d'équipe. Cependant, vous pouvez les accueillir efficacement et faire en sorte qu'ils se sentent intégrés dès le premier jour grâce à des processus efficaces et un soutien continu.&lt;/p&gt;
&lt;p&gt;Par exemple, tous les employés de &lt;em&gt;GitLab_sont à distance et ont donc mis au point un processus d'intégration qui comprend un compagnon d'intégration, des listes de contrôle des tâches spécifiques et un manuel complet de l'entreprise. Le manuel en ligne de 5 000 pages est constamment mis à jour à mesure que les employés trouvent des lacunes, de nouveaux outils ou des moyens plus efficaces d'accomplir leur travail. Il n'est pas destiné à être lu du début à la fin, mais à servir de guide de référence pour les questions. Pour son programme de stage en particulier, _D. Murph&lt;/em&gt; recommande un embarquement avec des points à un rythme régulier, jusqu'à plusieurs fois par jour pendant la période de démarrage, afin de reproduire une expérience sur site. Vous pouvez également installer une salle de visioconférence "toujours allumée" pour encourager les questions et l'interaction.&lt;/p&gt;
&lt;p&gt;À &lt;em&gt;LRT Sports&lt;/em&gt;, &lt;em&gt;K. Sires&lt;/em&gt; a mis en place un processus d'embarquement qui met l'accent sur les points suivants :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;découvrir l'entreprise grâce à l'accès aux ressources et aux médias sociaux avant l'arrivée du stagiaire&lt;/li&gt;
&lt;li&gt;après deux semaines, chaque stagiaire présente l'entreprise à son responsable&lt;/li&gt;
&lt;li&gt;l'éducation continue avec des leçons vidéo et des articles fournis&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Gestion d'une équipe virtuelle&lt;/h3&gt;
&lt;p&gt;La technologie a rendu le travail à distance plus facile que jamais et il existe de nombreux outils qui aident les équipes à collaborer. Cependant, il existe des équipes à distance depuis des décennies dans divers secteurs et la réussite de ces entreprises repose en grande partie sur une gestion efficace, fondée sur le soutien et la confiance. Ces pratiques s'appliquent également à la gestion de stages à distances.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.linkedin.com/in/clairelew"&gt;Claire Lew&lt;/a&gt;, PDG de &lt;em&gt;Know Your Team&lt;/em&gt;, a dirigé son entreprise à distance pendant 6 ans et fournit des outils et des ressources aux autres entreprises pour qu'elles fassent de même. Les conseils qu'elle donne en matière de gestion d'équipes virtuelles sont axés sur la définition d'attentes claires quant à la réussite, ainsi que sur des systèmes de suivi des progrès. En préparant le terrain très tôt avec tous les employés, et en particulier les nouveaux stagiaires, vous pouvez éviter la micro-gestion des projets et créer plutôt une culture de confiance et donner à l'équipe le temps et l'espace nécessaires pour effectuer un travail percutant.&lt;/p&gt;
&lt;p&gt;Il est également important de définir des attentes claires en matière de communication. Si votre équipe dispose d'un mode de communication par défaut, assurez-vous que les stagiaires sont bien informés des canaux à utiliser et du moment où ils le font. Dans quel délai les stagiaires sont-ils censés répondre aux messages ? Quelle est la place du chat et qu'est-ce qui convient le mieux à une réunion par courriel ou visioconférence ? Lors d'un récent webinaire &lt;em&gt;Know Your Team&lt;/em&gt;, &lt;em&gt;C. Lew&lt;/em&gt; a donné des exemples d'entreprises qui font un excellent travail en fixant des attentes en matière de communication, notamment &lt;em&gt;Automatic&lt;/em&gt;, &lt;em&gt;Buffer&lt;/em&gt; et &lt;em&gt;Basecamp&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;C. Lew&lt;/em&gt; , ainsi que &lt;em&gt;D. Murph&lt;/em&gt; de &lt;em&gt;GitLab&lt;/em&gt;, recommandent également de mettre en œuvre une pratique de communication asynchrone au lieu de se reposer sur la visioconférence. Lancer des séances de brainstorming par écrit ou poster des questions sur des documents partagés permet aux membres de l'équipe, y compris les stagiaires, de réfléchir et d'être ensuite moins réactifs et de prendre des décisions plus réfléchies. En intégrant des stagiaires à distance dans votre équipe, l'écriture asynchrone permet également de collaborer au-delà des fuseaux horaires et de fournir des documents écrits sur la façon dont les stagiaires ont apporté des contributions percutantes.&lt;/p&gt;
&lt;h3&gt;Trouvez ce qui vous convient&lt;/h3&gt;
&lt;p&gt;N'oubliez pas que nombre des entreprises présentées ici gèrent des programmes de stages à distance depuis des années et qu'elles ont toutes eu le temps d'élaborer leurs stratégies et d'apporter des changements en cours de route. En cette période de transition entre aujourd'hui et l'été 2020, nous vous encourageons à réfléchir au temps et aux ressources dont dispose votre entreprise et à choisir parmi ces meilleures pratiques celles qui vous permettront de tirer profit d'un stage d'été à distance.&lt;/p&gt;
&lt;p&gt;En outre, à mesure que vous progresserez dans la gestion de vos stagiaires virtuels cet été, vous pourrez également vous référer aux meilleures pratiques de gestion à distance et au leadership éclairé de la faculté de la &lt;em&gt;Harvard Business School&lt;/em&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Notes de fin&lt;/h2&gt;
&lt;p&gt;Vous avez lu jusqu'ici ? Merci !&lt;/p&gt;
&lt;p&gt;J'ai commencé ce billet avant, mais l'ai terminé après le démarrage du stage. Dans une TPE, les possibilités sont limités mais la proximité plus facile a construire, à fortiori quand le·a collaborateur·ice à déjà une dizaine d'année d'expérience professionelle, ce qui était notre cas.&lt;/p&gt;
&lt;p&gt;Concrètement nous avons pu mettre en places quelques actions pérène :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un point visio quotidien, informel à heure variable (occasionnellement deux, des fois pas)&lt;/li&gt;
&lt;li&gt;deux jours sur site pour mon collègue &lt;em&gt;sans moi&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;une journée sur site &lt;em&gt;avec moi&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;un chat ouvert, où &lt;em&gt;tous&lt;/em&gt; les collègues ont un accès&lt;/li&gt;
&lt;li&gt;un outil de gestion de projet de développement (instance privée de GitLab) avec :&lt;ul&gt;
&lt;li&gt;une organisation structurée des projets de code (&lt;a href="https://gitlab.com/forga"&gt;version publique&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;un outil de suivi d'activité/tutorat (&lt;a href="https://gitlab.com/forga/process/fr/embarquement/-/blob/production/README.md"&gt;version publique&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;une source de documentation unique (&lt;a href="https://gitlab.com/forga/process/fr/manuel/-/blob/production/README.md"&gt;version publique&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;pas d'e-mail. En tout cas pas entre nous deux.&lt;/li&gt;
&lt;li&gt;pas de téléphone, SMS, messagerie.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L'expérience n'est pas terminée, mais je peu dors et déjà recommander de tenter l'expérience.&lt;/p&gt;</content><category term="Bloc-notes"/><category term="dev"/><category term="comportement"/><category term="innovation"/><category term="collectif"/><category term="méthode"/><category term="agile"/><category term="gitlab"/><category term="gitlab-pages"/></entry><entry><title>Mise à jour d'un réseau local Debian avec Ansible</title><link href="https://blog.freezed.me/articles/2020/04/mise-a-jour-dun-reseau-local-debian-avec-ansible/" rel="alternate"/><published>2020-04-19T00:43:00+02:00</published><updated>2020-04-19T00:43:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2020-04-19:/articles/2020/04/mise-a-jour-dun-reseau-local-debian-avec-ansible/</id><summary type="html">&lt;p&gt;Mise à jour d'un parc Debian hétérogène (packages &amp;amp;_config), avec packages hors dépôt.&lt;/p&gt;</summary><content type="html">&lt;h3&gt;Contexte&lt;/h3&gt;
&lt;p&gt;Mise à jour d'un parc Debian hétérogène, pour l'exercice, le réseau famillial fera l'affaire :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;5 machines physiques : 1 serveur +  4 postes (Stretch/Buster/Bullseye)&lt;/li&gt;
&lt;li&gt;2 machines virtuelles, (Jessie/Buster)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Besoin&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;machines à jour&lt;/li&gt;
&lt;li&gt;instalations homogènes : packages et configuration&lt;/li&gt;
&lt;li&gt;gérer des packages &lt;code&gt;*.deb&lt;/code&gt; disponible hors dépôt &lt;code&gt;apt&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;em&gt;Talk is cheap. Show me the code.&lt;/em&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html"&gt;Installer Ansible&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;récupérer &lt;a href="https://gitlab.com/free_zed/myasb/-/tree/lan"&gt;le &lt;em&gt;playbook&lt;/em&gt;&lt;/a&gt; : &lt;code&gt;git clone https://gitlab.com/free_zed/myasb.git&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;se mettre dans la bonne branche : &lt;code&gt;cd myasb; git checkout lan&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;adapter &lt;a href="https://gitlab.com/free_zed/myasb/-/blob/lan/hosts"&gt;l'inventaire&lt;/a&gt; avec les adresses de vos machines : &lt;code&gt;$EDITOR hosts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;jouer le &lt;em&gt;playbook&lt;/em&gt; : &lt;code&gt;ansible-playbook -i hosts site.yml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;…et volà!&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Remarques&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;git&lt;/code&gt; n'utilise pas la configuration globale par défaut (&lt;code&gt;/etc/gitconfig&lt;/code&gt;), je m'en suis servi pour déployer mes alias &lt;em&gt;partout&lt;/em&gt; sans déployer la config &lt;code&gt;git&lt;/code&gt; de ma machine de dev qui contient des éléments que je ne souhaite pas diffuser (tokens, mails, usernames, tools, etc).&lt;/p&gt;
&lt;h3&gt;Idées&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;centraliser le build &amp;amp; déploiement d'un projet Java sur Github (&lt;a href="https://github.com/Anuken/Mindustry/"&gt;Mindustry&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;comparer le numéro de version Debian plutôt que le nom (&lt;code&gt;str()&lt;/code&gt; to &lt;code&gt;int()&lt;/code&gt; des &lt;em&gt;facts Ansible&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;faire des taches/roles/whatever qui ne se font qu'une fois avant (ou après) de jouer le playbook&lt;ul&gt;
&lt;li&gt;récupérer la version stable Debian&lt;/li&gt;
&lt;li&gt;récupérer numéro de dernière version d'un &lt;code&gt;*.deb&lt;/code&gt; dispo hors dépot&lt;/li&gt;
&lt;li&gt;envoyer &lt;em&gt;un seul&lt;/em&gt; mail de récap&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;utiliser les variables d'environnement (ou autre) pour les données privées&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="ansible"/><category term="admin"/><category term="debian"/><category term="mate"/><category term="devops"/><category term="shell"/><category term="git"/><category term="dry"/></entry><entry><title>Postgresql : haute dispo et réplication</title><link href="https://blog.freezed.me/articles/2020/04/postgresql-haute-dispo-et-replication/" rel="alternate"/><published>2020-04-16T18:01:00+02:00</published><updated>2020-04-16T18:01:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2020-04-16:/articles/2020/04/postgresql-haute-dispo-et-replication/</id><summary type="html">&lt;p&gt;Postgresql, des notions de haute disponibilité et de réplication&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;a href="https://www.linkedin.com/in/rapha%C3%ABl-ruelle-4128745a"&gt;Raphaël Ruelle&lt;/a&gt;, organisé par &lt;a href="https://cafedevops.org/"&gt;Café Devops&lt;/a&gt; (via &lt;a href="https://www.meetup.com/fr-FR/cafe-devops-lyon/events/269957119/"&gt;Meetup&lt;/a&gt;). Archive sur &lt;a href="https://cafedevops.org/posts/"&gt;Café Devops&lt;/a&gt; (&lt;em&gt;à venir&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Il nous aura fallu quelques semaines d'adaptation, mais désormais notre soif de partage de bonnes pratiques ne peut rester sans réponses.&lt;/p&gt;
&lt;p&gt;La prochaine présentation portera sur &lt;a href="https://www.postgresql.org/"&gt;&lt;code&gt;Postgresql&lt;/code&gt;&lt;/a&gt; et le management de la réplication et du Failover d'un cluster avec &lt;a href="https://repmgr.org/"&gt;&lt;code&gt;Repmgr&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;La session débutera par une présentation des notions de réplication, de journaux, failover, split brain, puis viendra une démo.&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Notes personnelles&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;réplication synchrone : tous les serveurs doivent valider les transactions&lt;/li&gt;
&lt;li&gt;réplication asynchrone : tous les serveurs peuvent ne pas valider les transactions : une tempo est en place&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;réplication logiques vs physiques (?)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cas d'usage de la présentation&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Choix d'utiliser WAL (Write Ahead Logging) :&lt;ul&gt;
&lt;li&gt;journaux intérmédiaire moins gourmand en ressource à utiliser&lt;/li&gt;
&lt;li&gt;12 (?) fichiers sur lesquels ont boucle&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;accès en lecture sur standby&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour un pool de server :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://repmgr.org/"&gt;&lt;code&gt;Repmgr&lt;/code&gt;&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;admin et configuration&lt;/li&gt;
&lt;li&gt;priorisation par poids pour choix du serveur primaire&lt;/li&gt;
&lt;li&gt;promotion/inversion (admin/standby)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Repmgrd&lt;/code&gt; : Demon de supervision&lt;ul&gt;
&lt;li&gt;réalise le failover si primaire HS&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cas de défauts :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;split-brain : data center isoléé&lt;/li&gt;
&lt;li&gt;Perte de tous les serveur d'un lieu (DC)&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="talk"/><category term="lyon"/><category term="sql"/><category term="devops"/></entry><entry><title>Mises à jour multiples de Nextcloud</title><link href="https://blog.freezed.me/articles/2020/03/mises-a-jour-multiples-de-nextcloud/" rel="alternate"/><published>2020-03-28T22:35:00+01:00</published><updated>2020-03-28T22:35:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2020-03-28:/articles/2020/03/mises-a-jour-multiples-de-nextcloud/</id><summary type="html">&lt;p&gt;De Nextcloud 12 à 18, de Debian Stretch à Buster&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;strong&gt;Sur une installation &lt;em&gt;standard&lt;/em&gt; basée sur :&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Debian/GNU Linux&lt;/li&gt;
&lt;li&gt;Apache HTTPD&lt;/li&gt;
&lt;li&gt;MariaDB&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Mises à jours concernées :&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;de &lt;em&gt;Nextcloud&lt;/em&gt; 12 à 18&lt;/li&gt;
&lt;li&gt;de &lt;em&gt;Debian/Stretch&lt;/em&gt; à &lt;em&gt;Debian/Buster&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Remarques :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pour les étapes de &lt;a href="https://docs.nextcloud.com/server/stable/admin_manual/maintenance/manual_upgrade.html#upgrade-manually"&gt;mise à jour manuelle&lt;/a&gt;, j'ai fais un script &lt;em&gt;basique&lt;/em&gt; («&lt;a href="https://gitlab.com/free_zed/shell/-/blob/5dad4c1158a2caf932c5a23e7bcfbb61afa0d220/nextcloud/manual-upgrade.sh"&gt;&lt;code&gt;update script&lt;/code&gt;&lt;/a&gt;» ci dessous) intégrant le mode &lt;em&gt;maintenance&lt;/em&gt; et la sauvegarde.&lt;/p&gt;
&lt;p&gt;Les choix des versions suivantes de &lt;em&gt;Nextcloud&lt;/em&gt; ont été celles suggérée par l'admin &lt;em&gt;Nextcloud&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;La mise à jour &lt;em&gt;Stretch&lt;/em&gt; &amp;gt; &lt;em&gt;Buster&lt;/em&gt; c'est faite le plus tard possible : lors de la fin de support de &lt;code&gt;php7.0&lt;/code&gt; pour &lt;em&gt;Nextcloud&lt;/em&gt; v16.0.8&lt;/p&gt;
&lt;p&gt;Les messages d'erreurs ont été laissés tel quels, et donc en Français pour ceux qui ont été traduits.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Check-list suivie :&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;(Les emoji ajoutent du context, détails sur &lt;a href="https://gitmoji.carloscuesta.me/"&gt;gitmoji&lt;/a&gt; )&lt;/em&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;☑ 📢 Prevent users by mail&lt;/li&gt;
&lt;li&gt;☑ 🚧 Activate maintenance mode&lt;/li&gt;
&lt;li&gt;☑ ⬆️ Upgrade Debian/Stretch&lt;/li&gt;
&lt;li&gt;☑ 🚧 Deactivate maintenance mode&lt;/li&gt;
&lt;li&gt;☑ Reboot&lt;/li&gt;
&lt;li&gt;☑ ⬆️ Upgrade Nextcloud : v12.0.4.3 &amp;gt; v13.0.12 (&lt;a href="https://docs.nextcloud.com/server/13/admin_manual/installation/system_requirements.html#server"&gt;docs&lt;/a&gt;)&lt;ul&gt;
&lt;li&gt;«&lt;a href="https://gitlab.com/free_zed/shell/-/blob/5dad4c1158a2caf932c5a23e7bcfbb61afa0d220/nextcloud/manual-upgrade.sh"&gt;&lt;code&gt;update script&lt;/code&gt;&lt;/a&gt;»&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;☑ web/DAV/desktop/android tests&lt;/li&gt;
&lt;li&gt;☑ ⬆️ Upgrade Nextcloud : v13.0.12 &amp;gt; v14.0.14 - (&lt;a href="https://docs.nextcloud.com/server/14/admin_manual/installation/system_requirements.html#server"&gt;docs&lt;/a&gt;)&lt;ul&gt;
&lt;li&gt;«&lt;a href="https://gitlab.com/free_zed/shell/-/blob/5dad4c1158a2caf932c5a23e7bcfbb61afa0d220/nextcloud/manual-upgrade.sh"&gt;&lt;code&gt;update script&lt;/code&gt;&lt;/a&gt;»&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;☑ web/DAV/desktop/&lt;a href="https://example.com/index.php/settings/admin/logging"&gt;logging&lt;/a&gt; tests&lt;ul&gt;
&lt;li&gt;🚑 Error PHP : &lt;code&gt;You are using a fallback implementation of the intl extension. Installing the native one is highly recommended instead. at /srv/freezed.me/nextcloud/3rdparty/patchwork/utf8/src/Patchwork/Utf8/Bootup/intl.php#18&lt;/code&gt;&lt;ul&gt;
&lt;li&gt;➕ &lt;code&gt;apt install php-intl&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;➕ &lt;code&gt;phpenmod intl&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Set cron to AJAX&lt;/li&gt;
&lt;li&gt;Set SMTP config&lt;/li&gt;
&lt;li&gt;Set cron to local &lt;code&gt;crontab&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;🚑 &lt;code&gt;La configuration du serveur web ne permet pas d'atteindre "/.well-known/caldav"&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;🚑 &lt;code&gt;La configuration du serveur web ne permet pas d'atteindre "/.well-known/carddav"&lt;/code&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;a2enmod rewrite&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.nextcloud.com/server/14/admin_manual/issues/general_troubleshooting.html#service-discovery"&gt;docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;🚑 &lt;code&gt;Info cli Memcache \OC\Memcache\APCu not available for distributed|local cache&lt;/code&gt;&lt;ul&gt;
&lt;li&gt;🔧 set the &lt;code&gt;apc.enable_cli = 1&lt;/code&gt; in &lt;code&gt;/etc/php/7.0/cli/php.ini&lt;/code&gt; (just before last line, see &lt;a href="https://docs.nextcloud.com/server/14/admin_manual/configuration_server/caching_configuration.html#id1"&gt;docs&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;⚡ &lt;em&gt;indice warnings&lt;/em&gt;, see &lt;a href="https://docs.nextcloud.com/server/14/admin_manual/maintenance/upgrade.html?highlight=missing%20indice#upgrading-to-nextcloud-13"&gt;migration from Nextcloud 13&lt;/a&gt; in docs.&lt;ul&gt;
&lt;li&gt;🔧 &lt;code&gt;sudo -u www-data php occ db:add-missing-indices&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;⚡ see &lt;a href="https://docs.nextcloud.com/server/14/admin_manual/maintenance/upgrade.html?highlight=missing%20indice#upgrading-to-nextcloud-13"&gt;migration from Nextcloud 13&lt;/a&gt; in docs.&lt;ul&gt;
&lt;li&gt;🔧 &lt;code&gt;sudo -u www-data php occ db:convert-filecache-bigint&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;☑ upgrade Nextcloud : v14.0.14 &amp;gt; v15.0.11 - (&lt;a href="https://docs.nextcloud.com/server/15/admin_manual/installation/system_requirements.html#server"&gt;docs&lt;/a&gt;)&lt;ul&gt;
&lt;li&gt;«&lt;a href="https://gitlab.com/free_zed/shell/-/blob/5dad4c1158a2caf932c5a23e7bcfbb61afa0d220/nextcloud/manual-upgrade.sh"&gt;&lt;code&gt;update script&lt;/code&gt;&lt;/a&gt;»&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;☑ web/DAV/desktop/android tests&lt;/li&gt;
&lt;li&gt;☑ web admin &lt;a href="https://example.com/index.php/settings/admin/overview"&gt;overview/logging&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;🚑 `La base de données a quelques index manquant. L'ajout d'index dans de grandes tables peut prendre un certain temps. Elles ne sont donc pas ajoutées automatiquement. En exécutant "occ db:add-missing-indices", ces index manquants pourront être ajoutés manuellement pendant que l'instance continue de tourner. Une fois les index ajoutés, les requêtes sur ces tables sont généralement beaucoup plus rapides.&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Index "owner_index" manquant dans la table "oc_share".&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Index "initiator_index" manquant dans la table "oc_share".&lt;/code&gt;&lt;ul&gt;
&lt;li&gt;🔧 &lt;code&gt;occ db:add-missing-indices&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;⚠️ &lt;code&gt;Error PHP Undefined index: changelogURL at /srv/freezed.me/nextcloud/core/Controller/WhatsNewController.php#91&lt;/code&gt;&lt;ul&gt;
&lt;li&gt;See &lt;a href="https://github.com/nextcloud/server/issues/19490"&gt;#19490&lt;/a&gt;, will be solved in &lt;a href="https://github.com/nextcloud/server/pull/19465#issuecomment-586165298"&gt;v16&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;⚠️ &lt;code&gt;MySQL est utilisée comme base de données mais ne supporte pas les caractères codés sur 4 octets. Pour pouvoir manipuler les caractères sur 4 octets (comme les émoticônes) sans problème dans les noms de fichiers ou les commentaires par exemple, il est recommandé d'activer le support 4 octets dans MySQL.&lt;/code&gt; &lt;a href="https://docs.nextcloud.com/server/18/admin_manual/configuration_database/mysql_4byte_support.html#mariadb-10-3-or-later"&gt;Pour plus de détails, lisez la page de documentation à ce sujet&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;Wait after step «&lt;code&gt;Upgrade Nextcloud : v17.0.5 &amp;gt; v18.0.3&lt;/code&gt;»&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;⚠️ &lt;code&gt;Vous utilisez actuellement PHP 7.0.33-0+deb9u7. Mettez à jour votre version de PHP afin de tirer avantage des améliorations liées à la performance et la sécurité fournies par le PHP Group dès que votre distribution le supportera.&lt;/code&gt;&lt;ul&gt;
&lt;li&gt;Wait after &lt;code&gt;dist-upgrade Debian/Stretch &amp;gt; Buster&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;☑ ⬆️ Upgrade Nextcloud : v15.0.11 &amp;gt; v15.0.14 - (&lt;a href="https://docs.nextcloud.com/server/15/admin_manual/installation/system_requirements.html#server"&gt;docs&lt;/a&gt;)&lt;ul&gt;
&lt;li&gt;«&lt;a href="https://gitlab.com/free_zed/shell/-/blob/5dad4c1158a2caf932c5a23e7bcfbb61afa0d220/nextcloud/manual-upgrade.sh"&gt;&lt;code&gt;update script&lt;/code&gt;&lt;/a&gt;»&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;☑ web/DAV/desktop/android tests&lt;/li&gt;
&lt;li&gt;☑ Web/DAV/desktop/&lt;a href="https://example.com/index.php/settings/admin/overview"&gt;settings&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;⚠️ &lt;code&gt;MySQL est utilisée comme base de données mais ne supporte pas les caractères codés sur 4 octets. Pour pouvoir manipuler les caractères sur 4 octets (comme les émoticônes) sans problème dans les noms de fichiers ou les commentaires par exemple, il est recommandé d'activer le support 4 octets dans MySQL.&lt;/code&gt; &lt;a href="https://docs.nextcloud.com/server/18/admin_manual/configuration_database/mysql_4byte_support.html#mariadb-10-3-or-later"&gt;Pour plus de détails, lisez la page de documentation à ce sujet&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;see up&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;⚠️ &lt;code&gt;Vous utilisez actuellement PHP 7.0.33-0+deb9u7. Mettez à jour votre version de PHP afin de tirer avantage des améliorations liées à la performance et la sécurité fournies par le PHP Group dès que votre distribution le supportera.&lt;/code&gt;&lt;ul&gt;
&lt;li&gt;see up&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;⚡ &lt;code&gt;Certaines colonnes de la base de données n'ont pas été converties en big int. Changer le type de colonne dans de grandes tables peu prendre beaucoup de temps, elles n'ont donc pas été converties automatiquement. En exécutant 'occ db:convert-filecache-bigint' ces changements en suspens peuvent être déclenchés manuellement. Cette opération doit être exécutée pendant que l'instance est hors ligne. Pour plus d'information, consulter la page de la documentation.&lt;/code&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mounts.storage_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mounts.root_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mounts.mount_id&lt;/code&gt;&lt;ul&gt;
&lt;li&gt;🔧 &lt;code&gt;sudo -u www-data php occ db:add-missing-indices&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;☑ ⬆️ Upgrade Nextcloud : v15.0.14 &amp;gt; v16.0.8 - (&lt;a href="https://docs.nextcloud.com/server/16/admin_manual/installation/system_requirements.html#server"&gt;docs&lt;/a&gt;)&lt;ul&gt;
&lt;li&gt;«&lt;a href="https://gitlab.com/free_zed/shell/-/blob/5dad4c1158a2caf932c5a23e7bcfbb61afa0d220/nextcloud/manual-upgrade.sh"&gt;&lt;code&gt;update script&lt;/code&gt;&lt;/a&gt;»&lt;ul&gt;
&lt;li&gt;💥 &lt;code&gt;This version of Nextcloud requires at least PHP 7.1&amp;lt;br/&amp;gt;You are currently running 7.0.33-0+deb9u7. Please update your PHP version.zsh: exit 255 sudo -u www-data php occ upgrade&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;⏪ stash 16.0.9 : &lt;code&gt;mv nextcloud next-nextcloud-16.0.8&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;⏪ rollback to 15.0.14 : &lt;code&gt;mv old-nextcloud-15.0.14 nextcloud&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;☑ ⬆️ dist-upgrade Debian/Stretch &amp;gt; Buster&lt;ul&gt;
&lt;li&gt;&lt;code&gt;apt autoremove&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;📸 update again to 16.0.9 : &lt;code&gt;mv nextcloud next-nextcloud-16.0.8&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;📸 backup 15.0.14 : &lt;code&gt;mv old-nextcloud-15.0.14 nextcloud&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;⬆️ &lt;code&gt;apt install php7.3-mysql&lt;/code&gt; (&lt;a href="https://help.nextcloud.com/t/uncaught-doctrine-dbal-dbalexception-failed-to-connect-to-the-database/8850/2"&gt;see&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;⬆️ &lt;code&gt;a2enmod php7.3&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;☑ ⬆️ Upgrade Nextcloud : v16.0.8 &amp;gt; v16.0.9&lt;ul&gt;
&lt;li&gt;«&lt;a href="https://gitlab.com/free_zed/shell/-/blob/5dad4c1158a2caf932c5a23e7bcfbb61afa0d220/nextcloud/manual-upgrade.sh"&gt;&lt;code&gt;update script&lt;/code&gt;&lt;/a&gt;»&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;☑ ⬆️ Upgrade Nextcloud : v16.0.9 &amp;gt; v17.0.5&lt;ul&gt;
&lt;li&gt;«&lt;a href="https://gitlab.com/free_zed/shell/-/blob/5dad4c1158a2caf932c5a23e7bcfbb61afa0d220/nextcloud/manual-upgrade.sh"&gt;&lt;code&gt;update script&lt;/code&gt;&lt;/a&gt;»&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;☑ web/DAV/desktop/android tests&lt;/li&gt;
&lt;li&gt;☑ web admin &lt;a href="https://example.com/index.php/settings/admin/overview"&gt;overview/logging&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;🚑 &lt;code&gt;Info cli Memcache \OC\Memcache\APCu not available for distributed|local cache&lt;/code&gt;&lt;ul&gt;
&lt;li&gt;🔧 set &lt;code&gt;apc.enable_cli = 1&lt;/code&gt; in &lt;code&gt;/etc/php/7.3/cli/php.ini&lt;/code&gt; (just before last line) (&lt;a href="https://docs.nextcloud.com/server/16/admin_manual/configuration_server/caching_configuration.html#id1"&gt;docs&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;⚡ &lt;code&gt;La base de données a quelques index manquant. L'ajout d'index dans de grandes tables peut prendre un certain temps. Elles ne sont donc pas ajoutées automatiquement. En exécutant "occ db:add-missing-indices", ces index manquants pourront être ajoutés manuellement pendant que l'instance continue de tourner. Une fois les index ajoutés, les requêtes sur ces tables sont généralement beaucoup plus rapides.&lt;/code&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Index "twofactor_providers_uid" manquant dans la table "oc_twofactor_providers".&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Index "version" manquant dans la table "oc_whats_new".&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Index "cards_abid" manquant dans la table "oc_cards".&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Index "cards_prop_abid" manquant dans la table "oc_cards_properties".&lt;/code&gt;&lt;ul&gt;
&lt;li&gt;🔧 &lt;code&gt;sudo -u www-data php occ db:add-missing-indices&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;⚠️ &lt;code&gt;La limite de mémoire PHP est inférieure à la valeur recommandée de 512 Mo.&lt;/code&gt;&lt;ul&gt;
&lt;li&gt;Wait after step «&lt;code&gt;Upgrade Nextcloud : v17.0.5 &amp;gt; v18.0.3&lt;/code&gt;»&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;⚠️ &lt;code&gt;MySQL est utilisée comme base de données mais ne supporte pas les caractères codés sur 4 octets. Pour pouvoir manipuler les caractères sur 4 octets (comme les émoticônes) sans problème dans les noms de fichiers ou les commentaires par exemple, il est recommandé d'activer le support 4 octets dans MySQL.&lt;/code&gt; &lt;a href="https://docs.nextcloud.com/server/18/admin_manual/configuration_database/mysql_4byte_support.html#mariadb-10-3-or-later"&gt;Pour plus de détails, lisez la page de documentation à ce sujet&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;Wait after step «&lt;code&gt;Upgrade Nextcloud : v17.0.5 &amp;gt; v18.0.3&lt;/code&gt;»&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;☑ ⬆️ Upgrade Nextcloud : v17.0.5 &amp;gt; v18.0.3&lt;ul&gt;
&lt;li&gt;«&lt;a href="https://gitlab.com/free_zed/shell/-/blob/5dad4c1158a2caf932c5a23e7bcfbb61afa0d220/nextcloud/manual-upgrade.sh"&gt;&lt;code&gt;update script&lt;/code&gt;&lt;/a&gt;»&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;☑ web/DAV/desktop/android tests&lt;/li&gt;
&lt;li&gt;☑ web admin &lt;a href="https://example.com/index.php/settings/admin/overview"&gt;overview/logging&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;🚑 &lt;code&gt;La limite de mémoire PHP est inférieure à la valeur recommandée de 512 Mo.&lt;/code&gt;&lt;ul&gt;
&lt;li&gt;🔧 set &lt;code&gt;memory_limit = 512M&lt;/code&gt; in &lt;code&gt;/etc/php/7.3/apache2/php.ini&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;⚡ &lt;code&gt;La base de données a quelques index manquant. L'ajout d'index dans de grandes tables peut prendre un certain temps. Elles ne sont donc pas ajoutées automatiquement. En exécutant "occ db:add-missing-indices", ces index manquants pourront être ajoutés manuellement pendant que l'instance continue de tourner. Une fois les index ajoutés, les requêtes sur ces tables sont généralement beaucoup plus rapides.&lt;/code&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Index "calendarobject_calid_index" manquant dans la table "oc_calendarobjects_props".&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Index "schedulobj_principuri_index" manquant dans la table "oc_schedulingobjects".&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;🔧 &lt;code&gt;sudo -u www-data php occ db:add-missing-indices&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;⚠️ &lt;code&gt;MySQL est utilisée comme base de données mais ne supporte pas les caractères codés sur 4 octets. Pour pouvoir manipuler les caractères sur 4 octets (comme les émoticônes) sans problème dans les noms de fichiers ou les commentaires par exemple, il est recommandé d'activer le support 4 octets dans MySQL.&lt;/code&gt; &lt;a href="https://docs.nextcloud.com/server/18/admin_manual/configuration_database/mysql_4byte_support.html#mariadb-10-3-or-later"&gt;Pour plus de détails, lisez la page de documentation à ce sujet&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;🔧 Enabling &lt;em&gt;MySQL 4-byte support&lt;/em&gt; : &lt;a href="https://docs.nextcloud.com/server/18/admin_manual/configuration_database/mysql_4byte_support.html#mariadb-10-3-or-later"&gt;see docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;</content><category term="Bloc-notes"/><category term="nextcloud"/><category term="admin"/><category term="debian"/><category term="cli"/><category term="shell"/><category term="web"/><category term="privacy"/><category term="backup"/><category term="sql"/></entry><entry><title>Molecule, testeur complet de vos besoins Ansibles</title><link href="https://blog.freezed.me/articles/2020/02/molecule-testeur-complet-de-vos-besoins-ansibles/" rel="alternate"/><published>2020-02-21T19:00:00+01:00</published><updated>2020-02-21T19:00:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2020-02-21:/articles/2020/02/molecule-testeur-complet-de-vos-besoins-ansibles/</id><summary type="html">&lt;p&gt;Présentation de l'outils [Molecule][molecule] et retour d'expérience&lt;/p&gt;</summary><content type="html">&lt;p&gt;Par &lt;a href="https://www.linkedin.com/in/thibault-lecoq-0a550214a"&gt;Thibault Lecoq&lt;/a&gt; &amp;amp; &lt;a href="https://github.com/kuty22"&gt;Quentin Le Baron&lt;/a&gt;, organisé par &lt;a href="https://cafedevops.org/"&gt;Café Devops&lt;/a&gt; (via &lt;a href="https://www.meetup.com/fr-FR/cafe-devops-lyon/events/268510842/"&gt;Meetup&lt;/a&gt;). Archive sur &lt;a href="https://cafedevops.org/posts/molecule-full-tester-of-your-ansible-needs/"&gt;Café Devops&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Prérequis&lt;/em&gt; : Avoir manipulé Ansible et les rôle Ansible.&lt;/p&gt;
&lt;p&gt;Le sujet de cette session sera de présenter dans une première partie l'outil &lt;a href="https://github.com/ansible-community/molecule"&gt;Molecule&lt;/a&gt;, pourquoi et comment l'utiliser pour tester du code ansible (rôles, playbooks, modules, filters).&lt;/p&gt;
&lt;p&gt;Une démonstration de l'usage de molecule sur un role ansible viendra cloturer cette première partie.&lt;/p&gt;
&lt;p&gt;La deuxième partie sera axés sur notre retour d'expérience de comment nous avons intégré molecule dans l'écosystème du projet linky sur lequel nous travaillons aujourd'hui.&lt;/p&gt;
&lt;p&gt;Nous verrons pourquoi nous avons choisi d'intégrer molecule, les avantages que cela apporte et en quoi est-ce un investissement rentable. S'en suivra une présentation de l'architecture choisi ainsi qu'une explication détaillé de sa mise en place de A à Z.
Nous terminerons par une démonstration présentant point par point comment mettre en place cette architecure et intégrer dans celle-ci molecule à un rôle ansible.&lt;/p&gt;
&lt;p&gt;1er partie &lt;a href="https://github.com/ansible-community/molecule"&gt;Molecule&lt;/a&gt;
- Qu'est ce que c'est et pourquoi l'utiliser ?
- Comment cela fonctionne et comment l'utiliser
- Demonstration sur un role ansible&lt;/p&gt;
&lt;p&gt;2eme partie Intégration continue de &lt;a href="https://github.com/ansible-community/molecule"&gt;Molecule&lt;/a&gt;
- Contexte : explication du besoin
- Présentation de l'architecture : Jenkins + Gitea + AWS
- Explication détaillé du fonctionnement (pipeline, webhook ...)
- Demonstration point par point de l'intégration de molecule&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.linkedin.com/in/thibault-lecoq-0a550214a"&gt;Thibault Lecoq&lt;/a&gt; &amp;amp; &lt;a href="https://github.com/kuty22"&gt;Quentin Le Baron&lt;/a&gt; Intégrateur DevOps sur l'un des projets Linky.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Notes personnelles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;outils python&lt;/li&gt;
&lt;li&gt;monte un environnement temporaire dédié au test&lt;ul&gt;
&lt;li&gt;utilisable en local comme sur infra&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;tout type de test&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Comment ça marche ?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Linux&lt;/li&gt;
&lt;li&gt;internet&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ansible==2.8&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;molecule==2.20&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;plugin : docker CE / AWS EC2 / OpenStack / ?&lt;/li&gt;
&lt;li&gt;test (python) avec &lt;a href="https://testinfra.readthedocs.io/en/latest"&gt;&lt;code&gt;Testinfra&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Marmo&lt;/strong&gt; (bientôt &lt;em&gt;open-sourced&lt;/em&gt; sur le &lt;em&gt;Github&lt;/em&gt; de &lt;a href="https://www.linkedin.com/in/thibault-lecoq-0a550214a"&gt;Thibault Lecoq&lt;/a&gt;)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ajoute un scenario molecule dans le rorle ansible a tester&lt;/li&gt;
&lt;li&gt;structure alternative possible : lisibilité &amp;amp; DRY&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tous les détails dans le &lt;a href="https://cafedevops.org/pdf/Molecule_full_tester_of_your_need.pdf"&gt;support de présentatiion&lt;/a&gt;&lt;/p&gt;</content><category term="Bloc-notes"/><category term="talk"/><category term="lyon"/><category term="ansible"/><category term="molecule"/><category term="dev"/><category term="devops"/><category term="cd"/><category term="ci"/></entry><entry><title>Réparation d'un sèche serviette soufflant</title><link href="https://blog.freezed.me/articles/2019/11/reparation-dun-seche-serviette-soufflant/" rel="alternate"/><published>2019-11-18T00:44:00+01:00</published><updated>2021-11-28T02:00:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2019-11-18:/articles/2019/11/reparation-dun-seche-serviette-soufflant/</id><summary type="html">&lt;p&gt;Réparation d'un sèche serviette soufflant&lt;/p&gt;</summary><content type="html">&lt;p&gt;Si jamais quelqu'un à le même appareil en panne&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;img alt="photo de l'appareil" src="https://blog.freezed.me/img/20191119-212941-diy-chauffage.jpg"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Références produit&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Constructeur N° 412
DCK190.5.FDAJ.00
1500W           230V ~ 50Hz
37/12
OF N° 1208660   IP24
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;img alt="photo de la plaque de référence produit" src="https://blog.freezed.me/img/20191116-162716-diy-chauffage.jpg"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Appareil HS&lt;/h2&gt;
&lt;p&gt;Carte de commande avec un condensateur HS&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;img alt="photo de la carte d'origine (HS)" src="https://blog.freezed.me/img/20191109-161702-diy-chauffage.jpg"&gt;&lt;/li&gt;
&lt;li&gt;&lt;img alt="photo de la carte d'origine (HS)" src="https://blog.freezed.me/img/20191109-161558-diy-chauffage.jpg"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Référence condensateur :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;VISHAY      F1778 MKP / SH
            1µ FX2 (K)
AC275V          40/100/56
       IEC60384-14/2
       EN 132400
---------------------------
    0422F
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Remplacement par un modèle de composant différant, mais à capacité identique:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;img alt="photo du nouveau condensateur" src="https://blog.freezed.me/img/20191120-131749-diy-chauffage.jpg"&gt;&lt;/li&gt;
&lt;li&gt;&lt;img alt="photo de la carte réparée" src="https://blog.freezed.me/img/20191116-163014-diy-chauffage.jpg"&gt;&lt;/li&gt;
&lt;li&gt;&lt;img alt="photo de la carte réparée" src="https://blog.freezed.me/img/20191116-163107-diy-chauffage.jpg"&gt;&lt;/li&gt;
&lt;li&gt;&lt;img alt="photo de la carte réparée" src="https://blog.freezed.me/img/20191116-165130-diy-chauffage.jpg"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Et voilà !&lt;/h2&gt;
&lt;hr&gt;
&lt;h2&gt;MàJ du 28 nov 2021&lt;/h2&gt;
&lt;p&gt;En janvier 2021 le condensateur a de nouveau éclaté. Le boitier semble trop exposé au flux d'air chaud. Je remplace le condensateur et protège le boitier du flux d'air chaud avec de l'aluminium autocollant.
&lt;a href="https://blog.freezed.me/img/20210119-091024-diy-chauffage.jpg"&gt;&lt;img alt="photo de la carte HS" src="https://blog.freezed.me/img/20210119-091024-diy-chauffage-400p.jpg"&gt;&lt;/a&gt;
&lt;a href="https://blog.freezed.me/img/20210123-185712-diy-chauffage.jpg"&gt;&lt;img alt="photo de la carte réparée et protégée" src="https://blog.freezed.me/img/20210123-185712-diy-chauffage-400p.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Merci qui ?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://atelier-soude.fr/"&gt;L'atelier Soudé&lt;/a&gt; (&lt;em&gt;Villeurbanne&lt;/em&gt;, &lt;em&gt;Vaulx en Velin&lt;/em&gt;,  &lt;em&gt;Lyon&lt;/em&gt;,  &lt;em&gt;Oullins&lt;/em&gt;,  &lt;em&gt;Givors&lt;/em&gt;,  etc.)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.ag-electronique.fr"&gt;AG Électronique&lt;/a&gt; (&lt;em&gt;45, Cours de la Liberté Lyon 3&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="DIY"/><category term="réparation"/><category term="électroménager"/></entry><entry><title>Micro-services pour une application d'analyse sémantique de textes</title><link href="https://blog.freezed.me/articles/2019/11/micro-services-pour-une-application-danalyse-semantique-de-textes/" rel="alternate"/><published>2019-11-03T16:00:00+01:00</published><updated>2019-11-03T16:00:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2019-11-03:/articles/2019/11/micro-services-pour-une-application-danalyse-semantique-de-textes/</id><summary type="html">&lt;p&gt;gRPC/Python : Exemple pratique d'utilisation de micro-services pour une (mini) application d'analyse sémantique de textes (NPL)&lt;/p&gt;</summary><content type="html">&lt;h3&gt;&lt;a href="https://www.pycon.fr/2019/fr/talks/conference.html#grpc%2Fpython%E2%80%AF%3A%20exemple%20pratique%20d%27utilisation%20de%20micro-services%20pour%20une%20%28mini%29%20application%20d%27analyse%20s%C3%A9mantique%20de%20textes%20%28npl%29"&gt;gRPC/Python : Exemple pratique d'utilisation de micro-services pour une (mini) application d'analyse sémantique de textes (NPL)&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Par &lt;a href="https://github.com/yoyonel"&gt;Lionel Atty&lt;/a&gt; − Salle &lt;a href="https://fr.wikipedia.org/wiki/Charles_Darwin"&gt;Charles Darwin&lt;/a&gt; − Dimanche à 15 h 00&lt;/p&gt;
&lt;p&gt;mots clés: Python gRPC micro-services NPL Spacy packaging architecture Docker&lt;/p&gt;
&lt;p&gt;&lt;img alt="logo PyConFr Bordeaux 2019" src="https://blog.freezed.me/img/250-pycon-fr19.png"&gt;
Après une (courte) présentation du framework Google gRPC (paradigmes, protocoles, API de communications, ...), on s'intéressera à son binding spécifique Python. On présentera une utilisation (concrète) des outils du framework gRPC (Python) via le développement d'une (mini) application Python.&lt;/p&gt;
&lt;p&gt;L'application permet d'analyser des contenus textes (texte associé à des tweets). Cette analyse (sémantique) s'appuie sur des outils (python) de NPL (Natural Processing Langage). L'étude (du développement) de cette application nous offre un cadre de (semi)production, à travers lequel on pourra aborder des considérations de production (ou mise en production) d'applications python.&lt;/p&gt;
&lt;p&gt;On s'intéressera particulièrement à des notions d'architecture et (un peu) d'infras:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;propositions de stratégie de packaging/structuration/versionnement de projets python avec micros-services&lt;/li&gt;
&lt;li&gt;tests unitaires: comment tester des micro-services gRPC ? (framework de tests: PyTest)&lt;/li&gt;
&lt;li&gt;docker: outils de dev, containeurs de production, stratégie de releases&lt;/li&gt;
&lt;li&gt;CI/CD: CircleCI, TravisCI&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Notes personnelles:&lt;/p&gt;
&lt;p&gt;Trop technique pour moi…&lt;/p&gt;</content><category term="Bloc-notes"/><category term="pyconfr"/><category term="talk"/><category term="bordeaux"/><category term="dev"/><category term="grpc"/><category term="micro-services"/><category term="npl"/><category term="python"/></entry><entry><title>Booster Python avec Rust : le cas de Mercurial</title><link href="https://blog.freezed.me/articles/2019/11/booster-python-avec-rust-le-cas-de-mercurial/" rel="alternate"/><published>2019-11-03T15:00:00+01:00</published><updated>2019-11-03T15:00:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2019-11-03:/articles/2019/11/booster-python-avec-rust-le-cas-de-mercurial/</id><summary type="html">&lt;p&gt;Nous avons découvert des problèmes liés l'interaction de ces deux langages et trouvé des solutions qui n'avaient jusque-là - à notre connaissance - jamais été publiées&lt;/p&gt;</summary><content type="html">&lt;h3&gt;&lt;a href="https://www.pycon.fr/2019/fr/talks/conference.html#booster%20python%20avec%20rust%E2%80%AF%3A%20le%20cas%20de%20mercurial"&gt;Booster Python avec Rust : le cas de Mercurial&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Par &lt;a href="https://raphaelgomes.dev"&gt;Raphaël Gomès&lt;/a&gt; − Salle &lt;a href="https://fr.wikipedia.org/wiki/Charles_Darwin"&gt;Charles Darwin&lt;/a&gt; − Dimanche à 14 h 30&lt;/p&gt;
&lt;p&gt;&lt;img alt="logo PyConFr Bordeaux 2019" src="https://blog.freezed.me/img/250-pycon-fr19.png"&gt;
Historiquement, le gestionnaire de version Mercurial utilise des modules en C pour améliorer ses performance lorsque Python ne suffit plus. L'année dernière, des contributeurs ont commencé à utiliser des modules en Rust comme une alternative plus sécuritaire, plus agréable et mieux outillée que C afin de compléter la base Python de Mercurial.&lt;/p&gt;
&lt;p&gt;Depuis fin 2018, Octobus a le plus grand nombre de contributions Rust dans Mercurial. Nous avons découvert des problèmes liés l'interaction de ces deux langages et trouvé des solutions qui n'avaient jusque-là - à notre connaissance - jamais été publiées sur Internet.&lt;/p&gt;
&lt;p&gt;Au programme :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Une vue d'ensemble de l'intégration de Rust à Python&lt;/li&gt;
&lt;li&gt;Les points positifs et négatifs de notre solution et les alternatives&lt;/li&gt;
&lt;li&gt;Des chiffres comparatifs de performance&lt;/li&gt;
&lt;li&gt;Une porte ouverte à la curiosité quant aux détails excessivement techniques.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Notes personnelles:&lt;/p&gt;
&lt;p&gt;Arrivé en retard… Conf a revoir en vidéo.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://octobus.net/"&gt;Octobus&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://fr.wikipedia.org/wiki/Mercurial"&gt;Mercurial&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Rust permet d'améliorer les perf de python, des choses encore a faire, mais python est encore très pertinent parce que très lisible, très rapide à mettre en œuvre :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Python est plus rapide que du code Rust &lt;em&gt;pas fini d'être écrit&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;</content><category term="Bloc-notes"/><category term="pyconfr"/><category term="talk"/><category term="bordeaux"/><category term="rust"/><category term="dev"/><category term="mercurial"/><category term="c"/><category term="performance"/><category term="python"/></entry><entry><title>The role of 21st century technology in protests</title><link href="https://blog.freezed.me/articles/2019/11/the-role-of-21st-century-technology-in-protests/en/" rel="alternate"/><published>2019-11-03T14:30:00+01:00</published><updated>2019-11-03T14:30:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2019-11-03:/articles/2019/11/the-role-of-21st-century-technology-in-protests/en/</id><summary type="html">&lt;p&gt;Hong Kong shocked the world with massive protests, protesters are mainly young, educated and technology-aware people and are trying to use the new technology to outwit the government.&lt;/p&gt;</summary><content type="html">&lt;h3&gt;Plénière n°3 / Keynote #3: &lt;a href="https://www.pycon.fr/2019/fr/talks/keynote.html#pl%C3%A9ni%C3%A8re%20n%C2%B03%20%2F%20keynote%20%233%3A%20the%20role%20of%2021st%20century%20technology%20in%20protests"&gt;The Role of 21st Century Technology in Protests&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Par &lt;a href="https://dev.to/cheukting_ho"&gt;Cheuk Ting Ho&lt;/a&gt; − Salle &lt;a href="https://en.wikipedia.org/wiki/Alfred_Wegener"&gt;Alfred Wegener&lt;/a&gt; − Dimanche à 14 h 00&lt;/p&gt;
&lt;p&gt;&lt;img alt="logo PyConFr Bordeaux 2019" src="https://blog.freezed.me/img/250-pycon-fr19.png"&gt;
Since June 2019, Hong Kong shocked the world with massive protests. As protesters are mainly young, educated and technology-aware people, they are trying to use the new technology to outwit the government which also use AI and technology to control its people. Who got the upper hand?&lt;/p&gt;
&lt;p&gt;Have you ever think about using Tinder to look for a ‘date’ in the protest? Or using Uber to call for a free ride to drive you to safety?&lt;/p&gt;
&lt;p&gt;In the first part of the talk, we will cover the background of the protest, why it happened and how it is started. We will briefly talk about the politic environment of Hong Kong and what causes the protest 1: the fear of losing a “high degree of autonomy” In the second part, which is the main part of the talk, we will cover how technology/ apps like Telegram, Tinder, Pokemon Go, Twitch, AirDrop, Bridgefy, Uber, etc were used in by the protesters and what role they play in the protest. People use Telegram’s encryption to communicate without worrying leaking of identity; they use Tinder to spread the news about where and when to protest; They use Pokemon Go to gather people 4; AirDrop to spread the message to the Chinese tourists; Bridgefy to communicate where internet is not available at crowded areas 3; Uber to let the protested know where there are volunteer drivers to take you to safety.&lt;/p&gt;
&lt;p&gt;In the third part, we will have a look at what technology the Chinese government may use to tighten its grip over Hong Kong. One of the front lines of the protest in the online activism 5, the Chinese government has it’s own ‘50 cent army’ which is also known as ‘China bots’ who were paid to leave pro-CCP comments on social media. Which eventually cause Twitter and Facebook to shout down lots of accounts. Also, there are attacks cyberattacks, suspected to be related to the protest, towards Telegram and an online forum LiHKG which the protesters used to communicate. It is also suspected that the government installed ‘smart’ lamppost which use facial detection to monitor the citizen of Hong Kong after protested found parts made by a Shanghai company which also made the surveillance cameras in mainland China 6.&lt;/p&gt;
&lt;p&gt;This talk is for audients who are interested to know how our lives are changed by technology and how they could influence our society. By the end of the talk, audients will be more aware of what consequence new technology may bring us and be more thoughtful about the ethics behind the implementation of technology.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Personal notes :&lt;/p&gt;
&lt;p&gt;créatrice de &lt;a href="https://picknmix.readthedocs.io/en/latest/"&gt;pick &amp;amp; mix&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;9/6 1M HK protesters&lt;/li&gt;
&lt;li&gt;16/6 2M HK protesters&lt;/li&gt;
&lt;li&gt;24/6 crowdfounding for ad in press&lt;/li&gt;
&lt;li&gt;1/7 100 000 HK annual democracy march&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Gov reaction :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;11/8 eye injury&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;1/10 1st protester shot&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2022 arrest since&lt;/li&gt;
&lt;li&gt;4138 tear gaz canisters used&lt;/li&gt;
&lt;li&gt;1733 rubbuer bullet shot&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Apps related to protests:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;tinder : leave message on status&lt;/li&gt;
&lt;li&gt;LiHKG, but moved on reddit : share useful links&lt;/li&gt;
&lt;li&gt;telegram : encription chat &amp;amp; &lt;strong&gt;hudge&lt;/strong&gt; groups&lt;/li&gt;
&lt;li&gt;twitch : recording &lt;em&gt;real&lt;/em&gt; video&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Bridgefy"&gt;bridgefy&lt;/a&gt; : bluetooth network with rebound&lt;/li&gt;
&lt;li&gt;uber : volunteer drivers help protesters but police arrest now driving&lt;/li&gt;
&lt;li&gt;pokemon go : used for an excuse for illegal assembly&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.dimsumdaily.hk/whatsgap-a-new-app-developed-by-local-netizen-where-users-can-choose-to-go-to-restaurants-with-similar-political-stand/"&gt;whatsgap&lt;/a&gt; : suggestion for protester supporter restauration &amp;amp; Week end activities&lt;/li&gt;
&lt;li&gt;&lt;em&gt;unknow&lt;/em&gt; : an app to pay taxe dollar by dollar (&amp;amp; cost 2$ for eac dollar payed to governement)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Solution to protect from technology :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;technology footprint is identity&lt;/li&gt;
&lt;li&gt;using single ticket instead  &lt;em&gt;packages&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;China use:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;public image face recognition&lt;/li&gt;
&lt;li&gt;social credit system&lt;ul&gt;
&lt;li&gt;not perfect : women picture on a bus catched as a non footwalk usage&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;kids at school&lt;/li&gt;
&lt;li&gt;lampposts are suspected to be used for filming&lt;/li&gt;
&lt;li&gt;reeducation camp&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;3 days ago chinese announce to boost effort for &lt;em&gt;security&lt;/em&gt;&lt;/p&gt;</content><category term="Bloc-notes"/><category term="pyconfr"/><category term="talk"/><category term="bordeaux"/><category term="hong-kong"/><category term="citoyen"/><category term="logiciel libre"/><category term="python"/></entry><entry><title>Vider sa flask dans une lambda</title><link href="https://blog.freezed.me/articles/2019/11/vider-sa-flask-dans-une-lambda/" rel="alternate"/><published>2019-11-03T12:00:00+01:00</published><updated>2019-11-03T12:00:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2019-11-03:/articles/2019/11/vider-sa-flask-dans-une-lambda/</id><summary type="html">&lt;p&gt;Déployer une application Flask sur AWS Lambda avec Zappa &amp;amp; GitLab&lt;/p&gt;</summary><content type="html">&lt;p&gt;[20/7/20] : J'ajoute le lien vers la captation vidéo dispo sur &lt;a href="https://pyvideo.org/pycon-fr-2019/deployer-flask-sur-aws-lambda-avec-zappa-gitlab.html"&gt;pyvideo.org&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://gitpitch.com/free_zed/grandpy/pyconfr?grs=gitlab"&gt;&lt;img alt="logo PyConFr Bordeaux 2019" src="https://blog.freezed.me/img/250-pycon-fr19.png"&gt;&lt;/a&gt;
Présentation d'un &lt;a href="https://gitlab.com/free_zed/grandpy"&gt;chatbot basique&lt;/a&gt; utilisant une application mono-page Flask (avec une larme de JS) qui répond avec des données provenant des API MapQuest et Wikipedia.&lt;/p&gt;
&lt;p&gt;La particularité offerte par Zappa est d'avoir un Flask &lt;em&gt;classique&lt;/em&gt; en local (pour le dev) et de simplifier le déploiement vers AWS-Lambda pour la mise à dispo vers le monde. Gitlab permet d'automatiser l'usage de Zappa, mettre à jour le JS avec la réponse AWS, puis héberger les fichiers statiques .&lt;/p&gt;
&lt;p&gt;Cette &lt;a href="https://www.pycon.fr/2019/fr/talks/conference.html#d%C3%A9ployer%20flask%20sur%20aws%20lambda%20avec%20zappa%20%26%20gitlab"&gt;présentation publique&lt;/a&gt; s'est déroulée dans le cadre de la
 &lt;a href="https://www.pycon.fr/2019/fr/"&gt;Conférence Python Francophone&lt;/a&gt; (31/10 - 3/11/2019) organisée par &lt;a href="https://afpy.org"&gt;l'AFPy&lt;/a&gt;. Cet évènement majeur est dédié au regroupement des personnes intéressées par le langage de programmation &lt;a href="https://python.org"&gt;Python&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Mon autre &lt;em&gt;bac à sable Zappa&lt;/em&gt; : &lt;a href="https://gitlab.com/free_zed/hellozappa/"&gt;&lt;em&gt;Hello Zappa&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Le support est disponible en cliquant &lt;strong&gt;sur le logo&lt;/strong&gt; de &lt;em&gt;PyConFr&lt;/em&gt; ci-dessus.&lt;/p&gt;</content><category term="Conférences"/><category term="pyconfr"/><category term="talk"/><category term="git"/><category term="gitlab"/><category term="devops"/><category term="flask"/><category term="dev"/><category term="zappa"/><category term="serverless"/><category term="aws"/><category term="aws-lambda"/><category term="bordeaux"/><category term="python"/></entry><entry><title>Au bonheur des likes</title><link href="https://blog.freezed.me/articles/2019/11/au-bonheur-des-likes/" rel="alternate"/><published>2019-11-02T18:00:00+01:00</published><updated>2019-11-02T18:00:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2019-11-02:/articles/2019/11/au-bonheur-des-likes/</id><summary type="html">&lt;p&gt;Biais cognitifs &amp;amp; science comportementale au service du capitalisme de l’attention&lt;/p&gt;</summary><content type="html">&lt;h3&gt;&lt;a href="https://www.pycon.fr/2019/fr/talks/keynote.html#pl%C3%A9ni%C3%A8re%20n%C2%B02%20%2F%20keynote%20%232%3A%20au%20bonheur%20des%20likes"&gt;Plénière n°2 / Keynote #2: Au bonheur des likes&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Par &lt;a href="https://fr.linkedin.com/in/ninacercy/en"&gt;Nina Cercy&lt;/a&gt; − Salle &lt;a href="https://en.wikipedia.org/wiki/Alfred_Wegener"&gt;Alfred Wegener&lt;/a&gt; − Samedi à 17 h 30&lt;/p&gt;
&lt;p&gt;&lt;img alt="logo PyConFr Bordeaux 2019" src="https://blog.freezed.me/img/250-pycon-fr19.png"&gt;
Biais cognitifs, sciences comportementales, incitations douces : le cerveau des utilisateurs/trices est devenu notre terrain de jeu — et l’infantilisation notre meilleur business model.&lt;/p&gt;
&lt;p&gt;Face aux hochets attentionnels et aux biberons de dopamine, notre capacité à proposer un numérique adulte, émancipateur est la victime collatérale du capitalisme de l’attention. Ne jetons pas le bébé avec l’eau du bain : la science comportementale, c’est aussi le remède dans le mal.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Notes personnelles:&lt;/p&gt;
&lt;p&gt;Arrivé en retard… Conf a revoir en vidéo.&lt;/p&gt;
&lt;p&gt;À montrer aux utilisateurs des services.&lt;/p&gt;
&lt;p&gt;Piste émancipatrice individuelles proposée :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;anticipation&lt;/li&gt;
&lt;li&gt;minimisation&lt;/li&gt;
&lt;li&gt;autonome&lt;/li&gt;
&lt;li&gt;évaluation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pas de piste collectives.&lt;/p&gt;</content><category term="Bloc-notes"/><category term="pyconfr"/><category term="talk"/><category term="business"/><category term="cognition"/><category term="comportement"/><category term="web"/><category term="bordeaux"/></entry><entry><title>Un Captcha libre, c'est possible !</title><link href="https://blog.freezed.me/articles/2019/11/un-captcha-libre-cest-possible/" rel="alternate"/><published>2019-11-02T17:00:00+01:00</published><updated>2019-11-02T17:00:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2019-11-02:/articles/2019/11/un-captcha-libre-cest-possible/</id><summary type="html">&lt;p&gt;Pour lutter contre les abus de Google un prototype fonctionnel libre à vu le jour&lt;/p&gt;</summary><content type="html">&lt;h3&gt;&lt;a href="https://www.pycon.fr/2019/fr/talks/conference.html#un%20captcha%20libre%2C%20c%27est%20possible%E2%80%AF%21"&gt;Un Captcha libre, c'est possible !&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Par &lt;a href="https://mindiell.net/"&gt;Mindiell&lt;/a&gt; − Salle Thomas Edison − Samedi à 16 h 30&lt;/p&gt;
&lt;p&gt;&lt;img alt="logo PyConFr Bordeaux 2019" src="https://blog.freezed.me/img/250-pycon-fr19.png"&gt;
Le Captcha (ou Completely Automatized Public Turing test to tell Computers and Humans Apart) est un moyen a priori simple de déterminer si l'utilisateur situé derrière un site web est un humain ou un robot. Cet outil est aujourd'hui souvent synonyme de ReCaptcha, technologie rachetée par Google en 2009. Malheureusement, cet outil est surtout utilisé à des fins de surveillance et d'espionnage, voire pour améliorer des IA utilisées par l'armée américaine.&lt;/p&gt;
&lt;p&gt;C'est en souhaitant lutter contre les abus de Google via cette technologie que j'ai travaillé sur un prototype fonctionnel qui pourrait facilement remplacer l'actuel. Pas forcément plus compliqué, pas forcément plus fiable, ce test est, par contre, beaucoup plus libre, son code source est ouvert et chacun peut l'installer chez soi (ou dans son entreprise).&lt;/p&gt;
&lt;p&gt;On parlera donc de ce qu'est un Captcha, de ce que ça demande comme travail de recherche pour générer des tests de manière automatisée, de gérer des tests pour les déficients visuels (accessibilité quoi), de l'adapter pour remplacer un ReCaptcha le plus facilement possible, bref de comment faire un Captcha de A à Z !&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Notes personnelles:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://framagit.org/Mindiell/captcha"&gt;LibreCAPTCHA&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1997 CAPTCHA&lt;/li&gt;
&lt;li&gt;2007 ReCAPTCHA&lt;/li&gt;
&lt;li&gt;2009 Aquisition Google&lt;/li&gt;
&lt;li&gt;2011 Scan archive NYT &amp;amp; Google books&lt;/li&gt;
&lt;li&gt;2015 Aide à la traduction&lt;/li&gt;
&lt;li&gt;20??  usage image gStreetView&lt;/li&gt;
&lt;li&gt;2018 ReCAPTCHA invisible&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Usages collatéraux&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;optimisation OCR&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Project_Maven"&gt;projet Maven&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;les robots spammeeurs utilisent finalement les tests audio plus faciles&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Génération automatique&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;14 millions de CAPTCHA / semaine sur eBay&lt;/li&gt;
&lt;li&gt;non répétabilité&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Acces aux déficients&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;visuel : 8%&lt;/li&gt;
&lt;li&gt;auditif : 5%&lt;/li&gt;
&lt;li&gt;cognitif : 16%&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Stats&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;tests visuels : 71% de bonne réponse&lt;/li&gt;
&lt;li&gt;tests audios : 31% de bonne réponse&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;a href="https://framagit.org/Mindiell/captcha"&gt;LibreCAPTCHA&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Définir challenge visuel :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Image de WikiCommons&lt;/li&gt;
&lt;li&gt;proposition de 9 vignettes issues d'autres image, sauf une&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Définir challenge audio :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;séquence de son sur lesquelles on ajoute du morse&lt;/li&gt;
&lt;li&gt;bibliothèque CCMixer&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Quitter ReCAPTCHA&lt;/h3&gt;
&lt;p&gt;Remplacement des 2 URLs : JS &amp;amp; clef&lt;/p&gt;
&lt;p&gt;pré-génération indispensable par lot /!\ au appel wiki &amp;amp; CCMixer&lt;/p&gt;
&lt;p&gt;Pas de collecte de meta-donnée&lt;/p&gt;</content><category term="Bloc-notes"/><category term="pyconfr"/><category term="talk"/><category term="bordeaux"/><category term="captcha"/><category term="logiciel libre"/><category term="python"/></entry><entry><title>Python pour tous</title><link href="https://blog.freezed.me/articles/2019/11/python-pour-tous/" rel="alternate"/><published>2019-11-02T16:00:00+01:00</published><updated>2019-11-02T16:00:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2019-11-02:/articles/2019/11/python-pour-tous/</id><summary type="html">&lt;p&gt;Des ateliers dans des universités à destination de collégiens et lycéens&lt;/p&gt;</summary><content type="html">&lt;h3&gt;&lt;a href="https://www.pycon.fr/2019/fr/talks/conference.html#python%20pour%20tous%E2%80%AF%3A%20amener%20un%20zeste%20de%20programmation%20dans%20les%20milieux%20moins%20favoris%C3%A9s"&gt;Python pour tous : amener un zeste de programmation dans les milieux moins favorisés&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Par &lt;a href="https://github.com/EtoileFilante"&gt;Nathanaël Langlois&lt;/a&gt;, &lt;a href="https://amaury.carrade.eu/"&gt;Amaury Carrade&lt;/a&gt;, Titouan Soulard − Salle &lt;a href="https://fr.wikipedia.org/wiki/Rosalind_Franklin"&gt;Rosalind Franklin&lt;/a&gt; − Samedi à 15 h 00&lt;/p&gt;
&lt;p&gt;&lt;img alt="logo PyConFr Bordeaux 2019" src="https://blog.freezed.me/img/250-pycon-fr19.png"&gt;
Python, aussi bien utilisé pour du développement d’application que pour des programmes de calculs complexe, ouvre par sa facilité de prise en main un champ gigantesque de possibilité à toutes les populations. L’association “Zeste de Savoir”, fédérée autour d’un site communautaire de partage de connaissances éponyme, organise régulièrement des ateliers dans des universités à destination de collégiens et lycéens en proposant notamment aux enfants de quartiers défavorisés de s’y joindre. Comment rendre la programmation simple et attractive ? C'est ce à quoi nous tentons de répondre dans nos ateliers et cette conférence.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Notes personnelles:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/zestedesavoir"&gt;Zeste de savoir&lt;/a&gt; : asso &lt;em&gt;fork&lt;/em&gt; du SdZ/SimpleIT (? SdZ // ZdS)&lt;/p&gt;
&lt;p&gt;Fondé en 2014 / +12000 membres&lt;/p&gt;
&lt;p&gt;Plateforme en Django&lt;/p&gt;
&lt;p&gt;Zeste de code : passer IRL&lt;/p&gt;
&lt;p&gt;1er atelier sponsorisé par &lt;a href="https://meet-and-code.org/"&gt;Meet and code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Construction d'un jeu de type &lt;em&gt;snake&lt;/em&gt; sur un atelier de 4h&lt;/p&gt;
&lt;p&gt;Mise en place d'objectifs :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Afficher le jeu &amp;amp; serpent&lt;ul&gt;
&lt;li&gt;Une bibliothèque d'abstraction pour faciliter le dev et traduire partielement&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Déplacer le serpent&lt;/li&gt;
&lt;li&gt;?&lt;/li&gt;
&lt;li&gt;Gestion des évènements&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Pédagogie : une heure de rudiment technique&lt;/p&gt;
&lt;p&gt;Initiation au monde réel de la programmation: documentation de la bibliothèque d'abstraction&lt;/p&gt;
&lt;p&gt;Débogage avec les collision du serpent&lt;/p&gt;
&lt;p&gt;Ajout de bonus pour les plus avancé: (marche arrière, &lt;em&gt;coin&lt;/em&gt; du serpent, )&lt;/p&gt;
&lt;p&gt;Besoin d'essaimer partout ces modèles&lt;/p&gt;
&lt;p&gt;Environnement de dev &lt;em&gt;&lt;a href="https://www.spyder-ide.org/"&gt;Spyder&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Matériel informatique fourni par le lieu&lt;/p&gt;
&lt;p&gt;Cible jeune lié aux début avec &lt;a href="https://meet-and-code.org/"&gt;Meet and code&lt;/a&gt;, mais autres publiques possibles&lt;/p&gt;
&lt;p&gt;Dans les collège et lycée pub pour l'évènements&lt;/p&gt;
&lt;p&gt;Continuité de la formation pour les intéressés : via le forum/site&lt;/p&gt;
&lt;p&gt;Combien de session de 4h : une seule&lt;/p&gt;</content><category term="Bloc-notes"/><category term="pyconfr"/><category term="talk"/><category term="bordeaux"/><category term="dev"/><category term="pygame"/><category term="logiciel libre"/><category term="citoyen"/><category term="django"/><category term="python"/></entry><entry><title>Privacy by design</title><link href="https://blog.freezed.me/articles/2019/11/privacy-by-design/" rel="alternate"/><published>2019-11-02T15:00:00+01:00</published><updated>2019-11-02T15:00:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2019-11-02:/articles/2019/11/privacy-by-design/</id><summary type="html">&lt;p&gt;« Privacy by design » : protéger les données personnelles, 1 million de lignes de code à la fois&lt;/p&gt;</summary><content type="html">&lt;h3&gt;&lt;a href="https://www.pycon.fr/2019/fr/talks/conference.html#%C2%AB%E2%80%AFprivacy%20by%20design%E2%80%AF%C2%BB%E2%80%AF%3A%20prot%C3%A9ger%20les%20donn%C3%A9es%20personnelles%2C%201%C2%A0million%20de%20lignes%20de%20code%20%C3%A0%20la%20fois"&gt;« Privacy by design » : protéger les données personnelles, 1 million de lignes de code à la fois&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Par &lt;a href="https://github.com/francois-seguin"&gt;François Séguin&lt;/a&gt; − &lt;a href="https://fr.wikipedia.org/wiki/Rosalind_Franklin"&gt;Salle Rosalind&lt;/a&gt; − Samedi à 14 h 30&lt;/p&gt;
&lt;p&gt;&lt;img alt="logo PyConFr Bordeaux 2019" src="https://blog.freezed.me/img/250-pycon-fr19.png"&gt;
Câbles diplomatiques américains, emails de Sony Pictures, photos de prototype d'iPhone : on sait que ces informations sont confidentielles, et elles ont pourtant été victimes de fuites. Les informations personnelles de nos utilisateurs sont tout aussi confidentielles, et nous devons les protéger. Les logs et interfaces d'une application web exposent souvent des données personnelles: comment les expurger et/ou restreindre leur accès?&lt;/p&gt;
&lt;p&gt;Je partagerai mes travaux sur la protection des données personnelles dans un écosystème mature de plusieurs millions de lignes de code, et du paquet open-source pour Django que nous avons créé.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Notes personnelles:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Caviarder&lt;/em&gt; remontant au &lt;em&gt;&lt;a href="https://fr.wiktionary.org/wiki/caviarder"&gt;Tsar Nicolas 1er&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Création d'un type héritant de &lt;code&gt;str()&lt;/code&gt; permettant de pseudonymiser la valeur.&lt;/p&gt;
&lt;p&gt;Usage de &lt;em&gt;middleware&lt;/em&gt; et autre dispositions de Django pour la mise en œuvre.&lt;/p&gt;
&lt;p&gt;Code &lt;em&gt;en cours&lt;/em&gt; de libération à venir dans le &lt;em&gt;package&lt;/em&gt; &lt;a href="https://pypi.org/project/django-caviar"&gt;django-caviar&lt;/a&gt;&lt;/p&gt;</content><category term="Bloc-notes"/><category term="pyconfr"/><category term="talk"/><category term="bordeaux"/><category term="django"/><category term="web"/><category term="privacy"/><category term="dev"/><category term="logiciel libre"/></entry><entry><title>Histoires d'un salarié perfectionniste sous pression</title><link href="https://blog.freezed.me/articles/2019/10/histoires-dun-salarie-perfectionniste-sous-pression/" rel="alternate"/><published>2019-10-23T19:00:00+02:00</published><updated>2019-10-23T19:00:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2019-10-23:/articles/2019/10/histoires-dun-salarie-perfectionniste-sous-pression/</id><summary type="html">&lt;p&gt;Mes 7 premiers mois à la découverte de la vie professionnelle d'un développeur&lt;/p&gt;</summary><content type="html">&lt;p&gt;Démarrer une activité de développement dans une TPE est une aventure où tout est possible, mais quand, en plus, on est &lt;em&gt;junior&lt;/em&gt; les choix d'organisations et d'outils deviennent moins évident.&lt;/p&gt;
&lt;p&gt;Dans cette présentation je reviens sur l'expérience de mes 7 premiers mois de développeur junior où j'ai essayé de ne pas me perdre entre le code, la documentation, les déploiements et la communication.&lt;/p&gt;
&lt;p&gt;Cette &lt;a href="https://www.meetup.com/fr-FR/Python-AFPY-Lyon/events/cqwghryznbnc/"&gt;présentation publique&lt;/a&gt; s'est déroulée dans le cadre des &lt;a href="https://www.afpy.org/"&gt;rencontres  lyonnaises et mensuelles&lt;/a&gt; de l'AFPy.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Les liens vers mes &lt;em&gt;bacs à sable&lt;/em&gt; évoqués durant la présentation :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/free_zed/myasb"&gt;Ansible&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/free_zed/djbp"&gt;Django&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/free_zed/mypumlt"&gt;PlantUML&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le support est disponible en cliquant &lt;strong&gt;sur le logo&lt;/strong&gt; de &lt;em&gt;l'AFPy Lyon&lt;/em&gt; ci-dessous.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://gitpitch.com/free_zed/afpy19/master?grs=gitlab"&gt;&lt;img alt="logo AFPy Lyon" src="https://blog.freezed.me/img/afpylyon-200.png"&gt;&lt;/a&gt;&lt;/p&gt;</content><category term="Conférences"/><category term="afpy"/><category term="talk"/><category term="git"/><category term="gitlab"/><category term="devops"/><category term="django"/><category term="lyon"/><category term="dev"/><category term="admin"/><category term="python"/></entry><entry><title>Générer un QRcode dans Django</title><link href="https://blog.freezed.me/articles/2019/07/generer-un-qrcode-dans-django/" rel="alternate"/><published>2019-07-20T23:13:00+02:00</published><updated>2021-11-28T02:00:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2019-07-20:/articles/2019/07/generer-un-qrcode-dans-django/</id><summary type="html">&lt;p&gt;Un générateur de code barre 2D dans une vue Django&lt;/p&gt;</summary><content type="html">&lt;p&gt;🚧 &lt;em&gt;need to be refreshed&lt;/em&gt; 🚧&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;base64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;b64encode&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;io&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;qrcode&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;django.urls&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;reverse&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;django.views.generic&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;DetailView&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;foobar.models&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Foobar&lt;/span&gt;


&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;FoobarDetail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DetailView&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;&amp;quot;&amp;quot;&amp;quot; Detail view of a Foobar &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;

    &lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Foobar&lt;/span&gt;
    &lt;span class="n"&gt;pk_url_kwarg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;foobar_id&amp;quot;&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;get_context_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;kwargs&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="sd"&gt;&amp;quot;&amp;quot;&amp;quot; Add a Base64 encoded image (QRcode) containing URL to foobar page &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;

        &lt;span class="n"&gt;new_qrcode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;qrcode&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;QRCode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;error_correction&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;qrcode&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;constants&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ERROR_CORRECT_H&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;box_size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;border&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;url_host&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_host&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;url_protocol&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;http://&amp;quot;&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_secure&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
            &lt;span class="n"&gt;url_protocol&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;https://&amp;quot;&lt;/span&gt;

        &lt;span class="n"&gt;new_qrcode&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;{protocol}{host}{path}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="n"&gt;protocol&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;url_protocol&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;url_host&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;reverse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                    &lt;span class="s2"&gt;&amp;quot;foobar:form&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="n"&gt;kwargs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;foobar_id&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;kwargs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;foobar_id&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
                &lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;new_qrcode&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;make&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;qr_image&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;new_qrcode&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;make_image&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="n"&gt;qr_byte_image&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;io&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BytesIO&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;qr_image&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;qr_byte_image&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;PNG&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;qr_byte_image&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;qr_byte_image&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getvalue&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;qr_b64_image&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;data:image/png;base64,&lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;b64encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;qr_byte_image&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;super&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_context_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;kwargs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;qrcode&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;qr_b64_image&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;p&gt;Refs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Internal &lt;code&gt;candidate/views.py&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lincolnloop/python-qrcode"&gt;&lt;code&gt;lincolnloop/python-qrcode&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gilang.chandrasa.com/blog/generate-qr-code-in-django-model/"&gt;&lt;em&gt;Generate QR Code In Django Model&lt;/em&gt;&lt;/a&gt; by &lt;a href="https://gilang.chandrasa.com/"&gt;&lt;em&gt;Gilang Chandrasa&lt;/em&gt;&lt;/a&gt; (16 Nov 2015)&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="django"/><category term="qrcode"/><category term="web"/><category term="dev"/><category term="python"/></entry><entry><title>Génération de diagrammes PlantUML avec Gitlab-CI</title><link href="https://blog.freezed.me/articles/2019/07/plantuml-gitlab_ci-diagramme-generation/" rel="alternate"/><published>2019-07-13T10:00:00+02:00</published><updated>2019-07-13T10:00:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2019-07-13:/articles/2019/07/plantuml-gitlab_ci-diagramme-generation/</id><summary type="html">&lt;p&gt;Générer des diagrammes PlantUML à l'aide de l'intégration continue &amp;amp; l'hébergement statique de Gitlab&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;Le moyen le plus simple de garder les diagrammes à jour avec le code&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;C'est quoi ?&lt;/h2&gt;
&lt;p&gt;Les diagrammes sont :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;décrits &lt;strong&gt;100%&lt;/strong&gt; par du texte&lt;/li&gt;
&lt;li&gt;générés avec &lt;em&gt;gitlab-ci&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;déployés sur &lt;em&gt;gitlab-pages&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tellement facile à maintenir que vos diagrammes &lt;em&gt;pourraient&lt;/em&gt; être encore à jour même &lt;strong&gt;10 mois après le démarrage du projet&lt;/strong&gt;!!!&lt;/p&gt;
&lt;h2&gt;Mais comment ?&lt;/h2&gt;
&lt;p&gt;Poussez simplement &lt;a href="https://gitlab.com/free_zed/mypumlt/blob/master/puml/" title="Sources du diagramme"&gt;les sources des diagrammes&lt;/a&gt; et &lt;a href="https://gitlab.com/free_zed/mypumlt/blob/master/.gitlab-ci.yml"&gt;.gitlab-ci.yml&lt;/a&gt; se chargera de la génération des images &amp;amp; de la mise en ligne via &lt;em&gt;pages&lt;/em&gt; :&lt;/p&gt;
&lt;p&gt;&lt;img alt="Modèle physique de donnée avec fichiers partagés" src="https://free_zed.gitlab.io/mypumlt/diagrams/pdm-shared_files.png" title="Modèle physique de donnée avec fichiers partagés"&gt;.&lt;/p&gt;
&lt;h2&gt;&lt;a href="https://en.wikipedia.org/wiki/Don't_repeat_yourself" title="Don't repeat yourself"&gt;D.R.Y.&lt;/a&gt; !&lt;/h2&gt;
&lt;p&gt;L'utilisation de directives du &lt;em&gt;&lt;a href="http://plantuml.com/en/preprocessing#9" title="Preprocessing"&gt;préprocesseur PlantUML&lt;/a&gt;&lt;/em&gt; telles que &lt;em&gt;!include&lt;/em&gt; ou &lt;em&gt;!includeurl&lt;/em&gt; permet de partager des sources communes entre les diagrammes.&lt;/p&gt;
&lt;p&gt;Dans mon &lt;a href="https://gitlab.com/free_zed/mypumlt"&gt;exemple&lt;/a&gt;, les diagrammes marqués &lt;em&gt;shared files&lt;/em&gt; &lt;a href="https://gitlab.com/free_zed/mypumlt/blob/master/puml/part" title="Sources partagées"&gt;partagent les mêmes entitiés&lt;/a&gt; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;associations&lt;/li&gt;
&lt;li&gt;attributs&lt;/li&gt;
&lt;li&gt;classes&lt;/li&gt;
&lt;li&gt;clés&lt;/li&gt;
&lt;li&gt;légende&lt;/li&gt;
&lt;li&gt;relations&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Par conséquent, si vous ajoutez quelque chose dans vos &lt;em&gt;sources partagées&lt;/em&gt;, tous les diagrammes l'obtiendront !&lt;/p&gt;
&lt;h2&gt;&lt;em&gt;«&lt;a href="https://lkml.org/lkml/2000/8/25/132"&gt;Talk is cheap. Show me the code.&lt;/a&gt;»&lt;/em&gt;&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align="center"&gt;&lt;em&gt;Type de diagramme&lt;/em&gt;&lt;/th&gt;
&lt;th align="center"&gt;Fichier seul&lt;/th&gt;
&lt;th align="center"&gt;Fichiers partagés&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align="center"&gt;&lt;em&gt;Domaine fonctionnel&lt;/em&gt;&lt;/td&gt;
&lt;td align="center"&gt;-&lt;/td&gt;
&lt;td align="center"&gt;(&lt;a href="https://free_zed.gitlab.io/mypumlt/diagrams/fm-shared_files.png" title="Domaine fonctionnel avec fichiers partagés"&gt;diagramme&lt;/a&gt;) - [&lt;a href="https://gitlab.com/free_zed/mypumlt/blob/master/puml/fm-shared_files.puml" title="Sources du diagramme"&gt;source&lt;/a&gt;] - &lt;a href="https://gitlab.com/free_zed/mypumlt/blob/master/puml/part" title="Sources partagées"&gt;éléments communs&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="center"&gt;&lt;em&gt;Domaine fonctionnel complet&lt;/em&gt;&lt;/td&gt;
&lt;td align="center"&gt;(&lt;a href="https://free_zed.gitlab.io/mypumlt/diagrams/fmwa-single_file.png" title="Domaine fonctionnel (avec attributs) single file"&gt;diagramme&lt;/a&gt;) - [&lt;a href="https://gitlab.com/free_zed/mypumlt/blob/master/puml/fmwa-single_file.puml" title="Sources du diagramme"&gt;source&lt;/a&gt;]&lt;/td&gt;
&lt;td align="center"&gt;(&lt;a href="https://free_zed.gitlab.io/mypumlt/diagrams/fmwa-shared_files.png" title="Domaine fonctionnel (avec attributs) avec fichiers partagés"&gt;diagramme&lt;/a&gt;) - [&lt;a href="https://gitlab.com/free_zed/mypumlt/blob/master/puml/fmwa-shared_files.puml" title="Sources du diagramme"&gt;source&lt;/a&gt;] - &lt;a href="https://gitlab.com/free_zed/mypumlt/blob/master/puml/part" title="Sources partagées"&gt;éléments communs&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="center"&gt;&lt;em&gt;Modèle physique de donnée&lt;/em&gt;&lt;/td&gt;
&lt;td align="center"&gt;(&lt;a href="https://free_zed.gitlab.io/mypumlt/diagrams/pdm-single_file.png" title="Modèle physique de donnée single file"&gt;diagramme&lt;/a&gt;) - [&lt;a href="https://gitlab.com/free_zed/mypumlt/blob/master/puml/pdm-single_file.puml" title="Sources du diagramme"&gt;source&lt;/a&gt;]&lt;/td&gt;
&lt;td align="center"&gt;(&lt;a href="https://free_zed.gitlab.io/mypumlt/diagrams/pdm-shared_files.png" title="Modèle physique de donnée avec fichiers partagés"&gt;diagramme&lt;/a&gt;) - [&lt;a href="https://gitlab.com/free_zed/mypumlt/blob/master/puml/pdm-shared_files.puml" title="Sources du diagramme"&gt;source&lt;/a&gt;] - &lt;a href="https://gitlab.com/free_zed/mypumlt/blob/master/puml/part" title="Sources partagées"&gt;éléments communs&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</content><category term="Bloc-notes"/><category term="uml"/><category term="gitlab"/><category term="gitlab-pages"/><category term="statique"/><category term="ci"/><category term="dry"/><category term="devops"/><category term="web"/><category term="numérisation"/></entry><entry><title>Génération de diagrammes PlantUML avec Gitlab-CI</title><link href="https://blog.freezed.me/articles/2019/07/plantuml-gitlab_ci-diagramme-generation/en/" rel="alternate"/><published>2019-07-13T10:00:00+02:00</published><updated>2019-07-13T10:00:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2019-07-13:/articles/2019/07/plantuml-gitlab_ci-diagramme-generation/en/</id><summary type="html">&lt;p&gt;Générer des diagrammes PlantUML à l'aide de l'intégration continue &amp;amp; l'hébergement statique de Gitlab&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;The easy way to keep diagrams up-to-date with the code&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;What ?&lt;/h2&gt;
&lt;p&gt;Diagrams are :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;100%&lt;/strong&gt; text described&lt;/li&gt;
&lt;li&gt;built with &lt;em&gt;gitlab-ci&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;deployed on &lt;em&gt;gitlab-pages&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So easy to maintain that your diagrams could be &lt;strong&gt;still up-to-date&lt;/strong&gt; even &lt;strong&gt;10 months later&lt;/strong&gt;!!!&lt;/p&gt;
&lt;h2&gt;How ?&lt;/h2&gt;
&lt;p&gt;Just push &lt;a href="https://gitlab.com/free_zed/mypumlt/blob/master/puml/" title="Diagram sources"&gt;diagram sources&lt;/a&gt; and &lt;a href="https://gitlab.com/free_zed/mypumlt/blob/master/.gitlab-ci.yml"&gt;.gitlab-ci.yml&lt;/a&gt; will build &amp;amp; deploy it on &lt;em&gt;pages&lt;/em&gt; :&lt;/p&gt;
&lt;p&gt;&lt;img alt="Physical data model with shared files" src="https://free_zed.gitlab.io/mypumlt/diagrams/pdm-shared_files.png" title="Physical data model with shared files"&gt;.&lt;/p&gt;
&lt;h2&gt;&lt;a href="https://en.wikipedia.org/wiki/Don't_repeat_yourself" title="Don't repeat yourself"&gt;D.R.Y.&lt;/a&gt; !&lt;/h2&gt;
&lt;p&gt;Using &lt;em&gt;!include&lt;/em&gt; or &lt;em&gt;!includeurl&lt;/em&gt; PlantUML's &lt;a href="http://plantuml.com/en/preprocessing#9" title="Preprocessing"&gt;preprocessor&lt;/a&gt; directives allows you to share common sources between diagrams.&lt;/p&gt;
&lt;p&gt;In this repo, &lt;em&gt;shared files&lt;/em&gt; diagrams &lt;a href="https://gitlab.com/free_zed/mypumlt/blob/master/puml/part" title="Diagram parts sources"&gt;share same data&lt;/a&gt; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;associations&lt;/li&gt;
&lt;li&gt;attributes&lt;/li&gt;
&lt;li&gt;classes&lt;/li&gt;
&lt;li&gt;keys&lt;/li&gt;
&lt;li&gt;legend&lt;/li&gt;
&lt;li&gt;relations&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hence, if you add something in your shared sources, all diagrams will get it !&lt;/p&gt;
&lt;h2&gt;&lt;a href="https://lkml.org/lkml/2000/8/25/132"&gt;Talk is cheap. Show me the code.&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align="center"&gt;&lt;em&gt;Diagram type&lt;/em&gt;&lt;/th&gt;
&lt;th align="center"&gt;Single file&lt;/th&gt;
&lt;th align="center"&gt;Shared files&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align="center"&gt;&lt;em&gt;Functional domain&lt;/em&gt;&lt;/td&gt;
&lt;td align="center"&gt;-&lt;/td&gt;
&lt;td align="center"&gt;(&lt;a href="https://free_zed.gitlab.io/mypumlt/diagrams/fm-shared_files.png" title="Functional model with shared files"&gt;diagram&lt;/a&gt;) - [&lt;a href="https://gitlab.com/free_zed/mypumlt/blob/master/puml/fm-shared_files.puml" title="Diagram sources"&gt;source&lt;/a&gt;] - &lt;a href="https://gitlab.com/free_zed/mypumlt/blob/master/puml/part" title="Diagram parts sources"&gt;common parts&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="center"&gt;&lt;em&gt;Functional domain detailed&lt;/em&gt;&lt;/td&gt;
&lt;td align="center"&gt;(&lt;a href="https://free_zed.gitlab.io/mypumlt/diagrams/fmwa-single_file.png" title="Functional model (with attributes) single file"&gt;diagram&lt;/a&gt;) - [&lt;a href="https://gitlab.com/free_zed/mypumlt/blob/master/puml/fmwa-single_file.puml" title="Diagram sources"&gt;source&lt;/a&gt;]&lt;/td&gt;
&lt;td align="center"&gt;(&lt;a href="https://free_zed.gitlab.io/mypumlt/diagrams/fmwa-shared_files.png" title="Functional model (with attributes) with shared files"&gt;diagram&lt;/a&gt;) - [&lt;a href="https://gitlab.com/free_zed/mypumlt/blob/master/puml/fmwa-shared_files.puml" title="Diagram sources"&gt;source&lt;/a&gt;] - &lt;a href="https://gitlab.com/free_zed/mypumlt/blob/master/puml/part" title="Diagram parts sources"&gt;common parts&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="center"&gt;&lt;em&gt;Physical data model&lt;/em&gt;&lt;/td&gt;
&lt;td align="center"&gt;(&lt;a href="https://free_zed.gitlab.io/mypumlt/diagrams/pdm-single_file.png" title="Physical data model single file"&gt;diagram&lt;/a&gt;) - [&lt;a href="https://gitlab.com/free_zed/mypumlt/blob/master/puml/pdm-single_file.puml" title="Diagram sources"&gt;source&lt;/a&gt;]&lt;/td&gt;
&lt;td align="center"&gt;(&lt;a href="https://free_zed.gitlab.io/mypumlt/diagrams/pdm-shared_files.png" title="Physical data model with shared files"&gt;diagram&lt;/a&gt;) - [&lt;a href="https://gitlab.com/free_zed/mypumlt/blob/master/puml/pdm-shared_files.puml" title="Diagram sources"&gt;source&lt;/a&gt;] - &lt;a href="https://gitlab.com/free_zed/mypumlt/blob/master/puml/part" title="Diagram parts sources"&gt;common parts&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</content><category term="Bloc-notes"/><category term="uml"/><category term="gitlab"/><category term="gitlab-pages"/><category term="statique"/><category term="ci"/><category term="dry"/><category term="devops"/><category term="web"/><category term="numérisation"/></entry><entry><title>Connaitre l'IP d'une VM VirtualBox</title><link href="https://blog.freezed.me/articles/2019/05/connaitre-lip-dune-vm-virtualbox/" rel="alternate"/><published>2019-05-13T11:42:00+02:00</published><updated>2019-05-13T11:42:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2019-05-13:/articles/2019/05/connaitre-lip-dune-vm-virtualbox/</id><summary type="html">&lt;p&gt;Vieilles notes probablement obsolètes&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;strong&gt;&lt;code&gt;/!\&lt;/code&gt; Vieilles notes probablement obsolètes &lt;code&gt;/!\&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sur la machine invitée (VM)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;apt&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;gcc&lt;span class="w"&gt; &lt;/span&gt;make&lt;span class="w"&gt; &lt;/span&gt;build-essential&lt;span class="w"&gt; &lt;/span&gt;linux-headers-&lt;span class="sb"&gt;`&lt;/span&gt;uname&lt;span class="w"&gt; &lt;/span&gt;-r&lt;span class="sb"&gt;`&lt;/span&gt;
wget&lt;span class="w"&gt; &lt;/span&gt;https://download.virtualbox.org/virtualbox/6.0.8/VBoxGuestAdditions_6.0.8.iso
mount&lt;span class="w"&gt; &lt;/span&gt;VBoxGuestAdditions_6.0.8.iso&lt;span class="w"&gt; &lt;/span&gt;/mnt/&lt;span class="w"&gt; &lt;/span&gt;-t&lt;span class="w"&gt; &lt;/span&gt;iso9660&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;loop
/mnt/VBoxLinuxAdditions.run
reboot
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Sur la machine hôte (VirtualBox)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;vboxmanage&lt;span class="w"&gt; &lt;/span&gt;list&lt;span class="w"&gt; &lt;/span&gt;vms
vboxmanage&lt;span class="w"&gt; &lt;/span&gt;guestproperty&lt;span class="w"&gt; &lt;/span&gt;enumerate&lt;span class="w"&gt; &lt;/span&gt;vdeb
vboxmanage&lt;span class="w"&gt; &lt;/span&gt;startvm&lt;span class="w"&gt; &lt;/span&gt;vdeb&lt;span class="w"&gt; &lt;/span&gt;--type&lt;span class="w"&gt; &lt;/span&gt;headless
vboxmanage&lt;span class="w"&gt; &lt;/span&gt;guestproperty&lt;span class="w"&gt; &lt;/span&gt;enumerate&lt;span class="w"&gt; &lt;/span&gt;vdeb
vboxmanage&lt;span class="w"&gt; &lt;/span&gt;guestproperty&lt;span class="w"&gt; &lt;/span&gt;get&lt;span class="w"&gt; &lt;/span&gt;vdeb&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;/VirtualBox/GuestInfo/Net/0/V4/IP&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;p&gt;Sources consultées :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.noobunbox.net/virtualisation/installer-les-additions-invites-virtualbox" title="Installer les Additions Invités Virtualbox, par Novakin"&gt;Installer les &lt;em&gt;additions invités&lt;/em&gt; dans VirtualBox&lt;/a&gt; [fr]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.noobunbox.net/virtualisation/trouver-ip-machine-virtuelle" title="Trouver l’IP d’une machine virtuelle, par Novakin"&gt;Trouver l’IP d’une machine virtuelle VirtualBox&lt;/a&gt; [fr]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.lisenet.com/2014/virtualbox-4-1-on-a-headless-debian-wheezy-server/" title="VirtualBox 4.1 on a Headless Debian Server, by Thomas"&gt;Installation de VirtualBox 4 en ligne de commande&lt;/a&gt; [en]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.techrepublic.com/article/how-to-run-virtualbox-virtual-machines-from-the-command-line/" title="How to run VirtualBox virtual machines from the command line, By Jack Wallen"&gt;Utilisation de VirtualBox en lignes de commande&lt;/a&gt; [en]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tecadmin.net/install-virtualbox-on-debian-10-buster/" title="How To Install VirtualBox 6.0 on Debian 10 (Buster), by Rahul"&gt;VirtualBox 6 sur Debian 10 (buster)&lt;/a&gt; [en]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://unix.stackexchange.com/a/18926/280824" title="How To Install Virtualbox Guest Additions On CentOS via Command Line only"&gt;Installer les &lt;em&gt;additions invités&lt;/em&gt; dans VirtualBox en ligne de commande&lt;/a&gt; [en]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://download.virtualbox.org/virtualbox/" title="VirtualBox downloads"&gt;download.virtualbox.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.virtualbox.org/wiki/Linux_Downloads" title="Download VirtualBox for Linux Hosts"&gt;Download VirtualBox for Linux Hosts&lt;/a&gt; [en]&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ubuntugeek.com/how-to-control-virtual-machines-virtualbox-using-vboxmanage.html" title="How to control virtual machines (Virtualbox) using VBoxManage, by Ruchi"&gt;Controler VirtualBox avec &lt;code&gt;vboxmanage&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.caffeina.com/use-virtualbox-interface-headless-with-ssh-5552bf793d5f" title="Why use the boring VirtualBox interface? Use it headless with ssh!, by Gabriele Diener"&gt;Controler VirtualBox en mode &lt;code&gt;headless&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="debian"/><category term="admin"/><category term="cli"/><category term="virtualisation"/><category term="virtualbox"/><category term="vieillerie"/></entry><entry><title>Ajouter un VPN dans Debian/buster MATE</title><link href="https://blog.freezed.me/articles/2019/04/ajouter-un-vpn-dans-debianbuster-mate/" rel="alternate"/><published>2019-04-12T08:52:00+02:00</published><updated>2019-04-12T08:52:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2019-04-12:/articles/2019/04/ajouter-un-vpn-dans-debianbuster-mate/</id><summary type="html">&lt;p&gt;Ajout d'une connexion VPN dans le network-manager-gnome pour l'environnement de bureau MATE&lt;/p&gt;</summary><content type="html">&lt;h1&gt;Context&lt;/h1&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;~ lsb_release -a;mate-about --version;uname -r
Description:    Debian GNU/Linux buster/sid
Release:        testing
Codename:       buster
MATE Desktop Environment 1.20.4
4.19.0-4-amd64
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h1&gt;Installation&lt;/h1&gt;
&lt;h2&gt;Dépendences&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;~ sudo apt install openvpn network-manager-openvpn network-manager-openvpn-gnome openvpn-systemd-resolved
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Redémarrage&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;~ sudo service network-manager restart
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Config&lt;/h2&gt;
&lt;p&gt;Automatique via un fichier &lt;code&gt;*.ovpn&lt;/code&gt; :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;~&lt;/span&gt; &lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;nmcli&lt;/span&gt; &lt;span class="n"&gt;connection&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;type&lt;/span&gt; &lt;span class="n"&gt;openvpn&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;chemin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;du&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;fichier_de_conf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ovpn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ajout de l'utilisateur à la nouvelle connection créé depuis le menu &lt;em&gt;réseau&lt;/em&gt; du &lt;em&gt;centre de contrôle&lt;/em&gt; :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;~ mate-control-center
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;p&gt;Source : &lt;a href="https://www.cyberciti.biz/faq/linux-import-openvpn-ovpn-file-with-networkmanager-commandline/"&gt;&lt;em&gt;«How to import a OpenVPN .ovpn file with Network Manager or Command Line in Linux»&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;</content><category term="Bloc-notes"/><category term="vpn"/><category term="debian"/><category term="mate"/><category term="gnome"/><category term="admin"/></entry><entry><title>Générateur de site statique, et pourquoi pas ?</title><link href="https://blog.freezed.me/articles/2019/04/generateur-de-site-statique-et-pourquoi-pas/" rel="alternate"/><published>2019-04-07T13:00:00+02:00</published><updated>2019-10-24T00:00:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2019-04-07:/articles/2019/04/generateur-de-site-statique-et-pourquoi-pas/</id><summary type="html">&lt;p&gt;Les générateurs de site en général et Pelican en particulier&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;img alt="Logo des JDLL 2019" src="https://blog.freezed.me/articles/2019/04/generateur-de-site-statique-et-pourquoi-pas/img/jdll-2019.png"&gt;&lt;/p&gt;
&lt;p&gt;Les 6 &amp;amp; 7 avril 2019 se sont déroulées les &lt;a href="https://jdll.org"&gt;Journées du Logiciel Libre&lt;/a&gt; à Lyon.&lt;/p&gt;
&lt;p&gt;J'y ai présenté les &lt;em&gt;générateurs de site statique&lt;/em&gt; en général et &lt;a href="http://getpelican.com/"&gt;Pelican&lt;/a&gt; en particulier.&lt;/p&gt;
&lt;p&gt;Le format d'une heure aura permis une rapide présentation suivie d'une séance d'installation en direct &lt;a href="https://staticbird.gitlab.io/"&gt;d'un site généré par &lt;em&gt;Pelican&lt;/em&gt;&lt;/a&gt; avec hébergement via &lt;a href="https://docs.gitlab.com/ce/user/project/pages/"&gt;gitlab-pages&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Les sources &amp;amp; supports sont dispo sur le dépôt gitlab : &lt;a href="https://gitlab.com/free_zed/jdll19"&gt;free_zed/jdll19&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Une captation vidéo à été mise en place et sera peut-être dispo dans les prochains jours.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;[MàJ 2019-10-24]&lt;/p&gt;
&lt;p&gt;La vidéo &lt;a href="https://www.videos-libr.es/videos/watch/36ff9d04-83ae-4ad3-92a6-d6310658d4eb"&gt;est disponible&lt;/a&gt; !&lt;/p&gt;</content><category term="Conférences"/><category term="jdll"/><category term="talk"/><category term="lyon"/><category term="pelican"/><category term="gitlab"/><category term="gitlab-pages"/><category term="statique"/><category term="live-coding"/><category term="web"/><category term="ci"/><category term="cd"/><category term="git"/><category term="python"/></entry><entry><title>GrandPy Bot à la mode «serverless»</title><link href="https://blog.freezed.me/articles/2019/03/grandpy-bot-zappa-flask-lambda-gitlab/" rel="alternate"/><published>2019-03-16T23:34:00+01:00</published><updated>2019-03-16T23:34:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2019-03-16:/articles/2019/03/grandpy-bot-zappa-flask-lambda-gitlab/</id><summary type="html">&lt;p&gt;Évolution du projet 7 réalisé durant le parcours OpenClassrooms avec : Zappa, AWS Lambda &amp;amp; Gitlab-CI/Pages.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Il s'agissait d'un &lt;a href="https://blog.freezed.me/articles/2018/09/grandpy-bot-le-papy-robot/"&gt;projet étudiant&lt;/a&gt; précédemment hébergé sur &lt;a href="https://github.com/freezed/ocp7"&gt;Github&lt;/a&gt;. Je l'ai mis à jour pour jouer avec :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Miserlou/Zappa/"&gt;Zappa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://flask.pocoo.org/"&gt;Flask&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://console.aws.amazon.com/lambda/"&gt;AWS Lambda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/free_zed/grandpy/blob/master/.gitlab-ci.yml"&gt;Gitlab-ci&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un papy-robot qui parle de souvenirs géographiques et citant Wikipedia.&lt;/p&gt;
&lt;p&gt;Échangez donc &lt;a href="https://free_zed.gitlab.io/grandpy"&gt;quelques phrases&lt;/a&gt; avec lui (^_^)&lt;/p&gt;
&lt;h2&gt;Installez le vôtre !&lt;/h2&gt;
&lt;p&gt;L'exécution a besoin de quelques variables d'environnement :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;EMAIL_ADDRESS&lt;/code&gt; (Nominatim API)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MAPBOX_API_KEY&lt;/code&gt; (Mapbox API)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GOO_API_KEY&lt;/code&gt; (not used &lt;a href="https://gitlab.com/free_zed/grandpy/issues/"&gt;but needed&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Localement :&lt;/h3&gt;
&lt;p&gt;Il fonctionne comme une simple application mono-page &lt;a href="http://flask.pocoo.org/"&gt;flask&lt;/a&gt; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/free_zed/grandpy/forks/new"&gt;forkez-le&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;mettez en place un environement virtuel : &lt;code&gt;virtualenv .venv&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;installez les dépendances : &lt;code&gt;pip install -r requirements.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;executez locallement : &lt;code&gt;python run.py&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Sur Gitlab :&lt;/h3&gt;
&lt;p&gt;Créez un profil &lt;a href="https://github.com/Miserlou/Zappa/blob/master/example/policy/deploy.json"&gt;AWS IAM&lt;/a&gt; sur &lt;strong&gt;votre compte AWS&lt;/strong&gt; et ajoutez des variables d'environnement valides dans &lt;code&gt;https://gitlab.com/&amp;lt;namespace&amp;gt;/grandpy/settings/ci_cd&lt;/code&gt; :&lt;/p&gt;
&lt;p&gt;Repoussez le et le script d'intégration continue :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;déployera le code du &lt;em&gt;chat&lt;/em&gt; sur &lt;a href="https://console.aws.amazon.com/lambda/"&gt;AWS Lambda&lt;/a&gt; avec l'aide magique de &lt;a href="https://github.com/Miserlou/Zappa/"&gt;Zappa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;mettra à jour le &lt;a href="https://gitlab.com/free_zed/grandpy/tree/master/static/js/ask.js"&gt;JavaScript&lt;/a&gt; avec l'URL &lt;em&gt;AWS API Gateway&lt;/em&gt; pointant vers &lt;em&gt;Lambda&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;génèrera la page d'accueil HTML (avec un &lt;a href="https://gitlab.com/free_zed/grandpy/blob/master/genstat.py"&gt;script flask&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;déployera les fichiers statiques sur &lt;em&gt;gitlab-pages&lt;/em&gt; (HTML, images &amp;amp; CSS)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;...et voilà, vous pouvez maintenant discuter avec &lt;em&gt;GrandPy&lt;/em&gt; sur &lt;code&gt;https://&amp;lt;namespace&amp;gt;.gitlab.io/grandpy/&lt;/code&gt; (- ;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;N'hésitez pas à me faire part de vos commentaires via les &lt;a href="https://gitlab.com/free_zed/grandpy/issues/new"&gt;tickets&lt;/a&gt;.&lt;/p&gt;</content><category term="Réalisations"/><category term="git"/><category term="gitlab"/><category term="devops"/><category term="flask"/><category term="dev"/><category term="zappa"/><category term="serverless"/><category term="aws"/><category term="ci"/><category term="cd"/><category term="aws-lambda"/><category term="python"/></entry><entry><title>GrandPy Bot in «serverless» style</title><link href="https://blog.freezed.me/articles/2019/03/grandpy-bot-zappa-flask-lambda-gitlab/en/" rel="alternate"/><published>2019-03-16T23:34:00+01:00</published><updated>2019-03-16T23:34:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2019-03-16:/articles/2019/03/grandpy-bot-zappa-flask-lambda-gitlab/en/</id><summary type="html">&lt;p&gt;Evolution of project 7 realized during the OpenClassrooms course with : Zappa, AWS Lambda &amp;amp; Gitlab-CI/Pages.&lt;/p&gt;</summary><content type="html">&lt;p&gt;This was a &lt;a href="https://blog.freezed.me/articles/2018/09/grandpy-bot-le-papy-robot/"&gt;student project&lt;/a&gt; previously hosted on &lt;a href="https://github.com/freezed/ocp7"&gt;Github&lt;/a&gt;. I updated it to play with :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Miserlou/Zappa/"&gt;Zappa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://flask.pocoo.org/"&gt;Flask&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://console.aws.amazon.com/lambda/"&gt;AWS Lambda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/free_zed/grandpy/blob/master/.gitlab-ci.yml"&gt;Gitlab-ci&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is a &lt;em&gt;robot&lt;/em&gt; grandfather talking about geographic memories and quoting Wikipedia fetching data over public APIs.&lt;/p&gt;
&lt;p&gt;If you can speak French, &lt;a href="https://free_zed.gitlab.io/grandpy"&gt;have a talk with him&lt;/a&gt; (^_^)&lt;/p&gt;
&lt;h2&gt;Run yours !&lt;/h2&gt;
&lt;p&gt;Need some environment variables to run :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;EMAIL_ADDRESS&lt;/code&gt; (Nominatim API)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MAPBOX_API_KEY&lt;/code&gt; (Mapbox API)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GOO_API_KEY&lt;/code&gt; (not used &lt;a href="https://gitlab.com/free_zed/grandpy/issues/"&gt;but needed&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Locally :&lt;/h3&gt;
&lt;p&gt;It works as a simple single-page &lt;a href="http://flask.pocoo.org/"&gt;Flask&lt;/a&gt; application :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/free_zed/grandpy/forks/new"&gt;fork-it&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;set up a virtualenv : &lt;code&gt;virtualenv .venv&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;install requirements : &lt;code&gt;pip install -r requirements.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;run it locally : &lt;code&gt;python run.py&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;On Gitlab :&lt;/h3&gt;
&lt;p&gt;Set up a &lt;a href="https://github.com/Miserlou/Zappa/blob/master/example/policy/deploy.json"&gt;AWS IAM profile&lt;/a&gt; on &lt;strong&gt;your AWS account&lt;/strong&gt; and add valid environment variables in &lt;code&gt;https://gitlab.com/&amp;lt;namespace&amp;gt;/grandpy/settings/ci_cd&lt;/code&gt; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AWS_ACCESS_KEY_ID&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AWS_SECRET_ACCESS_KEY&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Push it back and the &lt;em&gt;CI script&lt;/em&gt; will :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;put chat code on &lt;a href="https://console.aws.amazon.com/lambda/"&gt;AWS Lambda&lt;/a&gt; with the magic of &lt;a href="https://github.com/Miserlou/Zappa/"&gt;Zappa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;edit &lt;a href="https://gitlab.com/free_zed/grandpy/tree/master/static/js/ask.js"&gt;JavaScript&lt;/a&gt; with the URL of the &lt;em&gt;AWS API Gateway&lt;/em&gt; just updated&lt;/li&gt;
&lt;li&gt;generate the HTML landing page (with a &lt;a href="https://gitlab.com/free_zed/grandpy/blob/master/genstat.py"&gt;flask script&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;deploy statics on &lt;em&gt;gitlab-pages&lt;/em&gt; (HTML, images &amp;amp; CSS)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;…and &lt;em&gt;voilà&lt;/em&gt;, have a chat with &lt;em&gt;GrandPy&lt;/em&gt; on &lt;code&gt;https://&amp;lt;namespace&amp;gt;.gitlab.io/grandpy/&lt;/code&gt; (-;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Feel free to give feedback using &lt;a href="https://gitlab.com/free_zed/grandpy/issues/new"&gt;issues&lt;/a&gt;.&lt;/p&gt;</content><category term="Réalisations"/><category term="git"/><category term="gitlab"/><category term="devops"/><category term="flask"/><category term="dev"/><category term="zappa"/><category term="serverless"/><category term="aws"/><category term="ci"/><category term="cd"/><category term="aws-lambda"/><category term="python"/></entry><entry><title>Installer wxPython sur Debian/Buster</title><link href="https://blog.freezed.me/articles/2019/03/wxpython-installation-debian-buster/" rel="alternate"/><published>2019-03-11T11:55:00+01:00</published><updated>2019-03-11T11:55:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2019-03-11:/articles/2019/03/wxpython-installation-debian-buster/</id><summary type="html">&lt;p&gt;Notes d'installation pour faire un «HelloWorld» wxPython sur Debian/Buster&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;strong&gt;&lt;a href="https://wxpython.org/"&gt;&lt;code&gt;wxPython&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt; est une &lt;em&gt;boite à outils&lt;/em&gt; graphique multi-plateforme qui implémente la bibliothèque &lt;strong&gt;&lt;a href="https://www.wxwidgets.org/"&gt;&lt;code&gt;wxWidget&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt; en Python, pour créer des interfaces graphiques &lt;em&gt;vraiment natives&lt;/em&gt;.&lt;/p&gt;
&lt;h2&gt;installation de &lt;code&gt;wxPython&lt;/code&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo apt install build-essential dpkg-dev freeglut3-dev libasound2-doc libgstreamer1.0-dev libgtk-3-dev libjpeg-dev liblzma-doc libnotify-dev libsdl1.2-dev libsm-dev libtiff-dev libwxgtk3.0-gtk3-dev libwxgtk-webview3.0-gtk3-dev libxtst-dev python3.7-dev&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;virtualenv --python python3.7 .venv&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;source .venv/bin/activate&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pip install wxPython --build ~/tmp&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;a href="https://fr.wikipedia.org/wiki/WxPython#Exemple"&gt;source&lt;/a&gt; du &lt;code&gt;HelloWorld&lt;/code&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="ch"&gt;#!/usr/bin/env python3&lt;/span&gt;
&lt;span class="c1"&gt;# coding:utf-8&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;wx&lt;/span&gt;

&lt;span class="c1"&gt;# Création d&amp;#39;un nouveau cadre, dérivé du wxPython &amp;#39;Frame&amp;#39;.&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;TestFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Frame&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;parent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Frame&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="fm"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;parent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

        &lt;span class="c1"&gt;# À l&amp;#39;intérieur du cadre, créer un panneau..&lt;/span&gt;
        &lt;span class="n"&gt;panel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Panel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="c1"&gt;# Créer un texte dans le panneau&lt;/span&gt;
        &lt;span class="n"&gt;texte&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StaticText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;panel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Bonjour tout le monde!&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Point&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

        &lt;span class="c1"&gt;# Créer un bouton dans le panneau&lt;/span&gt;
        &lt;span class="n"&gt;bouton&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;panel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Cliquez-moi!&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Point&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;35&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="c1"&gt;# lier le bouton à une fonction:&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Bind&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;EVT_BUTTON&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;creerDiag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bouton&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# fonction qui affiche une boîte de dialogue&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;creerDiag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;dlg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MessageDialog&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Merci de m&amp;#39;avoir cliqué, ça fait du bien.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="s2"&gt;&amp;quot;Merci!&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ICON_EXCLAMATION&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;YES_NO&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CANCEL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;dlg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ShowModal&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;dlg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Destroy&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;


&lt;span class="c1"&gt;# Chaque application wxWidgets doit avoir une classe dérivée de wx.App&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;TestApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;App&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;OnInit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;frame&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TestFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SetTopWindow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;frame&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;frame&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Show&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TestApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MainLoop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Tadaaa !&lt;/h3&gt;
&lt;p&gt;&lt;img alt="HelloWorld result image" src="https://blog.freezed.me/img/20190311-helloworld-wxpython-mate-dark.png"&gt;&lt;/p&gt;
&lt;h2&gt;Notes :&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ça n'a pas fonctionné avec &lt;code&gt;python3.6&lt;/code&gt; (mais j'ai oublié de noter quoi…)&lt;/li&gt;
&lt;li&gt;Nécessite plus de 4.2Go d'espace disque sur &lt;code&gt;/tmp&lt;/code&gt; : &lt;a href="https://pip.pypa.io/en/stable/reference/pip_install/#cmdoption-b"&gt;j'ai du utilisé un répertoire temporaire local&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;</content><category term="Bloc-notes"/><category term="wxpython"/><category term="wxwidget"/><category term="debian"/><category term="admin"/><category term="gui"/><category term="helloworld"/><category term="python"/><category term="dev"/></entry><entry><title>Install wxPython on Debian/Buster</title><link href="https://blog.freezed.me/articles/2019/03/wxpython-installation-debian-buster/en/" rel="alternate"/><published>2019-03-11T11:55:00+01:00</published><updated>2019-03-11T11:55:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2019-03-11:/articles/2019/03/wxpython-installation-debian-buster/en/</id><summary type="html">&lt;p&gt;Install notes to set-up a wxPython «HelloWorld» on Debian/Buster&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;strong&gt;&lt;a href="https://wxpython.org/"&gt;&lt;code&gt;wxPython&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt; is a cross-platform GUI toolkit implementation of &lt;strong&gt;&lt;a href="https://www.wxwidgets.org/"&gt;&lt;code&gt;wxWidget&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt; for the Python language to create truly native user interfaces applications.&lt;/p&gt;
&lt;h2&gt;wxPython installation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo apt install build-essential dpkg-dev freeglut3-dev libasound2-doc libgstreamer1.0-dev libgtk-3-dev libjpeg-dev liblzma-doc libnotify-dev libsdl1.2-dev libsm-dev libtiff-dev libwxgtk3.0-gtk3-dev libwxgtk-webview3.0-gtk3-dev libxtst-dev python3.7-dev&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;virtualenv --python python3.7 .venv&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;source .venv/bin/activate&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pip install wxPython --build ~/tmp&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;code&gt;HelloWorld&lt;/code&gt; &lt;a href="https://fr.wikipedia.org/wiki/WxPython#Exemple"&gt;source&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="ch"&gt;#!/usr/bin/env python3&lt;/span&gt;
&lt;span class="c1"&gt;# coding:utf-8&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;wx&lt;/span&gt;

&lt;span class="c1"&gt;# Création d&amp;#39;un nouveau cadre, dérivé du wxPython &amp;#39;Frame&amp;#39;.&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;TestFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Frame&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;parent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Frame&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="fm"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;parent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

        &lt;span class="c1"&gt;# À l&amp;#39;intérieur du cadre, créer un panneau..&lt;/span&gt;
        &lt;span class="n"&gt;panel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Panel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="c1"&gt;# Créer un texte dans le panneau&lt;/span&gt;
        &lt;span class="n"&gt;texte&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StaticText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;panel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Bonjour tout le monde!&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Point&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

        &lt;span class="c1"&gt;# Créer un bouton dans le panneau&lt;/span&gt;
        &lt;span class="n"&gt;bouton&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;panel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Cliquez-moi!&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Point&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;35&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="c1"&gt;# lier le bouton à une fonction:&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Bind&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;EVT_BUTTON&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;creerDiag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bouton&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# fonction qui affiche une boîte de dialogue&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;creerDiag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;dlg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MessageDialog&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Merci de m&amp;#39;avoir cliqué, ça fait du bien.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="s2"&gt;&amp;quot;Merci!&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ICON_EXCLAMATION&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;YES_NO&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CANCEL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;dlg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ShowModal&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;dlg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Destroy&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;


&lt;span class="c1"&gt;# Chaque application wxWidgets doit avoir une classe dérivée de wx.App&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;TestApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;App&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;OnInit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;frame&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TestFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SetTopWindow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;frame&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;frame&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Show&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TestApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MainLoop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Tadaaa !&lt;/h3&gt;
&lt;p&gt;&lt;img alt="HelloWorld result image" src="https://blog.freezed.me/img/20190311-helloworld-wxpython-mate-dark.png"&gt;&lt;/p&gt;
&lt;h2&gt;Notes :&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;I had troubles with &lt;code&gt;python3.6&lt;/code&gt; (but I forgot notice what…)&lt;/li&gt;
&lt;li&gt;About 4.2G of free space is needed in &lt;code&gt;/tmp&lt;/code&gt; : &lt;a href="https://pip.pypa.io/en/stable/reference/pip_install/#cmdoption-b"&gt;I had to set a user-land build-place for pip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;</content><category term="Bloc-notes"/><category term="wxpython"/><category term="wxwidget"/><category term="debian"/><category term="admin"/><category term="gui"/><category term="helloworld"/><category term="python"/><category term="dev"/></entry><entry><title>Sauvegarder la config du bureau MATE</title><link href="https://blog.freezed.me/articles/2019/03/sauvegarder-la-config-du-bureau-mate/" rel="alternate"/><published>2019-03-05T20:05:00+01:00</published><updated>2019-03-05T20:05:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2019-03-05:/articles/2019/03/sauvegarder-la-config-du-bureau-mate/</id><summary type="html">&lt;p&gt;Configurer son bureau en quelques commande pour se sentir chez soit partout.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Sauvegarde de la BDD &lt;em&gt;MATE&lt;/em&gt; avec &lt;a href="https://packages.debian.org/source/buster/dconf"&gt;&lt;code&gt;dconf&lt;/code&gt;&lt;/a&gt; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;dconf dump / &amp;gt; ~/Desktop/dconf-backup&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un peu de tri dans les réglages que l'on souhaite garder :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;vi ~/Desktop/dconf-backup&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Puis sauvegarder des icônes &amp;amp; thèmes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tar -czvf icons-backup.tar.gz ~/.icons&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tar -czvf themes-backup.tar.gz ~/.themes&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On restore la config dans le bureau de destination :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;dconf load / &amp;lt; dconf-backup&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tar -xzvf icons-backup.tar.gz -C ~/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tar -xzvf themes-backup.tar.gz -C ~/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Sources :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[addictivetips.com] : &lt;a href="https://www.addictivetips.com/ubuntu-linux-tips/back-up-the-mate-desktop-settings-linux/"&gt;&lt;em&gt;How do I restore MATE panel settings from old backup&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[askubuntu.com] : &lt;a href="https://askubuntu.com/a/821571/836292"&gt;&lt;em&gt;How To Back Up The Mate Desktop Settings On Linux&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="backup"/><category term="mate"/><category term="debian"/><category term="admin"/><category term="lmde2"/></entry><entry><title>Déploiement sur AWS Lambda avec Zappa &amp; Flask</title><link href="https://blog.freezed.me/articles/2019/02/deploiement-sur-aws-lambda-avec-zappa-flask/" rel="alternate"/><published>2019-02-11T21:12:00+01:00</published><updated>2019-02-11T21:12:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2019-02-11:/articles/2019/02/deploiement-sur-aws-lambda-avec-zappa-flask/</id><summary type="html">&lt;p&gt;Déploiement d'AWS Lambda avec Zappa&lt;/p&gt;</summary><content type="html">&lt;p&gt;Mise en place d'un &lt;strong&gt;bac à sable&lt;/strong&gt;. L'idée est de jouer avec l'approche &lt;a href="https://en.wikipedia.org/wiki/Serverless_computing"&gt;&lt;em&gt;server-less&lt;/em&gt;&lt;/a&gt; dans un contexte &lt;strong&gt;100% python&lt;/strong&gt; en utilisant &lt;a href="https://github.com/Miserlou/Zappa/#zappa---serverless-python" title="Build and deploy server-less, event-driven Python applications"&gt;Zappa&lt;/a&gt; associé a une application &lt;a href="http://flask.pocoo.org" title="Flask : web developpement one drop at a time"&gt;Flask&lt;/a&gt; dans le but de déployer le code sur &lt;a href="https://console.aws.amazon.com/lambda/" title="AWS Lambda lets you run code without provisioning or managing servers"&gt;AWS Lambda&lt;/a&gt;. Les essais de code et les différants déploiements réalisés sont disponibles sur le dépôt &lt;a href="http://gitlab.com/free_zed/hellozappa/"&gt;Gitlab&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;AWS&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://portal.aws.amazon.com/billing/signup#/start"&gt;créer un compte&lt;/a&gt; AWS.&lt;/li&gt;
&lt;li&gt;créer &lt;a href="https://console.aws.amazon.com/iam/home#/policies$new"&gt;une stratégie IAM&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;s'inspirer de la &lt;a href="https://github.com/Miserlou/Zappa/issues/244"&gt;discussion&lt;/a&gt; et du &lt;a href="https://github.com/Miserlou/Zappa/blob/master/example/policy/deploy.json"&gt;template&lt;/a&gt; du dépôt &lt;code&gt;zappa&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ajouter cette stratégie &lt;a href="https://console.aws.amazon.com/iam/home#/groups$new"&gt;à un groupe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;avoir un fichier local contenant un &lt;a href="https://aws.amazon.com/fr/blogs/security/a-new-and-standardized-way-to-manage-credentials-in-the-aws-sdks/"&gt;accès AWS &lt;em&gt;conforme&lt;/em&gt;&lt;/a&gt;. Le &lt;a href="https://docs.aws.amazon.com/fr_fr/cli/latest/userguide/cli-chap-configure.html"&gt;CLI AWS&lt;/a&gt; peut aider.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Python&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;un virtualenv avec &lt;code&gt;python3.6&lt;/code&gt; &lt;del&gt;ou &lt;code&gt;python2.7&lt;/code&gt;&lt;/del&gt;&lt;ul&gt;
&lt;li&gt;sous &lt;em&gt;Debian testing/buster&lt;/em&gt;, &lt;a href="https://unix.stackexchange.com/a/499965"&gt;la version de virtualenv fournie par &lt;code&gt;apt&lt;/code&gt; n'est plus utilisable&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;source .venv/bin/activate&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pip install flask zappa&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;faire une petite application &lt;a href="http://flask.pocoo.org" title="Flask : web developpement one drop at a time"&gt;Flask&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;flask&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Flask&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Flask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vm"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="nd"&gt;@app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;defaults&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;url_param&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;world&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="nd"&gt;@app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/&amp;lt;string:url_param&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url_param&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Hello &lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s2"&gt;. Zappa rocks!&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url_param&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;La magie Zappa&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;zappa init&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;███████╗&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;█████╗&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;██████╗&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;██████╗&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;█████╗&lt;/span&gt;
&lt;span class="n"&gt;╚══███╔╝██╔══██╗██╔══██╗██╔══██╗██╔══██╗&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;███╔╝&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;███████║██████╔╝██████╔╝███████║&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;███╔╝&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;██╔══██║██╔═══╝&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;██╔═══╝&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;██╔══██║&lt;/span&gt;
&lt;span class="n"&gt;███████╗██║&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;██║██║&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;██║&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;██║&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;██║&lt;/span&gt;
&lt;span class="n"&gt;╚══════╝╚═╝&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;╚═╝╚═╝&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;╚═╝&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;╚═╝&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;╚═╝&lt;/span&gt;

&lt;span class="n"&gt;Welcome&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Zappa&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;

&lt;span class="n"&gt;Zappa&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;system&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;running&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;server&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;less&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Python&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;web&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;applications&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AWS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Lambda&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AWS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;API&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gateway&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;This&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n n-Quoted"&gt;`init`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;command&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;will&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;help&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;you&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;create&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;configure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Zappa&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;deployment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;Let&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;s get started!&lt;/span&gt;

&lt;span class="s1"&gt;Your Zappa configuration can support multiple production stages, like &amp;#39;&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;, &amp;#39;&lt;/span&gt;&lt;span class="n"&gt;staging&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;, and &amp;#39;&lt;/span&gt;&lt;span class="n"&gt;production&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;.&lt;/span&gt;
&lt;span class="s1"&gt;What do you want to call this environment (default &amp;#39;&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;):&lt;/span&gt;

&lt;span class="s1"&gt;AWS Lambda and API Gateway are only available in certain regions. Let&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;make&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;you&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;have&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;profile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;up&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;one&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;that&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;will&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;work&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;We&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;found&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;following&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;profiles&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;adminuser&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fred&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cli&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;lambda&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Which&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;would&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;you&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;like&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;us&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;use&lt;/span&gt;&lt;span class="nv"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;default&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;

&lt;span class="n"&gt;Your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Zappa&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;deployments&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;will&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;need&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;be&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uploaded&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;S3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="k"&gt;If&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;you&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;don&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;t have a bucket yet, we&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;ll&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;create&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;one&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;you&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;too&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;What&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;you&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;want&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="nv"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;zappa-664wolx7u&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;

&lt;span class="n"&gt;It&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;looks&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;like&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Flask&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;application&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;What&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;s the modular path to your app&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="nv"&gt;?&lt;/span&gt;
&lt;span class="n"&gt;This&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;will&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;likely&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;be&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;something&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;like&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;your_module.app&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;We&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;discovered&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;
&lt;span class="k"&gt;Where&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;s function? (default &amp;#39;&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;):&lt;/span&gt;

&lt;span class="s1"&gt;You can optionally deploy to all available regions in order to provide fast global service.&lt;/span&gt;
&lt;span class="s1"&gt;If you are using Zappa for the first time, you probably don&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;want&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;
&lt;span class="n"&gt;Would&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;you&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;like&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;deploy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;application&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;globally&lt;/span&gt;&lt;span class="nv"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;n&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;rimary&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;

&lt;span class="n"&gt;Okay&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;here&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;s your zappa_settings.json:&lt;/span&gt;

&lt;span class="s1"&gt;{&lt;/span&gt;
&lt;span class="s1"&gt;    &amp;quot;dev&amp;quot;: {&lt;/span&gt;
&lt;span class="s1"&gt;        &amp;quot;app_function&amp;quot;: &amp;quot;run.app&amp;quot;,&lt;/span&gt;
&lt;span class="s1"&gt;        &amp;quot;aws_region&amp;quot;: &amp;quot;eu-west-3&amp;quot;,&lt;/span&gt;
&lt;span class="s1"&gt;        &amp;quot;profile_name&amp;quot;: &amp;quot;default&amp;quot;,&lt;/span&gt;
&lt;span class="s1"&gt;        &amp;quot;project_name&amp;quot;: &amp;quot;hellozappa&amp;quot;,&lt;/span&gt;
&lt;span class="s1"&gt;        &amp;quot;runtime&amp;quot;: &amp;quot;python3.6&amp;quot;,&lt;/span&gt;
&lt;span class="s1"&gt;        &amp;quot;s3_bucket&amp;quot;: &amp;quot;zappa-664wolx7u&amp;quot;&lt;/span&gt;
&lt;span class="s1"&gt;    }&lt;/span&gt;
&lt;span class="s1"&gt;}&lt;/span&gt;

&lt;span class="s1"&gt;Does this look okay? (default &amp;#39;&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;) [y/n]:&lt;/span&gt;

&lt;span class="s1"&gt;Done! Now you can deploy your Zappa application by executing:&lt;/span&gt;

&lt;span class="s1"&gt;    $ zappa deploy dev&lt;/span&gt;

&lt;span class="s1"&gt;After that, you can update your application code with:&lt;/span&gt;

&lt;span class="s1"&gt;    $ zappa update dev&lt;/span&gt;

&lt;span class="s1"&gt;To learn more, check out our project page on GitHub here: https://github.com/Miserlou/Zappa&lt;/span&gt;
&lt;span class="s1"&gt;and stop by our Slack channel here: https://slack.zappa.io&lt;/span&gt;

&lt;span class="s1"&gt;Enjoy!,&lt;/span&gt;
&lt;span class="s1"&gt; ~ Team Zappa!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;zappa deploy dev&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;=&amp;gt; En ligne !&lt;/h2&gt;
&lt;p&gt;Plus de code et d'info sur le dépôt &lt;a href="http://gitlab.com/free_zed/hellozappa/"&gt;Gitlab&lt;/a&gt;.&lt;/p&gt;</content><category term="Bloc-notes"/><category term="aws"/><category term="aws-lambda"/><category term="serverless"/><category term="flask"/><category term="zappa"/><category term="devops"/><category term="ci"/><category term="cd"/><category term="gitlab"/><category term="gitlab-pages"/><category term="python"/><category term="dev"/></entry><entry><title>Tentative de helloworld sur AWS Lambda avec AWS CLI</title><link href="https://blog.freezed.me/articles/2019/02/tentative-de-helloworld-sur-aws-lambda-avec-aws-cli/" rel="alternate"/><published>2019-02-10T21:05:00+01:00</published><updated>2019-02-10T21:05:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2019-02-10:/articles/2019/02/tentative-de-helloworld-sur-aws-lambda-avec-aws-cli/</id><summary type="html">&lt;p&gt;Essayer de déployer un «helloworld.py» sur AWS Lambda avec AWS CLI&lt;/p&gt;</summary><content type="html">&lt;ol&gt;
&lt;li&gt;Create AWS account&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create AWS IAM role&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;name&lt;/strong&gt; : &lt;code&gt;lambda-apigateway-role&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Desc&lt;/strong&gt; : &lt;code&gt;Allows Lambda functions to call AWS services on your behalf.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trusted entities&lt;/strong&gt; : &lt;code&gt;Service AWS: lambda&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install CLI&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;create &lt;code&gt;helloworld.py&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/fr_fr/apigateway/latest/developerguide/create-api-using-awscli.html"&gt;Create API gateway&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;machine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;apigateway&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;create&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="kn"&gt;api&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="nx"&gt;HelloWorld&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;API&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;items&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;tbvck78wh9&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;HelloWorld API&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;createdDate&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1549840237&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;apiKeySource&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;HEADER&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;endpointConfiguration&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;types&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;EDGE&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;machine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;API&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;tbvck78wh9&amp;quot;&lt;/span&gt;
&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;machine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;apigateway&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;get&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;resources&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="kn"&gt;api&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nx"&gt;API&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;items&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;7valik3ze5&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;path&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;machine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;PARENT_API&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="nx"&gt;valik3ze5&lt;/span&gt;
&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;machine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;apigateway&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;create&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;resource&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="kn"&gt;api&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nx"&gt;API&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;parent&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nx"&gt;PARENT_API&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;part&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;hello&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;e86q4n&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;parentId&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;7valik3ze5&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;pathPart&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;hello&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;path&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/hello&amp;quot;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;machine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;RESOURCE_HELLO&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;e86q4n&lt;/span&gt;
&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;machine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;apigateway&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;create&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;resource&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="kn"&gt;api&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nx"&gt;API&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;parent&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nx"&gt;RESOURCE_HELLO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;part&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;param&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;7jptx2&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;parentId&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;e86q4n&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;pathPart&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;{param}&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;path&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/hello/{param}&amp;quot;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;machine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;apigateway&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;put&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="kn"&gt;api&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nx"&gt;API&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;resource&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nx"&gt;RESOURCE_HELLO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;GET&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;authorization&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;NONE&amp;quot;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;httpMethod&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;authorizationType&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;NONE&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;apiKeyRequired&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;machine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;apigateway&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;put&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="kn"&gt;api&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nx"&gt;API&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;resource&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="nx"&gt;jptx2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;GET&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;authorization&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;NONE&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;parameters&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;param&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;httpMethod&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;authorizationType&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;NONE&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;apiKeyRequired&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;requestParameters&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;method.request.path.param&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;machine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;apigateway&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;put&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="kn"&gt;api&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nx"&gt;API&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;resource&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nx"&gt;RESOURCE_HELLO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;GET&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;code&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;statusCode&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;200&amp;quot;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;machine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;apigateway&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;put&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="kn"&gt;api&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nx"&gt;API&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;resource&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="nx"&gt;jptx2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;GET&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;code&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;statusCode&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;200&amp;quot;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;machine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;apigateway&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;put&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;integration&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="kn"&gt;api&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nx"&gt;API&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;resource&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nx"&gt;RESOURCE_HELLO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;GET&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="k"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;HTTP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;integration&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;GET&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;uri&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//helloworld-demo-endpoint.execute-api.com/helloworld/hello&amp;#39;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;type&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;HTTP&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;httpMethod&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;uri&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://helloworld-demo-endpoint.execute-api.com/helloworld/hello&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;connectionType&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;INTERNET&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;passthroughBehavior&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;WHEN_NO_MATCH&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;timeoutInMillis&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;29000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;cacheNamespace&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;e86q4n&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;cacheKeyParameters&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;machine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;apigateway&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;put&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;integration&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="kn"&gt;api&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nx"&gt;API&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;resource&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="nx"&gt;jptx2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;GET&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="k"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;HTTP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;integration&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;GET&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;uri&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//helloworld-demo-endpoint.execute-api.com/helloworld/hello/{param}&amp;#39; --request-parameters &amp;#39;{&amp;quot;integration.request.path.param&amp;quot;:&amp;quot;method.request.path.param&amp;quot;}&amp;#39;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;type&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;HTTP&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;httpMethod&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;uri&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://helloworld-demo-endpoint.execute-api.com/helloworld/hello/{param}&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kn"&gt;api&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}.&lt;/span&gt;&lt;span class="nx"&gt;execute&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="kn"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.{&lt;/span&gt;&lt;span class="nx"&gt;region&lt;/span&gt;&lt;span class="p"&gt;}.&lt;/span&gt;&lt;span class="nx"&gt;amazonaws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;com&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;connectionType&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;INTERNET&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;requestParameters&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;integration.request.path.param&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;method.request.path.param&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;passthroughBehavior&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;WHEN_NO_MATCH&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;timeoutInMillis&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;29000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;cacheNamespace&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;7jptx2&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;cacheKeyParameters&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;machine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;apigateway&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;put&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;integration&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="kn"&gt;api&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nx"&gt;API&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;resource&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nx"&gt;RESOURCE_HELLO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;GET&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;code&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;selection&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;pattern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;statusCode&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;200&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;selectionPattern&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;machine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;apigateway&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;put&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;integration&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="kn"&gt;api&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nx"&gt;API&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;resource&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="nx"&gt;jptx2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;GET&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;code&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;selection&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;pattern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;statusCode&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;200&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;selectionPattern&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;machine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;apigateway&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;create&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;deployment&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="kn"&gt;api&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nx"&gt;API&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;stage&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;stage&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;description&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="nx"&gt;Test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;stage&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;description&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="nx"&gt;First&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;deployment&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;mvcivh&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;description&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;First deployment&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;createdDate&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1549845704&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//tbvck78wh9.execute-api.eu-west-3.amazonaws.com/test/hello/&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kn"&gt;api&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}.&lt;/span&gt;&lt;span class="nx"&gt;execute&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="kn"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.{&lt;/span&gt;&lt;span class="nx"&gt;region&lt;/span&gt;&lt;span class="p"&gt;}.&lt;/span&gt;&lt;span class="nx"&gt;amazonaws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;com&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;p&gt;[aws-]:&lt;/p&gt;</content><category term="Bloc-notes"/><category term="aws"/><category term="aws-lambda"/><category term="serverless"/><category term="devops"/><category term="api-gateway"/><category term="cli"/><category term="dev"/></entry><entry><title>Histoires d'un étudiant perfectionniste sous pression</title><link href="https://blog.freezed.me/articles/2019/01/histoires-dun-etudiant-perfectionniste-sous-pression/" rel="alternate"/><published>2019-01-21T19:48:00+01:00</published><updated>2019-01-21T19:48:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2019-01-21:/articles/2019/01/histoires-dun-etudiant-perfectionniste-sous-pression/</id><summary type="html">&lt;p&gt;Ma 1ère présentation publique : La découverte de Django en jouant avec l'API OpenFoodFacts&lt;/p&gt;</summary><content type="html">&lt;p&gt;Ma 1ère présentation publique : j'ai voulu partager avec la &lt;em&gt;communauté Pytholyonnistes&lt;/em&gt; ma découverte de l'incontournable framework web de l'univers Python : &lt;em&gt;Django&lt;/em&gt;.
Au programme : partage d'un des moments forts du parcours d'&lt;a href="https://openclassrooms.com/fr/paths/68-developpeur-dapplication-python"&gt;OpenClassrooms&lt;/a&gt; en bricolant (entre autre) avec les données de la base de donnée publique et ouverte &lt;a href="https://world-fr.openfoodfacts.org/decouvrir"&gt;openfoodfacts.org&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Cette &lt;a href="https://www.meetup.com/fr-FR/Python-AFPY-Lyon/events/pvlzcpyzcbnc/"&gt;présentation publique&lt;/a&gt; s'est déroulée dans le cadre des &lt;a href="https://www.afpy.org/"&gt;rencontres  lyonnaises et mensuelles&lt;/a&gt; de l'AFPY.&lt;/p&gt;
&lt;p&gt;Le support visuel de cette présentation est disponible en cliquant &lt;strong&gt;sur le logo&lt;/strong&gt; de &lt;em&gt;l'AFPy Lyon&lt;/em&gt; ci-dessous.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.freezed.me/articles/2019/01/histoires-dun-etudiant-perfectionniste-sous-pression/pdf/20190123-presentation-fred-zind-afpy.pdf"&gt;&lt;img alt="logo AFPy Lyon" src="https://blog.freezed.me/img/afpylyon-200.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="AFPy Lyon" src="https://blog.freezed.me/articles/2019/01/histoires-dun-etudiant-perfectionniste-sous-pression/img/20190123-191546-meetup-afpy-lyon-cordee-low.jpg"&gt;&lt;/p&gt;</content><category term="Conférences"/><category term="afpy"/><category term="talk"/><category term="django"/><category term="lyon"/><category term="python"/><category term="openfoodfacts"/><category term="api-rest"/></entry><entry><title>Installer Pelican</title><link href="https://blog.freezed.me/articles/2019/01/installer-pelican/" rel="alternate"/><published>2019-01-09T15:29:00+01:00</published><updated>2019-01-09T15:29:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2019-01-09:/articles/2019/01/installer-pelican/</id><summary type="html">&lt;p&gt;Installation rapide de &lt;em&gt;Pelican&lt;/em&gt;&lt;/p&gt;</summary><content type="html">&lt;h1&gt;Démarrage rapide&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;C'est une traduction basique du &lt;a href="https://docs.getpelican.com/en/4.0.1/quickstart.html"&gt;démarrage rapide&lt;/a&gt; officiel&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Créez le répertoire&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;mkdir&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;~/&lt;/span&gt;&lt;span class="n"&gt;projects&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;yoursite&lt;/span&gt;
&lt;span class="n"&gt;cd&lt;/span&gt; &lt;span class="o"&gt;~/&lt;/span&gt;&lt;span class="n"&gt;projects&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;yoursite&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Créez un environnement virtuel&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;virtualenv&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;venv&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nb"&gt;bin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;python3&lt;/span&gt;&lt;span class="mf"&gt;.6&lt;/span&gt;
&lt;span class="n"&gt;source&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;venv&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nb"&gt;bin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;activate&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Installez &lt;em&gt;Pelican&lt;/em&gt; et markdown (si besoin, optionnel)&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;pip&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="n"&gt;pelican&lt;/span&gt; &lt;span class="n"&gt;markdown&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Créez le squelette de l'arborescence&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;pelican&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;quickstart&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Pour les questions avec une réponse entre crochet, appuyez sur &lt;code&gt;Entrée&lt;/code&gt; pour acceptez cette valeur. Quand il vous sera demandé le préfixe de votre URL, entrez votre nom de domaine comme indiqué (&lt;code&gt;http://example.com&lt;/code&gt;).&lt;/p&gt;
&lt;h2&gt;Créez un article&lt;/h2&gt;
&lt;p&gt;Vous ne pourrez lancer &lt;em&gt;Pelican&lt;/em&gt; tant qu'il n'y a pas d'article. Utilisez votre éditeur préféré pour créez votre premier article avec le contenu suivant :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;Title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;My&lt;/span&gt; &lt;span class="n"&gt;First&lt;/span&gt; &lt;span class="n"&gt;Review&lt;/span&gt;
&lt;span class="n"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2010&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;03&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;
&lt;span class="n"&gt;Category&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Review&lt;/span&gt;

&lt;span class="n"&gt;Following&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;review&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;my&lt;/span&gt; &lt;span class="n"&gt;favorite&lt;/span&gt; &lt;span class="n"&gt;mechanical&lt;/span&gt; &lt;span class="n"&gt;keyboard&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Considerant que cet article est au format Markdown, enregistrez le en temps que &lt;code&gt;~/projects/yoursite/content/keyboard-review.md.&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Générez le site&lt;/h2&gt;
&lt;p&gt;Toujours depuis le répertoire, lancez la commande &lt;em&gt;Pelican&lt;/em&gt; pour générez votre site&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;pelican&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Votre site à été généré dans le répertoire &lt;code&gt;output&lt;/code&gt;. Peut-être aurez vous un message d'alerte relatif aux &lt;em&gt;flux&lt;/em&gt;, c'est normal en développement et vous pouvez l'ignorer&lt;/p&gt;
&lt;h1&gt;Prévisualisation du site&lt;/h1&gt;
&lt;p&gt;Ouvrez une session de terminal depuis le répertoire d'installation  et lancez la commande suivante :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;pelican&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;listen&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Rendez vous à l'adresse &lt;a href="http://localhost:8000/"&gt;http://localhost:8000/&lt;/a&gt; à l'aide de votre navigateur, c'est parfait !&lt;/p&gt;</content><category term="Bloc-notes"/><category term="web"/><category term="python"/><category term="pelican"/></entry><entry><title>Parcours dev python : projet final</title><link href="https://blog.freezed.me/articles/2018/12/parcours-dev-python-projet-final/" rel="alternate"/><published>2018-12-20T11:11:00+01:00</published><updated>2018-12-20T11:11:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2018-12-20:/articles/2018/12/parcours-dev-python-projet-final/</id><summary type="html">&lt;p&gt;Un outils de suivi de clientèle pour traivailleurs indépendants&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Note d'intention&lt;/h2&gt;
&lt;p&gt;Valérie et Serge sont travailleurs indépendants et pour leurs activités respectives ils sont à la recherche d'un outil qui leur permettrait de gérer aisément leur &lt;em&gt;réseau de contacts&lt;/em&gt; : prospection, suivi, opportunités etc.&lt;/p&gt;
&lt;h2&gt;Spécifications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;service en ligne (&lt;a href="https://fr.wikipedia.org/wiki/Logiciel_en_tant_que_service" title="Lien vers la page &amp;laquo;Logiciel en tant que service&amp;raquo; sur wikipedia"&gt;SaaS&lt;/a&gt;), en gardant à l'esprit qu'un usage &lt;em&gt;hors réseau&lt;/em&gt; sera certainement implémenté à l'avenir&lt;/li&gt;
&lt;li&gt;les données seront réparties dans différents &lt;em&gt;objets&lt;/em&gt; :&lt;ul&gt;
&lt;li&gt;des &lt;code&gt;contacts&lt;/code&gt; auxquels seront associés des &lt;code&gt;affaires&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;aux &lt;code&gt;affaires&lt;/code&gt; et &lt;code&gt;contacts&lt;/code&gt; pourront être associés à des &lt;code&gt;notes&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;des &lt;code&gt;étiquettes&lt;/code&gt; permettront une organisation souple et transversale de ces informations en s'associant à tout ou partie des objets définis ci dessus. Une étiquette pourrait représenter : un &lt;em&gt;groupe de contact&lt;/em&gt;, une &lt;em&gt;entreprise&lt;/em&gt;, un &lt;em&gt;secteur professionnel&lt;/em&gt;, un &lt;em&gt;statut&lt;/em&gt;, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;les &lt;code&gt;contacts&lt;/code&gt; seront cloisonnés à l'&lt;code&gt;utilisateur&lt;/code&gt; qui les aura créés, en gardant à l'esprit qu'un partage des &lt;code&gt;contacts&lt;/code&gt; entre les &lt;code&gt;utilisateurs&lt;/code&gt; du service sera implémenté à l'avenir&lt;/li&gt;
&lt;li&gt;import de &lt;code&gt;contacts&lt;/code&gt; existant :&lt;ul&gt;
&lt;li&gt;individuel (formulaire)&lt;/li&gt;
&lt;li&gt;en lot, préférence pour les formats &lt;a href="https://fr.wikipedia.org/wiki/VCard" title="Lien vers la page &amp;laquo;VCard&amp;raquo; sur Wikipedia"&gt;Vcard&lt;/a&gt; et/ou &lt;a href="https://fr.wikipedia.org/wiki/Comma-separated_values" title="Lien vers la page &amp;laquo;Comma-separated_values&amp;raquo; sur Wikipedia"&gt;CSV&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;connection à un serveur &lt;a href="https://fr.wikipedia.org/wiki/CardDAV" title="Lien vers la page &amp;laquo;CardDAV&amp;raquo; sur Wikipedia"&gt;CardDAV&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Voir le code hébergé sur &lt;a href="https://github.com/freezed/ocp13"&gt;Github&lt;/a&gt;&lt;/p&gt;</content><category term="Réalisations"/><category term="django"/><category term="travis"/><category term="ci"/><category term="cd"/><category term="heroku"/><category term="tdd"/><category term="sentry"/><category term="sql"/><category term="extrem-programming"/><category term="devops"/><category term="git"/><category term="python"/></entry><entry><title>GHI - GitHub Issues</title><link href="https://blog.freezed.me/articles/2018/11/ghi-git-hub-issues/" rel="alternate"/><published>2018-11-29T21:21:00+01:00</published><updated>2018-11-29T21:21:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2018-11-29:/articles/2018/11/ghi-git-hub-issues/</id><summary type="html">&lt;p&gt;Vieilles notes probablement obsolètes&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;strong&gt;&lt;code&gt;/!\&lt;/code&gt; Vieilles notes probablement obsolètes &lt;code&gt;/!\&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ghi&lt;/code&gt; : &lt;em&gt;GitHub Issues on the command line. Use your &lt;code&gt;$EDITOR&lt;/code&gt;, not your browser.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;CLI vs GUI, pour moi le choix est souvent vite fait. Du coup ça fait quelques temps que je gère dès que possible mes&lt;code&gt;issues&lt;/code&gt;github en CLI à l'aide de &lt;a href="https://github.com/stephencelis/ghi"&gt;ghi&lt;/a&gt;, un client dédié aux &lt;code&gt;issues&lt;/code&gt; GitHub éccrit en Ruby.&lt;/p&gt;
&lt;p&gt;La vrai feature qui me manque est l'affectation d'un &lt;code&gt;project&lt;/code&gt;, dommage… Mais sinon on fait des trucs directement en console qui font &lt;em&gt;vraiment&lt;/em&gt; gagner du temps :&lt;/p&gt;
&lt;p&gt;Liste les &lt;code&gt;issues&lt;/code&gt; &amp;amp; &lt;code&gt;pulls&lt;/code&gt; open :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;~/git/pythonclassmates.org&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;ghi&lt;span class="w"&gt; &lt;/span&gt;list
&lt;span class="c1"&gt;# PythonClassmates/pythonclassmates.org open issues&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;19&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;License&lt;span class="w"&gt; &lt;/span&gt;proposal&lt;span class="w"&gt; &lt;/span&gt;↑
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;License&lt;span class="w"&gt; &lt;/span&gt;proposal&lt;span class="w"&gt; &lt;/span&gt;↑
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;16&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;Travis&lt;span class="w"&gt; &lt;/span&gt;CI&lt;span class="w"&gt; &lt;/span&gt;rollback&lt;span class="w"&gt; &lt;/span&gt;has&lt;span class="w"&gt; &lt;/span&gt;not&lt;span class="w"&gt; &lt;/span&gt;been&lt;span class="w"&gt; &lt;/span&gt;runned
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;15&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;Installation&lt;span class="w"&gt; &lt;/span&gt;HowTo
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;14&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;About&lt;span class="w"&gt; &lt;/span&gt;page&lt;span class="w"&gt; &lt;/span&gt;is&lt;span class="w"&gt; &lt;/span&gt;missing
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;13&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;Error&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;404&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;on&lt;span class="w"&gt; &lt;/span&gt;category/tutoriels.html
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;12&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;Error&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;404&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;on&lt;span class="w"&gt; &lt;/span&gt;category/news.html
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Seulement les&lt;code&gt;issues&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;~/git/pythonclassmates.org&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;ghi&lt;span class="w"&gt; &lt;/span&gt;list&lt;span class="w"&gt; &lt;/span&gt;--no-pulls
&lt;span class="c1"&gt;# PythonClassmates/pythonclassmates.org open issues&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;16&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;Travis&lt;span class="w"&gt; &lt;/span&gt;CI&lt;span class="w"&gt; &lt;/span&gt;rollback&lt;span class="w"&gt; &lt;/span&gt;has&lt;span class="w"&gt; &lt;/span&gt;not&lt;span class="w"&gt; &lt;/span&gt;been&lt;span class="w"&gt; &lt;/span&gt;runned
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;15&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;Installation&lt;span class="w"&gt; &lt;/span&gt;HowTo
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;14&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;About&lt;span class="w"&gt; &lt;/span&gt;page&lt;span class="w"&gt; &lt;/span&gt;is&lt;span class="w"&gt; &lt;/span&gt;missing
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;13&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;Error&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;404&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;on&lt;span class="w"&gt; &lt;/span&gt;category/tutoriels.html
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;12&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;Error&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;404&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;on&lt;span class="w"&gt; &lt;/span&gt;category/news.html
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Affiche l'&lt;code&gt;issue 14&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;~/git/pythonclassmates.org&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;ghi&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;14&lt;/span&gt;
&lt;span class="c1"&gt;#14: About page is missing&lt;/span&gt;
@freezed&lt;span class="w"&gt; &lt;/span&gt;opened&lt;span class="w"&gt; &lt;/span&gt;this&lt;span class="w"&gt; &lt;/span&gt;issue&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;23&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;hours&lt;span class="w"&gt; &lt;/span&gt;ago.&lt;span class="w"&gt;   &lt;/span&gt;open

&lt;span class="w"&gt;    &lt;/span&gt;With&lt;span class="w"&gt; &lt;/span&gt;links&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;:
&lt;span class="w"&gt;    &lt;/span&gt;-&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;pelican
&lt;span class="w"&gt;    &lt;/span&gt;-&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;template
&lt;span class="w"&gt;    &lt;/span&gt;-&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;github
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;--web&lt;/code&gt; ouvre la page dans votre navigateur : &lt;code&gt;ghi list --web&lt;/code&gt;, &lt;code&gt;ghi 14 --web&lt;/code&gt;, etc.&lt;/p&gt;
&lt;p&gt;Bien sûr &lt;code&gt;ghi edit …&lt;/code&gt; permet d'en éditer une (!)&lt;/p&gt;
&lt;p&gt;Et &lt;code&gt;ghi open …&lt;/code&gt; d'en créer. Tellement pratique quand on code et que l'on tombe sur un bug, une idée, ou autre… Fini le &lt;em&gt;«Je noterai ça tout à l'heure»&lt;/em&gt; qu'on aura oublié dans 5 minutes. Là en 15s c'est plié. Et avec l'habitude on y met presque tout :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ghi&lt;span class="w"&gt; &lt;/span&gt;open&lt;span class="w"&gt; &lt;/span&gt;--claim&lt;span class="w"&gt; &lt;/span&gt;--label&lt;span class="w"&gt; &lt;/span&gt;bug&lt;span class="w"&gt; &lt;/span&gt;--label&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--message&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Test de la class Adallas à améliorer&lt;/span&gt;

&lt;span class="s2"&gt;Et là avec le double quote on laisse une ligne et on peut ajouter tous les&lt;/span&gt;
&lt;span class="s2"&gt;commentaires utiles.&lt;/span&gt;

&lt;span class="s2"&gt;Bon si comme moi vous êtes des maniaque le l&amp;#39;historique de votre shell, arretez&lt;/span&gt;
&lt;span class="s2"&gt;vous après `--message` et vous pourrez éditer votre issue dans votre éditeur,&lt;/span&gt;
&lt;span class="s2"&gt;par ce que là votre historique va dérouiller…&lt;/span&gt;

&lt;span class="s2"&gt;Les check-box du GHFMD sont aussi possible :&lt;/span&gt;
&lt;span class="s2"&gt;- [ ] foo&lt;/span&gt;
&lt;span class="s2"&gt;- [ ] bar&lt;/span&gt;
&lt;span class="s2"&gt;- [ ] foobar&lt;/span&gt;

&lt;span class="s2"&gt;Et quand on a fini de raconter sa vie on ferme la double quote. Hoplà!&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Aller pour finir un petit one-liner en shell pour créer les&lt;code&gt;issues&lt;/code&gt;à partir d'un fichier texte (&lt;code&gt;issues.txt&lt;/code&gt;) que l'on aura rempli avec un titre d'issue par ligne. Idéal en début de projet quand on à toute la roadmap à renseigner…&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class="w"&gt; &lt;/span&gt;cat&lt;span class="w"&gt; &lt;/span&gt;issues.txt
&lt;span class="nb"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;issue&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;#11&lt;/span&gt;
&lt;span class="nb"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;issue&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;#22&lt;/span&gt;
Foobar
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;puis&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;IFS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;issue&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;ghi&lt;span class="w"&gt; &lt;/span&gt;open&lt;span class="w"&gt; &lt;/span&gt;--claim&lt;span class="w"&gt; &lt;/span&gt;--label&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--message&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;issue&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="k"&gt;done&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;&lt;span class="w"&gt; &lt;/span&gt;issues.txt
&lt;span class="c1"&gt;#32: test issue #11&lt;/span&gt;
@freezed&lt;span class="w"&gt; &lt;/span&gt;opened&lt;span class="w"&gt; &lt;/span&gt;this&lt;span class="w"&gt; &lt;/span&gt;issue&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;seconds&lt;span class="w"&gt; &lt;/span&gt;ago.&lt;span class="w"&gt;   &lt;/span&gt;open
@freezed&lt;span class="w"&gt; &lt;/span&gt;is&lt;span class="w"&gt; &lt;/span&gt;assigned.&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nb"&gt;test&lt;/span&gt;

Opened&lt;span class="w"&gt; &lt;/span&gt;on&lt;span class="w"&gt; &lt;/span&gt;freezed/python.
&lt;span class="c1"&gt;#33: test issue #22&lt;/span&gt;
@freezed&lt;span class="w"&gt; &lt;/span&gt;opened&lt;span class="w"&gt; &lt;/span&gt;this&lt;span class="w"&gt; &lt;/span&gt;issue&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;seconds&lt;span class="w"&gt; &lt;/span&gt;ago.&lt;span class="w"&gt;   &lt;/span&gt;open
@freezed&lt;span class="w"&gt; &lt;/span&gt;is&lt;span class="w"&gt; &lt;/span&gt;assigned.&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nb"&gt;test&lt;/span&gt;

Opened&lt;span class="w"&gt; &lt;/span&gt;on&lt;span class="w"&gt; &lt;/span&gt;freezed/python.
&lt;span class="c1"&gt;#34: Foobar&lt;/span&gt;
@freezed&lt;span class="w"&gt; &lt;/span&gt;opened&lt;span class="w"&gt; &lt;/span&gt;this&lt;span class="w"&gt; &lt;/span&gt;issue&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;seconds&lt;span class="w"&gt; &lt;/span&gt;ago.&lt;span class="w"&gt;   &lt;/span&gt;open
@freezed&lt;span class="w"&gt; &lt;/span&gt;is&lt;span class="w"&gt; &lt;/span&gt;assigned.&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nb"&gt;test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Bon code!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;[ Article publié sur &lt;a href="https://www.pythonclassmates.org/ghi-git-hub-issues.html"&gt;www.pythonclassmates.org&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;</content><category term="Bloc-notes"/><category term="git"/><category term="dev"/><category term="cli"/><category term="méthode"/><category term="tuto"/><category term="vieillerie"/></entry><entry><title>CI/CD d'un projet Django sur VPS</title><link href="https://blog.freezed.me/articles/2018/11/cicd-dun-projet-django-sur-vps/" rel="alternate"/><published>2018-11-24T11:11:00+01:00</published><updated>2018-11-24T11:11:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2018-11-24:/articles/2018/11/cicd-dun-projet-django-sur-vps/</id><summary type="html">&lt;p&gt;Intégration et déploiement continue d'un projet Django sur un VPS Digital Ocean&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Historique&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/freezed/ocp8/releases/tag/v0.1"&gt;Livraison&lt;/a&gt; du &lt;a href="https://github.com/freezed/ocp8/projects/1"&gt;projet initial&lt;/a&gt;, conformément au &lt;a href="https://github.com/freezed/ocp8/blob/v0.1/README.md#cahier-des-charges"&gt;cahier des charges&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/freezed/ocp8/releases/tag/v0.3"&gt;Livraison&lt;/a&gt; d'un &lt;a href="https://github.com/freezed/ocp8/projects/2"&gt;1er lot d'évolutions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Missions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Mettre en place une &lt;a href="https://fr.wikipedia.org/wiki/Int%C3%A9gration_continue" title="Lien vers la page &amp;laquo;Intégration continue&amp;raquo; sur wikipedia"&gt;Intégration Continue&lt;/a&gt;(CI) avec &lt;a href="https://travis-ci.com/freezed/ocp8/builds" title="Liens vers l'historique des builds sur le site Travis CI"&gt;Travis CI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Déploiement de l'&lt;a href="https://fr.wikipedia.org/wiki/Environnement_(informatique)" title="Lien vers la page &amp;laquo;Environnement (informatique)&amp;raquo; sur wikipedia"&gt;environnement de production&lt;/a&gt; sur un &lt;a href="https://fr.wikipedia.org/wiki/Serveur_d%C3%A9di%C3%A9_virtuel" title="Lien vers la page     &amp;laquo;Serveur dédié virtuel&amp;raquo; sur wikipedia"&gt;VPS&lt;/a&gt; &lt;em&gt;Digital Ocean&lt;/em&gt; via &lt;a href="https://fr.wikipedia.org/wiki/Command-line_interface" title="Lien vers la page &amp;laquo;Command Line Interface&amp;raquo; sur wikipedia"&gt;CLI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Déploiement automatisé dans un &lt;a href="https://fr.wikipedia.org/wiki/Environnement_(informatique)" title="Lien vers la page &amp;laquo;Environnement (informatique)&amp;raquo; sur wikipedia"&gt;environnement de qualification&lt;/a&gt; (&lt;em&gt;staging environment&lt;/em&gt;) via &lt;a href="https://ocp8-1664.herokuapp.com/"&gt;Heroku&lt;/a&gt; après &lt;a href="https://travis-ci.com/freezed/ocp8/builds" title="Liens vers l'historique des builds sur le site Travis CI"&gt;réussite des tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Suivre l'activité :&lt;ul&gt;
&lt;li&gt;du serveur avec le monitoring &lt;em&gt;Digital Ocean&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;de l'application avec &lt;a href="https://sentry.io/" title="Lien vers le site Sentry.io"&gt;Sentry&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Utiliser &lt;a href="https://fr.wikipedia.org/wiki/Cron" title="Lien vers la page &amp;laquo;cron&amp;raquo; sur wikipedia"&gt;&lt;code&gt;cron&lt;/code&gt;&lt;/a&gt; pour automatiser une &lt;a href="https://github.com/freezed/ocp8/issues64"&gt;tâche de maintenance&lt;/a&gt; sur le serveur&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Voir le code hébergé sur &lt;a href="https://github.com/freezed/ocp8/tree/v0.4"&gt;Github&lt;/a&gt;&lt;/p&gt;</content><category term="Réalisations"/><category term="django"/><category term="travis"/><category term="ci"/><category term="cd"/><category term="heroku"/><category term="tdd"/><category term="openfoodfacts"/><category term="sql"/><category term="devops"/><category term="debian"/><category term="sentry"/><category term="admin"/><category term="cli"/><category term="git"/><category term="python"/></entry><entry><title>Le gras c'est la vie !</title><link href="https://blog.freezed.me/articles/2018/11/le-gras-cest-la-vie/" rel="alternate"/><published>2018-11-01T11:11:00+01:00</published><updated>2018-11-01T11:11:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2018-11-01:/articles/2018/11/le-gras-cest-la-vie/</id><summary type="html">&lt;p&gt;Proposer un client web pour OpenFoodFacts qui propose des aliments de substitution&lt;/p&gt;</summary><content type="html">&lt;p&gt;La startup &lt;strong&gt;Pur Beurre&lt;/strong&gt;, avec laquelle vous avez &lt;a href="https://blog.freezed.me/articles/2018/08/client-python-cli-api-openfoodfacts/"&gt;déjà travaillé&lt;/a&gt;, souhaite développer une plateforme web qui permettra de trouver un substitut à un aliment considéré comme &lt;em&gt;trop gras, trop sucré, trop salé&lt;/em&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La recherche &lt;strong&gt;ne doit pas&lt;/strong&gt; s’effectuer en AJAX&lt;/li&gt;
&lt;li&gt;Interface responsive&lt;/li&gt;
&lt;li&gt;Compte utilisateur&lt;ul&gt;
&lt;li&gt;création de compte (mail et mot de passe)&lt;/li&gt;
&lt;li&gt;sans possibilité de changer son mot de passe&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;BDD &lt;code&gt;PostgreSql&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;TDD (mocks pour les API)&lt;/li&gt;
&lt;li&gt;Suivre la PEP 8&lt;/li&gt;
&lt;li&gt;Méthodologie agile&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Voir le code hébergé sur &lt;a href="https://github.com/freezed/ocp8/tree/v0.1"&gt;Github&lt;/a&gt;&lt;/p&gt;</content><category term="Réalisations"/><category term="django"/><category term="api-rest"/><category term="heroku"/><category term="tdd"/><category term="extrem-programming"/><category term="openfoodfacts"/><category term="sql"/><category term="agile"/><category term="git"/><category term="python"/></entry><entry><title>GrandPy Bot, le papy-robot</title><link href="https://blog.freezed.me/articles/2018/09/grandpy-bot-le-papy-robot/" rel="alternate"/><published>2018-09-17T11:11:00+02:00</published><updated>2018-09-17T11:11:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2018-09-17:/articles/2018/09/grandpy-bot-le-papy-robot/</id><summary type="html">&lt;p&gt;Un chat bot web dans un contexte géographique&lt;/p&gt;</summary><content type="html">&lt;p&gt;Dans une interface web, il est proposé de dialoguer dans un contexte géographique avec avec un &lt;em&gt;Grand Père virtuel&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Vous le questionnez sur un lieu et il répond avec une carte et un texte en provenance de Wikipedia.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Interactions en AJAX : réponse s'affiche sans recharger la page&lt;/li&gt;
&lt;li&gt;API &lt;a href="https://cloud.google.com/maps-platform/?hl=fr" title="API Google Maps"&gt;Google Maps&lt;/a&gt; et &lt;a href="https://www.mediawiki.org/wiki/API:Main_page/fr"&gt;Media Wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Pas de sauvegarde (page rechargée == historique perdu)&lt;/li&gt;
&lt;li&gt;Interface responsive&lt;/li&gt;
&lt;li&gt;Test Driven Development (mocks pour les API)&lt;/li&gt;
&lt;li&gt;Déploiement avec &lt;a href="https://devcenter.heroku.com/articles/getting-started-with-python"&gt;Heroku&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Voir le code hébergé sur &lt;a href="https://github.com/freezed/ocp7/tree/v0.2"&gt;Github&lt;/a&gt;&lt;/p&gt;</content><category term="Réalisations"/><category term="flask"/><category term="api-rest"/><category term="heroku"/><category term="tdd"/><category term="git"/><category term="python"/><category term="dev"/></entry><entry><title>CLI pour l'API Open Food Facts</title><link href="https://blog.freezed.me/articles/2018/08/client-python-cli-api-openfoodfacts/" rel="alternate"/><published>2018-08-09T11:11:00+02:00</published><updated>2018-08-09T11:11:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2018-08-09:/articles/2018/08/client-python-cli-api-openfoodfacts/</id><summary type="html">&lt;p&gt;Client en ligne de commande manipulant les données d'OpenFoodFacts&lt;/p&gt;</summary><content type="html">&lt;ul&gt;
&lt;li&gt;Recherche d'aliments alternatif dans la base &lt;a href="https://fr.openfoodfacts.org/"&gt;Open Food Facts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Affichage de fiches produits&lt;/li&gt;
&lt;li&gt;L'utilisateur :&lt;ul&gt;
&lt;li&gt;Interagit avec le système dans le terminal&lt;/li&gt;
&lt;li&gt;Enregistre les produits pour les retrouver plus tard&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;L'utilisateur choisi en tapant des un chiffres&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Voir le code hébergé sur &lt;a href="https://github.com/freezed/ocp5/"&gt;Github&lt;/a&gt;&lt;/p&gt;</content><category term="Réalisations"/><category term="api-rest"/><category term="cli"/><category term="sql"/><category term="openfoodfacts"/><category term="python"/><category term="git"/></entry><entry><title>Un jeu de labyrinthe avec Pygame</title><link href="https://blog.freezed.me/articles/2018/04/jeu-labyrinthe-pygame/" rel="alternate"/><published>2018-04-24T11:11:00+02:00</published><updated>2018-04-24T11:11:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2018-04-24:/articles/2018/04/jeu-labyrinthe-pygame/</id><summary type="html">&lt;p&gt;Aidez MacGyver à s'échapper du labyrinthe…&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Description&lt;/h2&gt;
&lt;p&gt;MacGyver a été enfermé dans un labyrinthe. La sortie est surveillée par un garde et pour le distraire, il faut combiner les éléments suivants dispersés dans le labyrinthe :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;une aiguille&lt;/li&gt;
&lt;li&gt;un tube&lt;/li&gt;
&lt;li&gt;éther&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Avec ces éléments MacGyver fabriquera une seringue et pourra endormir le garde.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/freezed/ocp3/"&gt;&lt;img alt="Copie d'écran" src="https://blog.freezed.me/img/ocp3.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Librairie utilisée&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pygame.org"&gt;Pygame 1.9&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Voir le code hébergé sur &lt;a href="https://github.com/freezed/ocp3/"&gt;Github&lt;/a&gt;&lt;/p&gt;</content><category term="Réalisations"/><category term="pygame"/><category term="python"/><category term="git"/></entry><entry><title>Création &amp; conception du «Waste Watcher»</title><link href="https://blog.freezed.me/articles/2017/11/parcours-innovation-collectif-arche-innovateur/" rel="alternate"/><published>2017-11-20T11:11:00+01:00</published><updated>2017-11-20T11:11:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2017-11-20:/articles/2017/11/parcours-innovation-collectif-arche-innovateur/</id><summary type="html">&lt;p&gt;De la feuille blanche au prototype, la création d'un outils de gestion des déchets.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;L'Arche aux Innovateurs&lt;/em&gt; est un parcours immersif en innovation collective que j'ai réalisé en fin d'année 2017.&lt;/p&gt;
&lt;p&gt;Le principe est le suivant :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;une durée  de 10 semaines&lt;/li&gt;
&lt;li&gt;un atelier pour chacun des 9 thèmes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="Plan des étapes" src="https://image.jimcdn.com/app/cms/image/transf/dimension=500x1024:format=png/path/s54d83bcc40df1c7b/image/icf07739a9deead91/version/1504130055/image.png" title="Plan des étapes"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;une équipe réduite aux profils variés (et qui ne se connaissent pas)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour &lt;strong&gt;faire ensemble&lt;/strong&gt;, sur le thème imposé &lt;strong&gt;&lt;code&gt;les déchets&lt;/code&gt;&lt;/strong&gt; et à partir d'une &lt;strong&gt;&lt;code&gt;feuille blanche&lt;/code&gt;&lt;/strong&gt; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 plan et des supports de communication&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="Cas d'utilisations" src="https://image.jimcdn.com/app/cms/image/transf/dimension=500x10000:format=png/path/s0b3477ee27b20e29/image/if3252abcce73f930/version/1523006830/image.png" title="Cas d'utilisations"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 prototype&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="Vue du prototype" src="https://image.jimcdn.com/app/cms/image/transf/dimension=500x10000:format=png/path/s0b3477ee27b20e29/image/i382f53ce3e849fce/version/1523006769/image.png" title="Le prototype"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 planification financière&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nous avons conçu et prototypé : un &lt;em&gt;pèse déchets connectée&lt;/em&gt; : Le &lt;strong&gt;Waste Watchers&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Plus d'information sur le &lt;a href="https://archeauxinnovateurs-macfiver.jimdo.com/blog/#cc-m-header-7208044154"&gt;blog des MacFivers&lt;/a&gt;, avec l'historique du projet :&lt;/p&gt;
&lt;p&gt;&lt;a href="https://archeauxinnovateurs-macfiver.jimdo.com/blog/#cc-m-header-7208044154"&gt;&lt;img alt="Logo Waste Watchers" src="https://image.jimcdn.com/app/cms/image/transf/dimension=320x10000:format=jpg/path/s0b3477ee27b20e29/image/i82f083d64137c7c1/version/1509209533/image.jpg" title="Logo Waste Watchers"&gt;&lt;/a&gt;&lt;/p&gt;</content><category term="Réalisations"/><category term="innovation"/><category term="collectif"/><category term="iot"/><category term="arduino"/><category term="impression-3d"/></entry><entry><title>Installer Sketchup2017 via wine sur LMDE2</title><link href="https://blog.freezed.me/articles/2017/10/install-sketchup-wine-lmde2/" rel="alternate"/><published>2017-10-24T11:11:00+02:00</published><updated>2017-10-24T11:11:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2017-10-24:/articles/2017/10/install-sketchup-wine-lmde2/</id><summary type="html">&lt;p&gt;Vieilles notes probablement obsolètes&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;strong&gt;&lt;code&gt;/!\&lt;/code&gt; Vieilles notes probablement obsolètes &lt;code&gt;/!\&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Version de la distro :&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;~ % cat /etc/linuxmint/info
RELEASE=2
CODENAME=betsy
EDITION=&amp;quot;MATE 64-bit&amp;quot;
DESCRIPTION=&amp;quot;LMDE 2 Betsy&amp;quot;
DESKTOP=MATE
TOOLKIT=GTK
GRUB_TITLE=LMDE 2 MATE 64-bit
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Installer wine &lt;a href="https://wiki.winehq.org/Debian" title="WineHQ - Installing WineHQ packages"&gt;1&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;sudo apt-get install --install-recommends winehq-devel&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Installer winetricks &lt;a href="https://wiki.winehq.org/Winetricks#Getting_winetricks" title="WineHQ - Getting winetricks"&gt;2&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
chmod +x winetricks
sudo mv winetricks /usr/local/bin
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;État des lieux&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;wine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nv"&gt;version&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; winetricks --version&lt;/span&gt;
&lt;span class="nv"&gt;wine&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;.&lt;span class="mi"&gt;19&lt;/span&gt;
&lt;span class="mi"&gt;20171018&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;next&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;sha256sum&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;e586dbf0ebdd7969b558e1e03372bfd7e735a98a33e95bdad32d831e6b2cc2db&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Téléchargement du merdier propriétaire&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.microsoft.com/en-us/download/details.aspx?id=42642"&gt;.NET Framework 4.5.2&lt;/a&gt; (offline version)&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wget http://dl.trimble.com/sketchup/SketchUpMake-en-x64.exe&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Au boulot&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WINEPREFIX&lt;/span&gt;&lt;span class="o"&gt;=~/&lt;/span&gt;&lt;span class="n"&gt;sketchup&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WINEARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;win64&lt;/span&gt;
&lt;span class="n"&gt;winetricks&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vcrun2015&lt;/span&gt;
&lt;span class="n"&gt;winetricks&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;corefonts&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Special&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DLL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bonus&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;winetricks&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mfc40&lt;/span&gt;
&lt;span class="n"&gt;winetricks&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;settings&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;win7&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;.NET&lt;/code&gt; installation&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;wine start /unix NDP452-KB2901907-x86-x64-AllOS-ENU.exe&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Installer Sketchup&lt;/h3&gt;
&lt;p&gt;Ouvrir &lt;em&gt;SketchUpMake-fr-x64.exe&lt;/em&gt; dans le gestionnaire d'archive et extraire &lt;em&gt;SketchUp2017-x64.msi&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wine start /unix SketchUp2017-x64.msi&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;L'installateur vous intérogerra pour connaitre l'emplacement où sauvegarder Sketchup, par défaut sera proposer le répertoire &lt;code&gt;32 bit&lt;/code&gt;. Changer pour &lt;code&gt;Program Files/&lt;/code&gt; à la place de &lt;code&gt;Program Files (x86)/&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Lancer Sketchup&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;wine ~/sketchup/drive_c/Program Files/SketchUp/SketchUp 2017/SketchUp.exe&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Liens Menu / Bureau&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;env WINEPREFIX="/home/user/sketchup" wine /home/user/sketchup/drive_c/Program\ Files/SketchUp/SketchUp\ 2017/SketchUp.exe&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Icône&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;/home/user/.local/share/icons/hicolor/48x48/apps/6EBD_SketchUpIcon.0.png&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h4&gt;Ressources:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://appdb.winehq.org/objectManager.php?sClass=version&amp;amp;iId=34500"&gt;WineHQ - Sketchup 2017&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.winehq.org/Debian"&gt;WineHQ - Installing WineHQ packages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.winehq.org/Winetricks#Getting_winetricks"&gt;WineHQ - Getting winetricks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://forum.ubuntu-fr.org/viewtopic.php?id=1967291"&gt;Wine/winetricks/POL, pb avec installation librairie mfc40&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="LMDE2"/><category term="vieillerie"/><category term="admin"/><category term="wine"/></entry><entry><title>Sketchup2017 install with wine on LMDE2</title><link href="https://blog.freezed.me/articles/2017/10/install-sketchup-wine-lmde2/en/" rel="alternate"/><published>2017-10-24T11:11:00+02:00</published><updated>2017-10-24T11:11:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2017-10-24:/articles/2017/10/install-sketchup-wine-lmde2/en/</id><summary type="html">&lt;p&gt;These are legacy notes probably obsolete&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;strong&gt;&lt;code&gt;/!\&lt;/code&gt; These are legacy notes probably obsolete &lt;code&gt;/!\&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h1&gt;Install Sketchup2017 via wine sur LMDE2&lt;/h1&gt;
&lt;p&gt;Distro version&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;~ % cat /etc/linuxmint/info
RELEASE=2
CODENAME=betsy
EDITION=&amp;quot;MATE 64-bit&amp;quot;
DESCRIPTION=&amp;quot;LMDE 2 Betsy&amp;quot;
DESKTOP=MATE
TOOLKIT=GTK
GRUB_TITLE=LMDE 2 MATE 64-bit
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Install wine &lt;a href="https://wiki.winehq.org/Debian" title="WineHQ - Installing WineHQ packages"&gt;1&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;sudo apt-get install --install-recommends winehq-devel&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Install winetricks &lt;a href="https://wiki.winehq.org/Winetricks#Getting_winetricks" title="WineHQ - Getting winetricks"&gt;2&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
chmod +x winetricks
sudo mv winetricks /usr/local/bin
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;State of play&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;wine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nv"&gt;version&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; winetricks --version&lt;/span&gt;
&lt;span class="nv"&gt;wine&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;.&lt;span class="mi"&gt;19&lt;/span&gt;
&lt;span class="mi"&gt;20171018&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;next&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;sha256sum&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;e586dbf0ebdd7969b558e1e03372bfd7e735a98a33e95bdad32d831e6b2cc2db&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Download proprietary shit&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.microsoft.com/en-us/download/details.aspx?id=42642"&gt;.NET Framework 4.5.2&lt;/a&gt; (offline version)&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wget http://dl.trimble.com/sketchup/SketchUpMake-en-x64.exe&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Get the job done&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WINEPREFIX&lt;/span&gt;&lt;span class="o"&gt;=~/&lt;/span&gt;&lt;span class="n"&gt;sketchup&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WINEARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;win64&lt;/span&gt;
&lt;span class="n"&gt;winetricks&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vcrun2015&lt;/span&gt;
&lt;span class="n"&gt;winetricks&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;corefonts&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Special&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DLL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bonus&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;winetricks&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mfc40&lt;/span&gt;
&lt;span class="n"&gt;winetricks&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;settings&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;win7&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;.NET install&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;wine start /unix NDP452-KB2901907-x86-x64-AllOS-ENU.exe&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Sketchup install&lt;/h3&gt;
&lt;p&gt;Open &lt;em&gt;SketchUpMake-fr-x64.exe&lt;/em&gt; in Archive Manager and extract &lt;em&gt;SketchUp2017-x64.msi&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wine start /unix SketchUp2017-x64.msi&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The installer will prompt you for the file path to save sketchup and for some reason it will default to the 32bit directory. Change it to &lt;code&gt;Program Files/&lt;/code&gt; instead of &lt;code&gt;Program Files (x86)/&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Launch Sketchup&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;wine ~/sketchup/drive_c/Program Files/SketchUp/SketchUp 2017/SketchUp.exe&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Desktop/Menu link&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;env WINEPREFIX="/home/user/sketchup" wine /home/user/sketchup/drive_c/Program\ Files/SketchUp/SketchUp\ 2017/SketchUp.exe&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Icon&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;/home/user/.local/share/icons/hicolor/48x48/apps/6EBD_SketchUpIcon.0.png&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h4&gt;Ressources:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://appdb.winehq.org/objectManager.php?sClass=version&amp;amp;iId=34500"&gt;WineHQ - Sketchup 2017&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.winehq.org/Debian"&gt;WineHQ - Installing WineHQ packages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.winehq.org/Winetricks#Getting_winetricks"&gt;WineHQ - Getting winetricks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://forum.ubuntu-fr.org/viewtopic.php?id=1967291"&gt;Wine/winetricks/POL, pb avec installation librairie mfc40&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="LMDE2"/><category term="vieillerie"/><category term="admin"/><category term="wine"/></entry><entry><title>Sauvegarde d'une instance OwnCloud</title><link href="https://blog.freezed.me/articles/2016/12/backup-instance-owncloud/" rel="alternate"/><published>2016-12-02T11:11:00+01:00</published><updated>2016-12-02T11:11:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2016-12-02:/articles/2016/12/backup-instance-owncloud/</id><summary type="html">&lt;p&gt;Vieilles notes probablement obsolètes&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;strong&gt;&lt;code&gt;/!\&lt;/code&gt; Vieilles notes probablement obsolètes &lt;code&gt;/!\&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Preventif&lt;/h2&gt;
&lt;h3&gt;Backup /data &amp;amp; /config&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;rsync -e &amp;quot;ssh -p 22&amp;quot; -arzv --stats --delete-after -f&amp;quot;- thumbnails/&amp;quot; host:/path/to/owncloud/data /path/to/backup/owncloud/

rsync -e &amp;quot;ssh -p 22&amp;quot; -arzv host:/path/to/owncloud/config /path/to/backup/owncloud/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;a href="https://doc.owncloud.org/server/latest/admin_manual/maintenance/backup.html#backup-database" title="Backup Database - doc.owncloud"&gt;Backup DB&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;mysqldump&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;--lock-tables -h [server] -u [username] -p[password] [db_name] &amp;gt; owncloud-dbbackup_`date +&amp;quot;%Y%m%d&amp;quot;`.bak&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Curatif&lt;/h2&gt;
&lt;h3&gt;Restore /data &amp;amp; config&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;rsync -e &amp;quot;ssh -p 42&amp;quot; -arzv --stats -f&amp;quot;- thumbnails/&amp;quot; host:/path/to/backuup/owncloud/data/ /home/owncloud/data
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Restore DB&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://doc.owncloud.org/server/9.1/admin_manual/maintenance/restore.html#restore-database" title="Restore Database - doc.owncloud"&gt;Créer le nouvel user et sa base&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;USER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;owncloud&amp;#39;&lt;/span&gt;&lt;span class="nv"&gt;@&amp;#39;localhost&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IDENTIFIED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;BY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;password&amp;#39;&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DATABASE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;IF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;EXISTS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;owncloud&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;GRANT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ALL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;PRIVILEGES&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;owncloud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="err"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;owncloud&amp;#39;&lt;/span&gt;&lt;span class="nv"&gt;@&amp;#39;localhost&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IDENTIFIED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;BY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;password&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Déménagement SSL&lt;/h3&gt;
&lt;h3&gt;MàJ DNS&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;10800&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="kr"&gt;new&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IP&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;10800&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="kr"&gt;new&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IP&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;imap&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;10800&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CNAME&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;access&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mail&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gandi&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;net&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;10800&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CNAME&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;access&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mail&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gandi&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;net&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;smtp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;10800&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CNAME&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;relay&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mail&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gandi&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;net&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;webmail&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;10800&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CNAME&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mail&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gandi&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;net&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;
&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;10800&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MX&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;50&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fb&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mail&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gandi&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;net&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;
&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;10800&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MX&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;spool&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mail&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gandi&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;net&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Surprises&lt;/h2&gt;
&lt;h3&gt;Changement de Debian/Wheezy -&amp;gt; Debian/Jessie&lt;/h3&gt;
&lt;h4&gt;Apache2: &lt;a href="http://httpd.apache.org/docs/2.4/fr/upgrading.html" title="Mise à jour de la version 2.2 vers la version 2.4 - doc.apache"&gt;v2.2 -&amp;gt; v2.4&lt;/a&gt;&lt;/h4&gt;
&lt;h5&gt;site-avaiable&lt;/h5&gt;
&lt;p&gt;Les noms des fichiers se terminent &lt;a href="http://superuser.com/questions/590208/phpmyadmin-symlinks-error-after-ubuntu-upgrade/590565#590565" title="phpmyadmin symlinks error after ubuntu upgrade - superuser.com"&gt;par .conf&lt;/a&gt;&lt;/p&gt;
&lt;h5&gt;PhpMyAdmin&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;Erreur&lt;/strong&gt;: &lt;code&gt;Fatal error:  require_once(): Failed opening required '/usr/share/php/php-gettext/gettext.inc' (include_path='.') in /usr/share/phpmyadmin/libraries/select_lang.lib.php on line 463&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Remède&lt;/strong&gt;: Ajout de  &lt;em&gt;/usr/share/php/php-gettext/&lt;/em&gt; dans la directive &lt;em&gt;php_admin_value open_basedir&lt;/em&gt; du fichier de conf apache. (&lt;em&gt;Ref. :  &lt;a href="http://superuser.com/questions/590208/phpmyadmin-symlinks-error-after-ubuntu-upgrade/590565#590565" title="phpmyadmin symlinks error after ubuntu upgrade - superuser.com"&gt;phpmyadmin symlinks error after ubuntu upgrade - superuser.com&lt;/a&gt;&lt;/em&gt;)&lt;/p&gt;
&lt;h5&gt;Owncloud logging&lt;/h5&gt;
&lt;p&gt;(Re)mettre en place les logs dans &lt;a href="http://www.jouvinio.net/wiki/index.php/OwnCloud_Fichier_log" title="OwnCloud Fichier log - jouvinio.net"&gt;&lt;em&gt;/var/log/owncloud/&lt;/em&gt; et le logrotate&lt;/a&gt;&lt;/p&gt;
&lt;h5&gt;Manipulation des données ownCloud en local via CLI&lt;/h5&gt;
&lt;p&gt;Mise en place de &lt;a href="https://packages.debian.org/jessie/davfs2" title="mount a WebDAV resource as a regular file system - package.debian"&gt;davfs2&lt;/a&gt; pour le montage via &lt;em&gt;fstab&lt;/em&gt;. Attention &lt;a href="https://doc.owncloud.org/server/9.1/user_manual/files/access_webdav.html#creating-webdav-mounts-on-the-linux-command-line" title="Creating WebDAV Mounts on the Linux Command Line - doc.owncloud"&gt;doc.owncloud&lt;/a&gt; est incomplète, voir aussi la &lt;a href="https://doc.ubuntu-fr.org/davfs2" title="davfs2 - doc.ubuntu"&gt;doc.ubuntu&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;erreur&lt;/strong&gt;: /sbin/mount.davfs: warning: the server does not support locks&lt;/p&gt;
&lt;p&gt;/etc/fstab&lt;/p&gt;
&lt;p&gt;~/.davfs2/secrets&lt;/p&gt;
&lt;p&gt;/etc/davfs2/cert&lt;/p&gt;
&lt;p&gt;/etc/davfs2/davfs2.conf&lt;/p&gt;
&lt;h2&gt;Ressources:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://doc.owncloud.org/server/latest//admin_manual/configuration_database/linux_database_configuration.html#configuring-a-mysql-or-mariadb-database"&gt;Configuring a MySQL or MariaDB Database - doc.owncloud&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://doc.ubuntu-fr.org/rsync"&gt;rsync - doc.ubuntu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://doc.ubuntu-fr.org/mysql"&gt;MySQL - doc.ubuntu&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="debian"/><category term="vieillerie"/><category term="admin"/><category term="owncloud"/><category term="backup"/><category term="sql"/><category term="tuto"/></entry><entry><title>Relier duplicity à une instance HubiC</title><link href="https://blog.freezed.me/articles/2015/09/relier-duplicity-instance-hubic/" rel="alternate"/><published>2015-09-03T11:11:00+02:00</published><updated>2015-09-03T11:11:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2015-09-03:/articles/2015/09/relier-duplicity-instance-hubic/</id><summary type="html">&lt;p&gt;Vieilles notes probablement obsolètes&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;strong&gt;&lt;code&gt;/!\&lt;/code&gt; Vieilles notes probablement obsolètes &lt;code&gt;/!\&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Contexte&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Debian 7 wheezy (oldstable)&lt;/li&gt;
&lt;li&gt;kernel 3.14&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Problème&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://hubic.com/"&gt;HubiC&lt;/a&gt; est basé sur une version modifié de &lt;a href="http://www.openstack.org"&gt;openStack&lt;/a&gt;, notament au niveau de l'authentification.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.rackspace.com/sdks/python/"&gt;pyrax&lt;/a&gt; est le SDK , Python/openStack&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.launchpad.net/duplicity"&gt;Duplicity&lt;/a&gt;, intègre &lt;a href="https://github.com/rackspace/pyrax"&gt;pyrax&lt;/a&gt; à partir de sa version 0.6.23&lt;/li&gt;
&lt;li&gt;les versions minimum respectives de ces paquets et de certaines dépendances ne sont pas dispo dans le repo debian/wheezy&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Cheminement&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;aptitude&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;pip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;setuptools&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;
&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;aptitude&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;librsync1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;librsync&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;
&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;aptitude&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;lockfile&lt;/span&gt;
&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;aptitude&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;pyasn1&lt;/span&gt;
&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;aptitude&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;libffi&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;

&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;apt&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wheezy&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;backports&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;python-cffi&amp;quot;&lt;/span&gt;

&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pip2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cffi&lt;/span&gt;
&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pip2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pyopenssl&lt;/span&gt;
&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pip2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ndg&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;httpsclient&lt;/span&gt;
&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pip2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;urllib3&lt;/span&gt;
&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pip2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;setuptools&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;upgrade&lt;/span&gt;
&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pip2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;novaclient&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;upgrade&lt;/span&gt;
&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pip2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pyrax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;upgrade&lt;/span&gt;

&lt;span class="n"&gt;wget&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;launchpad&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;net&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;duplicity&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mf"&gt;0.7&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;series&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mf"&gt;0.7&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;06&lt;/span&gt;&lt;span class="o"&gt;/+&lt;/span&gt;&lt;span class="n"&gt;download&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;duplicity&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.7&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;06.&lt;/span&gt;&lt;span class="n"&gt;tar&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gz&lt;/span&gt;
&lt;span class="n"&gt;tar&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;xvzf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;duplicity&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.7&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;06.&lt;/span&gt;&lt;span class="n"&gt;tar&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gz&lt;/span&gt;
&lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;duplicity&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.7&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;06&lt;/span&gt;
&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;./&lt;/span&gt;&lt;span class="n"&gt;setup&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;build&lt;/span&gt;
&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;./&lt;/span&gt;&lt;span class="n"&gt;setup&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="n"&gt;dépendance&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;aptitude&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pip2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="n"&gt;dépendance&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Erreurs:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning"&gt;InsecurePlatformWarning&lt;/a&gt; : install pyopenssl ndg-httpsclient python-pyasn1&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UserWarning: Module novaclient.v1_1 is deprecated&lt;/code&gt; : disparu avec le lot de MàJ du 20160314 (python-novaclient 1.5?)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Connection failed, please check your credentials: JSONDecodeError Expecting value: line 1 column 1 (char 0)&lt;/code&gt; : upgrade setuptools 18.3.1 -&amp;gt; 20.2.2&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Ressources:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Tuto:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.yvangodard.me/hubic-backup-duplicity-backend-pyrax/"&gt;Utiliser HubiC comme espace de backup avec Duplicity&lt;/a&gt; (lien mort)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.yvangodard.me/utiliser-hubic-comme-espace-de-backup-avec-duplicity/"&gt;Utiliser Hubic comme backup pour Duplicity avec le backend pyrax&lt;/a&gt; (lien mort)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://nogues.pro/blog/backup-hubic-duplicity-rsync.html"&gt;Backups dans le cloud hubic avec duplicity et rclone(rsync)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.tiernanotoole.ie/2015/04/01/Duplicity_Hubic.html"&gt;Hubic and Duplicity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.monperrus.net/martin/backup-hubic"&gt;How-to backup your data on hubic using duplicity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://launchpad.net/duplicity/0.7-series/0.7.06/+download/duplicity-0.7.06.tar.gz"&gt;duplicity v0.7.06&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;20160314 :&lt;ul&gt;
&lt;li&gt;MàJ de la version de duplicity&lt;/li&gt;
&lt;li&gt;MàJ pip -&amp;gt; pip2&lt;/li&gt;
&lt;li&gt;MàJ python-novaclient 2.28.2.dev3&lt;/li&gt;
&lt;li&gt;MàJ rackspace-novaclient 1.5&lt;/li&gt;
&lt;li&gt;Erreur #2 &amp;amp; #3&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="debian"/><category term="vieillerie"/><category term="admin"/><category term="backup"/><category term="ovh"/><category term="openstack"/></entry><entry><title>ownCloud, erreur de connection internet</title><link href="https://blog.freezed.me/articles/2015/04/owncloud-erreur-connection-internet/" rel="alternate"/><published>2015-04-25T11:11:00+02:00</published><updated>2015-04-25T11:11:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2015-04-25:/articles/2015/04/owncloud-erreur-connection-internet/</id><summary type="html">&lt;p&gt;Vieilles notes probablement obsolètes&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;strong&gt;&lt;code&gt;/!\&lt;/code&gt; Vieilles notes probablement obsolètes &lt;code&gt;/!\&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Contexte&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Debian 7/k3.14&lt;/li&gt;
&lt;li&gt;ownCloud 8.0.2, installé via &lt;a href="http://software.opensuse.org/download.html?project=isv:ownCloud:community&amp;amp;package=owncloud"&gt;openSUSE Build Service packages&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Problème&lt;/h2&gt;
&lt;p&gt;Dans le menu d'administration du client web, la vérification de la configuration affiche l'erreur suivante:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Ce serveur ne peut se connecter à internet. Cela signifie que certaines fonctionnalités, telles que le montage de supports de stockage distants, les notifications de mises à jour ou l&amp;#39;installation d&amp;#39;applications tierces ne fonctionneront pas. L&amp;#39;accès aux fichiers à distance, ainsi que les notifications par courriel ne fonctionneront pas non plus. Il est recommandé d&amp;#39;activer la connexion internet pour ce serveur si vous souhaitez disposer de l&amp;#39;ensemble des fonctionnalités offertes.
Veuillez vous référer au guide d&amp;#39;installation.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Erreur en VO:&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nv"&gt;This&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;server&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;has&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;working&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;internet&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;connection&lt;/span&gt;.&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;This&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;means&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;that&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;some&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;features&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;like&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;mounting&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;external&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;storage&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;notifications&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;about&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;updates&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;installation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="nv"&gt;rd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;party&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;apps&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;don&lt;/span&gt;´&lt;span class="nv"&gt;t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;work&lt;/span&gt;.&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Accessing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;files&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;remote&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;sending&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;notification&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;emails&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;might&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;also&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;work&lt;/span&gt;.&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;We&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;suggest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;enable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;internet&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;connection&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;server&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;you&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;want&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;have&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;all&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;features&lt;/span&gt;.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Cheminement&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ping &lt;code&gt;www.owncloud.org&lt;/code&gt; depuis le serveur, OK&lt;/li&gt;
&lt;li&gt;essai d'échange enre le serveur &lt;strong&gt;OC&lt;/strong&gt; &amp;amp; un client &lt;strong&gt;OC&lt;/strong&gt; pour Android, OK&lt;/li&gt;
&lt;li&gt;édition du &lt;code&gt;php.ini&lt;/code&gt;: &lt;code&gt;allow_url_fopen On&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;édition du &lt;code&gt;php.ini&lt;/code&gt;: &lt;code&gt;allow_url_include On&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;recherche de la fonction dans le code &lt;strong&gt;OC&lt;/strong&gt; qui génère ce message d'erreur: &lt;code&gt;[OC_PATH]/lib/private/util.php&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;isolation de la fonction et essai sur plusieurs machines: &lt;code&gt;fsockopen()&lt;/code&gt; à bien bien un comportement différant sur le serveur concerné&lt;/li&gt;
&lt;li&gt;suppression de &lt;code&gt;fsockopen()&lt;/code&gt; dans la directive &lt;code&gt;disable_functions&lt;/code&gt;  :-)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Sources:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Forum ownCloud:&lt;ul&gt;
&lt;li&gt;&lt;a href="https://forum.owncloud.org/viewtopic.php?f=29&amp;amp;t=23700"&gt;Internet connection not working&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://forum.owncloud.org/viewtopic.php?f=26&amp;amp;t=18623"&gt;"Internet connection not working" behind proxy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2by2host, &lt;a href="http://www.2by2host.com/articles/php-errors-faq/disabled_fsockopen/"&gt;Warning: fsockopen() has been disabled for security reasons&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="Bloc-notes"/><category term="admin"/><category term="owncloud"/><category term="vieillerie"/><category term="debian"/></entry><entry><title>Configurer le paquet gitweb provenant du dépot Debian</title><link href="https://blog.freezed.me/articles/2015/03/config-paquet-debian-gitweb/" rel="alternate"/><published>2015-03-15T11:11:00+01:00</published><updated>2015-03-15T11:11:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2015-03-15:/articles/2015/03/config-paquet-debian-gitweb/</id><summary type="html">&lt;p&gt;Vieilles notes probablement obsolètes&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;strong&gt;&lt;code&gt;/!\&lt;/code&gt; Vieilles notes probablement obsolètes &lt;code&gt;/!\&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pour visualiser via HTTP les projets &lt;a href="http://www.git-scm.com/"&gt;git&lt;/a&gt; et leur état depuis le serveur, il existe &lt;a href="http://www.git-scm.com/book/fr/v1/Git-sur-le-serveur-GitWeb"&gt;gitweb&lt;/a&gt;. La doc n'ayant pas précisé comment adapter la config après l'installation, voici où ça se passe:&lt;/p&gt;
&lt;p&gt;Installer via aptitude&lt;/p&gt;
&lt;p&gt;&lt;code&gt;aptitude install gitweb&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Adapter la config locale:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;vi /etc/gitweb.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vi /etc/apache2/conf.d/gitweb&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Redémarrer apache2&lt;/p&gt;
&lt;p&gt;&lt;code&gt;service apache2 restart&lt;/code&gt;&lt;/p&gt;</content><category term="Bloc-notes"/><category term="debian"/><category term="vieillerie"/><category term="admin"/><category term="git"/></entry><entry><title>Debian et MacMini Intel</title><link href="https://blog.freezed.me/articles/2014/11/debian-et-macmini-intel/" rel="alternate"/><published>2014-11-11T11:11:00+01:00</published><updated>2014-11-11T11:11:00+01:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2014-11-11:/articles/2014/11/debian-et-macmini-intel/</id><summary type="html">&lt;p&gt;Vieilles notes probablement obsolètes&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;strong&gt;&lt;code&gt;/!\&lt;/code&gt; Vieilles notes probablement obsolètes &lt;code&gt;/!\&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Détail du hardware:&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;Apple&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Mac&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Mini&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2.26&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;x1G&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;SD&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;FRA&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;FRA&lt;/span&gt;

&lt;span class="k"&gt;user&lt;/span&gt;&lt;span class="nv"&gt;@machine&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lspci&lt;/span&gt;
&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;00.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;Host&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;bridge&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NVIDIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Corporation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MCP79&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;Host&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Bridge&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rev&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;00.1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RAM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NVIDIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Corporation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MCP79&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Memory&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Controller&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rev&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;03.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ISA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;bridge&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NVIDIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Corporation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MCP79&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LPC&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Bridge&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rev&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;03.1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RAM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NVIDIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Corporation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MCP79&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Memory&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Controller&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rev&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;03.2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;SMBus&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NVIDIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Corporation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MCP79&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SMBus&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rev&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;03.3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RAM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NVIDIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Corporation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MCP79&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Memory&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Controller&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rev&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;03.4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RAM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NVIDIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Corporation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MCP79&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Memory&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Controller&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rev&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;03.5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Co&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nl"&gt;processor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NVIDIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Corporation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MCP79&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Co&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;processor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rev&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;04.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;USB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NVIDIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Corporation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MCP79&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OHCI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;USB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Controller&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rev&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;04.1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;USB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NVIDIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Corporation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MCP79&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EHCI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;USB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Controller&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rev&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;06.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;USB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NVIDIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Corporation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MCP79&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OHCI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;USB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Controller&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rev&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;06.1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;USB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NVIDIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Corporation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MCP79&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EHCI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;USB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Controller&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rev&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;08.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Audio&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;device&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NVIDIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Corporation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MCP79&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;High&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Definition&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Audio&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rev&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;09.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PCI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;bridge&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NVIDIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Corporation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MCP79&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PCI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Bridge&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rev&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="mf"&gt;.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Ethernet&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NVIDIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Corporation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MCP79&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Ethernet&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rev&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="mf"&gt;.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SATA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NVIDIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Corporation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MCP79&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AHCI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Controller&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rev&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;10.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PCI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;bridge&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NVIDIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Corporation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MCP79&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PCI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Express&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Bridge&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rev&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;15.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PCI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;bridge&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NVIDIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Corporation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MCP79&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PCI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Express&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Bridge&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rev&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;16.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PCI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;bridge&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NVIDIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Corporation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MCP79&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PCI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Express&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Bridge&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rev&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;02&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;00.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VGA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;compatible&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NVIDIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Corporation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;C79&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;GeForce 9400&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rev&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;03&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;00.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Network&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Broadcom&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Corporation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BCM4321&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;802.11&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rev&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;05&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;04&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;00.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FireWire&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IEEE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1394&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LSI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Corporation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FW643&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;TrueFire&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PCIe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1394&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Controller&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rev&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;07&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;user&lt;/span&gt;&lt;span class="nv"&gt;@machine&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cat&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;proc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;cpuinfo&lt;/span&gt;
&lt;span class="n"&gt;processor&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="n"&gt;vendor_id&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GenuineIntel&lt;/span&gt;
&lt;span class="n"&gt;cpu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;family&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;
&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;
&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Intel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;R&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Core&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TM&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Duo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CPU&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;P8400&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2.26&lt;/span&gt;&lt;span class="n"&gt;GHz&lt;/span&gt;
&lt;span class="n"&gt;stepping&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="n"&gt;microcode&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xa07&lt;/span&gt;
&lt;span class="n"&gt;cpu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MHz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1596.000&lt;/span&gt;
&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3072&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KB&lt;/span&gt;
&lt;span class="n"&gt;physical&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="n"&gt;siblings&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="n"&gt;cpu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cores&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="n"&gt;apicid&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="n"&gt;initial&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;apicid&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="n"&gt;fpu&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;yes&lt;/span&gt;
&lt;span class="n"&gt;fpu_exception&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;yes&lt;/span&gt;
&lt;span class="n"&gt;cpuid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;level&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt;
&lt;span class="n"&gt;wp&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;yes&lt;/span&gt;
&lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fpu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vme&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;de&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pse&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tsc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;msr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pae&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mce&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cx8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;apic&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mtrr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pge&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mca&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cmov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pat&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pse36&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clflush&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dts&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;acpi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mmx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fxsr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sse&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sse2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ss&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ht&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pbe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;syscall&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;constant_tsc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arch_perfmon&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pebs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bts&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rep_good&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nopl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;aperfmperf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pni&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dtes64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;monitor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ds_cpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vmx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;smx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;est&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tm2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ssse3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cx16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xtpr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pdcm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sse4_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xsave&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lahf_lm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dtherm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tpr_shadow&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vnmi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flexpriority&lt;/span&gt;
&lt;span class="n"&gt;bogomips&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4510.79&lt;/span&gt;
&lt;span class="n"&gt;clflush&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;
&lt;span class="n"&gt;cache_alignment&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;
&lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sizes&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;36&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bits&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;physical&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bits&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;virtual&lt;/span&gt;
&lt;span class="nf"&gt;power&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;management&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

&lt;span class="n"&gt;processor&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="n"&gt;vendor_id&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GenuineIntel&lt;/span&gt;
&lt;span class="n"&gt;cpu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;family&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;
&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;
&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Intel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;R&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Core&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TM&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Duo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CPU&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;P8400&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2.26&lt;/span&gt;&lt;span class="n"&gt;GHz&lt;/span&gt;
&lt;span class="n"&gt;stepping&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="n"&gt;microcode&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xa07&lt;/span&gt;
&lt;span class="n"&gt;cpu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MHz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1596.000&lt;/span&gt;
&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3072&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KB&lt;/span&gt;
&lt;span class="n"&gt;physical&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="n"&gt;siblings&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="n"&gt;cpu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cores&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="n"&gt;apicid&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="n"&gt;initial&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;apicid&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="n"&gt;fpu&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;yes&lt;/span&gt;
&lt;span class="n"&gt;fpu_exception&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;yes&lt;/span&gt;
&lt;span class="n"&gt;cpuid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;level&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt;
&lt;span class="n"&gt;wp&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;yes&lt;/span&gt;
&lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fpu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vme&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;de&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pse&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tsc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;msr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pae&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mce&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cx8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;apic&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mtrr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pge&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mca&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cmov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pat&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pse36&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clflush&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dts&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;acpi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mmx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fxsr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sse&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sse2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ss&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ht&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pbe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;syscall&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;constant_tsc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arch_perfmon&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pebs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bts&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rep_good&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nopl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;aperfmperf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pni&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dtes64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;monitor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ds_cpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vmx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;smx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;est&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tm2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ssse3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cx16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xtpr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pdcm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sse4_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xsave&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lahf_lm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dtherm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tpr_shadow&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vnmi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flexpriority&lt;/span&gt;
&lt;span class="n"&gt;bogomips&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4510.63&lt;/span&gt;
&lt;span class="n"&gt;clflush&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;
&lt;span class="n"&gt;cache_alignment&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;
&lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sizes&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;36&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bits&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;physical&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bits&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;virtual&lt;/span&gt;
&lt;span class="nf"&gt;power&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;management&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Boot possible grace a &lt;a href="https://gist.github.com/EmmanuelKasper/9590327#file-efi-boot-on-lenovo-thinkcenter-m92z"&gt;rEFInd&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Edit: du 10/6/15&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.debian.org/releases/stable/"&gt;Debian Jessie&lt;/a&gt; vient de sortir et supporte nativement le boot EFI.&lt;/p&gt;
&lt;p&gt;Il suffit donc d'ajouter le &lt;a href="https://wireless.wiki.kernel.org/en/users/Drivers/b43#devicefirmware"&gt;firwmare B43&lt;/a&gt; et d'installer le &lt;a href="https://wiki.debian.org/NvidiaGraphicsDrivers#configure"&gt;driver Nvidia&lt;/a&gt; pour que la machine soit utilisable.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;FIXME&lt;/em&gt; : avec le driver nvidia, les TTY ont disparu. Apparement, c'est un &lt;a href="https://www.google.fr/search?q=tty+driver+nvidia+linux"&gt;problème classique&lt;/a&gt;... A priori, sur cette machine je devrais m'en passer.&lt;/p&gt;</content><category term="Bloc-notes"/><category term="debian"/><category term="apple"/><category term="vieillerie"/><category term="admin"/></entry><entry><title>Pilotage de projet de transition numérique</title><link href="https://blog.freezed.me/articles/2011/04/pilotage-de-projet-de-transition-numerique/" rel="alternate"/><published>2011-04-21T11:11:00+02:00</published><updated>2011-04-21T11:11:00+02:00</updated><author><name>freezed</name></author><id>tag:blog.freezed.me,2011-04-21:/articles/2011/04/pilotage-de-projet-de-transition-numerique/</id><summary type="html">&lt;p&gt;Gestion d'un projet de transition numérique : d'une facture en papier vers une appli android&lt;/p&gt;</summary><content type="html">&lt;p&gt;Entre 2007 et 2017, en parallèle de mon poste de responsable d'exploitation dans une PME de dépannage automobile, j'étais en charge du pilotage de la transition numérique de notre outils de facturation.&lt;/p&gt;
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/xQpbNvYRbV0" frameborder="0"&gt;&lt;/iframe&gt;</content><category term="Réalisations"/><category term="android"/><category term="numérisation"/><category term="sql"/><category term="admin"/><category term="innovation"/><category term="business"/><category term="méthode"/><category term="vieillerie"/></entry></feed>