# articles

feed_id: https://www.system-linux.eu/index.php?post/2017/09/08/Commande-iperf-pour-tests-r%C3%A9seau
title: System Linux : Commande iperf pour tests réseau
uri: System-Linux-Commande-iperf-pour-tests-réseau
url: https://www.system-linux.eu/index.php?post/2017/09/08/Commande-iperf-pour-tests-r%C3%A9seau
content:
<p><img src="media/16d820f4.iperf.jpg" data-original-source="https://www.system-linux.eu/public/images/iperf.jpg" alt="iperf.jpg" title="iperf.jpg, sept. 2017"></p>


<p>Petite découverte du jour...</p>    <p>Par exemple tester l'ouverture d'un flux entre deux serveurs :</p>


<p>Sur le serveurA :</p>

<pre>
# iperf -s -p 5046
------------------------------------------------------------
Server listening on TCP port 5046
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
</pre>


<p>Sur le serveurB :</p>

<pre>
# telnet serveurA 5046
</pre>


<p>Surl le serveurA :</p>

<pre>
------------------------------------------------------------
Server listening on TCP port 5046
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 172.23.15.3 port 5046 connected with 172.23.15.1 port 5177
</pre>


<p>Flux ouvert !</p>


<p>Simplet comme exemple mais il est possible de faire des trucs assez sexy avec cette commande, des tests réseaux poussés.
Un petit man vous en dira plus.</p>
<p><img src="media/ff41ece7.4238771a81824a8b9dc3850d6a8e9d26" data-original-source="http://cdn.libravatar.org/avatar/4238771a81824a8b9dc3850d6a8e9d26" alt="Gravatar de System Linux" class="gravatar" /><br/><i>Original post of <a href="https://www.system-linux.eu/index.php?post/2017/09/08/Commande-iperf-pour-tests-r%C3%A9seau" title="Visit the source">System Linux</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>System Linux : <a href="">Commande rpm</a> (21/04/2016)</li><li>System Linux : <a href="">Comment recharger .bashrc sans se d&eacute;connecter ?</a> (30/05/2016)</li></ul></div></p>


feed_id: https://www.ilphrin.com/planet/2017/09/02/traduction-guide-du-debutant-en-recherche-ux.html
title: Ilphrin : Traduction: Guide du débutant en recherche UX
uri: 2017-09-08-Ilphrin-Traduction-Guide-du-débutant-en-recherche-UX
url: https://www.ilphrin.com/planet/2017/09/02/traduction-guide-du-debutant-en-recherche-ux.html
content:
<p>Cet article est une traduction de <a href="http://www.uxbooth.com/articles/complete-beginners-guide-to-design-research/">“Complete Beginner’s Guide to UX Research”</a>, écrit par le site <a href="http://www.uxbooth.com/">UXBooth</a>. Je ne suis en aucun cas l’auteur de cet article, j’ai simplement eu envie de le traduire car le sujet m’intéresse et que je considère que beaucoup de ressources anglophones devraient/pourraient être aussi à la portée de personnes qui ne parlent pas anglais.</p>

<!--break-->

<h2>Guide du débutant en Recherche UX</h2>

<p>Dans une industrie centrée sur les utilisateurs de nos services, applications et produits, la recherche est promordiale. Nous questionnons, notons, apprenons tout ce qu’il est possible sur le public cible, et procédons à des tests itératifs de notre travail tout au long d’un processus de conception.</p>

<p>La Recherche UX - ou, comme elle est souvent appelée, la Recherche de Design - sert à de nombreuses choses dans le processus de conception. Il nous sert à prouver ou infirmer des hypothèses, trouver des points communs entre les membres de nos publics cibles, et reconnaitre leurs besoins, objectif et modèles mentaux. De façon générale, la recherche renseigne notre travail, améliore notre compréhension, et valide nos décisions.</p>

<p>Dans ce Guide du Débutant, nous allons aborder les différents aspects de la Recherche de Design, à partir d’interviews et d’observations, des tests utilisateurs aux tests A/B. Les lecteurs auront un point de départ sur la façon d’utiliser les techniques de recherche dans leur travail, pour améliorer l’expérience des utilisateurs.</p>

<h3>Qu’est-ce que la Recherche UX</h3>

<p>La Recherche UX regroupe une large gamme de méthode de méthodes d’investigations qui aident à ajouter du contexte et des idées au processus de conception. Contrairement à d’autres sous-domaines de l’UX, la Recherche ne s’est pas développée dans d’autres domaines ou sous-domaines. Elle s’est simplement crée à partir d’autres formes de recherches. En d’autres termes, ceux qui pratiquent de l’UX empruntent des techniques d’universités, de scientifiques, des études de marché, etc. Cependant, il y a encore des types de recherche unique au monde de l’UX.</p>

<p>L’objectif principal de la Recherche de Design est d’aviser le processus de conception du point de vue de l’utilisateur final. C’est une recherche qui permet d’éviter de concevoir pour une personne: nous-mêmes. Il est commun de dire que le but de l’UX, ou conception utilisateur, est de faire un design avec l’utilisateur final en tête, et c’est la recherche qui permet de nous dire quelle est cette personne, dans quel contexte elle va utiliser le produit ou le service, et en quoi elle a besoin de nous.</p>

<p>Avec cette idée en tête, la recherche à deux parties: Récolter des données, et les synthétiser pour améliorer l’utilisation. Au début d’un projet, la recherche de conception sur l’apprentissage des requis du projet de la part des parties prenantes, et connaître les objectifs et besoins des utilisateurs finaux. Les chercheurs feront des interviews, des questionnaires, observer la perspectives des utilisateurs, et analyser les écrits, données et analyses existants. Ensuite, dans un travail de conception itératif, la recherche va se concentrer sur l’utilisation et les sentiments. Les chercheurs peuvent faire des tests d’utilisation ou des tests A/B, des interviews d’utilisateur sur le processus, et des hypothèses générales qui amélioreront le design.</p>

<p><img src="media/3ec2efb9.ux_01.png" data-original-source="http://ilphrin.com/images/ux_01.png" alt="Modèles mentaux. Young, Indi. 2008"></p>

<p>Nous pouvons aussi diviser les méthodes de recherche UX en deux catégories: quantitatives et qualitatives:</p>

<ul><li><strong>La recherche quantitative</strong> est toute recherche qui peut être mesurée de façon numérique. Cela répond à des questions comme “Combien de personnes ont cliquées ici?” ou “Quel pourcentage d’utilisateurs arrive à faire telle action?”. Il est intéressant de comprendre ce genre de statistiques et ce qui arrive sur un site ou une application.</li>
  <li><strong>La recherche qualitative</strong>, parfois appelé la recherche “soft”. Elle nous aide à comprendre pourquoi les gens font ce qu’ils font, et prend souvent la forme d’interviews ou de discussions. Les questions habituelles incluent “Pourquoi les utilisateurs ne voient pas le <em>call to action</em>?” ou “Qu’ont remarqué d’autres les utilisateurs?”. Bien que les chercheurs peuvent se spécialiser dans certains types d’interviews ou de tests, la plupart sont capables d’utiliser la majorité des techniques. Tous les chercheurs récupérent des informations qui nous permettent de concevoir d’une manière avertie, contextuelle, et centrée sur l’utilisateur.</li>
</ul><h3>Techniques communes</h3>

<p>La gamme de recherches UX vont des interviews d’une personne aux tests A/B non modéré, avec tout ce qui existe entre les deux, bien qu’ils soient cohérents dans le fait qu’ils se basent tous sur les même méthodes-clés: observation, compréhension, et analyse.</p>

<h4>Observation</h4>

<p>La première étape d’une recherche consiste à apprendre à observer le monde autour de nous. Tout comme les débutants photographe, les nouveaux chercheurs doivent apprendre à voir. Ils doivent remarquer les tics qui indiquent que la personne questionné est stréssée ou indécise, et prendre des références, d’apparence mineure, qui peuvent refléter des croyances ou pensées de longue-date qui devraient être approfondies.</p>

<p>L’obeservation peur paraître simple, mais elle peut être nuancée par des reflexes ou préjugés inconscients, ce que tout le monde a. Les chercheurs en conception/design s’entrainent à observer et prendre des notes, pour qu’ils puissent plus tard trouver des modèles entres différents groupes de personnes.</p>

<h4>Compréhension</h4>

<p>Comme l’observation, la compréhension est quelque chose que nous faisons quotidiennement. Nous essayons de comprendre nos collègues, nos familles, et nos amis, souvent en voulant comprendre une dispute ou un concept avec lequel nous ne sommes pas familier. Mais pour les chercheurs UX, la compréhension à moins a voir avec ces désagréments, qu’avec les modèles mentaux.</p>

<p>Un modèle mental est l’image qu’une personne a en tête lorsqu’elle pense à une phrase ou une situation en particulier. Par exemple: Si quelqu’un possède un SUV, son modèle mental d’une “voiture” différera de quelqu’un qui dispose d’une voiture connecté. Le modèle mental nous renseigne sur les décisions que nous prenons. Dans le cas d’un propriétaire de voiture, lorsque nous demandons “Combien de temps cela prend pour aller jusqu’à Paris?”, sa réponse dépendra du kilométrage de sa voiture, entre autres.</p>

<p>Les chercheurs en design ont besoin de connaître les modèles mentaux des personnes qu’il interviewent ou testent, pour deux raisons. La première c’est que nous parlons tous avec un certaines abbréviations et langages technique parfois. Les chercheurs ont besoin de reconnaitre ces langages en se basant sur le modèle mental de l’interlocuteur. Ensuite, si le chercheur peut définir avec précision le modèle mental des utilisateurs, il ou elle peut partager ces informations avec l’équipe de design, et faire une conception en raccord avec ce modèle.</p>

<h3>Analyse</h3>

<p>La recherche en elle-même est utile, mais afin d’utiliser les idées pour renseigner la conception, elle a besoin d’être analysée et finalement présentée à une équipe. L’Analyse est le procédé par lequel le chercheur identifie des modèles dans la recherche, propose les raisonnements et solutions possibles, et fait des recommandations.</p>

<p>Les techniques d’analyses incluent la création de personas ou de scénarios, décrire des modèles mentaux, ou faire des graphiques qui représentent des statistiques ou des comportements utilisateurs. Bien que certaines techniques se concentrent principalement sur la conduite de recherches, il est important de se souvenir que la recherche n’est <a href="http://www.uxbooth.com/articles/research-right-audience/">valable que si elle est partagée</a>. Elle ne sert à rien si elle reste cloisonnée dans un cabinet, ou oubliée par l’excitation du design.</p>

<h3>Tâches quotidiennes et Livrables</h3>

<p>Chaque projet d’UX est différent, et les tâches que fera le chercheur différeront de ce qui pourrait être approprié dans une autre situation. Les formes de recherche les plus connues sont: les interviews, les questionnaires et sondages, la tri de carte, les tests d’utilisation, les tests d’arbre, et les tests A/B.</p>

<h4>Interviews</h4>

<p>L’interview en face-à-face est une méthode testée et approuvée de communication entre un chercheur et un utilisateur ou un intervenant. Il existe trois types d’interviews, chacune utilisée dnas un contexte différen et avec un objectif différent.</p>

<p><strong>Les Interviews dirigés</strong> sont les plus fréquents. Ce sont des interviews typiques de question-réponse, où le chercheur pose des questions spécifiques. Cela peut être intéressant lorsqu’on questionne un grand nombre d’utilisateurs, ou pour comparer et contraster les réponses de plusieurs utilisateurs.</p>

<p><strong>Les Interviews non dirigés</strong> sont le meilleur moyen d’apprendre sur des sujets plus délicats, ou l’utilisateur ou l’intervenant puisse être déstabilisé avec une question directe. Avec un interview non dirigé, l’interviewer met en places quelques lignes de conduites et ouvre une conversation avec la personne questionnée. L’interviewer va principalement écouter durant cette “conversation”, parlant uniquement pour demander à l’utilisateur de fournir des détails supplémentaires ou expliquer des concepts.</p>

<p><strong>Les Interviews Ethnographiques</strong> consiste à observer des personnes agir dans leur “habitat naturel”. Dans cette catégorie d’interview, l’utilisateur montre comment accomplir certaines tâches, en mettant en immersion l’interviewer dans son travail ou sa culture. Cela peut aider les chercheurs à comprendre l’écart entre ce que les gens font, et ce qu’ils disent faire, et peut éclairer sur ce que font les utilisateurs lorsqu’ils se sentent le plus à l’aise.</p>

<h4>Questionnaires et Sondages</h4>

<p>Les questionnaires et les sondages sont un moyen facile de récupérer de grosses quantités d’informations sur un goupe en un minimum de temps. Ce sont de très bon choix pour la recherche sur les projets avec une vaste diversité de types d’utilisateurs, ou pour les groupes soucieux de l’anonymat. Un chercheur peut créer des sondages avec des outils tels que <a href="http://wufoo.com/">Wufoo</a> ou <a href="http://www.youtube.com/watch?v=IzgaUOW6GIs">Google Docs</a>, les envoyer par email, et recevoir des centaines de réponses en quelques minutes.</p>

<p>Il existe des défaut cependant aux questionnaires et aux sondages. Le chercheur ne peut intéragir directement avec les questionnés ou les encadrer si la question n’est pas parfaite, et ont généralement peu de possibilités pour recontacter. Les sondages recoivent beaucoup plus de réponses s’il n’y a pas besoin de s’inscrire ou d’entrer des informations de contact, et cette anonymat rend impossible le fait de pouvoir demander une clarification ou des détails.</p>

<h4>Card Sort (Tri de Cartes)</h4>

<p>Les Tri de cartes sont parfois utilisés comme moyen d’interview ou comme test utilisateur. Dans un Tri de cartes, l’utilisateur reçoit un paquet de cartes, et il est demandé de les trier en catégories. Dans un Tri de cartes fermé, les noms des catégories sont aussi donnés; alors que dans un Tri de cartes ouvert l’utilisateur peut créer les catégories qu’il désire.</p>

<p>L4objectif du Tri de cartes est d’explorer les relations entre les différents contenus, et mieux comprendre la hiérarchie perçue par un utilisateur. Plusieurs stratégistes de contenu et d’architectes d’information se base sur cet outil pour tester des théories de hiérarchie ou commencer un plan de site.</p>

<h4>Tests Utilisateur (Usability Tests)</h4>

<p>Les Tests utilisateur nécéssitent de demander à quelqu’un, un utilisateur par exemple d’un produit ou service, de compléter une série de tâches et d’observer leur comportement afin de déterminer l’usabilité d’un produit ou d’un service. Ceci peut être fait avec une version en direct d’un site ou d’une application, un prototype ou un WIP (Work-In-Progress), ou même avec des maquettes clicable ou du papier et un crayon.</p>

<p>Il existe de nombreuses variations et styles de tests utilisateur, mais trois sont souvent utilisés: Controlés, Non Contrôlés, et en Guerilla</p>

<p><strong>Les tests controlés</strong> sont les plus fréquents. Ils peuvent être fait en face-à-face, en vidéo ou par partage d’écran. Les laboratoires de tests utilisateurs sont équipés de miroirs semi-réfléchissant, pour que les collaborateurs puissent observer, pour conduire ces tests. Dans ces tests un facilitateur non biaisé s’asseoit et parle avec l’utilisateur, lisant à voix haute les tâches et demandant à l’utilisateur de dire ce qu’il pense lorsqu’il accomplit ces tâches. Le rôle du facilitateur est d’agir comme un pont entre les collaborateurs et l’utilisateur, posant des questions pour évaluer la pertinence d’un design et tester les hypothèses tout en aidant l’utilisateur à se sentir confortable dans le processus.</p>

<p><strong>Les tests non controlés</strong>, connu aussi sous le terme de Recherche Asynchrone, sont fait en ligne à la convenance de l’utilisateur. Les tâches et les instructions sont fournies par vidéo ou enregistrement audio, et l’utilisateur clique sur un bouton pour commencer le test et enregistrer son écran et/ou l’audio. Comme lors des tests contrôlés, l’utilisateur est invité à penser à voix haute, bien qu’il n’y ai pas de facilitateur pour poser des questions. Ces tests sont disponibles à travers de nombreux sites web, et peuvent être bien moins cher que les tests contrôlés.</p>

<p><strong>Un test Guerilla</strong> est une version plus traditionnelle, légère et moderne de tests. Au lieu de se passer dans un laboratoire, la recherche guerilla se passe souvent en lieu public: les utilisateurs sont pris dans des cafés, des stations de métro ou autre, et on leur demande d’accomplir quelques tâches avec un site web ou un service, en échange de quelques dollars, un café, ou simplement par bonté de coeur. Même si les tests guerilla sont très bien, <a href="http://www.uxbooth.com/articles/guerrilla-research-tactics-tools/">surtout financièrement</a>, ils sont plus adaptés aux produits avec une large base d’utilisateurs. Les produits de niche auront du mal à trouver des informations utiles à partir de la sélection aléatoire d’utilisateur de cette recherche.</p>

<h4>Tests en arbre (Tree tests)</h4>

<p>AU même titre que le tri de cartes est un bon moyen d’avoir des informations sur l’architecture d’un site web avant sa création, les tests en arbre sont un bon moyen de valider cette architecture. Dans ce test, l’utilisateur doit accomplir une tâche, avec comme outil le Sitemap d’un produit, en commencant par le niveau le plus haut. Ensuite, comme dans les Usability Tests, l’utilisateur est invité à penser à voix haute en remplissant la tâches. Mais au lieu d’avoir un écran pour naviguer, ils voient le prochain niveau d’architecture avec le Sitemap. L’objectif est de déterminer si l’information est catégorisée correctement, et si la nomenclature est appropriée.</p>

<h4>Tests A/B</h4>

<p>Les tests A/B sont un autre moyen d’apprendre quelles actions l’utilisateur entreprend. Un test A/B est souvent utilisé comme outil de recherche lorsque les designers n’arrivent pas à choisir entre deux versions. Que ce soit deux styles de contenu, un bouton VS un lien, ou deux approches pour une page d’accueil, un test A/B nécessite de montrer aléatoirement chaque version à un nombre égal d’utilisateur, et regarder ensuite les statistiques de l’application ou du site pour voir quelle version permet le mieux d’accomplir une tâche. Les tests A/B sont particulièrement utiles pour comparer une nouvelle version d’une page face à l’ancienne version, ou lors de collecte de données pour vérifier une hypothèse.</p>

<h2>Des liens sur UxBooth</h2>

<p>Si cette traduction vous a plu, n’hésitez pas à me le faire savoir, par mail ou par commentaire (je lis aussi de temps en temps les commentaire sur le journal du hacker). Je vous renvoie vers <a href="http://www.uxbooth.com/articles/complete-beginners-guide-to-design-research/#tasks">l’article d’origine sur UXBooth</a> pour pleins de liens vers des personnalités à suivre sur les réseaux, des idées de livre sur le sujet, et plein d’autres choses.</p>
<p><img src="media/9292dabf.235511b5004cfd4af8c43a8b06c9e121" data-original-source="http://cdn.libravatar.org/avatar/235511b5004cfd4af8c43a8b06c9e121" alt="Gravatar de Ilphrin" class="gravatar" /><br/><i>Original post of <a href="https://www.ilphrin.com/planet/2017/09/02/traduction-guide-du-debutant-en-recherche-ux.html" title="Visit the source">Ilphrin</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>Ilphrin : <a href="">Traduction: Guide du d&eacute;butant en recherche UX</a> (05/02/2017)</li></ul></div></p>


feed_id: https://linuxevolution.wordpress.com/2017/09/08/gsoc-au-secours-des-gamers-linuxiens-avec-piper/
title: Cenwen : GSOC au secours des Gamers Linuxiens avec Piper
uri: Cenwen-GSOC-au-secours-des-Gamers-Linuxiens-avec-Piper
url: https://linuxevolution.wordpress.com/2017/09/08/gsoc-au-secours-des-gamers-linuxiens-avec-piper/
content:
<p><a href="https://linuxevolution.wordpress.com/2017/09/08/gsoc-au-secours-des-gamers-linuxiens-avec-piper/capture_ecran-2017-08-01-21-04-22/" rel="attachment wp-att-2893"><img data-attachment-id="2893" data-permalink="https://linuxevolution.wordpress.com/2017/09/08/gsoc-au-secours-des-gamers-linuxiens-avec-piper/capture_ecran-2017-08-01-21-04-22/" data-orig-file="https://linuxevolution.files.wordpress.com/2017/09/capture_ecran-2017-08-01-21-04-22.png" data-orig-size="903,458" data-comments-opened="1" data-image-meta='{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}' data-image-title="capture_ecran-2017-08-01-21-04-22" data-image-description="" data-medium-file="https://linuxevolution.files.wordpress.com/2017/09/capture_ecran-2017-08-01-21-04-22.png?w=300&amp;h=152" data-large-file="https://linuxevolution.files.wordpress.com/2017/09/capture_ecran-2017-08-01-21-04-22.png?w=593" src="https://linuxevolution.files.wordpress.com/2017/09/capture_ecran-2017-08-01-21-04-22.png?w=300&amp;h=152" alt="" width="300" height="152" srcset="https://linuxevolution.files.wordpress.com/2017/09/capture_ecran-2017-08-01-21-04-22.png?w=300&amp;h=152 300w, https://linuxevolution.files.wordpress.com/2017/09/capture_ecran-2017-08-01-21-04-22.png?w=600&amp;h=304 600w, https://linuxevolution.files.wordpress.com/2017/09/capture_ecran-2017-08-01-21-04-22.png?w=150&amp;h=76 150w" sizes="(max-width: 300px) 100vw, 300px"></a>Il existe encore de nos jours des domaines où  à la fois, les grands éditeurs de logiciels propriétaires boudent Linux et il n’y a pas ou peu d’applications Open Source, de qualités. Alors que Linux et le monde Open Source est partout, bien que la majorité des gens ne le savent pas. La configuration des souris des gamers en est un parfait exemple. C’est normal, après tout, on n’est que des geeks pas des gamers et le marché des jeux et accessoires pour Linuxiens est ridicule comme part de marché. Comme si on n’avait pas de souris…………</p>
<p>Mais Google est dans ce cas notre ami depuis longtemps (par exemple avec Google Linux pendant des années…), et pour ce qui nous interresse, c’est le GSOC qui vient à notre rescousse. Quoi le GSOC ? Vous ne connaissez pas ?</p>
<p><span></span><a href="https://fr.wikipedia.org/wiki/Google_Summer_of_Code">Le Google Summer Of Code</a> est un projet annuel de Google qui vise à promouvoir le logiciel libre. Vous ne le savez peut-être pas mais les développeurs Open Source ne font pas fortune dans le libre cependant l’argent est le nerf de la guerre même la. Ne serait-ce que pour payer le site web, un dépôt, le temps passé au développement, obtenir de l’aide, etc… D’abord, il y a une sélection des projets candidats par Google, ensuite Google sélectionne des étudiants qui seront rémunéré pendant trois mois sur un projet, le tout chapeauté par un tuteur. Et c’est ainsi depuis 2005. Par exemple, cette année, l’étudiant Ilia Valiakhmetov a travaillé sur l’optimisation des instructions AVX2 de <a href="http://www.ffmpeg.org/about.html">FFmpeg</a> avec une amélioration des performances d’environ 45%. Mais revenons à nos moutons. En ce qui nous concerne, il s’agit de Jente Hidskes avec pour tuteur Peter Hutterer, un développeur Linux fort connu. Il est le créateur en autre de la librairie <a href="https://github.com/libratbag/libratbag">libratbag</a> et de <a href="https://github.com/libratbag/ratbagd">ratbag</a> (son démon système) et créateur du projet <a href="https://github.com/libratbag/piper">Piper</a>. Ne pouvant tout faire et n’étant pas un gamer, il lui fallait de l’aide et c’est Jente Hidsked qui a été sélectionné pour cette tache. Avec l’aide de son tuteur, d’une communauté de gamers qui participé à la modification des mockups initiales, Jente a propulsé le projet Piper dans le monde réel.</p>
<div><!--[if lt IE 9]><![endif]-->
<video width="593" height="334" preload="metadata" controls="controls"><source type="video/webm" src="https://hjdskes.github.io/img/blog/gsoc-part-15/overview.webm?_=1"></source><a href="media/9f348e2e.overview.webm" data-original-source="https://hjdskes.github.io/img/blog/gsoc-part-15/overview.webm">https://hjdskes.github.io/img/blog/gsoc-part-15/overview.webm</a></video></div>
<p>Développé en Python (3) et en Gtk3, Piper permet de gérer principalement le leader de ce marché : <strong>Logitech</strong> et comble un grand vide pour ce constructeur. Basé sur la librairie Libratbag et son démon système Ratbag (les 2 fusionneront bientôt pour ne former qu’un seul projet), l’approche de Jentes est assez originale. En effet, au lieu de configurer chaque bouton à la « mano », on se sert du hardware cad on clique sur un bouton et il est surligné dans la souris. Et on y applique le paramètre voulu. Jentes a d’ailleurs été obligé de créer pour l’occasion un widget GTK : MouseMap</p>
<p>Vous pouvez gérer :</p>
<ul><li>les résolutions</li>
<li>les boutons</li>
<li>les leds</li>
<li>les profiles</li>
</ul><p>Voici une<a href="http://libratbag.github.io/device-notes/"> liste des périphériques</a> reconnus par libratbag mais sachez qu’il s’agit principalement de souris <strong>logitech</strong> (G5/7/9 T65, M325/705, G 300/303/403/500/502/602/700/900). Toutefois, <strong>Roccat</strong> avec la Kone XTD et <strong>G.Skill</strong> avec la MX 780 ne sont pas oubliés.</p>
<h2>Comment l’installer ?</h2>
<p>Pour l’instant, il n’y a rien dans les dépôts de Manjaro, ni sur AUR. Rien non plus pour Ubuntu. Il faudra d’abord compiler Libratbag, puis Ratbag et installer Piper.</p>
<p>Mais cela ne saurait tarder, il fallait juste qu’ils soient au courant. C’est chose faite……</p>
<p>Comme tout projet libre, n’hésiter pas à participer en l’utilisant, reportant des bogues, demandant de nouvelles fonctionnalités, gérer la liste des périphérique connus,….. Tout aide est la bien venue.</p>
<p> </p><br>Classé dans:<a href="https://linuxevolution.wordpress.com/category/decouverte/">Découverte</a>, <a href="https://linuxevolution.wordpress.com/category/framework-2/">framework</a>, <a href="https://linuxevolution.wordpress.com/category/hardware/">Hardware</a>, <a href="https://linuxevolution.wordpress.com/category/jeux/">Jeux</a>, <a href="https://linuxevolution.wordpress.com/category/logiciels/">Logiciels</a>, <a href="https://linuxevolution.wordpress.com/category/news/">News</a>, <a href="https://linuxevolution.wordpress.com/category/planet-libre/">Planet-Libre</a>, <a href="https://linuxevolution.wordpress.com/category/programmation/">Programmation</a>, <a href="https://linuxevolution.wordpress.com/category/python/">Python</a>, <a href="https://linuxevolution.wordpress.com/category/technologie/">Technologie</a> Tagged: <a href="https://linuxevolution.wordpress.com/tag/g-skill/">G.Skill</a>, <a href="https://linuxevolution.wordpress.com/tag/hardware/">Hardware</a>, <a href="https://linuxevolution.wordpress.com/tag/jeux/">Jeux</a>, <a href="https://linuxevolution.wordpress.com/tag/linux/">Linux</a>, <a href="https://linuxevolution.wordpress.com/tag/logitech/">Logitech</a>, <a href="https://linuxevolution.wordpress.com/tag/news-logiciels/">News Logiciels</a>, <a href="https://linuxevolution.wordpress.com/tag/roccat/">Roccat</a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=linuxevolution.wordpress.com&amp;blog=10190078&amp;post=2887&amp;subd=linuxevolution&amp;ref=&amp;feed=1" width="1" height="1">
<p><img src="media/9ad38962.b4deaa84d80933a525c375c1cef1b842" data-original-source="http://cdn.libravatar.org/avatar/b4deaa84d80933a525c375c1cef1b842" alt="Gravatar de Cenwen" class="gravatar" /><br/><i>Original post of <a href="https://linuxevolution.wordpress.com/2017/09/08/gsoc-au-secours-des-gamers-linuxiens-avec-piper/" title="Visit the source">Cenwen</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>Cenwen : <a href="">Overcloker facilement avec AMDOverdriveCtrl</a> (15/10/2011)</li><li>Cenwen : <a href="">Apr&egrave;s KickStarter!!!!!!!!!!!</a> (27/04/2013)</li><li>Cenwen : <a href="">MAJ pour OpenShot 2.0.0 (1/3)</a> (11/01/2014)</li><li>Cenwen : <a href="">MAJ pour OpenShot 2.0.0 (2/3)</a> (12/01/2014)</li><li>Cenwen : <a href="">MAJ pour OpenShot 2.0.0. (3/3)</a> (13/01/2014)</li></ul></div></p>


feed_id: http://blog.ght1pc9kc.fr/Hello-OSGi-World,-Part-3/
title: Marthym : Hello OSGi World, Part 3, Configuration du runner
uri: Marthym-Hello-OSGi-World-Part-3-Configuration-du-runner
url: http://blog.ght1pc9kc.fr/Hello-OSGi-World,-Part-3/
content:
<p>On a parlé la dernière fois de l’un des points de complexité d’OSGi que sont les bundles et le fait que toutes les dépendances du projet doivent impérativement être des bundles aussi, sans quoi il ne sera pas possible au runner de les charger.</p>

<p>Le run des applications OSGi est un autre de ces points noir.</p>

<h2>Le principe</h2>

<p>Pour démarrer une application OSGi, le principe est simple sur le papier. On lance l’implémentation choisie (pour nous felix) pour on lui fait charger les bundles de notre application. C’est très vite fastidieux et inhumain de le faire à la main.</p>

<p>Donc pour s’épargner ça, on va utiliser le bundle <code>fileinstall</code>. Ce dernier va automatiquement charger tous les bundles contenu dans un dossier.</p>

<p>Tel qu’on l’a inclus pour l’instant un import felix nu sans rien d’autre. On va ajouter <code>gogo.shell</code> qui va nous permettre d’avoir un peu de visibilité sur ce que l’on fait.</p>

<h2>Mise à jour des poms</h2>

<h3>Pom parent du projet</h3>
<p>On y ajoute les versions des dépendances felix dont on a parlé précédemment :</p>

<div><pre><code>    <span><properties></span>
        ...
        <span><fileinstall.version></span>3.6.0<span></fileinstall.version></span>
        <span><gogo.version></span>1.0.0<span></gogo.version></span>
    <span><properties></span>

    ...

    <span><dependencyManagement></span>
        <span><dependencies></span>
            ...

            <span><!--Framework Goodies--></span>
            <span><dependency></span>
                <span><groupId></span>org.apache.felix<span></groupId></span>
                <span><artifactId></span>org.apache.felix.fileinstall<span></artifactId></span>
                <span><version></span>${fileinstall.version}<span></version></span>
            <span></dependency></span>
            <span><dependency></span>
                <span><groupId></span>org.apache.felix<span></groupId></span>
                <span><artifactId></span>org.apache.felix.gogo.shell<span></artifactId></span>
                <span><version></span>${gogo.version}<span></version></span>
            <span></dependency></span>
            <span><dependency></span>
                <span><groupId></span>org.apache.felix<span></groupId></span>
                <span><artifactId></span>org.apache.felix.gogo.command<span></artifactId></span>
                <span><version></span>${gogo.version}<span></version></span>
                <span><exclusions></span>
                    <span><exclusion></span>
                        <span><groupId></span>org.easymock<span></groupId></span>
                        <span><artifactId></span>easymock<span></artifactId></span>
                    <span></exclusion></span>
                <span></exclusions></span>
            <span></dependency></span>

            ...
        <span></dependencies></span>
    <span></dependencyManagement></span>
</code></pre>
</div>

<p>L’exclusion de <code>easymock</code> permet d’éviter de l’avoir dans les jars de l’application, il ne sert à rien, je pense que c’est juste une erreur de dépendances qui aurait dû se trouver en scope test.</p>

<h3>Module Assembly</h3>
<p>Maintenant que les versions sont correctes on ajoute les dépendances dans l’assembly puisqu’il n’y a que lui qui en aura besoin, c’est des dépendances runtime.</p>

<div><pre><code>    <span><dependencies></span>
        ...
        <span><dependency></span>
            <span><groupId></span>org.apache.felix<span></groupId></span>
            <span><artifactId></span>org.apache.felix.fileinstall<span></artifactId></span>
        <span></dependency></span>
        <span><dependency></span>
            <span><groupId></span>org.apache.felix<span></groupId></span>
            <span><artifactId></span>org.apache.felix.gogo.shell<span></artifactId></span>
        <span></dependency></span>
        <span><dependency></span>
            <span><groupId></span>org.apache.felix<span></groupId></span>
            <span><artifactId></span>org.apache.felix.gogo.command<span></artifactId></span>
        <span></dependency></span>

    <span></dependencies></span>
    ...
</code></pre>
</div>

<p>Ensuite pour démarrer, felix à besoin d’un fichier de configuration. À mettre dans <code>how-assembly/src/main/resources/conf/config.properties</code>. Vous pourrez en trouver un exemplaire dans les sources et la doc des différentes propriétés est consultable <a href="https://felix.apache.org/documentation/subprojects/apache-felix-framework/apache-felix-framework-configuration-properties.html">ici</a>.</p>

<h4>Maven assembly plugin</h4>

<p>Le plugin assembly de maven va permettre de générer un tar.gz contenant la structure finale du projet. La structure que souhaité est la suivante:</p>

<pre>
/
├── application
│   ├── how-rest-1.0-SNAPSHOT.jar
│   ├── log4j-api-2.8.2.jar
│   ├── log4j-core-2.8.2.jar
│   ├── log4j-slf4j-impl-2.8.2.jar
│   └── slf4j-api-1.7.25.jar
├── archive-tmp
├── bundle
│   ├── org.apache.felix.bundlerepository-1.6.0.jar
│   ├── org.apache.felix.fileinstall-3.6.0.jar
│   ├── org.apache.felix.gogo.command-1.0.0.jar
│   ├── org.apache.felix.gogo.runtime-1.0.0.jar
│   ├── org.apache.felix.gogo.shell-1.0.0.jar
│   ├── org.osgi.compendium-4.3.1.jar
│   └── org.osgi.core-6.0.0.jar
├── conf
│   └── config.properties
└── org.apache.felix.main-5.6.6.jar
</pre>

<ul><li><strong>bundle</strong>: <em>Contenant les goodies felix</em></li>
  <li><strong>application</strong>: <em>Contenant notre application et ses dépendances</em></li>
  <li><strong>conf</strong>: <em>Contenant la configuration de felix</em></li>
</ul><p>Dans <code>how-assembly/src/main/assembly/bundle.xml</code> permet de paramétrer l’assemblage. Il va contenir 3 <code>dependencySet</code> pour les trois niveaux de hiérarchie (./, application et bundle) ainsi qu’un <code>fileSet</code> pour la configuration. Le fichier complet est visible dans les sources.</p>

<h2>Premier démarrage</h2>
<p>Une fois l’assemblage au point, on peut aller lancer la machine de guerre !</p>

<div><pre><code>mvn clean package
<span>cd </span>how-assembly/target
tar jxvf how-1.0-SNAPSHOT.tar.bz2
java -Dfelix.fileinstall.dir<span>=</span>application -jar org.apache.felix.main-5.6.6.jar
</code></pre>
</div>

<p>Et si tout se passe bien :</p>
<pre>
____________________________
Welcome to Apache Felix Gogo

g! HOW is now Activated !
</pre>

<p>Le message de notre activateur s’affiche !</p>

<h3>Gogo Shell</h3>
<p>C’est le moment de comprendre un peu mien à quoi servent les “Goodies” que l’on a ajouté dans l’assembly. Faite <code>Entrer</code> pour obtenir l’invite <code>g! </code> puis tapez la commande <code>lb</code> pour List Bundles vous devriez avoir quelque chose comme ça :</p>

<pre>
g! lb
START LEVEL 1
   ID|State      |Level|Name
    0|Active     |    0|System Bundle (5.6.6)|5.6.6
    1|Active     |    1|Apache Felix Bundle Repository (1.6.0)|1.6.0
    2|Active     |    1|Apache Felix File Install (3.6.0)|3.6.0
    3|Active     |    1|Apache Felix Gogo Command (1.0.0)|1.0.0
    4|Active     |    1|Apache Felix Gogo Runtime (1.0.0)|1.0.0
    5|Active     |    1|Apache Felix Gogo Shell (1.0.0)|1.0.0
    6|Active     |    1|osgi.cmpn (4.3.1.201210102024)|4.3.1.201210102024
    7|Active     |    1|osgi.core (6.0.0.201403061837)|6.0.0.201403061837
    8|Active     |    1|how-rest (1.0.0.SNAPSHOT)|1.0.0.SNAPSHOT
    9|Installed  |    1|slf4j-api (1.7.25)|1.7.25
</pre>

<p>Il s’agit de la liste des bundles installé et démarré dans le framework felix. Vous remarquez le bundle 8 <code>how-rest</code> marqué comme actif.</p>

<h3>Mise à jour à chaud</h3>
<p>C’est là l’un des gros points fort de OSGi, la mise à jour des bundles à chaud. C’est-à-dire que sans arrêter et relancer l’application, il est possible de mettre à jour les jars qui la compose. Par exemple, lancé l’application puis, depuis le répertoire du dossier, essayez la commande suivante :</p>

<div><pre><code>cp how-rest/target/how-rest-1.0-SNAPSHOT.jar how-assembly/target/application/
</code></pre>
</div>

<p>Dans la console de l’application, vous allez voir apparaître</p>
<pre>
____________________________
Welcome to Apache Felix Gogo

g! HOW is now Activated !
HOW is now Stopped !
HOW is now Activated !
</pre>

<p>Le log de l’activateur apparaît à nouveau. En effet, <code>fileinstall</code> a détecté la modification d’un fichier dans application et grâce à la gestion de dépendances à chaud d’OSGi, il a peu désactiver le bundle <code>how-rest</code> installer la nouvelle version et ré-activer la nouvelle version. D’où le message qui ré-apparaît. Bon après j’avoue faut en avoir l’usage, mais OSGi peut le faire …</p>

<h2>Next</h2>
<p>On a vu comment packager et lancer une application OSGi basique, comment palier certaines lourdeurs et rapidement comment lister les bundles en cours. La prochaine fois on verra l’injection de dépendances avec <strong>Declarative Service</strong> et <strong>SCR</strong>.</p>

<p><a href="https://github.com/Marthym/hello-osgi-world/tree/3.0">Code source: Part 3, Configuration du runner</a></p>

<ul><li><a href="http://blog.ght1pc9kc.fr/Hello-OSGi-World,-Part-1/">Part 1, Introduction</a></li>
  <li><a href="http://blog.ght1pc9kc.fr/Hello-OSGi-World,-Part-2/">Part 2, Premiers concepts OSGi</a></li>
  <li><a href="http://blog.ght1pc9kc.fr/">Part 3, Configuration du runner</a></li>
  <li><a href="http://blog.ght1pc9kc.fr/">Part 4, Injection de dépendances</a></li>
  <li><a href="http://blog.ght1pc9kc.fr/">Part 5, Fragment Bundles</a></li>
</ul><p><a href="http://blog.ght1pc9kc.fr/Hello-OSGi-World,-Part-3/">Hello OSGi World, Part 3, Configuration du runner</a> écrit à l'origine par Marthym pour <a href="http://blog.ght1pc9kc.fr/">J'ai acheté un PC neuf cassé ...</a> le September 09, 2017.</p>
<p><img src="media/b4d43823.16f8ed3b71457256797eac76e92d6db9" data-original-source="http://cdn.libravatar.org/avatar/16f8ed3b71457256797eac76e92d6db9" alt="Gravatar de Marthym" class="gravatar" /><br/><i>Original post of <a href="http://blog.ght1pc9kc.fr/Hello-OSGi-World,-Part-3/" title="Visit the source">Marthym</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>


feed_id: https://ordinosor.wordpress.com/2017/09/09/framakey-lapplication-des-nomades/
title: Miamondo : Framakey, l’application des nomades
uri: Miamondo-Framakey-l-application-des-nomades
url: https://ordinosor.wordpress.com/2017/09/09/framakey-lapplication-des-nomades/
content:
<p>Bonjour,</p>
<p>Je n’en finis pas de découvrir les services de Framasoft et aujourd’hui, je voudrais vous présenter  Framakey, une application pour les nomades.</p>
<h2>Framakey</h2>
<p><a href="https://framakey.org/Pack/Framakey-Mint" target="_blank" rel="noopener">Framakey</a> est un service qui va vous faire goûter aux joies du nomadisme informatique. Rassurez-vous, vous n’allez pas être obligé de vous acheter une roulotte et de parcourir des chemins défoncés en écoutant du Gipsy King. Vous aurez juste besoin de faire l’acquisition d’une clé USB d’au moins 16 GO. Pour le téléchargement, <a href="https://framakey.org/Pack/Framakey-Mint" target="_blank" rel="noopener">c’est là que ça se passe</a>.</p>
<p>Framakey vous offre la possibilité d’installer sur votre clé USB :</p>
<ul><li>le système d’exploitation Linux Mint</li>
<li>le pack de logiciels portables Framakey destiné à nos amis de la tribu Windows.</li>
<li>Des contenus et des ressources libres.</li>
</ul><p>Alors, vous allez me dire : « Mais Ordinosor, ce que tu nous présentes, c’est simplement une clé live bootable qui permet de découvrir Linux Mint et, le cas échéant, d’installer cette distribution en lieu et place (ou bien à côté) d’un système d’exploitation déjà présent sur le disque dur de ton ordinateur. Rien de bien nouveau, mon pauvre ami! »</p>
<p>Eh bien détrompez-vous! Framakey installe sur votre clé USB un système d’exploitation qui, contrairement à une vulgaire clé live, vous permet d’enregistrer  et de conserver des documents, de télécharger de nouvelles applications, d’en supprimer d’autres <strong>sans que vous ayez besoin d’installer Linux Mint sur votre disque dur</strong>. On appelle cela la persistance de données. Votre clé est persistante, c’est-à dire que si vous la démontez, le document <strong>.odt</strong> que vous venez de créer, ne vas pas disparaître. Il restera sur la clé et la prochaine fois que vous allez booter dessus, vous retrouverez votre document.</p>
<p>Ça veut dire quoi? Ça veut dire que vous avez entre les mains, un minuscule ordinateur que vous pouvez ranger dans la poche de votre blue-jean (comme on disait dans le temps) et que vous pouvez activer où bon vous semble, chez vos parents, chez vos amis, pour peu que vous ayez un ordinateur à portée de main.</p>
<p>Personnellement, j’ai fait l’installation sur une clé de 31 GB. Voici la procédure détaillée <a href="https://framakey.org/Pack/Framakey-Mint" target="_blank" rel="noopener">ici</a> :</p>
<ul><li>Télécharger Framakey Mint</li>
<li>Dézipper. Vous allez vous retrouver avec une image intitulée <strong>image_live_travail.img</strong> (Au passage, je trouve que le nom n’est pas très explicite)</li>
<li>Si vous avez bu, arrêtez-vous là et allez vous coucher. Si vous êtes à jeûn, ouvrez un terminal et utilisez la commande <strong>dd</strong> pour copier l’image sur votre clé USB d’au moins 16 GO préalablement démontée :</li>
</ul><p><strong>sudo dd bs=4M if=/home/ordinosor/image_live_travail.img of=/dev/sdc status=progress &amp;&amp; sync</strong></p>
<ul><li>Achtung! Aidez-vous de l’application <strong>disks</strong> pour repérer l’emplacement de votre clé. Dans mon cas, c’est <strong>/dev/sdc</strong>. Une simple erreur de lettre peut avoir des conséquences abominables. C’est la raison pour laquelle je vous conseille d’avoir les idées claires! Je rappelle que <strong>if</strong> signifie <strong>input file</strong> (origine) et que <strong>of</strong> signifie <strong>output file</strong> (destination).</li>
</ul><p><img data-attachment-id="17689" data-permalink="https://ordinosor.wordpress.com/2017/09/09/framakey-lapplication-des-nomades/disks/" data-orig-file="https://ordinosor.files.wordpress.com/2017/09/disks.png?w=840" data-orig-size="799,435" data-comments-opened="1" data-image-meta='{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}' data-image-title="disks" data-image-description="" data-medium-file="https://ordinosor.files.wordpress.com/2017/09/disks.png?w=840?w=300" data-large-file="https://ordinosor.files.wordpress.com/2017/09/disks.png?w=840?w=799" src="https://ordinosor.files.wordpress.com/2017/09/disks.png?w=840" alt="disks" srcset="https://ordinosor.files.wordpress.com/2017/09/disks.png 799w, https://ordinosor.files.wordpress.com/2017/09/disks.png?w=150 150w, https://ordinosor.files.wordpress.com/2017/09/disks.png?w=300 300w, https://ordinosor.files.wordpress.com/2017/09/disks.png?w=768 768w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px"></p>
<ul><li>L’opération prend un petit peu de temps et c’est bien normal. Je vous rappelle qu’il y a 16 GB à copier. C’est pas une paille!</li>
<li>Lorsque votre clé USB est prête, allez dans le BIOS de l’ordinateur que vous utilisez et modifiez l’ordre de boot.</li>
<li>Continuer la procédure de démarrage et normalement vous allez voir apparaître cet page d’accueil.</li>
</ul><p><img data-attachment-id="17769" data-permalink="https://ordinosor.wordpress.com/2017/09/09/framakey-lapplication-des-nomades/img_20170909_105116/" data-orig-file="https://ordinosor.files.wordpress.com/2017/09/img_20170909_105116.jpg?w=625&amp;h=469" data-orig-size="3264,2448" data-comments-opened="1" data-image-meta='{"aperture":"0","credit":"","camera":"HUAWEI P7 mini","caption":"","created_timestamp":"1039348800","copyright":"","focal_length":"2.96","iso":"200","shutter_speed":"0.033333333333333","title":"","orientation":"1"}' data-image-title="IMG_20170909_105116" data-image-description="" data-medium-file="https://ordinosor.files.wordpress.com/2017/09/img_20170909_105116.jpg?w=625&amp;h=469?w=300" data-large-file="https://ordinosor.files.wordpress.com/2017/09/img_20170909_105116.jpg?w=625&amp;h=469?w=840" src="https://ordinosor.files.wordpress.com/2017/09/img_20170909_105116.jpg?w=625&amp;h=469" alt="IMG_20170909_105116" width="625" height="469" srcset="https://ordinosor.files.wordpress.com/2017/09/img_20170909_105116.jpg?w=625&amp;h=469 625w, https://ordinosor.files.wordpress.com/2017/09/img_20170909_105116.jpg?w=1250&amp;h=938 1250w, https://ordinosor.files.wordpress.com/2017/09/img_20170909_105116.jpg?w=150&amp;h=113 150w, https://ordinosor.files.wordpress.com/2017/09/img_20170909_105116.jpg?w=300&amp;h=225 300w, https://ordinosor.files.wordpress.com/2017/09/img_20170909_105116.jpg?w=768&amp;h=576 768w, https://ordinosor.files.wordpress.com/2017/09/img_20170909_105116.jpg?w=1024&amp;h=768 1024w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px"></p>
<p>Alors, j’ai pris le temps de tester Framakey. Maintenant, je suis tout à fait satisfait du résultat mais il y a eu tout de même quelques déconvenues.</p>
<h3>Ce qui tient la route :</h3>
<ul><li>Le démarrage est certes lent  mais on arrive sans encombres sur le bureau</li>
<li>Aucun souci pour ouvrir le gestionnaire de fichiers.</li>
<li>La persistance de données fonctionne, rien à redire. J’ai créé un fichier et un dossier. J’ai téléchargé des photos. Après un reboot, j’ai tout retrouvé.</li>
<li>Pas de problème non plus pour ouvrir LibreOffice et travailler avec ce logiciel malgré quelques lenteurs.</li>
</ul><h3>Ce qui fut une vraie galère :</h3>
<ul><li>Internet… Je voulais terminer de rédiger cet article en utilisant le Firefox de ma clé persistante, pour faire le kéké numérique… Je n’ai jamais réussi. Les pages mettaient des plombes à charger et si j’avais voulu aller au bout de mon projet, les secours m’auraient retrouvé recroquevillé sur ma chaise à l’état de squelette. J’ai désinstallé Firefox et installé Midori. Même punition. J’ai installé Chromium et là, miracle, ça fonctionne très bien. Évidemment, c’est un peu plus lent mais c’est tout à fait raisonnable. Ouf! Je me voyais déjà terminer cet article sur un constat d’échec!</li>
</ul><p>C’est donc en utilisant le Chromium de ma clé persistante que je rédige ces dernières lignes et que je vous souhaite un excellent week-end.</p>
<p>Mince alors! Ma sacoche est trop grande maintenant!</p>
<figure data-shortcode="caption"><img data-attachment-id="17766" data-permalink="https://ordinosor.wordpress.com/2017/09/09/framakey-lapplication-des-nomades/img_20170909_095544/" data-orig-file="https://ordinosor.files.wordpress.com/2017/09/img_20170909_095544-e1504967562154.jpg?w=637&amp;h=479" data-orig-size="3259,2448" data-comments-opened="1" data-image-meta='{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}' data-image-title="IMG_20170909_095544" data-image-description="" data-medium-file="https://ordinosor.files.wordpress.com/2017/09/img_20170909_095544-e1504967562154.jpg?w=637&amp;h=479?w=300" data-large-file="https://ordinosor.files.wordpress.com/2017/09/img_20170909_095544-e1504967562154.jpg?w=637&amp;h=479?w=840" src="https://ordinosor.files.wordpress.com/2017/09/img_20170909_095544-e1504967562154.jpg?w=637&amp;h=479" alt="IMG_20170909_095544" width="637" height="479" srcset="https://ordinosor.files.wordpress.com/2017/09/img_20170909_095544-e1504967562154.jpg?w=637&amp;h=479 637w, https://ordinosor.files.wordpress.com/2017/09/img_20170909_095544-e1504967562154.jpg?w=1274&amp;h=958 1274w, https://ordinosor.files.wordpress.com/2017/09/img_20170909_095544-e1504967562154.jpg?w=150&amp;h=113 150w, https://ordinosor.files.wordpress.com/2017/09/img_20170909_095544-e1504967562154.jpg?w=300&amp;h=225 300w, https://ordinosor.files.wordpress.com/2017/09/img_20170909_095544-e1504967562154.jpg?w=768&amp;h=577 768w, https://ordinosor.files.wordpress.com/2017/09/img_20170909_095544-e1504967562154.jpg?w=1024&amp;h=769 1024w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px"><figcaption>Mince alors! Ma sacoche est trop grande maintenant!</figcaption></figure><br><a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ordinosor.wordpress.com/17600/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ordinosor.wordpress.com/17600/"></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=ordinosor.wordpress.com&amp;blog=88640341&amp;post=17600&amp;subd=ordinosor&amp;ref=&amp;feed=1" width="1" height="1">
<p><img src="media/848c13f4.27be241458674ac3359b0353fdc37c4a" data-original-source="http://cdn.libravatar.org/avatar/27be241458674ac3359b0353fdc37c4a" alt="Gravatar de Miamondo" class="gravatar" /><br/><i>Original post of <a href="https://ordinosor.wordpress.com/2017/09/09/framakey-lapplication-des-nomades/" title="Visit the source">Miamondo</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>


title: Journal du hacker : Liens intéressants Journal du hacker semaine #36
uri: 2017-09-11-Journal-du-hacker-Liens-intéressants-Journal-du-hacker-semaine-36
feed_id:
https://blog.journalduhacker.net/index.php?article124/liens-interessants-journal-du-hacker-semaine-36-2017

url:
https://blog.journalduhacker.net/index.php?article124/liens-interessants-journal-du-hacker-semaine-36-2017

content:
<p>Pour la 36ème semaine de 2017, voici <strong>10 liens</strong> intéressants que vous avez peut-être ratés, relayés par <a href="https://www.journalduhacker.net/">le Journal du hacker</a>, votre source d’informations pour le Logiciel Libre francophone !</p>

<a href="https://www.journalduhacker.net/"><img src="media/01f45034.logo-journal-du-hacker.png" data-original-source="https://blog.journalduhacker.net/data/medias/logo-journal-du-hacker.png"></a>

<ul><li><a href="https://www.journalduhacker.net/s/j1lwse/o_en_est_f_droid_aujourd_hui">Où en est F-Droid aujourd’hui ?</a></li>
<li><a href="https://www.journalduhacker.net/s/4pd1ys/comment_prot_ger_sa_vie_priv_e_sur_internet">Comment protéger sa vie privée sur Internet en 6 étapes (par la CNIL et en vidéo)</a></li>
<li><a href="https://www.journalduhacker.net/s/qk6d60/qupzilla_rejoint_le_projet_kde_le">QupZilla rejoint le projet KDE, le navigateur change de nom et devient Falkon</a></li>
<li><a href="https://www.journalduhacker.net/s/8ehxqz/la_licence_de_react_est_elle_une_menace">La licence de React est-elle une menace ?</a></li>
<li><a href="https://www.journalduhacker.net/s/k9jqce/mise_en_place_d_une_authentification_deux">Mise en place d’une authentification à deux facteurs sur un système Linux </a></li>
<li><a href="https://www.journalduhacker.net/s/cpfdks/3_dordinateurs_personnels_sous_linux">3% d'ordinateurs personnels sous Linux</a></li>
<li><a href="https://www.journalduhacker.net/s/zte9ht/la_mort_de_solaris_et_de_sparc">La mort de SOLARIS et de SPARC</a></li>
<li><a href="https://www.journalduhacker.net/s/agxj1t/raspberry_pi_comment_configurer_gammu">Raspberry Pi : comment configurer gammu (SMS)</a></li>
<li><a href="https://www.journalduhacker.net/s/rbwzck/ansible_tower_passe_opensource">Ansible Tower passe OpenSource</a></li>
<li><a href="https://www.journalduhacker.net/s/3kunxl/sortie_d_openshot_qt_2_4_0">Sortie d’ Openshot QT 2.4.0</a></li>
</ul><p>Pour ne plus rater aucun article de la communauté francophone, voici :</p>

<ul><li><a href="https://www.journalduhacker.net/rss">Le flux RSS du Journal du hacker</a></li>
<li><a href="https://twitter.com/journalduhacker">Le compte Twitter du Journal du hacker</a></li>
<li><a href="https://framasphere.org/u/journalduhacker">Le compte Diaspora* du Journal du hacker</a></li>
<li><a href="https://framapiaf.org/@journalduhacker">Le compte Mastodon du Journal du hacker</a></li>
</ul><p>De plus le site web du Journal du hacker est « adaptatif (responsive) ». N’hésitez pas à le consulter depuis votre smartphone ou votre tablette !</p>

<p>Le Journal du hacker fonctionne de manière collaborative, grâce à la participation de ses membres. <a href="https://www.journalduhacker.net/invitations/request">Rejoignez-nous</a> pour proposer vos contenus à partager avec la communauté du Logiciel Libre francophone et faire connaître vos projets !</p>

<p><strong>Et vous ? Qu’avez-vous pensé de ces articles ?</strong> N’hésitez pas à réagir directement dans les commentaires de l’article sur le Journal du hacker ou bien dans les commentaires de ce billet :)</p>
<p><img src="media/ffe97a17.7916ee3cafa0bc3e9583bedad876dcd5" data-original-source="http://cdn.libravatar.org/avatar/7916ee3cafa0bc3e9583bedad876dcd5" alt="Gravatar de Journal du hacker" class="gravatar" /><br/><i>Original post of <a href="https://blog.journalduhacker.net/index.php?article124/liens-interessants-journal-du-hacker-semaine-36-2017" title="Visit the source">Journal du hacker</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>Carl Chenet : <a href="">Liens int&eacute;ressants Journal du hacker semaine #36</a> (07/09/2015)</li><li>Journal du hacker : <a href="">Liens int&eacute;ressants Journal du hacker semaine #36</a> (12/09/2016)</li></ul></div></p>


feed_id: http://yeknan.free.fr/dc2/index.php?post/2017/09/10/Scratch-2-offline-sous-Debian-64-bits
title: yeKcim : Scratch 2 offline sous Debian 64 bits
uri: yeKcim-Scratch-2-offline-sous-Debian-64-bits
url: http://yeknan.free.fr/dc2/index.php?post/2017/09/10/Scratch-2-offline-sous-Debian-64-bits
content:
<p>Je viens d’acheter « Crée ton jeu de casse-briques avec Scratch » pour que mon fils de 10 ans s’amuse (mon fils de 6 ans a commencé à le lire également…). Le livre a l’air intéressant mais pour en suivre les conseils il faut Scratch 2 et non Scratch 1.4 (présent dans les dépôts).</p>


<p><img src="media/8219e508..51QNxfVRvIL._SX340_BO1_204_203_200__s.jpg" data-original-source="http://yeknan.free.fr/dc2/public/.51QNxfVRvIL._SX340_BO1_204_203_200__s.jpg" alt="51QNxfVRvIL._SX340_BO1_204_203_200_.jpg" title="51QNxfVRvIL._SX340_BO1_204_203_200_.jpg, sept. 2017"></p>


<p>L’installation de Scratch2 sous Debian 64 bits est plus ou moins une horreur. Il faut dire qu’il est nécessaire d’installer Adobe Air au préalable et comme toujours avec les produits Adobe, c’est l’enfer…</p>


<p>Après avoir suivi différents tutos sans succès, je désespérais tellement que je pensais à l’installer via Wine, mais j’ai fini par tomber sur une <a href="https://cyrille-borne.com/bozon/index.php?f=15992b2a6216f2">documentation claire et efficace</a>. Comme il s’agit d’un pdf, les copier/coller sont parfois source de problèmes (retour chariot intempestif). Comme j’ai trouvé cette notice après beaucoup d’acharnement (pas de résultat lors des recherches sur le blog de l’auteur par exemple, j’ai peur de perdre les informations à long terme, je préfère donc en avoir une copie ici (instructions auxquelles j’ai apporté quelques très légères modifications) :</p>


<h2>i386</h2>
<pre>
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install libgtk2.0-0:i386 libstdc++6:i386 libxml2:i386 libxslt1.1:i386 libcanberra-gtk-module:i386 gtk2-engines-murrine:i386 libqt4-qt3support:i386 libgnome-keyring0:i386 libnss-mdns:i386 libnss3:i386
</pre>


<h2>Liens symboliques</h2>
<pre>
sudo ln -s /usr/lib/i386-linux-gnu/libgnome-keyring.so.0/usr/lib/libgnome-keyring.so.0
sudo ln -s /usr/lib/i386-linux-gnu/libgnome-keyring.so.0.2.0/usr/lib/libgnome-keyring.so.0.2.0
</pre>


<h2>Adobe Air SDK</h2>
<pre>
sudo mkdir /opt/adobe-air-sdk
wget http://airdownload.adobe.com/air/lin/download/2.6/AdobeAIRSDK.tbz2 -O /tmp/AdobeAIRSDK.tbz2
sudo tar jxf /tmp/AdobeAIRSDK.tbz2 -C /opt/adobe-air-sdk
</pre>


<h2>Adobe Air</h2>
<pre>
wget https://aur.archlinux.org/cgit/aur.git/snapshot/adobe-air.tar.gz -O /tmp/adobe-air.tar.gz
sudo tar xvf /tmp/adobe-air.tar.gz -C /opt/adobe-air-sdk
sudo chmod +x /opt/adobe-air-sdk/adobe-air/adobe-air
</pre>


<h2>Scratch-456.0.4</h2>

<p>À adapter s’il y a une nouvelle version <a href="https://scratch.mit.edu/download">ici</a></p>
<pre>
sudo mkdir /opt/adobe-air-sdk/scratch
wget https://scratch.mit.edu/scratchr2/static/sa/Scratch-456.0.4.air -O /tmp/Scratch-456.0.4.air
sudo cp /tmp/Scratch-456.0.4.air /opt/adobe-air-sdk/scratch/
</pre>


<h2>Extraction de l’icône du jeu</h2>
<pre>
sudo unzip -j /opt/adobe-air-sdk/scratch/Scratch-456.0.4.air icons/AppIcon128.png -d /opt/adobe-air-sdk/scratch/
</pre>


<h2>Création d’un raccourci</h2>
<pre>
sudo nano /usr/share/applications/scratch2.desktop
</pre>


<blockquote><p>[Desktop Entry]<br>
Encoding=UTF-8<br>
Version=1.0<br>
Type=Application<br>
Exec=/opt/adobe-air-sdk/adobe-air/adobe-air /opt/adobe-air-sdk/scratch/Scratch-456.0.4.air<br>
Icon=/opt/adobe-air-sdk/scratch/AppIcon128.png<br>
Terminal=false<br>
Name=Scratch 2<br>
Comment=Programming system and content development tool<br>
Categories=Application;Education;Development;ComputerScience;<br>
MimeType=application/x-scratch-project<br></p></blockquote>


<p>Une fois l’application lancée, il est possible d’en changer la langue en cliquant sur le globe à gauche du menu « File ».</p>
<p><img src="media/65f43998.8b70e267df0d5c51c47866aa89a16ffc" data-original-source="http://cdn.libravatar.org/avatar/8b70e267df0d5c51c47866aa89a16ffc" alt="Gravatar de yeKcim" class="gravatar" /><br/><i>Original post of <a href="http://yeknan.free.fr/dc2/index.php?post/2017/09/10/Scratch-2-offline-sous-Debian-64-bits" title="Visit the source">yeKcim</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>


title: alterlibriste : L'Apéro des Papas Manchots a son propre site
uri: alterlibriste-L-Apéro-des-Papas-Manchots-a-son-propre-site
feed_id:
http://alterlibriste.free.fr/index.php?post/2017/09/10/L-Ap%C3%A9ro-des-Papas-Manchots-a-son-propre-site

url:
http://alterlibriste.free.fr/index.php?post/2017/09/10/L-Ap%C3%A9ro-des-Papas-Manchots-a-son-propre-site

content:
<p><img src="media/1b926c65.images-duckduckgo-com.png" data-original-source="http://www.bloguelinux.ca/wp-content/uploads/2016/12/images-duckduckgo-com.png" alt=""></p> <p>C’est avec joie que toute l’équipe du podcast l’Apéro des Papas Manchots vous annonce l’ouverture du site <a href="http://donkluivert.fr/">Donkluivert.fr</a>. Jusque-là, les épisodes étaient aimablement hébergés par <a href="http://www.bloguelinux.ca/">BlogueLinux.ca</a>, désormais l’émission vole de ses propres ailes. Les poditeurs réguliers ou nouveaux venus vont donc pouvoir glisser le nouveau <a href="http://donkluivert.cluster1.easy-hebergement.net/">flux rss</a> dans leur agrégateur de podcast afin de ne louper aucun épisode.</p>


<p>J’avais déjà eu l’occasion de faire une <a href="http://alterlibriste.free.fr/index.php?post/2017/03/24/Podcasting-%3A-L-ap%C3%A9ro-des-papas-manchots">critique</a> (toujours d’actualité) qui m’a valu une <a href="http://alterlibriste.free.fr/index.php?post/2017/05/02/Participation-%C3%A0-l-Ap%C3%A9ro-des-papas-manchots">invitation</a> et me voilà maintenant embarqué dans l’aventure dans laquelle je prends bien du plaisir.</p>


<p>Le dernier épisode en date est celui de rentrée enregistré le week-end dernier ; on y parle de nos (més)aventures estivales, du téléphone Librem 5 et de quelques trucs et astuces, toujours dans une ambiance conviviale autour de l’apéro.</p>


<p>Notre ambition n’est pas d’aller trop loin dans la technique, d’ailleurs nous y serions probablement assez médiocre, mais d’échanger sur nos usages des technologies et des logiciels (plus ou moins) libres dans nos contextes familiaux.</p>


<p>C’est donc plus un partage d’expériences avec toutes les dérives culturelles ou humoristiques qu’elles permettent qu’un véritable guide à l’usage du libriste.</p>


<p>Retrouvez-nous tous les mois pour 2h30 en roue libre !</p>
<p><img src="media/2a099e18.9ff6af75660c788842bdb4e186b8909f" data-original-source="http://cdn.libravatar.org/avatar/9ff6af75660c788842bdb4e186b8909f" alt="Gravatar de alterlibriste" class="gravatar" /><br/><i>Original post of <a href="http://alterlibriste.free.fr/index.php?post/2017/09/10/L-Ap%C3%A9ro-des-Papas-Manchots-a-son-propre-site" title="Visit the source">alterlibriste</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>alterlibriste : <a href="">Podcasting : L&#039;ap&eacute;ro des papas manchots</a> (24/03/2017)</li></ul></div></p>


feed_id: https://angristan.fr/seedbox-installer-client-rutorrent-debian-9/
title: Angristan : Seedbox : installer le client ruTorrent sous Debian 9
uri: Angristan-Seedbox-installer-le-client-ruTorrent-sous-Debian-9
url: https://angristan.fr/seedbox-installer-client-rutorrent-debian-9/
content:
<p><img width="480" height="270" src="media/5c6f5e08.debian_9_rutorrent-480x270.jpg" data-original-source="https://angristan.fr/wp-content/uploads/2017/08/debian_9_rutorrent-480x270.jpg" alt="" srcset="https://angristan.fr/wp-content/uploads/2017/08/debian_9_rutorrent-480x270.jpg 480w, https://angristan.fr/wp-content/uploads/2017/08/debian_9_rutorrent-300x169.jpg 300w, https://angristan.fr/wp-content/uploads/2017/08/debian_9_rutorrent-1024x576.jpg 1024w" sizes="(max-width: 480px) 100vw, 480px"></p><p>Après vous avoir présenté <a href="https://angristan.fr/seedbox-installer-client-torrent-transmission-debian-ubuntu/">Transmission</a> et <a href="https://angristan.fr/seedbox-installer-client-torrent-flood-debian-8/">Flood</a>, voici un autre client torrent incontournable pour votre seedbox : <a href="https://github.com/Novik/ruTorrent">ruTorrent</a>. Tout comme Flood, c'est une interface web libre pour <a href="http://rakshasa.github.io/rtorrent/">rTorrent</a>, mais elle est cette fois-ci propulsée par PHP et non pas Node.js.</p>
<p>L'interface de ruTorrent est clairement moins moderne que Flood, mais elle reste néanmoins ergonomique et complète. Aussi, on peut ajouter de nombreux plugins, mais je ne vais pas couvrir l'installation de ceux-ci dans ce tutoriel.<span></span></p>
<p><a href="media/e2209231.rutorrent_interface.png" data-original-source="https://angristan.fr/wp-content/uploads/2017/09/rutorrent_interface.png"><img src="media/e2209231.rutorrent_interface.png" data-original-source="https://angristan.fr/wp-content/uploads/2017/09/rutorrent_interface.png" alt="Interface ruTorrent" width="1919" height="879"></a></p>

<h2>Une Seedbox ?</h2>
<p>Une seedbox est un serveur dédié au téléchargement et au partage de fichiers torrents. Transmission est une interface web qui nous permet de télécharger ces fichiers.</p>
<p>Pourquoi avoir une seedbox ? Le fait que ce soit un serveur signifie que :</p>
<p>• vous avez beaucoup de stockage
• vous avez beaucoup de bande passante, donc des téléchargements rapides
• vous n’êtes pas surveillés par HADOPI
• vous pouvez regarder vos films ou séries en streaming depuis votre serveur.</p>

<h2>Installation</h2>
<h3>Installation des dépendances</h3>
<pre>apt install screen unzip</pre>
<h3>Installation de rTorrent</h3>
<p>Contrairement à mon article pour <a href="https://angristan.fr/seedbox-installer-client-torrent-flood-debian-8/">installer Flood</a>, qui concernait Debian 8, on peut directement installer rTorrent et libtorrent depuis les dépôts, sans les compiler, puisqu'ils sont disponibles dans leur dernière version.</p>

<pre>apt install rtorrent</pre>
<h3>Configuration de rTorrent</h3>
<p>On crée un utilisateur pour rTorrent :</p>

<pre>adduser --disabled-password rtorrent</pre>
<p>On édite la configuration de rTorrent :</p>

<pre>nano /home/rtorrent/.rtorrent.rc</pre>
<p>Et on ajoute ceci :</p>

<pre># Vitesse de téléchargement max up/down, en KiB. "0" équivaut à aucune limite. 
download_rate = 0
upload_rate = 10000

# Nombre maximal de téléchargements simultanés
max_downloads_global = 10

# Nombre maximal de peers par torrent
max_peers = 100

# Nombre maximal de peers à upload par torrent
max_uploads = 20

# Répertoire qui contient les fichiers téléchargés.
directory = /srv/seedbox/downloads

# Répertoire où rTorrent stocke l'état de téléchargement des torrents.
session = /srv/seedbox/.session

# Ports utilisables par rTorrent. 2x la même valeur = 1 port
port_range = 49999-49999
port_random = no

# Vérification des données à la fin du téléchargement
check_hash = yes

# Activation de DHT pour les torrents sans trackers.
# À désactiver si vous utilisez des trackers privés
dht = auto
dht_port = 6881
peer_exchange = yes

# On préfère les échanges avec chiffrement
encryption = allow_incoming,try_outgoing,enable_retry

# On autorise les trackers UDP
use_udp_trackers = yes

# Port SCGI, on en a besoin pour communiquer avec ruTorrent
scgi_port = 127.0.0.1:5000</pre>
<p>On applique les bonnes permissions au dossier de rTorrent :</p>

<pre>chown rtorrent:rtorrent /home/rtorrent/</pre>
<p>On crée les dossiers de téléchargement et on applique les permissions :</p>

<pre>mkdir -p /srv/seedbox/{downloads,.session}
chown rtorrent:rtorrent -R /srv/seedbox/</pre>
<p>Ensuite on crée un service systemd pour rTorrent qui nous permet de le démarrer et de l'arrêter.</p>

<pre>nano /etc/systemd/system/rtorrent.service</pre>
<pre>[Unit]
 Description=rTorrent
 After=network.target

[Service]
 User=rtorrent
 Type=forking
 KillMode=none
 ExecStart=/usr/bin/screen -d -m -fa -S rtorrent /usr/bin/rtorrent
 ExecStop=/usr/bin/killall -w -s 2 /usr/bin/rtorrent
 WorkingDirectory=%h

[Install]
 WantedBy=default.target

 systemctl daemon-reload
 systemctl enable rtorrent.service
 systemctl start rtorrent.service</pre>
<h3>Installation de ruTorrent</h3>
<p>On télécharge les fichiers de ruTorrent :</p>

<pre>cd /srv/
wget https://github.com/Novik/ruTorrent/archive/v3.8.zip
unzip v3.8.zip
rm v3.8.zip
mv ruTorrent-3.8/ seedbox/rutorrent</pre>
<p>On y applique les bonnes permissions pour que PHP y ait accès :</p>

<pre>chown www-data:www-data -R /srv/seedbox/rutorrent
chmod 775 -R /srv/seedbox</pre>
<h3>Installation de PHP</h3>
<p>On installe PHP-FPM 7.0 depuis les dépôts :</p>

<pre>apt install php7.0 php7.0-fpm</pre>
<h3>Génération du certificat avec Let's Encrypt</h3>
<p>On installe le client letsencrypt :</p>

<pre>apt install letsencrypt</pre>
<p>Puis on génère un certificat signé par une clé RSA 4096 bits. Mettez votre domaine et votre adresse mail dans la commande ci-dessous.</p>

<pre>letsencrypt certonly -d seedbox.hadopi.fr --agree-tos -m contact@hadopi.fr --rsa-key-size 4096 --standalone</pre>
<h3>Configuration du serveur web Nginx</h3>
<p>On installe nginx :</p>

<pre>apt install nginx</pre>
<p>Ensuite on va créer un couple utilisateur / mot de passe pour protéger l'accès à ruTorrent via une authentification HTTP.</p>

<pre>apt install apache2-utils
htpasswd -c /etc/nginx/auth utilisateur</pre>
<p>Ensuite on configure nginx:</p>

<pre>nano /etc/nginx/conf.d/seedbox.conf</pre>
<p>Modifiez le domaine ci-dessous par le votre.</p>

<pre>server {
 listen 80;
 listen [::]:80;
 server_name seedbox.hadopi.fr;
 return 301 https://seedbox.hadopi.fr$request_uri;

 access_log /dev/null;
 error_log /dev/null;
}
 server {
 listen 443 ssl http2;
 listen [::]:443 ssl http2;
 server_name seedbox.hadopi.fr;
 root /srv/seedbox/rutorrent/;
 index index.html;

 access_log /var/log/nginx/rutorrent-access.log;
 error_log /var/log/nginx/rutorrent-error.log;

 auth_basic "Fermé!";
 auth_basic_user_file /etc/nginx/auth;

 ssl_certificate /etc/letsencrypt/live/seedbox.hadopi.fr/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/seedbox.hadopi.fr/privkey.pem;
 ssl_trusted_certificate /etc/letsencrypt/live/seedbox.hadopi.frchain.pem;

 ssl_protocols TLSv1.2;
 ssl_ecdh_curve X25519:P-521:P-384:P-256;
 ssl_ciphers EECDH+CHACHA20:EECDH+AESGCM:EECDH+AES;
 ssl_prefer_server_ciphers on;
 ssl_stapling on;
 ssl_stapling_verify on;
 resolver 80.67.169.12 80.67.169.40 valid=300s;
 resolver_timeout 5s;
 ssl_session_cache shared:SSL:10m;

 location ~* \\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf|x-html|html|css|xml|js|woff|woff2|ttf|svg|eot)$ {
  expires 30d;
  access_log off;
  log_not_found off;
 }

 location / {
  try_files $uri $uri/ =404;
 }

 location /RPC2 {
  include /etc/nginx/scgi_params;
  scgi_pass 127.0.0.1:5000;
 }

 location ~ \\.php$ {
  try_files $uri =404;
  fastcgi_pass unix:/run/php/php7.0-fpm.sock;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  include fastcgi_params;
  fastcgi_intercept_errors on;
  fastcgi_ignore_client_abort off;
  fastcgi_connect_timeout 60;
  fastcgi_send_timeout 180;
  fastcgi_read_timeout 180;
  fastcgi_buffers 4 256k;
  fastcgi_buffer_size 128k;
  fastcgi_busy_buffers_size 256k;
  fastcgi_temp_file_write_size 256k;
 }
}</pre>
<h3>Configuration de ruTorrent</h3>
<p>Vous allez probablement avoir ce genre d'erreurs si vous allez sur ruTorrent :</p>
<p><a href="media/51df224c.rutorrent_dC3A9pendances.png" data-original-source="https://angristan.fr/wp-content/uploads/2017/09/rutorrent_d%C3%A9pendances.png"><img src="media/51df224c.rutorrent_dC3A9pendances.png" data-original-source="https://angristan.fr/wp-content/uploads/2017/09/rutorrent_d%C3%A9pendances.png" alt="Erreurs ruTorrent" width="1053" height="159"></a></p>
<p>Ce ne sont pas des erreurs bloquantes, mais mieux vaut ne pas en avoir !</p>
<p>On installe donc les dépendances nécessaires :</p>

<pre>apt install unrar mediainfo ffmpeg curl</pre>
<p>Personnellement j'ai du aller modifier le fichier de conf de ruTorrent pour spécifier l'emplacement de curl :</p>

<pre>nano /srv/seedbox/rutorrent/conf/config.php</pre>
<p>Comme ceci :</p>
<p><a href="media/d57b41eb.rutorrent_config.png" data-original-source="https://angristan.fr/wp-content/uploads/2017/09/rutorrent_config.png"><img src="media/d57b41eb.rutorrent_config.png" data-original-source="https://angristan.fr/wp-content/uploads/2017/09/rutorrent_config.png" alt="Configuration ruTorrent" width="1295" height="194"></a></p>

<h2>Enjoy</h2>
<p>Et voilà, vous pouvez accéder à votre client torrent super performant via <code>https://votre-domaine</code>.</p>
<p>Je vous laisser faire un tour dans les réglages et télécharger des distributions GNU/Linux ;)</p>
<p><a href="media/e2209231.rutorrent_interface.png" data-original-source="https://angristan.fr/wp-content/uploads/2017/09/rutorrent_interface.png"><img src="media/e2209231.rutorrent_interface.png" data-original-source="https://angristan.fr/wp-content/uploads/2017/09/rutorrent_interface.png" alt="Interface ruTorrent" width="1919" height="879"></a></p><p>L'article <a rel="nofollow" href="https://angristan.fr/seedbox-installer-client-rutorrent-debian-9/">Seedbox : installer le client ruTorrent sous Debian 9</a> a été publié sur <a rel="nofollow" href="https://angristan.fr/">Angristan</a></p>
<p><img src="media/40491783.6296566c96741c84fec8de9da966d261" data-original-source="http://cdn.libravatar.org/avatar/6296566c96741c84fec8de9da966d261" alt="Gravatar de Angristan" class="gravatar" /><br/><i>Original post of <a href="https://angristan.fr/seedbox-installer-client-rutorrent-debian-9/" title="Visit the source">Angristan</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>Angristan : <a href="">Seedbox : installer le client torrent Transmission sous Debian et Ubuntu</a> (21/10/2016)</li><li>Angristan : <a href="">Seedbox : installer le client torrent Flood sous Debian&nbsp;8</a> (24/10/2016)</li><li>Angristan : <a href="">Compiler et installer Nginx avec le module PageSpeed sous Debian 8</a> (10/04/2016)</li><li>Angristan : <a href="">Installer HHVM avec fallback PHP-FPM sous Debian 8 et Nginx</a> (17/10/2015)</li><li>Angristan : <a href="">Installer PHP 7 sous Debian Jessie via le d&eacute;p&ocirc;t Dotdeb</a> (19/12/2015)</li></ul></div></p>


feed_id: https://olpc-france.org/blog/2017/09/sugarizer-v0-9-est-disponible/
title: OLPC France : Sugarizer v0.9 est disponible
uri: OLPC-France-Sugarizer-v0-9-est-disponible
url: https://olpc-france.org/blog/2017/09/sugarizer-v0-9-est-disponible/
content:
<p>Nous vous l’avions annoncé dans la conférence de notre <a href="https://olpc-france.org/blog/2017/08/sugarizer-en-route-pour-la-version-1/">précédent article</a> de blog, Sugarizer v0.9, la nouvelle version de la plate-forme pédagogique libre, est désormais disponible !</p>
<p>Vous pouvez le tester ou le télécharger pour votre machine (Android, iOS, Windows, Chrome OS) sur <a href="http://sugarizer.org/">http://sugarizer.org </a></p>
<p>Et en bonus un panorama en 20 secondes des nouveautés:</p>
<p><a href="media/ff51bded.sugarizer_v0.9.gif" data-original-source="https://olpc-france.org/blog/wp-content/uploads/2017/09/sugarizer_v0.9.gif"><img src="media/ff51bded.sugarizer_v0.9.gif" data-original-source="https://olpc-france.org/blog/wp-content/uploads/2017/09/sugarizer_v0.9.gif" alt="" width="2274" height="1364"></a></p>
<p><img src="media/555f14a0.b5a4c4b23233d8623b213fb0469dfcd5" data-original-source="http://cdn.libravatar.org/avatar/b5a4c4b23233d8623b213fb0469dfcd5" alt="Gravatar de OLPC France" class="gravatar" /><br/><i>Original post of <a href="https://olpc-france.org/blog/2017/09/sugarizer-v0-9-est-disponible/" title="Visit the source">OLPC France</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>OLPC France : <a href="">Vid&eacute;o de la pr&eacute;sentation Sugarizer &agrave; Scratch2017bdx</a> (22/07/2017)</li><li>OLPC France : <a href="">Sugarizer, en route pour la version 1</a> (28/08/2017)</li><li>OLPC France : <a href="">Projet Saint-Denis : c&rsquo;est parti !</a> (27/03/2012)</li><li>OLPC France : <a href="">Nosy Komba 2012: c&rsquo;est parti !</a> (27/05/2012)</li><li>OLPC France : <a href="">[Nosy Komba] De la logistique et de la p&eacute;dagogie</a> (13/06/2012)</li></ul></div></p>


feed_id: https://carlchenet.com/le-meilleur-du-journal-du-hacker-une-fois-par-semaine-dans-vos-e-mails/
title: Carl Chenet : Le meilleur du Journal du hacker une fois par semaine dans vos e-mails
uri: Carl-Chenet-Le-meilleur-du-Journal-du-hacker-une-fois-par-semaine-da
url: https://carlchenet.com/le-meilleur-du-journal-du-hacker-une-fois-par-semaine-dans-vos-e-mails/
content:
<p>Je lance une nouvelle newsletter <a href="https://lecourrierduhacker.com/">Le Courrier du hacker</a>, publiée le vendredi (1ère édition vendredi 15 septembre) qui fournira dans un format condensé le meilleur des articles publiés sur <a href="https://www.journalduhacker.net/">le Journal du hacker</a>, le relais des meilleurs contenus de la communauté du Logiciel Libre francophone.</p>
<p><a href="https://lecourrierduhacker.com/"><img src="media/848ce166.courrierduhacker-logo.png" data-original-source="https://carlchenet.com/wp-content/uploads/2017/09/courrierduhacker-logo.png" alt="" width="818" height="168" srcset="https://carlchenet.com/wp-content/uploads/2017/09/courrierduhacker-logo.png 818w, https://carlchenet.com/wp-content/uploads/2017/09/courrierduhacker-logo-300x62.png 300w, https://carlchenet.com/wp-content/uploads/2017/09/courrierduhacker-logo-768x158.png 768w" sizes="(max-width: 818px) 100vw, 818px"></a></p>

	<section><form method="POST" data-attr-form-id="1">

													<label for="EMAIL">

										<!-- dictate label visibility -->
																					<span>
												E-mail											</span>
										
										<!-- Description Above -->
										
										<input name="EMAIL" placeholder="" required="required" type="email" value=""><!-- Description Below --></label>
									
				<!-- Honeypot Trap -->
				<input type="hidden" name="yikes-mailchimp-honeypot" value=""><!-- List ID --><input type="hidden" name="yikes-mailchimp-associated-list-id" value="22e5c06162"><!-- The form that is being submitted! Used to display error/success messages above the correct form --><input type="hidden" name="yikes-mailchimp-submitted-form" value="1"><!-- Submit Button --><button type="submit"> <span>S'abonner</span></button>				<!-- Nonce Security Check -->
				<input type="hidden" name="yikes_easy_mc_new_subscriber" value="cc12747a98"><input type="hidden" name="_wp_http_referer" value="/category/planet-libre/feed/"></form>
			<!-- MailChimp Form generated by Easy Forms for MailChimp v6.3.24 (https://wordpress.org/plugins/yikes-inc-easy-mailchimp-extender/) -->

			</section><p><strong>Il s’agira d’un projet personnel, non-officiel et indépendant du Journal du hacker.</strong></p>
<p>En effet cette précision est importante car je suis <a href="https://www.journalduhacker.net/u/carlchenet">l’un des fondateurs</a> du Journal du hacker et on pourrait donc attendre que je ne consacre à mon activité vis-à-vis du Journal que des projets visant à l’améliorer directement. Mais je suis très satisfait de l’actuel Journal du hacker, nous avons une nouvelle version dans les tuyaux qui entrera en production d’ici la fin de l’année et le développement de ce média aujourd’hui âgé de 2 ans et demi m’impressionne. Présent sur <a href="https://twitter.com/journalduhacker">Twitter</a>, <a href="https://framasphere.org/u/journalduhacker">Diaspora*</a> et <a href="https://framapiaf.org/@journalduhacker">Mastodon</a>, la circulation sur les réseaux sociaux des contenus qui y sont relayés est incroyable.</p>
<p><a href="https://twitter.com/journalduhacker"><img src="media/6b349511.journalduhacker-sur-twitter.png" data-original-source="https://carlchenet.com/wp-content/uploads/2017/09/journalduhacker-sur-twitter.png" alt="" width="519" height="301" srcset="https://carlchenet.com/wp-content/uploads/2017/09/journalduhacker-sur-twitter.png 914w, https://carlchenet.com/wp-content/uploads/2017/09/journalduhacker-sur-twitter-300x174.png 300w, https://carlchenet.com/wp-content/uploads/2017/09/journalduhacker-sur-twitter-768x446.png 768w" sizes="(max-width: 519px) 100vw, 519px"></a></p>
<p>Je souhaite encourager par cette initiative l’appropriation par tous du Journal du hacker. Il s’agit d’un média communautaire auquel chacun peut participer directement ou en interagissant indirectement en exploitant son contenu.</p>
<p>Le meilleur du Journal du hacker une fois par semaine directement dans vos e-mails ? <a href="https://lecourrierduhacker.com/">Abonnez-vous donc au Courrier du hacker !</a></p>
<p><img src="media/46f73009.e1f1addc890668ce2561431b7be810bc" data-original-source="http://cdn.libravatar.org/avatar/e1f1addc890668ce2561431b7be810bc" alt="Gravatar de Carl Chenet" class="gravatar" /><br/><i>Original post of <a href="https://carlchenet.com/le-meilleur-du-journal-du-hacker-une-fois-par-semaine-dans-vos-e-mails/" title="Visit the source">Carl Chenet</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>Carl Chenet : <a href="">Le Journal Du Hacker remplace le Journal Du Pirate</a> (23/07/2015)</li><li>Carl Chenet : <a href="">Le Journal du hacker choisit son logo !</a> (27/07/2015)</li><li>Carl Chenet : <a href="">Liens int&eacute;ressants Journal Du Hacker semaine #31</a> (31/07/2015)</li><li>Carl Chenet : <a href="">Le Journal du hacker choisit son nom de domaine !</a> (24/08/2015)</li><li>Carl Chenet : <a href="">Liens int&eacute;ressants Journal du hacker semaine #35</a> (27/08/2015)</li></ul></div></p>


feed_id: https://ordinosor.wordpress.com/2017/09/12/creer-une-cle-usb-persistante-avec-archlinux/
title: Miamondo : Créer une clé USB persistante avec Archlinux.
uri: Miamondo-Créer-une-clé-USB-persistante-avec-Archlinux
url: https://ordinosor.wordpress.com/2017/09/12/creer-une-cle-usb-persistante-avec-archlinux/
content:
<p>Bonjour,</p>
<p>C’est avec une certaine joie que je rédige cet article qui <a href="https://ordinosor.wordpress.com/2017/09/09/framakey-lapplication-des-nomades/" target="_blank" rel="noopener">fait suite à celui-ci</a>. Souvenez-vous, je vous avais parlé de <a href="https://framakey.org/Pack/Framakey-Mint" target="_blank" rel="noopener">Framakey</a>, une application que j’avais installée sur une clé USB de 31 GB. Je rappelle que Framakey se présente sous la forme d’une clé USB sur laquelle est installée la disrtribution Linux Mint et qui offre à son propriétaire, la persistance de données. Vous pouvez créer des dossiers ou des fichiers, télécharger une application ou en supprimer. Lorsque vous démonterez la clé, rien ne disparaîtra et au prochain reboot, vous retrouverez toutes vos données intactes.</p>
<p>Malheureusement, il s’est avéré qu’à l’usage, la navigation sur Internet était relativement hasardeuse voire carrément impossible. Attention! Loin de moi l’idée de jeter la pierre à Framakey car il faut être prudent : il est tout à fait possible que le problème vienne de ma clé USB elle-même. Mais y a-t-il des clés plus adaptées à ce genre de geekeries? Je n’en sais fichtre rien!</p>
<p>Toujours est-il que l’idée m’est venue de créer moi-même ma clé persistante (estampillée « qualité France » bien évidemment). Pour ce faire, j’ai jeté mon dévolu sur Lubuntu, un système d’exploitation très léger. Hélas, j’ai essuyé un échec. Or, il se trouve qu’il y a quelques semaines, sur mon netbook, j’avais installé Archlinux une distribution qui, il faut bien le reconnaître, tient toujours ses promesses.</p>
<p>Comme <del>j’ai un pète au casque</del>  j’aime bien expérimenter, je me suis dit que ce serait peut-être une bonne idée de créer une clé USB persistante en y installant, tenez-vous bien, Archlinux. Pourquoi faire simple quand on peut faire compliqué? Pour ceux qui découvrent le nom de ce système d’exploitation, Archlinux est aux distributions GNU/Linux ce que la Légion Étrangère est aux troupes conventionnelles… C’est un peu spécial. Eh bien pourtant, à ma grande surprise, ça tient la route! La clé est persistante et parfaitement opérationnelle. Certes, le démarrage est un peu lent et la navigation sur Internet également mais ça reste dans les limites du raisonnable! Ça ne freeze jamais! Regardez comme c’est beau!</p>
<p><img data-attachment-id="17908" data-permalink="https://ordinosor.wordpress.com/2017/09/12/creer-une-cle-usb-persistante-avec-archlinux/screenshot/" data-orig-file="https://ordinosor.files.wordpress.com/2017/09/screenshot.png?w=656&amp;h=384" data-orig-size="1024,600" data-comments-opened="1" data-image-meta='{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}' data-image-title="Screenshot" data-image-description="" data-medium-file="https://ordinosor.files.wordpress.com/2017/09/screenshot.png?w=656&amp;h=384?w=300" data-large-file="https://ordinosor.files.wordpress.com/2017/09/screenshot.png?w=656&amp;h=384?w=840" src="https://ordinosor.files.wordpress.com/2017/09/screenshot.png?w=656&amp;h=384" alt="Screenshot" width="656" height="384" srcset="https://ordinosor.files.wordpress.com/2017/09/screenshot.png?w=656&amp;h=384 656w, https://ordinosor.files.wordpress.com/2017/09/screenshot.png?w=150&amp;h=88 150w, https://ordinosor.files.wordpress.com/2017/09/screenshot.png?w=300&amp;h=176 300w, https://ordinosor.files.wordpress.com/2017/09/screenshot.png?w=768&amp;h=450 768w, https://ordinosor.files.wordpress.com/2017/09/screenshot.png 1024w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px"></p>
<p>Voici donc comment j’ai procédé pour parvenir à mes fins. Je me suis servi de deux clés USB :</p>
<ul><li>une clé de 31 GB destinée à accueillir le système persistant,</li>
<li>une clé de 4 GB qui contient l’image iso d’<a href="https://archlinux32.org/" target="_blank" rel="noopener">Archlinux 32bit</a>.</li>
</ul><p><img data-attachment-id="17895" data-permalink="https://ordinosor.wordpress.com/2017/09/12/creer-une-cle-usb-persistante-avec-archlinux/clef/" data-orig-file="https://ordinosor.files.wordpress.com/2017/09/clef.png?w=840" data-orig-size="579,466" data-comments-opened="1" data-image-meta='{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}' data-image-title="clef" data-image-description="" data-medium-file="https://ordinosor.files.wordpress.com/2017/09/clef.png?w=840?w=300" data-large-file="https://ordinosor.files.wordpress.com/2017/09/clef.png?w=840?w=579" src="https://ordinosor.files.wordpress.com/2017/09/clef.png?w=840" alt="clef" srcset="https://ordinosor.files.wordpress.com/2017/09/clef.png 579w, https://ordinosor.files.wordpress.com/2017/09/clef.png?w=150 150w, https://ordinosor.files.wordpress.com/2017/09/clef.png?w=300 300w" sizes="(max-width: 579px) 85vw, 579px"></p>
<p>J’ai enfiché mes deux clés dans les ports de ma tour et j’ai modifié le Bios pour que ce dernier boote sur la clé de 4 GB. Évidemment, après une page d’accueil sommaire, je me suis retrouvé dans un terminal tout noir (Ben oui! c’est du Archlinux). Le disque dur de l’ordinateur sur lequel j’opérais était en <strong>/dev/sda</strong>, la clé de 4 GB contenant l’image iso était en <strong>/dev/sdb</strong> et la clé de 31 GB en <strong>/dev/sdc</strong>.</p>
<p>J’ai rentré en root la commande <strong>cfdisk /dev/sdc</strong> dans un terminal. Cela m’a permis de valider que <strong>/dev/sdc</strong> correspondait bien à la clé de 31 GB. C’est important pour la suite! Je me suis plus ou moins aidé de ce <a href="https://wiki.archlinux.fr/Installation" target="_blank" rel="noopener">guide officiel pour l’installation</a>. J’ai donc procédé au partitionnement du disque comme suit :</p>
<ul><li>/dev/sdc1 pour le boot</li>
<li>/dev/sdc2 pour la swap</li>
<li>/dev/sdc3 pour le /</li>
<li>/dev/sdc4 pour le /home</li>
</ul><p>Ce qui nous donne :</p>
<p><img data-attachment-id="17860" data-permalink="https://ordinosor.wordpress.com/2017/09/12/creer-une-cle-usb-persistante-avec-archlinux/cfdisk/" data-orig-file="https://ordinosor.files.wordpress.com/2017/09/cfdisk.png?w=840" data-orig-size="815,512" data-comments-opened="1" data-image-meta='{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}' data-image-title="cfdisk" data-image-description="" data-medium-file="https://ordinosor.files.wordpress.com/2017/09/cfdisk.png?w=840?w=300" data-large-file="https://ordinosor.files.wordpress.com/2017/09/cfdisk.png?w=840?w=815" src="https://ordinosor.files.wordpress.com/2017/09/cfdisk.png?w=840" alt="cfdisk" srcset="https://ordinosor.files.wordpress.com/2017/09/cfdisk.png 815w, https://ordinosor.files.wordpress.com/2017/09/cfdisk.png?w=150 150w, https://ordinosor.files.wordpress.com/2017/09/cfdisk.png?w=300 300w, https://ordinosor.files.wordpress.com/2017/09/cfdisk.png?w=768 768w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px"></p>
<p>J’ai partitionné la clé avec <strong>cfdisk</strong> mais vous pouvez le faire aussi avec <strong>gparted</strong>. Moi je suis plus à l’aise avec <strong>cfdisk</strong>. Puis, j’ai formaté tout ça :</p>
<p><strong>mkfs.ext2 /dev/sd<span>c</span>1</strong><br><strong>mkfs.ext4 /dev/sd<span><span>c</span></span>3</strong><br><strong>mkfs.ext4 /dev/sd<span>c</span>4</strong></p>
<p><strong>mkswap /dev/sd<span>c</span>2</strong></p>
<p>Et j’ai monté les partitions. Je ne rentre pas dans les détails. Je ne vais pas recopier le guide. Ce n’est pas l’objet de cet article. Enfin, j’ai procédé à l’installation proprement dite et ce qui est tout bonnement extraordinaire dans cette histoire, ce qui est absolument incroyable, c’est que… eh bien en fait, il n’y a rien d’extraordinaire, ça s’installe comme sur un vulgaire disque dur. Cela dit, ça reste du bon vieux Archlinux. Prévoyez tout de même du savon à microbilles pour faire partir le cambouis et retrouver des mains propres. Mais franchement, je l’ai installé en suivant la même procédure que pour mon netbook et ça fait le boulot pour peu qu’on lui laisse le temps de chauffer! Comme navigateur, j’ai préféré Chromium à Firefox qui m’avait causé quelques déboires avec ma clé version Linux Mint Framakey.</p>
<p>Voilà donc une histoire qui se termine bien. Toutefois, il y a une question qui reste en suspend. J’ai ouï-dire qu’avec une clé persistante, il ne fallait surtout pas faire de mise à jour système. Pourquoi donc? Est-ce que quelqu’un peut éclairer ma lanterne sur ce sujet?</p>
<p> </p><br><a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ordinosor.wordpress.com/17792/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ordinosor.wordpress.com/17792/"></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=ordinosor.wordpress.com&amp;blog=88640341&amp;post=17792&amp;subd=ordinosor&amp;ref=&amp;feed=1" width="1" height="1">
<p><img src="media/848c13f4.27be241458674ac3359b0353fdc37c4a" data-original-source="http://cdn.libravatar.org/avatar/27be241458674ac3359b0353fdc37c4a" alt="Gravatar de Miamondo" class="gravatar" /><br/><i>Original post of <a href="https://ordinosor.wordpress.com/2017/09/12/creer-une-cle-usb-persistante-avec-archlinux/" title="Visit the source">Miamondo</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>Miamondo : <a href="">Archlinux : Finalisation de mon installation</a> (11/01/2017)</li><li>Miamondo : <a href="">Archlinux, une installation qui r&eacute;serve bien des surprises!</a> (08/01/2017)</li><li>Miamondo : <a href="">T-UI launcher, un bel outil destin&eacute; aux geeks</a> (19/05/2017)</li><li>Miamondo : <a href="">Installer une distribution Linux sur un smartphone Android</a> (26/05/2017)</li><li>La vache libre : <a href="">Volumectl &ndash; G&eacute;rez le volume sonore de votre machine en ligne de commande, sur Arch Linux et Manjaro</a> (12/07/2014)</li></ul></div></p>


feed_id: https://www.gnomelibre.fr/2017/09/sortie-de-gradio-6-0/
title: Okki : Sortie de Gradio 6.0
uri: Okki-Sortie-de-Gradio-6-0
url: https://www.gnomelibre.fr/2017/09/sortie-de-gradio-6-0/
content:
<figure><a href="media/852a1b8f.gradio_60.png" data-original-source="https://www.gnomelibre.fr/wp-content/uploads/2017/09/gradio_60.png"><img src="media/852a1b8f.gradio_60.png" data-original-source="https://www.gnomelibre.fr/wp-content/uploads/2017/09/gradio_60.png" alt="" width="888" height="590" srcset="https://www.gnomelibre.fr/wp-content/uploads/2017/09/gradio_60.png 888w, https://www.gnomelibre.fr/wp-content/uploads/2017/09/gradio_60-300x199.png 300w, https://www.gnomelibre.fr/wp-content/uploads/2017/09/gradio_60-768x510.png 768w" sizes="(max-width: 888px) 100vw, 888px"></a><figcaption>Gradio 6.0</figcaption></figure><p>Pour rappel, <a href="https://github.com/haecker-felix/gradio">Gradio</a> vous permet de découvrir et d’écouter des radios en ligne.</p>
<p>Au niveau des nouveautés, nous noterons :</p>
<ul><li>la possibilité de regrouper nos stations en collections</li>
<li>la possibilité de pouvoir trier nos stations selon différents critères (nom, langue, pays, votes…)</li>
<li>l’ajout d’une recherche étendue (la petite flèche pointant vers le bas, à droite de la boîte de recherche) permettant de sélectionner un pays ou une langue</li>
<li>la possibilité d’ajouter de nouvelles stations ou d’éditer les informations de stations déjà existantes (la base de données étant en ligne, chaque ajout ou modification est visible par l’ensemble des utilisateurs)</li>
<li>la bibliothèque peut désormais être exportée et importée</li>
<li>une barre latérale proposant un certain nombre d’informations sur chaque station peut désormais être affichée</li>
<li>un nouveau système de sélection fait son apparition</li>
<li>l’état de la connexion est désormais affiché dans la barre d’outils</li>
<li>l’application se reconnecte automatiquement après une déconnexion et elle consomme beaucoup moins de mémoire</li>
</ul><p>Par contre, les années ont beau passer, il n’existe malheureusement toujours aucune traduction en français.</p>
<p><img src="media/bb7cd4d3.f4241788ba5559af3601b72220cbad09" data-original-source="http://cdn.libravatar.org/avatar/f4241788ba5559af3601b72220cbad09" alt="Gravatar de Okki" class="gravatar" /><br/><i>Original post of <a href="https://www.gnomelibre.fr/2017/09/sortie-de-gradio-6-0/" title="Visit the source">Okki</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>Okki : <a href="">Sortie de Gradio 4.0.1</a> (17/08/2016)</li><li>Okki : <a href="">Sortie de Lollypop 0.9.20</a> (19/05/2015)</li><li>Okki : <a href="">Sortie de Lollypop 0.9.32</a> (16/06/2015)</li><li>Okki : <a href="">Sortie de Lollypop 0.9.70</a> (29/11/2015)</li><li>Okki : <a href="">Sortie de Lollypop 0.9.0</a> (06/03/2015)</li></ul></div></p>


feed_id: https://www.gnomelibre.fr/2017/09/sortie-de-gnome-3-26/
title: Okki : Sortie de GNOME 3.26
uri: Okki-Sortie-de-GNOME-3-26
url: https://www.gnomelibre.fr/2017/09/sortie-de-gnome-3-26/
content:
<p>Ça y est. Le tout nouveau <a href="https://www.gnome.org/news/2017/09/gnome-3-26-released/">GNOME 3.26</a> est disponible.</p>
<p>Et cette fois-ci, le bureau lui-même a droit à quelques nouveautés bienvenues. Dans la vue d’ensemble des activités, la taille des vignettes des fenêtres a été augmentée, ce qui rend leur sélection plus facile. Et lors d’une recherche, la mise en page a été retravaillée pour pouvoir afficher plus de résultats, tout en étant plus lisibles.</p>
<figure><a href="media/6269f64f.gnome_326_recherche.png" data-original-source="https://www.gnomelibre.fr/wp-content/uploads/2017/09/gnome_326_recherche.png"><img src="media/0f4cf859.gnome_326_recherche-1024x417.png" data-original-source="https://www.gnomelibre.fr/wp-content/uploads/2017/09/gnome_326_recherche-1024x417.png" alt="" width="660" height="269" srcset="https://www.gnomelibre.fr/wp-content/uploads/2017/09/gnome_326_recherche-1024x417.png 1024w, https://www.gnomelibre.fr/wp-content/uploads/2017/09/gnome_326_recherche-300x122.png 300w, https://www.gnomelibre.fr/wp-content/uploads/2017/09/gnome_326_recherche-768x312.png 768w" sizes="(max-width: 660px) 100vw, 660px"></a><figcaption>Réorganisation des résultats de recherche</figcaption></figure><p>Il est également possible d’effectuer des recherches sur les actions du système (déconnexion, redémarrage, mise hors tension, verrouillage de l’écran…). Lors de la minimisation ou de la maximisation d’une fenêtre, de nouvelles animations font leur apparition. Et lorsque aucune fenêtre n’est maximisée, la barre supérieure devient désormais transparente, donnant l’impression d’un bureau plus grand.</p>
<p>Autre nouveauté importante, l’interface du Centre de contrôle a été complètement refaite et affiche désormais un panneau latéral pour pouvoir naviguer entre les différents modules. Les paramètres concernant le réseau et l’affichage ont également été retravaillés.</p>
<figure><a href="media/b4fecae2.gnome_326_parametres.png" data-original-source="https://www.gnomelibre.fr/wp-content/uploads/2017/09/gnome_326_parametres.png"><img src="media/368a8c82.gnome_326_parametres-1024x688.png" data-original-source="https://www.gnomelibre.fr/wp-content/uploads/2017/09/gnome_326_parametres-1024x688.png" alt="" width="660" height="443" srcset="https://www.gnomelibre.fr/wp-content/uploads/2017/09/gnome_326_parametres-1024x688.png 1024w, https://www.gnomelibre.fr/wp-content/uploads/2017/09/gnome_326_parametres-300x202.png 300w, https://www.gnomelibre.fr/wp-content/uploads/2017/09/gnome_326_parametres-768x516.png 768w" sizes="(max-width: 660px) 100vw, 660px"></a><figcaption>Le nouveau Centre de contrôle</figcaption></figure><p>Le reste des applications n’est pas en reste. <a href="https://wiki.gnome.org/Apps/Nautilus">Fichiers</a> peut désormais rechercher dans le contenu même de vos documents (fichiers texte, PDF, LibreOffice ou MS Office…). Les onglets fermés peuvent être restaurés à l’aide du raccourci clavier Ctrl + Shift + T. Les archives peuvent être décompressées sur des serveurs distants.</p>
<p>Le navigateur <a href="https://wiki.gnome.org/Apps/Web">Web</a> peut désormais synchroniser vos signets, mots de passe, historique de navigation… au travers du service <a href="https://fr.wikipedia.org/wiki/Firefox_Sync">Firefox Sync</a>. Synchronisation qui fonctionne tout aussi bien entre les deux navigateurs que sont Web et Firefox.</p>
<p>Fin 2017, GNOME découvre enfin les émojis en couleur <img src="media/7002f76b.1f601.png" data-original-source="https://s.w.org/images/core/emoji/2.3/72x72/1f601.png" alt="😁"> Et bonne nouvelle, ces derniers pourront désormais être insérés bien plus facilement dans vos messages et documents, à l’aide d’un sélecteur graphique. Certaines applications, comme le client IRC <a href="https://wiki.gnome.org/Apps/Polari">Polari</a>, en tirent d’ores et déjà parti.</p>
<figure><a href="media/b32f468a.gnome_326_emojis.png" data-original-source="https://www.gnomelibre.fr/wp-content/uploads/2017/09/gnome_326_emojis.png"><img src="media/6fd8cab9.gnome_326_emojis-1024x576.png" data-original-source="https://www.gnomelibre.fr/wp-content/uploads/2017/09/gnome_326_emojis-1024x576.png" alt="" width="660" height="371" srcset="https://www.gnomelibre.fr/wp-content/uploads/2017/09/gnome_326_emojis-1024x576.png 1024w, https://www.gnomelibre.fr/wp-content/uploads/2017/09/gnome_326_emojis-300x169.png 300w, https://www.gnomelibre.fr/wp-content/uploads/2017/09/gnome_326_emojis-768x432.png 768w" sizes="(max-width: 660px) 100vw, 660px"></a><figcaption>Les émojis sont désormais en couleur</figcaption></figure><p><a href="https://wiki.gnome.org/Apps/Boxes">Machines</a> peut désormais partager des dossiers entre l’hôte et l’invité. On peut enfin ajouter des événements récurrents dans l’<a href="https://wiki.gnome.org/Apps/Calendar">agenda</a>. <a href="https://wiki.gnome.org/Apps/Todo">To Do</a> prend désormais en charge le service <a href="https://todoist.com/">Todoist</a>. Le <a href="https://wiki.gnome.org/Apps/Evince">Visionneur de documents</a> prend désormais en charge les documents <a href="https://fr.wikipedia.org/wiki/Adobe_Illustrator">Adobe Illustrator</a> et <a href="https://fr.wikipedia.org/wiki/Comic_book_archive">CBR</a>…</p>
<p>Et bien évidemment, en plus des principales nouveautés, nous avons droit à de nombreuses petites améliorations bienvenues un peu partout, ainsi que d’innombrables corrections de bugs.</p>
<p>Mais je ne vais pas refaire les <a href="https://help.gnome.org/misc/release-notes/3.26/">notes de version</a>, qui n’ont malheureusement pas encore été traduites en français, mais que je vous invite tout de même à parcourir. On regrettera également l’absence de la vidéo de présentation au moment du lancement, qui aurait gagné à être retardé, le temps que tout le monde soit prêt.</p>
<p>Vous pouvez également jeter un œil au <a href="https://feaneron.com/2017/09/13/gnome-3-26-is-great/">billet de blog</a> de Georges Basile Stavracas Neto, qui donne quelques infos supplémentaires, tout en proposant diverses vidéos mettant en avant certaines nouveautés.</p>
<p>Cette nouvelle version est donc un très bon cru, mais qui comporte tout de même son lot de déceptions. Certaines fonctionnalités particulièrement attendues, comme la <a href="https://www.gnomelibre.fr/2017/06/gnome-3-26-pourra-juxtaposer-jusqua-quatre-fenetres/">juxtaposition de quatre fenêtres</a> ou la mise à l’échelle fractionnée nécessaire à la bonne prise en charge des écrans HiDPI n’étaient malheureusement pas prêtes à temps et seront donc repoussées à la prochaine version, prévue pour le mois de mars 2018.</p>
<p><img src="media/bb7cd4d3.f4241788ba5559af3601b72220cbad09" data-original-source="http://cdn.libravatar.org/avatar/f4241788ba5559af3601b72220cbad09" alt="Gravatar de Okki" class="gravatar" /><br/><i>Original post of <a href="https://www.gnomelibre.fr/2017/09/sortie-de-gnome-3-26/" title="Visit the source">Okki</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>


feed_id: https://www.ilphrin.com/planet/2017/09/12/un-an-a-etudier-a-quebec-choc-culturel.html
title: Ilphrin : Un an à étudier à Québec: Le choc culturel sur tous les plans
uri: Ilphrin-Un-an-à-étudier-à-Québec-Le-choc-culturel-sur-tous-les
url: https://www.ilphrin.com/planet/2017/09/12/un-an-a-etudier-a-quebec-choc-culturel.html
content:
<p>Cette année je pars étudier pendant un an l’informatique à l’Université Laval à Québec. Pour ceux qui ne le savent pas je suis étudiant à Epitech Lyon (j’aurai un long article sur le sujet à la fin de mes études), et dans mon cursus je dois faire la 4e année à l’étranger dans l’un des <a href="http://www.epitech.eu/partenariats-internationaux.aspx">nombreux programmes partenaires d’Epitech</a>. Mon choix s’est porté sur l’Université Laval, et me voici donc à écrire cet article après ma première semaine de cours!</p>

<!--break-->

<p><a href="https://www.flickr.com/photos/159186107@N06/37047534981/in/dateposted-public/"><img src="media/f6dfc477.quebec_01.jpg" data-original-source="https://www.ilphrin.com/images/quebec_01.jpg" alt="Les 3 Brasseurs pas loin de la maison"></a>
<img src="https://www.ilphrin.com/" alt=""><em>Petite bière accompagnée d’une Pizza poutine aux 3 brasseurs</em></p>

<h2>Laval parmi tant d’autres</h2>

<p>Tout d’abord j’aimerais expliquer pourquoi mon choix s’est porté sur cette école. Si ça ne vous intéresse pas vous pouvez sauter directement au prochain sous-titre je ne m’en offusquerai pas! ;)</p>

<p>Partons du départ. Mes études à Epitech visent à faire de moi un expert en développement de façon générale, mais aussi en gestion de projet, et enfin doit me permettre d’avoir les réflexes et l’entrainement nécessaire à l’acquisition rapide de nouvelles connaissances ainsi qu’à l’adaptation. Pour donner un exemple: Si je dois travailler dans un nouvel environnement de travail avec d’autres outils et un autre langage, en deux semaines je dois être capable de m’adapter et de pouvoir être productif (c’est un temps arbitraire, mais c’est pour l’exemple).</p>

<p>Maintenant, si je veux me spécialiser ou m’orienter dans un domaine un peu orthogonal au métier de développeur, je dois trouver d’autres moyens d’avoir les connaissances que je veux. Cette année dans une autre Université est une très bonne opportunité de faire cela, car les cours donnés sont complétement différent de ce que je pourrais avoir à Epitech, c’est l’intérêt même de cette année: élargir sa palette de connaissances en allant dans un autre pays, avec un autre fonctionnement, et une autre éducation.</p>

<p>Quand on me demande ce que je veux faire en tant “qu’informaticien” je réponds souvent: ‘Bah euh… je sais pas vraiment’. C’est toujours vrai aujourd’hui, mais j’ai tout de même des domaines qui m’intéressent plus que d’autres.</p>

<ul><li>Le premier qui me vient à l’esprit c’est l’<strong>UX Design</strong>: J’adore faire des maquettes, des tests utilisateurs, rendre un croquis plus visuel ou interactif. J’aimerais en faire mon métier, au moins à mi-temps ou alors en freelance.</li>
  <li><strong>Développeur Web</strong>: Je suis passionné depuis plusieurs années par le Web. Que ce soit pour développer ou bidouiller, jouer, discuter, ou apprendre, je suis constamment connecté à quelque chose. J’aimerais aussi en faire mon métier, donc soit avec un autre travail à mi-temps ou en freelance, si faire ça conjointement avec le métier d’UX Designer en faisant du <em>front-end</em>.</li>
  <li><strong>Développeur de jeux vidéo</strong>: Les jeux vidéos c’est ma vie! Je joue depuis que j’ai la capacité de taper sur un clavier. J’ai déjà eu l’occasion de développer quelques jeux comme <a href="https://github.com/Ilphrin/TuxleTriad">TuxleTriad</a>. Je ne pense pas que j’en ferais mon métier, mais c’est un super hobby en plus d’être enrichissant!</li>
</ul><p>À l’inscription à l’Université, j’ai choisi, entre autres, un cours de développement Web, d’Interaction Personne Machine, et de Programmation de jeux-vidéos. Le tout juste sur la première session de 4 mois. Ces cours me permettront de pratiquer sur des domaines qui me tiennent à cœur.</p>

<p>Il y a aussi une autre raison qui fait que j’ai choisi Laval: Le Québec. C’est une région qui me fait rêver depuis longtemps pour beaucoup d’aspects (et pas seulement à cause des 2 Minutes du Peuple promis!). Mais j’en parle un peu plus loin dans l’article.</p>

<h2>Le voyage</h2>

<p>Je suis donc parti il y a environ 1 mois avec ma copine, nous avons fait Lyon — Montréal en environ 15 heures. Nous avions plusieurs contraintes: nous avions un chat avec des soucis de santé à emmener, et nous avions essayé de prendre les places les moins chères possible, quitte à devoir faire de longs trajets. Il s’est avéré que nous ne pouvions pas prendre le chat en fin de compte, et après coup ce n’était pas plus mal qu’on parte sans pour le moment car au niveau des démarches à faire c’est un calvaire d’emmener un chat (Acheter les billets pour chaque compagnie, vérifier qu’on peut l’emmener en cabine, vérifier le poids avec la caisse, le faire pucer, etc.)</p>

<p>Nous nous en sommes sortis pour environ 700€ chacun pour un billet avec deux escales. C’est tout de même assez cher, mais nous nous y sommes pris assez tard donc ça expliquait la différence de prix. Pour ma part c’était la première fois que je prenais l’avion. Et comme j’ai une certaine peur des hauteurs, le premier vol a été un choc pour moi, qui ai passé le gros de l’heure du premier vol accroché à ma copine!</p>

<p>Nous sommes arrivés ensuite à l’aéroport de Francfort. La première chose qui nous a frappé pendant cette escale, c’était le manque de clarté des indications. Pour vous diriger et trouver votre avion, vous avez besoin de son identifiant de Hall et de Porte. Mais chacun est représenté par une lettre, donc lorsque vous voyez un panneau marqué “C” par exemple, il y a aucun moyen de savoir si le panneau parle de Hall ou de porte!</p>

<p>Outre ce problème, l’escale s’est bien passé et nous avons pu prendre notre envol jusqu’à Toronto en 7 heures de trajet! Le trajet a été plus agréable pour ma part, et je n’ai pas tellement senti passer les 7h. (Outre les films en allemand comme l’Age de Glace). Arrivés à Toronto j’ai pu récupérer mon Permis d’études rapidement, et nous avons pu récupérer nos bagages pour ensuite prendre notre dernier vol vers Montréal</p>

<p>De Montréal à Québec, nous avons pris l’Orléans Express qui fais le trajet en 4h. Autant dire qu’après tout ces trajets, nous étions exténués et ne voulions qu’une chose: rentrer et dormir!</p>

<h3>L’arrivée et la maison</h3>

<p>Le propriétaire de la maison nous a gentiment emmené du centre de Québec vers la maison. Nous avons pu poser nos affaires dans l’une des chambres, en attendant l’arrivée des deux autres colocataires. La maison est immense, enfin, bien plus grande que ce qu’il serait nécessaire pour 3 étudiants et une jeune travailleuse. Mais nous n’avions pas pu résister en voyant l’annonce et le prix.(1800$CAD par mois, donc environ 1200€ divisé par 4 colocataires!)</p>

<p>Premier jour, première surprise. Le propriétaire partait le vendredi en journée pour 1 an en Chine, et d’ici là il finissait des petits travaux dans la maison, et dormait à l’étage dans une chambre à côté de nous. C’était assez dérangeant d’avoir à passer 3 jours avec lui, car nous n’avions pas la sensation d’être chez nous encore tant qu’il était là. Mais bon ce n’était que pour une courte durée donc nous n’avions rien dit.</p>

<p>Une semaine après, nous étions installés correctement tous les 4, même commencés à découvrir un peu la ville, et à se manger des poutines. Il y a eu d’autres problèmes dans la maison depuis. Des petits incidents comme le fer à repasser qui a grillé, et une barre de salle de bain qui s’est cassé.</p>

<p>Nous avons aussi eu plusieurs problèmes avec le propriétaire, et même encore aujourd’hui. Les contacts que nous avons avec lui se font par mail ou par le biais d’une connaissance à lui qui vient tondre la pelouse de temps en temps. Dès les premiers échanges nous étions agacés par son ton autoritaire et son manque de confiance, en nous pressant quasiment tous les jours de bien penser au loyer.</p>

<p>Il nous était aussi demandé de prendre des photos de la maison pour qu’il puisse poster une nouvelle annonce pour la fin de notre bail. Ce n’était pas à nous de faire son travail, donc nous lui avons clairement dit que nous ne le ferions pas. (sans parler du fait qu’il était très maladroit de sa part de nous parler de sa prochaine annonce alors que nous venions juste de nous installer!)</p>

<p>Nous avons eu aussi un échange de mail assez tendus, car il s’avère que la personne qui vient tondre notre pelouse à un double des clés de la maison et peut donc rentrer quand ça lui plait. Nous avons demandé au propriétaire qu’il nous remette ce double. À ce jour ce problème n’est pas résolu, car nous devons attendre le frère du propriétaire pour en discuter.</p>

<p>Mis à part ces problèmes, nous avons un jardin magnifique, avec pleins d’écureuils qui viennent se balader le matin au réveil. Nous sommes aussi très bien placés entre le centre de Québec et l’Université. Il y a même un Curling à côté de chez nous et une taverne médiévale ou nous allons manger tous les samedi!</p>

<p>(Dernière nouvelle: Il manque un joint dans un conduit de la baignoire, ce qui fait que nous avons une fuite qui passe de l’étage au rez-de-chaussée derrière le frigo en abimant tout le mur. Je commence à me demander si nous avons bien fait de prendre cette maison).</p>

<h2>La découverte de la ville</h2>

<p><a href="https://www.flickr.com/photos/159186107@N06/37018115132/in/dateposted-public/"><img src="media/0aaf97c1.quebec_03.jpg" data-original-source="https://www.ilphrin.com/images/quebec_03.jpg" alt="Québec"></a>
<img src="https://www.ilphrin.com/" alt=""><em>Un ancien bureau de poste dans la ville de Québec</em></p>

<p>Dès les premiers jours nous avons commencé à nous balader dans Québec. C’est une ville vraiment magnifique, et très grande! Elle est découpée en plusieurs parties: La haute ville, la basse ville, le Vieux Québec, les quartiers de son agglomération comme Saint-Sacrement, Sainte-Foy, Saint-Roch, etc.</p>

<p>Pour la première balade nous avions décidé de faire le trajet jusqu’au centre de Québec à pied, ce qui représente une bonne demi-heure de marche. Québec fait partie du patrimoine à l’UNESCO, car c’est la seule ville d’Amérique du Nord à avoir gardé ses fortifications qui datent de plusieurs siècles, mais aussi l’architecture d’avant malgré les reconstructions.</p>

<p>Le vieux Québec est très touristique avec ses animations de rue, ses magasins, ses restaurants très variés, et ses longues avenues et ruelles dans lesquelles ont peut déambuler pendant des heures en découvrant plein de coin sympa et nouveaux.</p>

<p>Nous sommes allés manger dans un endroit de Saint-Roch appelé <a href="http://www.korrigane.ca/fr/">La Korrigane</a>, une micro-brasserie parmi tant d’autres dans Québec, dont les bières étaient délicieuses et la poutine très bonne. Bon, je vais faire quelque chose de plus simple, voici la liste des endroits ou nous sommes allés ces dernières semaines et que je conseille:</p>

<ul><li>La Korrigane dont je parlais juste avant, au moins pour leurs bières dont je suis tombé amoureux!</li>
  <li><a href="http://lechicshack.ca/">Le ChicShack</a>: La poutine m’a un peu déçu, mais les burgers sont succulents, et il faut y aller pour au moins une chose: Leurs frites de patate douce qui sont une merveille!</li>
  <li><a href="http://www.lachopegobeline.com/">La Choppe Gobeline</a>: C’est notre lieu de prédilection, nous y allons tous les samedi! Ambiance médiévale, serveurs/euses super sympa et conviviaux, les meilleures poutines que j’ai mangées pour le moment, et vous pouvez faire un brunch à volonté là-bas qui est un vrai régal! Vraiment, allez-y</li>
  <li><a href="http://www.les3brasseurs.com/">Les 3 Brasseurs</a>: Ils existent aussi en France et à Lyon. Un coin sympa ou aller si vous voulez manger un bout avec une bonne bière. Ils font des Flammekueches-Poutines bien grasse, et donc bien bonne!</li>
  <li><a href="http://pubuniversitaire.com/">Le Pub Universitaire</a>: Alors ça peut paraitre bête, mais le Pub Universitaire de Laval est un coin top pour manger et boire! Les bières sont environ à 5$CAD la pinte, et si vous venez en groupe, vous pouvez prendre la Poutine du Pub pour 30 dollars, et qui remplit le ventre de facilement 5 personnes!</li>
</ul><p>Je pense que je peux garder un peu d’encre numérique pour parler des transports en commun à Québec. Le réseau s’appelle RTC pour Réseau de Transports de la Capitale, et existe depuis 50 ans. Il se compose, à ma connaissance, niquement de bus hybride (moitié essence, moitié éléctrique). Ce réseau est très bien développé puisqu’on a accès à beaucoup de lignes de bus sur une grande partie du territoire, et sur de grandes plages d’horaires (ma ligne de bus est disponible de 5h jusqu’au 1h du matin). Et en plus ils sont très fréquent!</p>

<p>Le système d’abonnemnt est par contre un peu moins pratique qu’à Lyon. Déjà chose étrange: On peut acheter les cartes de bus a la Pharmacie! Aussi, de façon générale les tarifs sont un peu plus chers. L’abonnement au mois me coute environ 40€, et l’abonnement à la semaine n’existe pas. Enfin, pas comme à Lyon, c’est-à-dire que la semaine vaut 5 jours à Québec et pas 7! Enfin, il n’existe pas d’abonnement annuel, du coup tous les mois faut retourner au dépanneur ou a la pharmacie du coin pour refaire l’abonnement.</p>

<h2>L’Université</h2>

<p><img src="https://www.ilphrin.com/" alt=""><em>Photo à venir!</em></p>

<p>La première chose qui m’a choqué sur l’Université, c’est sa taille. Le campus fait 1,9km², une quinzaine de bâtiments de cours, une complexe sportif que je détaille plus loin, une forêt (qui est la plus grande forêt de recherche scientifique au monde) et des centres commerciaux.</p>

<p>Mes cours et la plupart des activités se passent principalement dans les bâtiments Adrien-Pouliot et Alexandre-Vachon, qui sont les pavillons pour la faculté des Sciences et de Génie. J’ai un autre cours qui se passe au FSA (Le cours de Comportement Organisationnel), et trois autres cours qui se font entièrement à distance.</p>

<ul><li>Développement d’applications Web: Le cours est super intéressant, même si je connais déjà une grande partie du contenu du cours pour le moment. Le prof est très sympa et on peut facilement interagir avec lui, et il y a une bonne ambiance malgré le fait que ce soit à distance avec Adobe Connect.</li>
  <li>Compilation et Interprétation: Le cours est très difficile pour le moment, et il faut avoir des bases d’informatique théorique pour pas être trop perdu. C’est le cours qui me demande le plus de travail pour le moment, pour rattraper ce que je ne connais pas forcément. Mais le prof explique très bien et c’est agréable d’avoir un cours avec lui. C’est aussi un cours à distance.</li>
  <li>Comportement Organisationnel: C’est un cours un peu abstrait pour le moment, mais qui ressemble à de la psychologie mélangée à de la sociologie appliquée au sein d’une entreprise ou d’une organisation. Pour le moment nous n’avons pas eu beaucoup de cours donc je ne sais pas vraiment ce que ça donne.</li>
  <li>Interface personne-machine: Le cours pour lequel je suis le plus enjoué avec le Développement Web. Ce cours n’est qu’une introduction, mais aborde tout ce dont j’aurais besoin comme bases pour me lancer dans l’apprentissage du métier d’UX designer. Le prof est très sympa, la classe nombreuse (174) mais tout le monde se tient correctement donc il n’y a pas de problème. Nous avons aussi la possibilité de travailler sur des projets qui ont un impact véritable.</li>
  <li>Programmation de jeux vidéo: Encore une fois, le professeur est très sympathique et le cours est très agréable à suivre. On aborde toutes les étapes de création et de production d’un jeu vidéo, et tout au long de la session nous avons un projet de jeu vidéo à développer sous Unity.</li>
</ul><p>La relation entre professeur et étudiant n’est pas du tout la même qu’en France. Il n’y a pas vraiment de barrières, on tutoie le prof ou l’appelle par son prénom, si on a un problème de compréhension on peut aller le voir à la fin du cours et prendre 20 minutes pour ré-expliquer. On peut même trouver certains profs au Pub Universitaire ou ailleurs avec une bière, mais ça je n’ai pas encore expérimenté je reviendrai dessus dans l’année ;)</p>

<h3>Le sport</h3>

<p>L’Université possède un complexe sportif tenu par une organisation appelée le PEPS. Ce complexe comporte, entre autres: Deux stades de Football/Soccer/Rugby, un terrain de hockey, deux piscines dont une olympique, un terrain de basket/badminton/autre, une salle d’entrainement et de musculation et 5 terrains de Beach Volley.</p>

<p>Malheureusement je n’ai pas trouvé de club de Football US qui accepte les débutants adultes. Je me suis par contre inscrit à la salle d’entrainement avec <a href="https://www.youtube.com/user/0oRetroplayo0/featured">Valentin, l’un de mes colocataires</a>, pour la modique somme de 63$CAD pour 4 mois (environ 45€). Le tarif comprend notamment le suivi par un entraineur personnel pour des programmes personnalisés, l’accès à la salle quand nous le voulons jusqu’à 23h tous les jours, et le prêt de serviettes et de vestiaires.</p>

<p>Nous allons commencer bientôt notre programme avec l’entraineur, je pense donc que j’en parlerais un peu plus dans quelques mois.</p>

<h3>Les assos</h3>

<p>L’Université comporte aussi une myriade d’associations, dans presque tous les domaines. Nous nous sommes inscrits à l’association des <a href="https://www.facebook.com/groups/38257879616/">Seigneurs de Naguère</a>, une association de jeux de rôles, jeux de sociétés, etc. Des gens très sympa en font partie, et nous allons bientôt commencer une petite campagne de Courant Fractal, un jeune jeu de rôle Québecois!</p>

<p>Il existe des assos pour un peu tout. D’ailleurs il y a une association queer dont fait partie l’une des colocataires, et il semble que l’ambiance soit géniale là-bas!</p>

<h2>La suite au prochain épisode</h2>

<p>Je pense que j’ai fait à peu près le tour de tout ce que j’avais à dire sur ce premier mois. Les Québecois sont bien plus chaleureux que les Français de manière générale. En France lorsque quelqu’un vous aborde dans la rue, que quelque que vous ne connaissez pas vous parle, le premier réflexe est d’être défensif et méfiant. Nous sommes aussi bien plus stressés à cause de la population beaucoup plus dense, et cela se ressent tant au niveau de l’atmosphère générale que sonore, entre les voitures qui klaxonnent pour un rien, les enfants qui pleurent dans le bus qui est rempli et étouffant, les gens qui courent et bousculent dans les métros, etc.</p>

<p>Ici, le relationnel est beaucoup moins nombriliste et plus “humain”, les personnes autour sont considérées comme des êtres humains et non pas comme de potentielles sources de menace ou de dérangement. Et ça se ressent dans la vie de tous les jours, car les gens sont plus souriants et accueillant.</p>

<p>Bon et en attendant le prochain article, vous pouvez cliquer sur l’image qui suit, pour voir toutes les photos que j’ai mis en ligne sur mon compte Flickr.</p>

<p><a href="https://www.flickr.com/gp/159186107@N06/i5J14z"><img src="media/de5ff8d0.quebec_04.jpg" data-original-source="https://www.ilphrin.com/images/quebec_04.jpg" alt="Quebec"></a></p>
<p><img src="media/9292dabf.235511b5004cfd4af8c43a8b06c9e121" data-original-source="http://cdn.libravatar.org/avatar/235511b5004cfd4af8c43a8b06c9e121" alt="Gravatar de Ilphrin" class="gravatar" /><br/><i>Original post of <a href="https://www.ilphrin.com/planet/2017/09/12/un-an-a-etudier-a-quebec-choc-culturel.html" title="Visit the source">Ilphrin</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>


title: blog-libre : sshrc, utiliser vos fichiers de configuration dans des sessions SSH
uri: blog-libre-sshrc-utiliser-vos-fichiers-de-configuration-dans-des-se
feed_id:
https://www.blog-libre.org/2017/09/14/sshrc-utiliser-vos-fichiers-de-configuration-dans-des-sessions-ssh/

url:
https://www.blog-libre.org/2017/09/14/sshrc-utiliser-vos-fichiers-de-configuration-dans-des-sessions-ssh/

content:
<p><strong>sshrc</strong> apporte une réponse à 2 problématiques :</p>
<ul><li>Vous souhaitez pouvoir utiliser votre configuration locale aux petits oignons (alias, fonctions, variables d’environnement, bashrc, vimrc, inputrc, screenrc, etc.) lorsque vous êtes connectés sur les pc/serveurs que vous administrez. Cependant vous désirez ne pas toucher aux fichiers de configuration de ces pc/serveurs car vous ne pouvez pas (contexte professionnel) ou vous ne voulez pas. De plus plusieurs personnes se connectent au(x) même(s) compte(s), il faut respecter l’usage de chacun et ne pas imposer vos fichiers de configuration aux autres</li>
<li>Au contraire vous avez décidé d’utiliser vos fichiers de configuration (aussi appelés dotfiles) mais passer sur X pc/serveurs pour modifier un de vos fichiers de configuration ça vous gonfle et vous trouvez la gestion de configuration (Ansible, Puppet, Git + liens symboliques…) trop lourde pour si peu</li>
</ul><p>Alors <a href="https://github.com/Russell91/sshrc" target="_blank">sshrc</a> est fait pour vous. Sur votre poste vous allez créer un fichier <code>~/.sshrc</code> dans lequel vous allez exporter/sourcer votre configuration personnalisée et un dossier <code>~./sshrc.d</code> où vous allez placer vos fichiers de configuration (.bashrc, .vimrc, .inputrc, etc.). Au lieu de vous connecter sur ces pc/serveurs avec la commande ssh, vous allez vous connecter avec la commande sshrc (no stress c’est propre). Un dossier <code>/tmp/.cascador.sshrc.XXXX</code> unique (XXXX généré aléatoirement) sera créé sur l’hôte distant, votre configuration personnalisée sera envoyée dedans (avec openssl) puis chargée. A la déconnexion ce dossier sera supprimé.</p>
<p><a href="https://github.com/Russell91/sshrc" target="_blank">sshrc</a> est un script shell sous licence MIT aisément maintenable, compréhensible et lisible. Il nécessite comme prérequis openssl sur l’hôte local et distant. Il existe également <a href="https://github.com/Russell91/sshrc/blob/master/moshrc" target="_blank">moshrc</a> pour <a href="https://mosh.org/" target="_blank">Mosh</a>. Voici le <a href="https://raw.githubusercontent.com/Russell91/sshrc/master/sshrc" target="_blank">code source</a>.</p>
<p></p><pre>#!/usr/bin/env bash
function sshrc() {
    local SSHHOME=${SSHHOME:=~}
    if [ -f $SSHHOME/.sshrc ]; then
        local files=.sshrc
        if [ -d $SSHHOME/.sshrc.d ]; then
            files="$files .sshrc.d"
        fi
        SIZE=$(tar cfz - -h -C $SSHHOME $files | wc -c)
        if [ $SIZE -gt 65536 ]; then
            echo >&amp;2 $'.sshrc.d and .sshrc files must be less than 64kb\\ncurrent size: '$SIZE' bytes'
            exit 1
        fi
        if [ -z "$CMDARG" -a ! -e ~/.sshrc.d/.hushlogin ]; then
            WELCOME_MSG="
                if [ ! -e ~/.hushlogin ]; then
                    if [ -e /etc/motd ]; then cat /etc/motd; fi
                    if [ -e /etc/update-motd.d ]; then run-parts /etc/update-motd.d/ 2>/dev/null; fi
                    last -F \\$USER 2>/dev/null | grep -v 'still logged in' | head -n1 | awk '{print \\"Last login:\\",\\$4,\\$5,\\$6,\\$7,\\$8,\\"from\\",\\$3;}'
                fi
                "
        else
            WELCOME_MSG=""
        fi
        ssh -t "$DOMAIN" $SSHARGS "
            command -v openssl >/dev/null 2>&amp;1 || { echo >&amp;2 \\"sshrc requires openssl to be installed on the server, but it's not. Aborting.\\"; exit 1; }
            $WELCOME_MSG
            export SSHHOME=\\$(mktemp -d -t .$(whoami).sshrc.XXXX)
            export SSHRCCLEANUP=\\$SSHHOME
            trap \\"rm -rf \\$SSHRCCLEANUP; exit\\" 0
            echo $'"$(cat "$0" | openssl enc -base64)"' | tr -s ' ' $'\\n' | openssl enc -base64 -d > \\$SSHHOME/sshrc
            chmod +x \\$SSHHOME/sshrc

            echo $'"$( cat << 'EOF' | openssl enc -base64
                if [ -r /etc/profile ]; then source /etc/profile; fi
                if [ -r ~/.bash_profile ]; then source ~/.bash_profile
                elif [ -r ~/.bash_login ]; then source ~/.bash_login
                elif [ -r ~/.profile ]; then source ~/.profile
                fi
                export PATH=$PATH:$SSHHOME
                source $SSHHOME/.sshrc;
EOF
                )"' | tr -s ' ' $'\\n' | openssl enc -base64 -d > \\$SSHHOME/sshrc.bashrc

            echo $'"$( cat << 'EOF' | openssl enc -base64
#!/usr/bin/env bash
                exec bash --rcfile <(echo '
                [ -r /etc/profile ] &amp;&amp; source /etc/profile
                if [ -r ~/.bash_profile ]; then source ~/.bash_profile
                elif [ -r ~/.bash_login ]; then source ~/.bash_login
                elif [ -r ~/.profile ]; then source ~/.profile
                fi
                source '$SSHHOME'/.sshrc;
                export PATH=$PATH:'$SSHHOME'
                ') "$@"
EOF
                )"' | tr -s ' ' $'\\n' | openssl enc -base64 -d > \\$SSHHOME/bashsshrc
            chmod +x \\$SSHHOME/bashsshrc

            echo $'"$(tar czf - -h -C $SSHHOME $files | openssl enc -base64)"' | tr -s ' ' $'\\n' | openssl enc -base64 -d | tar mxzf - -C \\$SSHHOME
            export SSHHOME=\\$SSHHOME
            echo \\"$CMDARG\\" >> \\$SSHHOME/sshrc.bashrc
            bash --rcfile \\$SSHHOME/sshrc.bashrc
            "
    else
        echo "No such file: $SSHHOME/.sshrc" >&amp;2
        exit 1
    fi
}

function sshrc_parse() {
  while [[ -n $1 ]]; do
    case $1 in
      -b | -c | -D | -E | -e | -F | -I | -i | -L | -l | -m | -O | -o | -p | -Q | -R | -S | -W | -w )
        SSHARGS="$SSHARGS $1 $2"; shift ;;
      -* )
        SSHARGS="$SSHARGS $1" ;;
      *)
        if [ -z "$DOMAIN" ]; then
         DOMAIN="$1"
        else
          local SEMICOLON=$([[ "$@" = *[![:space:]]* ]] &amp;&amp; echo '; ')
          CMDARG="$@$SEMICOLON exit"
          return;
        fi
        ;;
    esac
    shift
  done
  if [ -z $DOMAIN ]; then
    ssh $SSHARGS; exit 1;
  fi
}

command -v openssl >/dev/null 2>&amp;1 || { echo >&amp;2 "sshrc requires openssl to be installed locally, but it's not. Aborting."; exit 1; }
sshrc_parse "$@"
sshrc</pre><p></p>
<h2>Prise en main</h2>
<p>On ne s’embête pas avec Git, on se contente de copier sshrc et le placer dans <code>/usr/local/bin</code>.</p>
<p></p><pre>wget https://raw.githubusercontent.com/Russell91/sshrc/master/sshrc &amp;&amp; chmod +x sshrc &amp;&amp; sudo mv sshrc /usr/local/bin/
touch ~/.sshrc &amp;&amp; mkdir -p ~/.sshrc.d</pre><p> </p>
<p>Voici mon fichier <code>~/.sshrc</code> actuel. Dans le dossier <code>~/.sshrc.d</code> j’ai mes .bashrc, .inputrc, .vimrc.</p>
<p></p><pre>export EDITOR=vim
export INPUTRC=$SSHHOME/.sshrc.d/.inputrc
export LESS='-FRXi'
export LESS_TERMCAP_mb=$'\\E[01;31m'
export LESS_TERMCAP_md=$'\\E[01;31m'
export LESS_TERMCAP_me=$'\\E[0m'
export LESS_TERMCAP_so=$'\\E[01;44;33m'
export LESS_TERMCAP_se=$'\\E[0m'
export LESS_TERMCAP_us=$'\\E[01;32m'
export LESS_TERMCAP_ue=$'\\E[0m'
export VIMINIT="let \\$MYVIMRC='$SSHHOME/.sshrc.d/.vimrc' | source \\$MYVIMRC"

source $SSHHOME/.sshrc.d/.bashrc
if [[ -f ${SSHHOME}/.sshrc.d/.bash_aliases ]]; then source ${SSHHOME}/.sshrc.d/.bash_aliases ; fi
if [[ -f ${SSHHOME}/.sshrc.d/.bash_functions ]]; then source ${SSHHOME}/.sshrc.d/.bash_functions ; fi</pre><p></p>
<p>On se connecte ensuite à un serveur comme ceci <code>sshrc root@blog-libre.org</code>. Pour retrouver le répertoire sshrc <code>echo $SSHHOME</code> et s’y déplacer <code>cd $SSHHOME; ls -a</code>.</p>
<p>Je vous invite à taper « dotfile sshrc » dans votre moteur de recherche préféré pour avoir d’autres exemples : <a href="https://github.com/k1-hedayati/dotfiles/blob/master/sshrc" target="_blank">1</a>, <a href="https://github.com/exAspArk/dotfiles/blob/master/sshrc" target="_blank">2</a>, <a href="https://github.com/mattheworiordan/dotfiles-1/blob/master/sshrc" target="_blank">3</a>, <a href="https://github.com/randomphrase/dotfiles/blob/master/sshrc" target="_blank">4</a>, <a href="https://github.com/mattiaslundberg/dotfiles/blob/master/.sshrc" target="_blank">5</a>.</p>
<h2>Deux points négatifs</h2>
<p>Il n’est pas possible d’envoyer plus de 64 Ko de fichiers de configuration <strong>compressés</strong> avec sshrc. Première réaction la peur puis après quelques tests, j’arrive à passer 1 Mo sans problème, le mot important à retenir : compressés. Cependant ça reste un problème important pour certains, on peut citer les plugins Vim par exemple. Dans ce cas l’auteur conseille de copier les fichiers dans un obscur dossier sur le serveur et d’utiliser sshrc pour automatiquement sourcer ces configurations au login.</p>
<p>On a vu que sshrc était bien conçu et propre, il crée un dossier <code>/tmp/.cascador.sshrc.XXXX</code> unique qu’il supprime à la déconnexion. Cependant pour certains cas, vous serez obligés de « sortir » de ce dossier. Pour nano il n’est pas possible d’exporter un fichier de configuration, il lit seulement /etc/nanorc et ~/.nanorc, il ne possède pas d’option permettant de préciser où se situe (ailleurs) nanorc. On est donc obligé d’aller placer .nanorc dans ~/. Certains font une copie, d’autres créent un lien symbolique, c’est plus propre. Il faut gérer la suppression de ce fichier (on peut modifier <code>trap \\"rm -rf \\$SSHRCCLEANUP; exit\\" 0</code> entre autres solutions) mais si une autre personne se connecte sous le même compte que vous, il va charger ce fichier de configuration… et puis vous touchez aux fichiers de configuration du pc/serveur (/root/.nanorc pourrait déjà exister par exemple).</p>
<h2>Quelques conseils</h2>
<p>N’oubliez pas que les fichiers de configuration de votre pc sont probablement différents de ceux de vos serveurs. Typiquement je suis sur Xubuntu et j’administre des serveurs Debian, les versions des paquets sont différentes, les fichiers de configuration également. Je vous invite à copier les fichiers de configuration à partir de vos serveurs dans <code>~/.sshrc.d</code> puis les modifier.</p>
<p>N’hésitez pas à abuser de <code>if [ "$(hostname)" == "jessie1" ]; then source ${SSHHOME}/.sshrc.d/.bashrc_jessie1 ; fi</code> afin de gérer finement vos dotfiles par serveur.</p>
<p>Vous pouvez créer des liens symboliques au lieu de copier certains fichiers de configuration dans <code>~/.sshrc.d</code>. Personnellement j’ai fait <code>ln -s ~/.inputrc ~/.sshrc.d/.inputrc</code> pour inputrc. Ça me permet ainsi d’avoir mes raccourcis claviers personnalisés en fonction du poste sur lequel je suis (touches utilisées différentes si je suis sur mon pc portable).</p>
<p>Je vous invite à lire ce <a href="https://news.ycombinator.com/item?id=8343469" target="_blank">fil</a> sur Hacker News autour de sshrc, il y a des réflexions intéressantes. Je me demande notamment dans quelle mesure on peut charger des fichiers de configuration (rendus disponibles par un serveur web) avec wget/curl. A noter le <a href="https://www.reddit.com/r/dotfiles/" target="_blank">reddit dotfiles</a>, the <a href="https://dotfiles.github.io/" target="_blank">unofficial guide to doing dotfiles on GitHub</a>, <a href="https://github.com/alebcay/awesome-shell" target="_blank">awesome-shell</a> et tant qu’à faire <a href="https://github.com/sindresorhus/awesome" target="_blank">awesome</a>.</p>
<p><img src="media/25c7216e.1ea6f31074367d57d77721240d30fda9" data-original-source="http://cdn.libravatar.org/avatar/1ea6f31074367d57d77721240d30fda9" alt="Gravatar de blog-libre" class="gravatar" /><br/><i>Original post of <a href="https://www.blog-libre.org/2017/09/14/sshrc-utiliser-vos-fichiers-de-configuration-dans-des-sessions-ssh/" title="Visit the source">blog-libre</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>Pierre-Alain Bandinelli : <a href="">Beau-fr&egrave;re, entropie et &eacute;tablissement de connexion SSH lente</a> (07/06/2015)</li><li>blog-libre : <a href="">Trouver les fichiers avec un pathname ou un filename long</a> (28/05/2016)</li><li>Pierre-Alain Bandinelli : <a href="">Installation et param&eacute;trage d&#039;un serveur avec conteneurs LXC chez Online.net/Dedibox</a> (10/11/2013)</li><li>blog-libre : <a href="">En retour &ndash; 4</a> (14/05/2016)</li><li>blog-libre : <a href="">Un point sur l&rsquo;encodage des caract&egrave;res</a> (14/05/2016)</li></ul></div></p>


feed_id: http://www.elementaryos-fr.org/vacances-terminees-elementary-os-continue-evolution/
title: elementary OS : Les vacances sont terminées : elementary OS continue son évolution
uri: elementary-OS-Les-vacances-sont-terminées-elementary-OS-continue
url: http://www.elementaryos-fr.org/vacances-terminees-elementary-os-continue-evolution/
content:
<p>Septembre sonne la fin des vacances d’été et la rentrée pour bon nombre d’entre nous, la team elementary OS n’a pour autant pas chômé : pendant les vacances d’été, <a href="http://news.softpedia.com/news/system76-to-collaborate-with-elementary-os-devs-on-the-new-installer-for-pop-os-517109.shtml">l’équipe de Daniel a pu travailler de concert avec l’équipe de System76</a> pour faire évoluer l’Installateur d’elementary OS !</p>
<p><span></span>Le mois d’août a vu toutefois aussi de nombreuses mises à jour apparaître :</p>
<h3>AppCenter</h3>
<p>Cassidy a pu apporter quelques modifications graphiques sur la fenêtre de paiement de l’AppCenter, le titre ainsi que la description sont maintenant plus visibles :</p>
<p><a href="media/6e85af07.20170912-appcenter_title.png" data-original-source="http://www.elementaryos-fr.org/wp-content/uploads/2017/09/20170912-appcenter_title.png"><img src="media/72e9220d.20170912-appcenter_title-600x470.png" data-original-source="http://www.elementaryos-fr.org/wp-content/uploads/2017/09/20170912-appcenter_title-600x470.png" alt="AppCenter : le titre d'une fenêtre est mis en valeur" width="600" height="470" srcset="http://www.elementaryos-fr.org/wp-content/uploads/2017/09/20170912-appcenter_title-600x470.png 600w, http://www.elementaryos-fr.org/wp-content/uploads/2017/09/20170912-appcenter_title-300x235.png 300w, http://www.elementaryos-fr.org/wp-content/uploads/2017/09/20170912-appcenter_title-768x602.png 768w, http://www.elementaryos-fr.org/wp-content/uploads/2017/09/20170912-appcenter_title-1024x802.png 1024w, http://www.elementaryos-fr.org/wp-content/uploads/2017/09/20170912-appcenter_title.png 1062w" sizes="(max-width: 600px) 100vw, 600px"></a></p>
<p> </p>
<p>Autre modification qui se voit greffer à AppCenter, l’ajout d’une liste noire qui intègre par exemple certains composants systèmes et outils hérités d’Ubuntu, mais qui ne fonctionnent pas sur elementary OS. Cette liste noire est accessible <a href="https://bazaar.launchpad.net/~elementary-os/elementaryos/default-settings-loki/view/head:/appcenter.blacklist">ici</a>.</p>
<p>Un correctif a été aussi réalisé sur la gestion des URL de type <em>appstream://</em>,dans certaines conditions, vous pouviez être bloqués sur la fenêtre des mises à jour.</p>
<h3>Look &amp; Feel</h3>
<p>Grâce à de nombreux retours faits sur GitHub, l’équipe de Daniel a pu augmenter le contraste des couleurs au niveau des sidebars de vos applications pour supporter les règles d’accessibilité des contenus web : le standard WCAG. Notre feuille de style intègre maintenant la classe .monospace pour le support des polices de caractères monospaced sur un widget. Autre point d’attention, lorsqu’une fenêtre est maintenant maximisée : les bords arrondis sont affichés en lieu et place de bord carré.</p>
<p><a href="media/8dcc1d57.20170912-rounded_corner.png" data-original-source="http://www.elementaryos-fr.org/wp-content/uploads/2017/09/20170912-rounded_corner.png"><img src="media/8dcc1d57.20170912-rounded_corner.png" data-original-source="http://www.elementaryos-fr.org/wp-content/uploads/2017/09/20170912-rounded_corner.png" alt="Coins arrondis" width="442" height="311" srcset="http://www.elementaryos-fr.org/wp-content/uploads/2017/09/20170912-rounded_corner.png 442w, http://www.elementaryos-fr.org/wp-content/uploads/2017/09/20170912-rounded_corner-300x211.png 300w" sizes="(max-width: 442px) 100vw, 442px"></a></p>
<p>Si vous suivez de manière assidue le développement d’elementary OS depuis un autre système d’exploitation Open Source, vous serez ravis d’apprendre que la dernière version de notre feuille de style incorpore de nombreux correctifs de compatibilités pour Gtk+ ≥ 3.20. Ce travaille et ces correctifs seront intégrés dans la prochaine version majeure d’elementary OS. Cela inclut le changement de nombreux sélecteurs CSS vers de nouveaux noms(actionbarinstead en lieu et place de .action-bar ou GtkActionBar) ainsi que le support de nouvelles classes dont par exemple keycap.</p>
<p>L’indicateur Bluetooth se voit aussi mis à jour au travers d’un correctif qui corrige l’affichage en double les équipements Bluetooth. Un autre correctif s’est vu intégré qui corrige le comportement du séparateur de menu qui pouvait être déplacé avec la liste de périphériques.</p>
<p>Pour l’indicateur de Notification, la présence de texte long de notification se voit maintenant tronquée. Un autre fix s’est vu aussi intégré : celui-ci vient corriger le comportement de certaines fenêtres qui n’étaient pas minimisées lors d’un clic dans la zone de notification adéquate.</p>
<p>Un peu de nettoyage ainsi que quelques corrections d’ordre graphiques ont été apportés à l’indicateur de Session.</p>
<h3>Mail</h3>
<p>Mail se voit maintenant doter d’un bouton permettant l’ajout d’image directement dans le corps du mail ! Autre soucis maintenant corrigé, lors d’un clic sur un lien issu d’un lien dans un mail, il n’y aura plus de défilement involontaire.</p>
<p>FastMail a effectué un déplacement de leurs serveurs récemment, l’équipe a donc mis à jour le paramétrage des Comptes en ligne pour pointer vers leur nouvelle adresse.</p>
<p>Dans certains cas, lorsque Vidéo détecté la pression sur la barre d’espace, il pouvait interpréter cela comme une double pression sur cette même touche. La calculatrice se voit aussi mise à jour avec une amélioration de la gestion des décimales ainsi qu’un correctif qui empêche maintenant l’affiche du résultat -0.</p>
<p>Le billet <a rel="nofollow" href="http://www.elementaryos-fr.org/vacances-terminees-elementary-os-continue-evolution/">Les vacances sont terminées : elementary OS continue son évolution</a> a été publié sur le site de la <a rel="nofollow" href="http://www.elementaryos-fr.org/">elementary OS - </a></p>
<p><img src="media/7e20f332.e363a9ed45733fa3aec7c3a0361380c6" data-original-source="http://cdn.libravatar.org/avatar/e363a9ed45733fa3aec7c3a0361380c6" alt="Gravatar de elementary OS" class="gravatar" /><br/><i>Original post of <a href="http://www.elementaryos-fr.org/vacances-terminees-elementary-os-continue-evolution/" title="Visit the source">elementary OS</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>elementary OS : <a href="">elementary OS Loki 0.4.1 disponible</a> (20/05/2017)</li><li>elementary OS : <a href="">elementary OS Freya : La beta 1 Disponible pour les d&eacute;veloppeurs et les testeurs</a> (11/08/2014)</li><li>elementary OS : <a href="">La v&eacute;ritable taille du projet elementary OS</a> (14/02/2015)</li><li>elementary OS : <a href="">elementary OS 0.3 Freya: le bilan</a> (13/05/2015)</li><li>elementary OS : <a href="">elementary OS passe en beta sur StackExchange</a> (18/07/2015)</li></ul></div></p>


feed_id: http://www.morot.fr/puppet-automatiser-la-construction-dun-volume-glusterfs-replique/
title: Morot : Puppet : automatiser la construction d’un volume GlusterFS répliqué
uri: Morot-Puppet-automatiser-la-construction-d-un-volume-GlusterFS-r
url: http://www.morot.fr/puppet-automatiser-la-construction-dun-volume-glusterfs-replique/
content:
<h1>Puppet : automatiser la construction d’un volume GlusterFS répliqué</h1>
<p>Je vais présenter rapidement comment créer le code Puppet adapté à la création d’un cluster à deux noeuds avec deux bricks répliqués. Pour la démonstration, j’aurais deux VM Ubuntu 16.04 et les bricks seront sur deux disques durs de 8 Go.</p>
<h2>Préparation du Puppet Master</h2>
<p>Installation des modules nécessaires :</p>
<pre>
# puppet module install puppetlabs-lvm
Notice: Preparing to install into /etc/puppetlabs/code/environments/production/modules ...
Notice: Downloading from https://forgeapi.puppet.com ...
Notice: Installing -- do not interrupt ...
/etc/puppetlabs/code/environments/production/modules
└─┬ puppetlabs-lvm (v0.9.0)
  └── puppetlabs-stdlib (v4.20.0)

# puppet module install puppet-gluster
Notice: Preparing to install into /etc/puppetlabs/code/environments/production/modules ...
Notice: Downloading from https://forgeapi.puppet.com ...
Notice: Installing -- do not interrupt ...
/etc/puppetlabs/code/environments/production/modules
└─┬ puppet-gluster (v3.0.0)
  └─┬ puppetlabs-apt (v2.4.0)
    └── puppetlabs-stdlib (v4.20.0)

</pre>
<p>Notre arborescence pour le module se trouvera dans ce répertoire :</p>
<pre>
# mkdir -p /etc/puppetlabs/code/environments/production/modules/glustersrv/manifests
</pre> 
<h2>Préparation des disques</h2>
Fichier <strong>/etc/puppetlabs/code/environments/production/modules/glustersrv/manifests/lvm.pp</strong> :
<pre>
class glustersrv::brick {

# Dépendances :
  package { "xfsprogs": ensure=> present }
  package { "lvm2": ensure=> present }

# On créé notre LVM :
  physical_volume { '/dev/sdb':
    ensure => present,
  }

  volume_group { 'vg-gluster':
    ensure           => present,
    physical_volumes => '/dev/sdb',
  }

  logical_volume { 'lv-bricks':
    ensure       => present,
    volume_group => 'vg-gluster',
      size         => '7.9G',
  }

  filesystem { '/dev/vg-gluster/lv-bricks':
    ensure  => present,
    fs_type => 'xfs',
  }

# Le volume LVM est automatiquement monté
  mount { '/data/glusterfs/vol0':
    name => '/data/glusterfs/vol0',
    ensure => 'mounted',
    atboot => 'true',
    device => '/dev/vg-gluster/lv-bricks',
    fstype   => 'xfs',
    options   => 'defaults',
    dump   => 1,
    pass => 0,
  }
}
</pre>
<h2>Création du volume répliqué</h2>
<p>Fichier <strong>/etc/puppetlabs/code/environments/production/modules/glustersrv/manifests/node.pp</strong> :</p>
<pre>
class glustersrv::node {

  file { '/data/glusterfs/vol0/brick0':
    ensure => 'directory',
  }

  package { "glusterfs-server": ensure => 'present' }

  service { 'glusterfs-server':
    ensure => running,
    enable => true,
    hasrestart => true,
  }

  gluster::volume { 'repl-vol':
    replica => 2,
    bricks  => [
      'gluster0.morot.test:/data/glusterfs/vol0/brick0',
      'gluster1.morot.test:/data/glusterfs/vol0/brick0',
    ],
  }
}
</pre>
<h2>Affectation des classes</h2>
<p>Fichier <strong>/etc/puppetlabs/code/environments/production/manifests/site.pp</strong> :</p>
<pre>
node 'gluster0' {
  include system
  include glustersrv::lvm
  gluster::peer { 'gluster1.morot.test':
    pool => 'production',
  }
  include glustersrv::node
}

node 'gluster1' {
  include system
  include glustersrv::lvm
  gluster::peer { 'gluster0.morot.test':
    pool => 'production',
  }
  include glustersrv::node
}
</pre>
<h2>On vérifie</h2>
<pre>
root@gluster1:~# gluster volume status
Status of volume: repl-vol
Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick gluster0.morot.test:/data/glusterfs/v
ol0/brick0                                  49152     0          Y       7037
Brick gluster1.morot.test:/data/glusterfs/v
ol0/brick0                                  49152     0          Y       3817
NFS Server on localhost                     N/A       N/A        N       N/A
Self-heal Daemon on localhost               N/A       N/A        Y       3844
NFS Server on 192.168.69.70                 N/A       N/A        N       N/A
Self-heal Daemon on 192.168.69.70           N/A       N/A        Y       7063

Task Status of Volume repl-vol
------------------------------------------------------------------------------
There are no active volume tasks
</pre>
<p><img src="media/99a29b3e.66c4999dd9bd45d4da5505a92765dd9d" data-original-source="http://cdn.libravatar.org/avatar/66c4999dd9bd45d4da5505a92765dd9d" alt="Gravatar de Morot" class="gravatar" /><br/><i>Original post of <a href="http://www.morot.fr/puppet-automatiser-la-construction-dun-volume-glusterfs-replique/" title="Visit the source">Morot</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>Morot : <a href="">Redirection HTTP-HTTPS avec HAProxy en conservant le host</a> (29/10/2013)</li><li>Morot : <a href="">Astuce HAProxy</a> (29/10/2013)</li><li>Morot : <a href="">HA avec Keepalived (GLMF 163)</a> (13/12/2015)</li><li>Morot : <a href="">Loadbalancer hautement disponible avec HAProxy et Keepalived</a> (18/09/2016)</li><li>Morot : <a href="">HAProxy : g&eacute;rer la persistance des sessions lorsque l&rsquo;application n&rsquo;est pas con&ccedil;ue pour</a> (18/04/2017)</li></ul></div></p>


feed_id: https://olpc-france.org/blog/2017/09/une-plateforme-de-traduction-pour-sugarizer/
title: OLPC France : Une plateforme de traduction pour Sugarizer
uri: OLPC-France-Une-plateforme-de-traduction-pour-Sugarizer
url: https://olpc-france.org/blog/2017/09/une-plateforme-de-traduction-pour-sugarizer/
content:
<p><a href="media/c9420c72.translate_sugarizer.png" data-original-source="https://olpc-france.org/blog/wp-content/uploads/2017/09/translate_sugarizer.png"><img src="media/c9420c72.translate_sugarizer.png" data-original-source="https://olpc-france.org/blog/wp-content/uploads/2017/09/translate_sugarizer.png" alt="" width="2500" height="1254"></a></p>
<p>Et si <a href="http://sugarizer.org/">Sugarizer</a>  – un goût de Sugar sur n’importe quelle machine  – pouvait être disponible dans votre langue ?</p>
<p>Pour faciliter les efforts de traduction de la communauté, nous avons unifié tous les fichiers sources à traduire pour Sugarizer (Sugarizer core, le site web Sugarizer website, les activités incluses et le future  Sugarizer Server dashboard) dans une nouvelle plate-forme:</p>
<p><a href="http://translate.sugarizer.org/">http://translate.sugarizer.org</a></p>
<p>Cliquez simplement sur cette URL et vous pourrez démarrer la traduction:</p>
<ul><li>Suggérez une nouvelle traduction sans même avoir besoin de vous connecter</li>
<li>Enregistrez-vous pour démarrer la traduction sur une nouvelle langue ou valider des traductions</li>
</ul><p>Grâce à Weblate l’outil utiliser pour cette plateforme, toutes les nouvelles traductions seront intégrés dans les dépôts correspondants sans autres actions de votre part.</p>
<p>N’hésitez pas à nous solliciter pour toutes questions ou problèmes.</p>
<p><img src="media/555f14a0.b5a4c4b23233d8623b213fb0469dfcd5" data-original-source="http://cdn.libravatar.org/avatar/b5a4c4b23233d8623b213fb0469dfcd5" alt="Gravatar de OLPC France" class="gravatar" /><br/><i>Original post of <a href="https://olpc-france.org/blog/2017/09/une-plateforme-de-traduction-pour-sugarizer/" title="Visit the source">OLPC France</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>OLPC France : <a href="">OLPC France en ordre de marche pour 2013</a> (23/10/2012)</li><li>OLPC France : <a href="">Vid&eacute;o de la pr&eacute;sentation Sugarizer &agrave; Scratch2017bdx</a> (22/07/2017)</li><li>OLPC France : <a href="">Sugarizer, en route pour la version 1</a> (28/08/2017)</li><li>OLPC France : <a href="">Sugarizer v0.9 est disponible</a> (11/09/2017)</li><li>OLPC France : <a href="">La communaut&eacute; Sugar Labs P&eacute;rou en deuil</a> (11/01/2012)</li></ul></div></p>


feed_id: http://blog.ght1pc9kc.fr/Hello-OSGi-World,-Part-4/
title: Marthym : Hello OSGi World, Part 4, Injection de dépendances
uri: Marthym-Hello-OSGi-World-Part-4-Injection-de-dépendances
url: http://blog.ght1pc9kc.fr/Hello-OSGi-World,-Part-4/
content:
<p>Quelles sont donc les raisons d’utiliser OSGi ? On en a vu plusieurs jusqu’ici :</p>
<ul><li>Isolation des classpath par bundle</li>
  <li>Chargement et mise à jour des bundles à chaud</li>
</ul><p>Mais OSGi c’est aussi et surtout un framework d’injection de dépendances. Comme pour tout dans l’univers OSGi, l’injection est une spécification et il existe plusieurs implémentations comme iPOJO ou Declarative Service. On ne verra pas iPOJO parce que je suis pas fan et j’ai plus l’habitude d’utiliser DS.</p>

<h2>Declarative Service</h2>
<p>DS permet de déclarer des composants et des services qui s’injectent les uns les autres. Initialement tout doit être déclaré dans des XML et dans le <code>MANIFEST.MF</code>, encore un truc bien fastidieux ! Heureusement, SCR vient à notre secours et permet de faire tout ça via des annotations ce qui rend la chose plus sympa et plus “actuelle”.</p>

<p>Ajoutons donc les dépendances nécessaires au projet:</p>
<div><pre><code>  <span><dependency></span>
      <span><groupId></span>org.apache.felix<span></groupId></span>
      <span><artifactId></span>org.apache.felix.scr<span></artifactId></span>
      <span><version></span>${felix-scr.version}<span></version></span>
  <span></dependency></span>
  <span><dependency></span>
      <span><groupId></span>org.osgi<span></groupId></span>
      <span><artifactId></span>osgi.cmpn<span></artifactId></span>
      <span><version></span>${osgi.core.version}<span></version></span>
      <span><scope></span>provided<span></scope></span>
  <span></dependency></span>
</code></pre>
</div>

<ul><li><strong>osgi.cmpn</strong> pour les annotations. C’est une dépendance de compilation uniquement, on ne la veut pas dans le package final. Si vous la laissé, au lancement vous aurez une erreur assez parlante. À déclarer dans <code>how-rest</code>.</li>
  <li><strong>org.apache.felix.scr</strong> c’est l’implémentation runtime uniquement qui gère les composants au runtime. À déclarer dans <code>how-assembly</code></li>
</ul><h2>Création de composants</h2>
<p>Voici à quoi ressemble un composant</p>

<div><pre><code><span>import</span> <span>org.osgi.service.component.annotations.Activate</span><span>;</span>
<span>import</span> <span>org.osgi.service.component.annotations.Component</span><span>;</span>
<span>import</span> <span>org.slf4j.Logger</span><span>;</span>
<span>import</span> <span>org.slf4j.LoggerFactory</span><span>;</span>

<span>@Component</span><span>(</span><span>name</span> <span>=</span> <span>"http-server"</span><span>,</span> <span>immediate</span> <span>=</span> <span>true</span><span>)</span>
<span>public</span> <span>final</span> <span>class</span> <span>HttpServerComponent</span> <span>{</span>
    <span>private</span> <span>static</span> <span>final</span> <span>Logger</span> <span>LOGGER</span> <span>=</span> <span>LoggerFactory</span><span>.</span><span>getLogger</span><span>(</span><span>HttpServerComponent</span><span>.</span><span>class</span><span>);</span>

    <span>@Activate</span>
    <span>private</span> <span>void</span> <span>startHttpServer</span><span>()</span> <span>{</span>
        <span>LOGGER</span><span>.</span><span>info</span><span>(</span><span>"HTTP Server started on port {}"</span><span>,</span> <span>8888</span><span>);</span>
    <span>}</span>
<span>}</span>
</code></pre>
</div>

<p>C’est l’annotation <code>@Component</code> qui définit un composant. <code>name</code> détermine le nom du composant, l’information n’est pas obligatoire, si absente le composant aura le nom de la classe. <code>immediate</code> permet de dire que le composant doit être instancié dès que le bundle est activé, sans ça le composant ne sera instancié que quand il sera nécessaire. Comme aucun autre composant ne dépend du nôtre, si on ne le met pas immédiate, on ne verra rien.</p>

<p>L’annotation <code>@Activate</code> détermine la méthode qui sera exécutée lors de l’activation du composant. Ici on se limite à un log pour vérifier que cela fonctionne.</p>

<p>Et un coup de <code>mvn clean package</code> puis on lance l’application et …</p>

<pre>
____________________________
Welcome to Apache Felix Gogo

g! 21:43:51.533 [fileinstall-application] INFO fr.ght1pc9kc.how.HowActivator - HOW is now Activated !
21:43:51.554 [fileinstall-application] INFO fr.ght1pc9kc.how.HttpServerComponent - HTTP Server started on port 8888
</pre>

<p>On voit bien les deux messages. Et à ce moment vous vous dites “merde mais l’activateur ça sert du coup ?”. Ben en fait non, SCR instancie les composant et exécute les méthodes <code>@Activate</code> du coup c’est plus très utile. Après c’est quand même pas la même chose, l’activateur agit au niveau bundle alors que <code>@Activate</code> agit au niveau composant.</p>

<p>Bref on peut supprimer l’activateur et la toutes section <code><build></code> du pom de <code>how-rest</code> qui devient elle aussi inutile. Dans le jar maintenant, au même niveau que <code>META-INT</code> on trouve <code>OSGI-INF</code> qui contient les déclarations XML des composants que le <code>maven-bundle-plugin</code> a généré pour nous.</p>

<h3>Gogo gadgeto composant</h3>
<p>Jetons un œil coté gogo shell, un coup de <code>help</code> montre une nouvelle série de commandes, les <code>scr:</code>. Essayez <code>scr:list</code> :</p>

<pre>
g! scr:list
 BundleId Component Name Default State
    Component Id State      PIDs (Factory PID)
 [   9]   http-server  enabled
    [   0] [active      ] 
g! 
</pre>

<p>Pour chaque bundle, cette commande liste les composants et leur état. C’est très utile si un composant ne s’active pas, pour savoir ce qu’il lui manque, quelles dépendances ne sont pas satisfaites par exemple.</p>

<h2>Dis Bonjour !</h2>

<p>Ben oui on a fait plein de trucs mais on a toujours pas notre Hello World. Maintenant que la machinerie est en place on peut lancer un serveur HTTP à l’activation de notre composant <code>http-server</code> :</p>

<div><pre><code>    <span>@Activate</span>
    <span>private</span> <span>void</span> <span>startHttpServer</span><span>()</span> <span>{</span>
        <span>Undertow</span> <span>server</span> <span>=</span> <span>Undertow</span><span>.</span><span>builder</span><span>()</span>
                <span>.</span><span>addHttpListener</span><span>(</span><span>HTTP_PORT</span><span>,</span> <span>"localhost"</span><span>)</span>
                <span>.</span><span>setHandler</span><span>(</span><span>exchange</span> <span>-></span> <span>{</span>
                    <span>exchange</span><span>.</span><span>getResponseHeaders</span><span>().</span><span>put</span><span>(</span><span>Headers</span><span>.</span><span>CONTENT_TYPE</span><span>,</span> <span>"text/plain"</span><span>);</span>
                    <span>exchange</span><span>.</span><span>getResponseSender</span><span>().</span><span>send</span><span>(</span><span>"Hello OSGi World"</span><span>);</span>
                <span>}).</span><span>build</span><span>();</span>
        <span>server</span><span>.</span><span>start</span><span>();</span>
        <span>LOGGER</span><span>.</span><span>info</span><span>(</span><span>"HTTP Server started on port {}"</span><span>,</span> <span>HTTP_PORT</span><span>);</span>
    <span>}</span>
</code></pre>
</div>

<p>J’ai pris un serveur Undertow parce qu’il est rapide simple, non-bloquant (killer feature dans notre cas !) et en prime il est compatible OSGi.</p>

<p>Je vous laisse voir les poms pour la liste des imports.</p>

<p>Il ne reste plus qu’à relancer l’application pour voir si ça fonctionne.</p>

<h3>Ordre et dépendances</h3>

<pre>
ERROR: [http-server(0)] The startHttpServer method has thrown an exception
java.lang.IllegalArgumentException: XNIO001001: No XNIO provider found 
        at org.xnio.Xnio.doGetInstance(Xnio.java:270)
        at org.xnio.Xnio.getInstance(Xnio.java:187)
        at io.undertow.Undertow.start(Undertow.java:114)
        at fr.ght1pc9kc.how.HttpServerComponent.startHttpServer(HttpServerComponent.java:23)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.felix.scr.impl.inject.BaseMethod.invokeMethod(BaseMethod.java:229)
        at org.apache.felix.scr.impl.inject.BaseMethod.access$500(BaseMethod.java:39)
        at org.apache.felix.scr.impl.inject.BaseMethod$Resolved.invoke(BaseMethod.java:650)
        at org.apache.felix.scr.impl.inject.BaseMethod.invoke(BaseMethod.java:506)
        at org.apache.felix.scr.impl.inject.ActivateMethod.invoke(ActivateMethod.java:307)
        at org.apache.felix.scr.impl.inject.ActivateMethod.invoke(ActivateMethod.java:299)
</pre>

<p>Voilà un autre inconvénient d’OSGi, l’ordre de chargement des bundles compte. La plupart du temps, les bundles dépendent les uns des autres et le framwork les résous en chargeant les bundles dans l’ordre. Mais là on a un bundle <code>xnio.nio</code> qui est une implémentation, personne ne dépend de lui. Mais tant qu’il n’est pas là le serveur Undertow ne peut être lancé. Mais comme personne ne dépend ni de <code>xnio.nio</code> ni de <code>how-rest</code> les deux bundles sont chargés par ordre alphabétique et l’activation de <code>how-rest</code> est déclenché avant que <code>xnio.nio</code> ne soit disponible.</p>

<p><strong>Solution:</strong></p>

<p>En regardant dans le code d’Undertow ou dans la documentation, on voit que Undertow, pour être lancé, a besoin d’une instance de <code>Xnio</code>. Comme c’est souvent le cas dans les modules standard qui “supportent” OSGi, la façon dont Xnio génère son instance et la façon dont Undertow en dépend ne permet pas d’éviter ce souci. Du coup c’est à nous de le gérer. Le plus simple pour ça est d’expliquer à OSGi que le module <code>http-server</code> ne peut être activé tant qu’il n’existe pas une instance accessible de Xnio. On ajoute la dépendance comme suit :</p>

<div><pre><code>    <span>@Reference</span>
    <span>private</span> <span>void</span> <span>waitForXnio</span><span>(</span><span>Xnio</span> <span>xnio</span><span>)</span> <span>{</span>
        <span>LOGGER</span><span>.</span><span>debug</span><span>(</span><span>"XNIO Implementation found: {}"</span><span>,</span> <span>xnio</span><span>);</span>
    <span>}</span>
</code></pre>
</div>

<p>C’est l’annotation <code>@Reference</code> qui indique à Felix que le composant à besoin d’une instance de <code>Xnio</code>.</p>

<p>On rebuild l’application et ça démarre correctement ! Rendez-vous sur la page <code>http://localhost:8080/</code> pour y voir s’affiche le message de bienvenue.</p>

<h3>Le felix-cache</h3>
<p>Il reste cependant encore un souci, si l’on stoppe (<code>CTRL^C</code>) et que l’on relance, on prend à nouveau cette erreur. C’est lié au cache que Felix génère. J’ignore pourquoi mais un chargement depuis le cache provoque la même erreur. Pour palier ce souci, on demande à Felix de recharger son cache à chaque démarrage. Dans le fichier de configuration Felix on ajoute la ligne:</p>

<div><pre><code><span>org</span>.<span>osgi</span>.<span>framework</span>.<span>storage</span>.<span>clean</span>=<span>onFirstInit</span>
</code></pre>
</div>

<h2>Dépendances Multiples</h2>
<p>Pour finir, modifions un peu l’application pour la rendre plus dynamique. L’idée de faire en sorte que le serveur découvre les nouvelles route dynamiquement.</p>

<p>Pour cela, on crée une interface <code>Route</code> comme suit :</p>

<div><pre><code><span>public</span> <span>interface</span> <span>Route</span> <span>extends</span> <span>HttpHandler</span> <span>{</span>
    <span>String</span> <span>getRoute</span><span>();</span>
<span>}</span>
</code></pre>
</div>

<p>Et dans le composant HTTP on ajoute une dépendance MULTIPLE à <code>Route</code></p>
<div><pre><code><span>@Reference</span><span>(</span><span>cardinality</span> <span>=</span> <span>ReferenceCardinality</span><span>.</span><span>MULTIPLE</span><span>,</span> <span>policy</span> <span>=</span> <span>ReferencePolicy</span><span>.</span><span>DYNAMIC</span><span>)</span>
<span>private</span> <span>void</span> <span>addHttpHandler</span><span>(</span><span>Route</span> <span>handler</span><span>)</span> <span>{</span>
    <span>routingHandler</span><span>.</span><span>get</span><span>(</span><span>handler</span><span>.</span><span>getRoute</span><span>(),</span> <span>handler</span><span>);</span>
<span>}</span>

<span>private</span> <span>void</span> <span>removeHttpHandler</span><span>(</span><span>Route</span> <span>handler</span><span>)</span> <span>{</span>
    <span>routingHandler</span><span>.</span><span>remove</span><span>(</span><span>handler</span><span>.</span><span>getRoute</span><span>());</span>
<span>}</span>
</code></pre>
</div>

<p>Ainsi chaque Route qui apparaîtra dans les bundles installé viendra s’ajouter à celle existantes. La présence d’une méthode <code>removeHttpHandler</code> est obligatoire pour packager le bundle. BND utilise le nom pour trouver la bonne méthode.</p>

<p>Une route ressemble à ça :</p>
<div><pre><code><span>@Component</span>
<span>public</span> <span>class</span> <span>HelloWorldRoute</span> <span>implements</span> <span>Route</span> <span>{</span>
    <span>@Override</span>
    <span>public</span> <span>void</span> <span>handleRequest</span><span>(</span><span>HttpServerExchange</span> <span>exchange</span><span>)</span> <span>throws</span> <span>Exception</span> <span>{</span>
        <span>exchange</span><span>.</span><span>getResponseHeaders</span><span>().</span><span>put</span><span>(</span><span>Headers</span><span>.</span><span>CONTENT_TYPE</span><span>,</span> <span>"text/plain"</span><span>);</span>
        <span>exchange</span><span>.</span><span>getResponseSender</span><span>().</span><span>send</span><span>(</span><span>"Hello OSGi World"</span><span>);</span>
    <span>}</span>

    <span>@Override</span>
    <span>public</span> <span>String</span> <span>getRoute</span><span>()</span> <span>{</span>
        <span>return</span> <span>"/hello"</span><span>;</span>
    <span>}</span>
<span>}</span>
</code></pre>
</div>

<p>Si vous compilez les sources 4.0 il y a 2 routes, /hello et /bonjour.</p>

<p>C’est un exemple simple pour illustré les dépendances multiples, mais il est possible de faire beaucoup mieux, des Controllers avec l’API JAX-RS.</p>

<h2>Next</h2>
<p>Donc voilà, on a vu comment OSGi gère les dépendances. La prochaine fois on verra les Fragments Bundles, à quoi ça sert et comment on fait ça.</p>

      <p><a href="http://blog.ght1pc9kc.fr/Hello-OSGi-World,-Part-4/">Hello OSGi World, Part 4, Injection de dépendances</a> écrit à l'origine par Marthym pour <a href="http://blog.ght1pc9kc.fr/">J'ai acheté un PC neuf cassé ...</a> le September 16, 2017.</p>
<p><img src="media/b4d43823.16f8ed3b71457256797eac76e92d6db9" data-original-source="http://cdn.libravatar.org/avatar/16f8ed3b71457256797eac76e92d6db9" alt="Gravatar de Marthym" class="gravatar" /><br/><i>Original post of <a href="http://blog.ght1pc9kc.fr/Hello-OSGi-World,-Part-4/" title="Visit the source">Marthym</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>


feed_id: https://blog.fedora-fr.org/renault/post/Petit-bilan-de-Rawhide%2C-%C3%A9pisode-5%2C-juillet-2017
title: Renault : Petit bilan de Rawhide, épisode 5, septembre 2017
uri: Renault-Petit-bilan-de-Rawhide-épisode-5-septembre-2017
url: https://blog.fedora-fr.org/renault/post/Petit-bilan-de-Rawhide%2C-%C3%A9pisode-5%2C-juillet-2017
content:
<p>Je n'ai pas écrit de bilan de Rawhide en juin, juillet et août, l'approche
de la version finale de Fedora 26 a amené trop peu de changements visibles pour
que ce soit pertinent de les noter au départ puis j'ai manqué de temps pour
traiter les avancées de Fedora 27.</p>
<p>Fedora 26 étant disponible depuis le 11 juillet, mon ordinateur personnel
est repassé aussi tôt sur Fedora Rawhide qui est devenu il y a un mois Fedora
27 en devenir.</p>
<p>Fedora 27 Beta va d'ailleurs bientôt arriver, d'ici quelques semaines. Ce
sera une première sans version Alpha préliminaire.</p>
<h3>Changements</h3>
<p>Dès le début <a href="https://help.gnome.org/misc/release-notes/3.26/" hreflang="fr">GNOME 3.26 a des changements assez visibles</a>. Je vous invite à
lire les notes de versions pour plus de détails (et les illustrations).
L'utilitaire <em>gnome-tweak-tool</em> a été remanié, les options sont plus
nombreuses et le style de sélection ressemble à l'interface de GNOME Builder.
Le centre de contrôle de GNOME a été également très modifié, avec une
nouvelle organisation via cette barre latérale permanente et la refonte de
nombreuses pages comme ce qui touche à l'affichage ou au réseau.</p>
<p>Je ne sais pas pourquoi mais la police par défaut de GNOME Terminal (police
à chasse fixe) est Monospace Regular ce qui change bien entendu le rendu.</p>
<p>Quand les fenêtres dans GNOME sont rétrécies ou agrandies, il y a un nouvel
effet visuel. Rien de sensationnel, mais c'est plutôt agréable sans pertes de
performance dans la foulée j'ai l'impression. La barre de GNOME devient
également transparente s'il n'y a pas de fenêtres maximisées.</p>
<p>Pendant quelques semaines, Empathy a également bénéficié de la refonte de
son interface pour être plus homogène avec les autres applications GNOME en
adoptant une interface proche de Polari. Mais cela était expérimental et
l'interface habituelle a repli place. En espérant qu'il reviendra bientôt.</p>
<p>Et bien d'autres que je n'ai sans doute pas remarqué ou qui sont plus
insignifiants.</p>
<h3>Problèmes</h3>
<p>Rawhide comporte bien évidemment de bogues. Même si des procédures doivent
être mises en place durant ce cycle pour améliorer la qualité globale de cette
branche de Fedora, des bogues importants resteront probablement présents.</p>
<p>En premier lieu, <a href="https://bugzilla.redhat.com/show_bug.cgi?id=1471240" hreflang="en">mon système
de fichier <em>/home</em> chiffré avec LUKS n'était plus monté
automatiquement</a>. C'est plutôt gênant, on doit le faire à la main mais
heureusement sans autres conséquences notamment en terme de cohérence des
données. Heureusement corrigé depuis.</p>
<p>Un autre bogue, assez pénible, le sélecteur de fichier de GTK crashe. Donc
dès qu'il faut choisir / ajouter un fichier dans un programme, l'application
plante. Cela a été corrigé avant que je n'en fasse un rapport.</p>
<p><a href="https://bugzilla.redhat.com/show_bug.cgi?id=1490122" hreflang="en">Firefox 55 a été oublié des mises à jour des paquets</a>, à la base
suite à des soucis pour le compiler puis par oubli du mainteneur. <img src="media/59264327.smile.png" data-original-source="https://blog.fedora-fr.org/themes/default/smilies/smile.png" alt=":-)"></p>
<p><a href="https://bugzilla.redhat.com/show_bug.cgi?id=1456293" hreflang="en">Sinon GNOME est très instable</a>. La session se ferme régulièrement
(toutes les heures presque) voire à certains moment comme à l'ouverture d'une
machine virtuelle. Beaucoup de rapports de bogues tournent autours de ce sujet.
<a href="https://bugzilla.redhat.com/show_bug.cgi?id=1490351" hreflang="en">Il
semble que le composant gjs</a> soit le fautif et une correction semble en
cours. C'est rare que GNOME soit autant en difficulté et étant donné
l'importance du sujet Fedora bloque l'évolution du cycle de F27 le temps que
cela se calme.</p>
<p><img src="media/d143d7a6.f792a7629fb4a46c01613eb1976730ef" data-original-source="http://cdn.libravatar.org/avatar/f792a7629fb4a46c01613eb1976730ef" alt="Gravatar de Renault" class="gravatar" /><br/><i>Original post of <a href="https://blog.fedora-fr.org/renault/post/Petit-bilan-de-Rawhide%2C-%C3%A9pisode-5%2C-juillet-2017" title="Visit the source">Renault</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>Renault : <a href="">Petit bilan de Rawhide, 2 mois apr&egrave;s</a> (21/01/2017)</li><li>Renault : <a href="">Petit bilan de Rawhide, &eacute;pisode 2</a> (07/03/2017)</li><li>Renault : <a href="">Petit bilan de Rawhide, &eacute;pisode 3</a> (12/04/2017)</li><li>Renault : <a href="">Petit bilan de Rawhide, &eacute;pisode 4, mai 2017</a> (30/05/2017)</li><li>Renault : <a href="">Participez &agrave; la journ&eacute;e de test de Fedora 25 sur Wayland</a> (13/10/2016)</li></ul></div></p>


feed_id: https://linuxevolution.wordpress.com/2017/09/16/remplacer-avantageusement-shutter-par-hotshots/
title: Cenwen : Remplacer avantageusement Shutter par HotShots
uri: Cenwen-Remplacer-avantageusement-Shutter-par-HotShots
url: https://linuxevolution.wordpress.com/2017/09/16/remplacer-avantageusement-shutter-par-hotshots/
content:
<p><a href="https://linuxevolution.wordpress.com/2017/09/16/remplacer-avantageusement-shutter-par-hotshots/selection_053/" rel="attachment wp-att-2916"><img data-attachment-id="2916" data-permalink="https://linuxevolution.wordpress.com/2017/09/16/remplacer-avantageusement-shutter-par-hotshots/selection_053/" data-orig-file="https://linuxevolution.files.wordpress.com/2017/09/sc3a9lection_053.png?w=593" data-orig-size="98,101" data-comments-opened="1" data-image-meta='{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}' data-image-title="Sélection_053" data-image-description="" data-medium-file="https://linuxevolution.files.wordpress.com/2017/09/sc3a9lection_053.png?w=593?w=98" data-large-file="https://linuxevolution.files.wordpress.com/2017/09/sc3a9lection_053.png?w=593?w=98" src="https://linuxevolution.files.wordpress.com/2017/09/sc3a9lection_053.png?w=593" alt=""></a>Fervent utilisateur de<a href="http://shutter-project.org/"> Shutter</a> depuis de nombreuses années, je me suis retrouvé sans logiciel de capture d’écran il y a quelques mois. En effet, le projet n’ayant pas eu de maj depuis au moins 2 ans (cela a été fait récemment) et les bureaux et librairies graphiques ou pas évoluant durant ce laps de temps, il m’a été impossible de lancer le logiciel après une maj de <a href="https://manjaro.org/">Manjaro</a>. Cela ne sentait pas bon pour l’avenir , vu que cette distribution en rolling-release est à la pointe des dernières versions en tout genre, que ce soit pour l’environnement ou bien pour les librairies. Bref, il fallait que je trouve une solution. Mon choix s’est alors porté sur<a href="http://thehive.xbee.net/"> HotShots,</a> écrit en C++ et QT4 .</p>
<p><span></span></p>
<h2>Hum HotShots. Est-ce que cela se mange ?</h2>
<p>Traduit en 21 langues, Hotshots permet de réaliser des captures d’écrans dans différents formats et de leurs appliquer des modifications diverses, le plus facilement du monde.</p>
<p>Les caractéristiques principales de cet outil sont :</p>
<ul><li>capturer tout l’écran, tous les écrans (si vous en avez plusieurs), une portion de l’écran, une fenêtre, une zone à main levée</li>
<li>exportation de l’image dans les formats png, tiff, tif, jpg, jpeg, gif, svg, pgm, ppm, ico, bmp, mng, pbm, svgz, xbm, xpm</li>
<li>définition du délai de la capture (pas ou selon votre choix)</li>
<li>définition de l’action à réaliser sur l’image capturée (sauvegarde automatique, sauvegarde de l’image à la demande de l’utilisateur, ouvrir directement l’éditeur, ne rien faire)</li>
<li>imprimer directement l’image que ce soit dans le logiciel ou bien dans l’éditeur</li>
<li>démarrer automatiquement ou non le logiciel au démarrage système</li>
<li>minimiser l’application dans le systray</li>
<li>application directe d’un filtre de type ombre portée simple, ombre portée avec bordures, opacité progressive, bords déchirés</li>
<li>mise à l’échelle de l’image</li>
<li>exportation automatique ou non de l’image vers un serveur FTP, un service d’hébergement d’images en ligne (FreeImageHosting.net, ImageShack.us, Imgur.com, CanardPC) ou bien sur votre disque dur avec ou pas de proxy</li>
</ul><p> </p>
<h2>Comment l’installer ?</h2>
<p>Comme d’habitude sous Linux, vous avez le choix pour installer et tester ce logiciel. Soit vous utilisez votre gestionnaire de paquets comme Octopi, Pacmac, Synaptic, Linux Mint Software Center, Ubuntu Software Center, …. , soit en ligne de commande.</p>
<p>Vu que pour <a href="https://archlinux.fr/">Archlinux</a> et dérivées dont Manjaro, le logiciel est disponible sur <a href="https://aur.archlinux.org/packages/hotshots/">AUR</a>, la ligne de commande sera :</p>
<p><code>yaourt -S hotshots</code></p>
<p>Si vous êtes sur <a href="https://www.ubuntu.com/">Ubuntu</a> et dérivés dont <a href="https://linuxmint.com/">Linux Mint</a>, la commande sera la suivante :</p>
<p><code>sudo apt-get install hotshots</code></p>
<p> </p>
<h2>Présentation rapide de l’interface</h2>
<p>L’interface dispose de 3 zones principales.</p>
<p><a href="https://linuxevolution.wordpress.com/2017/09/16/remplacer-avantageusement-shutter-par-hotshots/hotshots-2-2-0-1109x939_052/" rel="attachment wp-att-2911"><img data-attachment-id="2911" data-permalink="https://linuxevolution.wordpress.com/2017/09/16/remplacer-avantageusement-shutter-par-hotshots/hotshots-2-2-0-1109x939_052/" data-orig-file="https://linuxevolution.files.wordpress.com/2017/09/hotshots-2-2-0-1109x939_052.png" data-orig-size="1250,939" data-comments-opened="1" data-image-meta='{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}' data-image-title="HotShots – 2.2.0 – 1109x939_052" data-image-description="" data-medium-file="https://linuxevolution.files.wordpress.com/2017/09/hotshots-2-2-0-1109x939_052.png?w=300" data-large-file="https://linuxevolution.files.wordpress.com/2017/09/hotshots-2-2-0-1109x939_052.png?w=593&amp;h=445" src="https://linuxevolution.files.wordpress.com/2017/09/hotshots-2-2-0-1109x939_052.png?w=593&amp;h=445" alt="" width="593" height="445" srcset="https://linuxevolution.files.wordpress.com/2017/09/hotshots-2-2-0-1109x939_052.png?w=593&amp;h=445 593w, https://linuxevolution.files.wordpress.com/2017/09/hotshots-2-2-0-1109x939_052.png?w=1186&amp;h=890 1186w, https://linuxevolution.files.wordpress.com/2017/09/hotshots-2-2-0-1109x939_052.png?w=150&amp;h=113 150w, https://linuxevolution.files.wordpress.com/2017/09/hotshots-2-2-0-1109x939_052.png?w=300&amp;h=225 300w, https://linuxevolution.files.wordpress.com/2017/09/hotshots-2-2-0-1109x939_052.png?w=768&amp;h=577 768w, https://linuxevolution.files.wordpress.com/2017/09/hotshots-2-2-0-1109x939_052.png?w=1024&amp;h=769 1024w" sizes="(max-width: 593px) 100vw, 593px"></a></p>
<p>Tout en haut, vous avez la barre d’outils qui permet un accès rapide aux principales fonctionnalités du logiciel, à savoir :</p>
<ul><li>Quitter l’application</li>
<li>A propos de l’application elle-même (version, traductions, remerciements, actions faites pour cette version et les précédentes, licence, …)</li>
<li>Ouverture des préférences</li>
<li>Sauvegarder l’image (à la demande de l’utilisateur)</li>
<li>Télécharger l’image sur le web</li>
<li>Imprimer directement l’image</li>
<li>Copier vers le presse-papier</li>
<li>Ouvrir l’éditeur et annoter, modifier l’image</li>
<li>Capturer l’écran courant</li>
<li>Capturer tous les écrans</li>
<li>Capturer une fenêtre</li>
<li>Capturer une région</li>
<li>Capturer une région à main levée</li>
</ul><p>Au centre se situe la deuxième zone, qui est en fait la zone d’affichage de l’image.</p>
<p>En bas, se trouve la troisième et dernière zone dans laquelle vous trouverez les paramètres principaux de l’image. Cette zone est elle-même découpée en deux parties. A gauche vous pouvez reprendre le même cliché (pratique quand vous capturer une région). Quant à celle de droite, vous pouvez définir le répertoire de sortie, le mode de capture, le délai de la capture, l’action à réaliser après la capture.</p>
<p>L’éditeur d’écran est quant à lui découpé en quatre zones.</p>
<p><a href="https://linuxevolution.wordpress.com/2017/09/16/remplacer-avantageusement-shutter-par-hotshots/capture-11/" rel="attachment wp-att-2902"><img data-attachment-id="2902" data-permalink="https://linuxevolution.wordpress.com/2017/09/16/remplacer-avantageusement-shutter-par-hotshots/capture-11/" data-orig-file="https://linuxevolution.files.wordpress.com/2017/09/capture-11.png" data-orig-size="1920,1200" data-comments-opened="1" data-image-meta='{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}' data-image-title="capture-11" data-image-description="" data-medium-file="https://linuxevolution.files.wordpress.com/2017/09/capture-11.png?w=300" data-large-file="https://linuxevolution.files.wordpress.com/2017/09/capture-11.png?w=593&amp;h=371" src="https://linuxevolution.files.wordpress.com/2017/09/capture-11.png?w=593&amp;h=371" alt="" width="593" height="371" srcset="https://linuxevolution.files.wordpress.com/2017/09/capture-11.png?w=593&amp;h=371 593w, https://linuxevolution.files.wordpress.com/2017/09/capture-11.png?w=1186&amp;h=742 1186w, https://linuxevolution.files.wordpress.com/2017/09/capture-11.png?w=150&amp;h=94 150w, https://linuxevolution.files.wordpress.com/2017/09/capture-11.png?w=300&amp;h=188 300w, https://linuxevolution.files.wordpress.com/2017/09/capture-11.png?w=768&amp;h=480 768w, https://linuxevolution.files.wordpress.com/2017/09/capture-11.png?w=1024&amp;h=640 1024w" sizes="(max-width: 593px) 100vw, 593px"></a></p>
<p>On retrouve tout en haut la fameuse barre d’outils qui permet là aussi un accès rapide aux fonctions essentielles bien que celle-ci soit un peu plus étoffée en fonctionnalités que celle de l’interface principale. Nous retrouvons de gauche à droite :</p>
<ul><li>Quitter l’éditeur</li>
<li>Ouvrir un fichier</li>
<li>Créer un nouveau document</li>
<li>Importer une image du presse papier</li>
<li>Sauvegarder l’édition actuelle</li>
<li>Sauvegarder sous l’édition actuelle</li>
<li>Copier vers le presse papier</li>
<li>Exporter l’image</li>
<li>Télécharger l’image sur le web</li>
<li>Imprimer l’image</li>
<li>Ajuster à la fenêtre</li>
<li>Réinitialiser l’échelle</li>
<li>Annuler la dernière action</li>
<li>Restaurer la dernière action</li>
<li>Ajouter un effet à l’image de fond</li>
<li>Retailler l’image de fond</li>
<li>Appliquer un alignement à un groupe d’images</li>
<li>Afficher/Cacher l’ombrage des éléments</li>
<li>Mettre les éléments sélectionnés au dessus</li>
<li>Mettre les éléments sélectionnés en haut</li>
<li>Mettre les éléments sélectionnés en dessous</li>
<li>Mettre les éléments sélectionnés en bas</li>
<li>Dupliquer l’élément courant</li>
<li>Effacer tous les éléments</li>
<li>Supprimer les éléments sélectionnés</li>
</ul><p>Au centre, se trouve la seconde zone qui correspond à l’image ouverte.</p>
<p>A sa gauche, verticalement, nous retrouvons une autre barre d’outils fort intéressante. Celle-ci comporte des outils de dessin basiques qui sont les suivants:</p>
<ul><li>Sélectionner</li>
<li>Écrire un texte</li>
<li>Tracer une ligne</li>
<li>Entourer</li>
<li>Tracer une polyligne</li>
<li>Tracer un polygone</li>
<li>Dessiner une courbe</li>
<li>Couper l’image de fond</li>
<li>Tracer un rectangle</li>
<li>Tracer une ellipse</li>
<li>Tracer une flèche</li>
<li>Tracer une balise</li>
<li>Mettre en évidence</li>
<li>Loupe</li>
<li>Ajouter une image</li>
<li>Mettre un flou</li>
<li>Décroître la taille de la police</li>
<li>Accroître la taille de la police</li>
<li>Réinitialiser les couleurs</li>
<li>Inverser les couleurs</li>
<li>Couleurs de premier et d’arrière plan</li>
<li>Une série de lignes de différentes tailles et styles</li>
</ul><p>Enfin, la dernière zone interagit avec les deux derniers points de la précédente. D’un clic, vous modifier la couleur de celles-ci avec le choix que vous venez de sélectionner dans la quatrième zone.</p>
<h2>Un dernier mot</h2>
<p>Comme vous avez pu le constater tout au long de cet article, HotShots est un outil qui vaut le détour et qui a sa place au sein de votre bureau. Certes, j’ai pu noter quelques désagréments mineurs différents selon la distribution utilisée avec toutefois le même environnement. Sur Manjaro, les icônes des actions réalisables dans le systray ne sont pas affichées contrairement à Linux Mint. A l’inverse, l’icône de l’application ne s’affiche nulle part que ce soit dans le menu ou bien quand l’application est ouverte sur Mint. Ce sont cependant des remarques mineurs, n’empêchant nullement l’utilisation journalière de l’application avec une efficacité redoutable.</p>
<p>Un dernier mot avant de finir cet article, concerne l’éditeur de capture d’écran. Cet outil est à lui seul une application entière de dessin. Toutefois, il répond efficacement à l’essentiel et même plus. Une documentation expliquant les diverses fonctionnalités de ces outils serait le bienvenue car certains sont un peu obscurs à l’usage.</p><br>Classé dans:<a href="https://linuxevolution.wordpress.com/category/decouverte/">Découverte</a>, <a href="https://linuxevolution.wordpress.com/category/logiciels/">Logiciels</a>, <a href="https://linuxevolution.wordpress.com/category/news/">News</a>, <a href="https://linuxevolution.wordpress.com/category/planet-libre/">Planet-Libre</a> Tagged: <a href="https://linuxevolution.wordpress.com/tag/c/">C++</a>, <a href="https://linuxevolution.wordpress.com/tag/dessin/">Dessin</a>, <a href="https://linuxevolution.wordpress.com/tag/hotshots/">Hotshots</a>, <a href="https://linuxevolution.wordpress.com/tag/image/">Image</a>, <a href="https://linuxevolution.wordpress.com/tag/linux/">Linux</a>, <a href="https://linuxevolution.wordpress.com/tag/logiciels/">Logiciels</a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=linuxevolution.wordpress.com&amp;blog=10190078&amp;post=2897&amp;subd=linuxevolution&amp;ref=&amp;feed=1" width="1" height="1">
<p><img src="media/9ad38962.b4deaa84d80933a525c375c1cef1b842" data-original-source="http://cdn.libravatar.org/avatar/b4deaa84d80933a525c375c1cef1b842" alt="Gravatar de Cenwen" class="gravatar" /><br/><i>Original post of <a href="https://linuxevolution.wordpress.com/2017/09/16/remplacer-avantageusement-shutter-par-hotshots/" title="Visit the source">Cenwen</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>Cenwen : <a href="">GSOC au secours des Gamers Linuxiens avec Piper</a> (08/09/2017)</li><li>Cenwen : <a href="">Sortie d&rsquo; Openshot QT 2.4.0</a> (08/09/2017)</li><li>Cenwen : <a href="">Overcloker facilement avec AMDOverdriveCtrl</a> (15/10/2011)</li><li>Slobberbone : <a href="">Urban Lightscape : Un logiciel de retouche de photo d&eacute;di&eacute; au traitement de la lumi&egrave;re</a> (13/04/2013)</li><li>Cenwen : <a href="">AV Linux 6.0 est dans les Bacs ! Enfin</a> (19/09/2012)</li></ul></div></p>


feed_id: http://www.fullcirclemag.fr/?post/2017/09/16/Le-num%C3%A9ro-124-est-sorti
title: Full Circle Magazine FR : Pour la rentrée
uri: Full-Circle-Magazine-FR-Pour-la-rentrée
url: http://www.fullcirclemag.fr/?post/2017/09/16/Le-num%C3%A9ro-124-est-sorti
content:
<p>Bonjour !</p>


<p>Aujourd'hui, à peine deux semaines après la sortie du numéro en anglais, l'équipe française est heureuse de vous présenter ce numéro 124,du mois d'août 2017, en français. Il peut être téléchargé ou visionné sur notre page <a href="http://www.fullcirclemag.fr/?pages/Num%C3%A9ros" hreflang="fr" title="Numéros FCMfr">NUMÉROS</a> ou téléchargé directement en cliquant sur la photo de couverture ci-dessous.</p>


<p><a href="http://www.fullcirclemag.fr/?download/523" hreflang="fr" title="Numéro 124"><img src="media/bb9d1651.issue124fr.png" data-original-source="http://www.fullcirclemag.fr/dotclear/public/Numeros/Couvertures_PNG/issue124fr.png" alt="issue124fr.png" title="issue124fr.png, sept. 2017"></a></p>


<p>Bien que les numéros deviennent de plus en plus courts, vous y trouverez notamment :</p>

<ul><li>tous les tutoriels habituels PLUS un sur des sauvegardes avec les instantanés ZFS ;</li>
<li>le début d'une courte série par Charles McColm sur sa configuration KODI (dans la rubrique Le coin KODI) ;</li>
<li>et de nouveaux bureaux à admirer !</li>
</ul><p>N'hésitez pas à envoyer vos propres articles, critiques, tutoriels, opinions ou histoires, etc., en anglais, à <a href="mailto:%20ronnie%40fullcirclemagazine.org" hreflang="fr">Ronnie@fullcirclemagazine.org</a>, car sans les articles des lecteurs, la revue ne pourra pas exister. Au besoin, et si votre prose n'est pas trop long, on se fera un plaisir de le traduire du français en anglais (<a href="mailto:%20webmaster%40fullcirclemag.fr" hreflang="fr">webmaster@fullcirclemag.fr</a>).</p>


<p>En attendant, bonne lecture !</p>

<ul><li>Bab, scribeur et relecteur</li>
<li>d52fr, traducteur et relecteur</li>
<li>AuntieE, traductrice et relectrice</li>
</ul>
<p><img src="media/163a60d9.dd0e1a508d7347d53e0da0678bfd7aff" data-original-source="http://cdn.libravatar.org/avatar/dd0e1a508d7347d53e0da0678bfd7aff" alt="Gravatar de Full Circle Magazine FR" class="gravatar" /><br/><i>Original post of <a href="http://www.fullcirclemag.fr/?post/2017/09/16/Le-num%C3%A9ro-124-est-sorti" title="Visit the source">Full Circle Magazine FR</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>Full Circle Magazine FR : <a href="">Voici, enfin, le num&eacute;ro 52 !</a> (04/11/2011)</li><li>Full Circle Magazine FR : <a href="">Et voici.. le num&eacute;ro 53 !</a> (13/12/2011)</li><li>Full Circle Magazine FR : <a href="">Le num&eacute;ro 54... enfin !</a> (18/01/2012)</li><li>Full Circle Magazine FR : <a href="">Sortie du num&eacute;ro 56</a> (09/03/2012)</li><li>Full Circle Magazine FR : <a href="">Voici le 57 !</a> (29/03/2012)</li></ul></div></p>


title: Renault : Bilan mensuel de la documentation francophone de Fedora-fr.org, numéro 2
uri: 2017-09-17-Renault-Bilan-mensuel-de-la-documentation-francophone-de-Fedora-fr-o
feed_id:
https://blog.fedora-fr.org/renault/post/Bilan-mensuel-de-la-documentation-francophone-de-Fedora-fr.org%2C-num%C3%A9ro-12

url:
https://blog.fedora-fr.org/renault/post/Bilan-mensuel-de-la-documentation-francophone-de-Fedora-fr.org%2C-num%C3%A9ro-12

content:
<p>Pour rappel, <a href="https://doc.fedora-fr.org/wiki/Nettoyage_wiki" hreflang="fr">vous pouvez consulter l'état du travail en cours sur la
documentation</a>.</p>
<p>À cause des vacances et d'autres histoires personnelles, j'ai loupé le bilan
d'août et j'ai moins contribué que la période juin-juillet. En cette rentrée,
faisons quand même un bilan du travail abattu depuis deux mois.</p>
<p>Les sujets traités ont changé quelque peu. C'est plus centré autours des
thématiques :</p>
<ul><li>Les dépôts externes ;</li>
<li>La création de médias personnels et leur exploitation ;</li>
<li>L'usage serveur.</li>
</ul><p>Personnellement je me suis occupé plutôt des deux premiers thèmes. Par
exemple le <a href="https://doc.fedora-fr.org/wiki/D%C3%A9p%C3%B4t_RPM_Fusion" hreflang="fr">dépôt de RPMFusion</a> et les <a href="https://doc.fedora-fr.org/wiki/Lecture_de_fichiers_multim%C3%A9dia" hreflang="fr">paquets multimédia qu'il propose</a> sont un incontournable auprès des
utilisateurs de Fedora. Il était important de s'y atteler car de nombreux
paquets ont évolué, que ce soit des nouveaux venus, des évolutions majeures
comme plus de codecs accessibles via mplayer ou GStreamer.</p>
<p>Concernant le deuxième point, il était nécessaire de revoir les <a href="https://doc.fedora-fr.org/wiki/Cr%C3%A9ation_de_Live_CD/DVD_et_de_Live_USB" hreflang="fr">procédures pour exploiter kickstart</a> qui a évolué (notamment
depuis l'apparition des Spins et des produits Server, Workstation et Cloud).
Les moyens de <a href="https://doc.fedora-fr.org/wiki/T%C3%A9l%C3%A9charger_Fedora" hreflang="fr">télécharger Fedor</a>a ont changé, le Live CD a peu à peu laissé place au
Live USB qui a été particulièrement mis en avant avec l'outil Fedora Media
Writer. D'ailleurs <a href="https://doc.fedora-fr.org/wiki/Dual_boot_Windows_-_Fedora" hreflang="fr">l'installation d'un dual Boot avec Windows</a> a aussi beaucoup évolué,
car <a href="https://doc.fedora-fr.org/wiki/GRUB2_:_Les_bases_pour_Fedora" hreflang="fr">GRUB a changé avec sa version 2</a> ce qui a simplifié la
procédure et Windows est aussi plus conciliant sur ce genre de
cohabitation.</p>
<p>J'ai également rafraîchi <a href="https://doc.fedora-fr.org/wiki/Aider_le_Projet_Fedora" hreflang="fr">la page
d'aide pour contribuer à Fedora</a>, car depuis le temps les sujets ont évolué,
de nouvelles ressources ou secteurs ce sont développés comme l'assurance
qualité et l'ajout aussi de la documentation francophone jusqu'ici absente.</p>
<p>Le dernier point a été particulièrement étudié par Nicolas, car Fedora a
bien entendu un usage serveur important dont le paysage a changé. Outre
<a href="https://doc.fedora-fr.org/wiki/Installation_et_configuration_de_MariaDB" hreflang="fr">MySQL devenu MariaD</a>B, de nombreuses commandes ont changé
avec l’évolution des outils. Si l’environnement web LAMP est surtout concerné,
cela touche également <a href="https://doc.fedora-fr.org/wiki/SELinux" hreflang="fr">SELinux</a>, le <a href="https://doc.fedora-fr.org/wiki/Dovecot" hreflang="fr">serveur de courriel Dovecot</a> et Openldap. Un énorme travail a
été accomplis, donc merci à lui !</p>
<p>Je remercie également les autres contributeurs, relecteurs ou toute autres
personnes qui se sont impliquées dans ce processus comme Édouard, Nicolas
Chauvet, et d'autres.</p>
<p>Aujourd'hui donc, nous sommes à 42 articles traités, contre 25 au précédent
bilan. Je suis satisfait des progrès réalisés sur la documentation. Il y a
beaucoup de travail à mener encore, mais il semble possible que la
documentation soit dans un état très acceptable d'ici Fedora 27 ou la fin de
l'année 2017. Ensuite il faudra veiller à maintenir la documentation à jour
continuellement et ajouter des articles suivant les besoins du moment.</p>
<p>Je vous invite en tout cas à nous donner un coup de main, pour cela je vous
conseille de <a href="https://doc.fedora-fr.org/wiki/Contribuer" hreflang="fr">suivre la procédure pour contribuer à la documentation</a> et si possible
de participer à nos ateliers hebdomadaires tous les lundi soir à partir de 21h
(heure de Paris) sur le canal IRC <em>#fedora-doc-fr</em> du serveur Freenode.
Rien ne vous empêche de contribuer en dehors du cadre des ateliers, toute
l'aide est la bienvenue. Alors, n'hésitez pas !</p>
<p><img src="media/d143d7a6.f792a7629fb4a46c01613eb1976730ef" data-original-source="http://cdn.libravatar.org/avatar/f792a7629fb4a46c01613eb1976730ef" alt="Gravatar de Renault" class="gravatar" /><br/><i>Original post of <a href="https://blog.fedora-fr.org/renault/post/Bilan-mensuel-de-la-documentation-francophone-de-Fedora-fr.org%2C-num%C3%A9ro-12" title="Visit the source">Renault</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>Renault : <a href="">Bilan mensuel de la documentation francophone de Fedora-fr.org, num&eacute;ro 1</a> (17/07/2017)</li><li>Renault : <a href="">Nettoyage de printemps de la documentation francophone</a> (05/03/2017)</li><li>Renault : <a href="">Le nettoyage de la documentation francophone a d&eacute;but&eacute; !</a> (18/06/2017)</li><li>Guillaume Kulakowski : <a href="">Solutions Linux, le bilan rapide</a> (01/02/2008)</li><li>MrTom : <a href="">Fedora : bilan 2010 de la traduction fran&ccedil;aise</a> (29/12/2010)</li></ul></div></p>


title: Journal du hacker : Liens intéressants Journal du hacker semaine #37
uri: 2017-09-18-Journal-du-hacker-Liens-intéressants-Journal-du-hacker-semaine-37
feed_id:
https://blog.journalduhacker.net/index.php?article125/liens-interessants-journal-du-hacker-semaine-37-2017

url:
https://blog.journalduhacker.net/index.php?article125/liens-interessants-journal-du-hacker-semaine-37-2017

content:
<p>Pour la 37ème semaine de 2017, voici <strong>10 liens</strong> intéressants que vous avez peut-être ratés, relayés par <a href="https://www.journalduhacker.net/">le Journal du hacker</a>, votre source d’informations pour le Logiciel Libre francophone !</p>

<a href="https://www.journalduhacker.net/"><img src="media/01f45034.logo-journal-du-hacker.png" data-original-source="https://blog.journalduhacker.net/data/medias/logo-journal-du-hacker.png"></a>

<ul><li><a href="https://www.journalduhacker.net/s/39c7aa/firefox_57_chacun_peut_contribuer_son">Firefox 57 : chacun peut contribuer à son succès</a></li>
<li><a href="https://www.journalduhacker.net/s/goz9ef/10_mythes_sur_la_vie_priv_e_sur_internet">10 mythes sur la vie privée sur Internet</a></li>
<li><a href="https://www.journalduhacker.net/s/wtgbiz/nextcloud_sur_raspberry_pi_fanless_raid_1">Nextcloud sur Raspberry pi : fanless, RAID 1, simple, pas cher</a></li>
<li><a href="https://www.journalduhacker.net/s/azu49t/parution_de_la_cinqui_me_dition_du_guide_d">Parution de la cinquième édition du Guide d’autodéfense numérique</a></li>
<li><a href="https://www.journalduhacker.net/s/usknew/lespace_client_ovh_open_sourc_les">L'espace client OVH open sourcé : les coulisses d'une libération</a></li>
<li><a href="https://www.journalduhacker.net/s/vtdjun/nous_sommes_tous_sur_coute_et_on_s_en_fout">Nous sommes tous sur écoute et on s’en fout totalement</a></li>
<li><a href="https://www.journalduhacker.net/s/xgsptb/un_vpn_qui_milite_pour_l_thique_et_non_le">Un VPN qui milite pour l'éthique et non le marketing, c'est le pari de BunkerVPN</a></li>
<li><a href="https://www.journalduhacker.net/s/qrybdj/outiller_les_d_put_s_et_les_rapprocher_des">Outiller les députés et les rapprocher des citoyens, la feuille de route numérique de Paula Forteza</a></li>
<li><a href="https://www.journalduhacker.net/s/tyzw2k/golang_comment_d_finir_un_destructeur">Golang, comment définir un destructeur</a></li>
<li><a href="https://www.journalduhacker.net/s/9dmawp/seedbox_installer_le_client_rutorrent">Seedbox : installer le client ruTorrent sous Debian 9</a></li>
</ul><p>Pour ne plus rater aucun article de la communauté francophone, voici :</p>

<ul><li><a href="https://www.journalduhacker.net/rss">Le flux RSS du Journal du hacker</a></li>
<li><a href="https://twitter.com/journalduhacker">Le compte Twitter du Journal du hacker</a></li>
<li><a href="https://framasphere.org/u/journalduhacker">Le compte Diaspora* du Journal du hacker</a></li>
<li><a href="https://framapiaf.org/@journalduhacker">Le compte Mastodon du Journal du hacker</a></li>
</ul><p>De plus le site web du Journal du hacker est « adaptatif (responsive) ». N’hésitez pas à le consulter depuis votre smartphone ou votre tablette !</p>

<p>Le Journal du hacker fonctionne de manière collaborative, grâce à la participation de ses membres. <a href="https://www.journalduhacker.net/invitations/request">Rejoignez-nous</a> pour proposer vos contenus à partager avec la communauté du Logiciel Libre francophone et faire connaître vos projets !</p>

<p><strong>Et vous ? Qu’avez-vous pensé de ces articles ?</strong> N’hésitez pas à réagir directement dans les commentaires de l’article sur le Journal du hacker ou bien dans les commentaires de ce billet :)</p>
<p><img src="media/ffe97a17.7916ee3cafa0bc3e9583bedad876dcd5" data-original-source="http://cdn.libravatar.org/avatar/7916ee3cafa0bc3e9583bedad876dcd5" alt="Gravatar de Journal du hacker" class="gravatar" /><br/><i>Original post of <a href="https://blog.journalduhacker.net/index.php?article125/liens-interessants-journal-du-hacker-semaine-37-2017" title="Visit the source">Journal du hacker</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>Carl Chenet : <a href="">Liens int&eacute;ressants Journal du hacker semaine #37</a> (10/09/2015)</li><li>Journal du hacker : <a href="">Liens int&eacute;ressants Journal du hacker semaine #37</a> (19/09/2016)</li></ul></div></p>


title: alterlibriste : Pas toujours facile de promouvoir le libre quand on n'est pas convaincu
uri: alterlibriste-Pas-toujours-facile-de-promouvoir-le-libre-quand-on-n
feed_id:
http://alterlibriste.free.fr/index.php?post/2017/09/18/Pas-toujours-facile-de-promouvoir-le-libre-quand-on-n-est-pas-convaincu

url:
http://alterlibriste.free.fr/index.php?post/2017/09/18/Pas-toujours-facile-de-promouvoir-le-libre-quand-on-n-est-pas-convaincu

content:
<p><img src="media/c13ffb67.lasphere_itunes.jpg" data-original-source="http://ici.radio-canada.ca/mesAbonnements/baladodiffusion/img/lasphere_itunes.jpg" alt=""></p> <p>Encore un billet un peu sous forme de dépêche, mais il va falloir oublier quelque temps les longues réflexions, car je n’ai ni vraiment l’envie, ni vraiment le temps. Je préfère profiter du temps plutôt agréable pour aller faire du sport dehors. Même la lecture de mes flux rss est plus ou moins expédiée sans m’attarder sur les annonces de versions, les billets techniques ni les aspects sécurité.</p>


<p>Je n’en reste pas moins dans la mouvance libriste et continue d’écouter les podcasts traitant le sujet de près ou de loin. Je signale donc que l’émission canadienne (<a href="http://alterlibriste.free.fr/index.php?post/2014/12/01/Podcasting-%3A-La-Sph%C3%A8re">précédemment chroniquée</a>) <a href="http://ici.radio-canada.ca/premiere/emissions/la-sphere/episodes/389873/logiciels-libres">traitait ce week-end des logiciels libres</a>. Bon, pour des addicts aux iPhone et aux réseaux sociaux de masse, ça sonnait un peu faux et il y a même eu une petite remarque assez désobligeante comme quoi les développeurs faisaient d’abord du libre pour se faire un CV avant d’intégrer les grosses boîtes privatrices.</p>


<p>La partie la plus intéressante était celle consacré à Purism avec ses machines libres : laptop et futur téléphone. Ce dernier fait pas mal parler de lui, à voir s’il fera mieux que la tentative ratée de Canonical ; ils en sont actuellement à 30 % de <a href="https://puri.sm/shop/librem-5/">leur campagne de financement</a>, 35 jours avant la fin. Il y a une demande mais à ce prix (600 $) et avec un tel délai (presque un an et demi), il faut être motivé !</p>


<p>La fin de l’émission a été consacrée aux CHATONS de Framasoft que l’on ne présente plus ici. Encore une fois, ça sentait un peu l’œuvre de charité, <q>pourquoi quitter le monde Google quand on s’y sent si bien et que tout y est tellement mieux fait ?</q>, avouent les différents intervenants.</p>


<p>Cela me fait penser que finalement, tous ceux qui relaient ce genre d’informations se donnent en quelque sorte bonne conscience en montrant qu’une alternative existe pour ceux qui se plaignent des géants du web. Encore faudrait-il avoir le courage de ses opinions et parfois accepter un peu moins de clinquant pour plus de liberté.</p>
<p><img src="media/2a099e18.9ff6af75660c788842bdb4e186b8909f" data-original-source="http://cdn.libravatar.org/avatar/9ff6af75660c788842bdb4e186b8909f" alt="Gravatar de alterlibriste" class="gravatar" /><br/><i>Original post of <a href="http://alterlibriste.free.fr/index.php?post/2017/09/18/Pas-toujours-facile-de-promouvoir-le-libre-quand-on-n-est-pas-convaincu" title="Visit the source">alterlibriste</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>alterlibriste : <a href="">Podcasting : Le 56Kast</a> (22/01/2014)</li><li>alterlibriste : <a href="">La miettocratie dans toute sa splendeur</a> (22/04/2014)</li><li>alterlibriste : <a href="">Podcasting : NipSource</a> (13/02/2015)</li><li>alterlibriste : <a href="">Podcasting : au programme de cet &eacute;t&eacute;</a> (20/07/2015)</li></ul></div></p>


feed_id: https://blog.genma.fr/?Yunohost-et-les-applications-Framasoft
title: genma : Yunohost et les applications Framasoft
uri: genma-Yunohost-et-les-applications-Framasoft
url: https://blog.genma.fr/?Yunohost-et-les-applications-Framasoft
content:
<img alt="" src="https://blog.genma.fr/IMG/arton2681.jpg?1502297294" width="150" height="79"><div><p>Comme je le disais dans mon billet et ma conférence <a href="https://blog.genma.fr/?De-Framasoft-a-Yunohost-reapproprions-nous-le-cloud" title="De Framasoft à Yunohost, réapproprions nous le cloud">De Framasoft à Yunohost, réapproprions nous le cloud</a> un partenariat avait été mis en place entre Framasoft et Yunohost avec du temps d'un salarié de Framasoft consacré au packaging d'application Framasoft pour Yunohost.</p>
<p><strong>Quelques mois après, où en est-on ?</strong></p>
<p>L'idée n'est pas de parler au nom de Framasoft mais plus de remettre en avant cette collaboration et de faire un petit suivi de l'avancement. Une image valant mieux qu'un long discours :</p>
<p><span>
<img src="https://blog.genma.fr/IMG/png/yunohost_degooglisons.png?1502296864" width="500" height="69" alt=""></span></p>
<p>On peut donc voir qu'il reste donc encore des applications à packagées, il faut maintenir les packages existant (en les faisant évoluer pour que les applications installées sur une instance Yunohost soient mises à jour ou qu'une installation fraîche installe la dernière version de l'application...)</p>
<p>Si vous souhaitez aider, si vous avez un peu de temps ou tout simplement des retours d'expérience à faire, <a href="https://forum.yunohost.org/t/applications-framasoft/1680" title="Applications framasoft pour Yunohost">il y a un topic dédié dans le forum Yunohost sur le sujet.</a></p>
<p><strong>Contribuez à Yunohost</strong></p>
<p>D'une façon plus générale, Yunohost a besoin de contributeurs pour tous les aspects du projet. A savoir :
<br><img src="https://blog.genma.fr/local/cache-vignettes/L8xH11/puce-32883.gif?1494182300" width="8" height="11" alt="-"> backend : python (simple), bash (lua)
<br><img src="https://blog.genma.fr/local/cache-vignettes/L8xH11/puce-32883.gif?1494182300" width="8" height="11" alt="-"> frontend : html/js (sammy.js)
<br><img src="https://blog.genma.fr/local/cache-vignettes/L8xH11/puce-32883.gif?1494182300" width="8" height="11" alt="-"> packging des apps : full bash, et des connaissance en sysadmin sont nécessaires (configuration nginx)
<br><img src="https://blog.genma.fr/local/cache-vignettes/L8xH11/puce-32883.gif?1494182300" width="8" height="11" alt="-"> sécurité : revue de code
<br><img src="https://blog.genma.fr/local/cache-vignettes/L8xH11/puce-32883.gif?1494182300" width="8" height="11" alt="-"> infrastructure du projet : debian, deb toolchain, ruby
<br><img src="https://blog.genma.fr/local/cache-vignettes/L8xH11/puce-32883.gif?1494182300" width="8" height="11" alt="-"> relation avec la communauté : communication, support via le forum, dans les issues de Git...
<br><img src="https://blog.genma.fr/local/cache-vignettes/L8xH11/puce-32883.gif?1494182300" width="8" height="11" alt="-"> aide à la traduction et à la documentation
<br><img src="https://blog.genma.fr/local/cache-vignettes/L8xH11/puce-32883.gif?1494182300" width="8" height="11" alt="-"> testing (les versions beta) avec rapport de bugs
<br><img src="https://blog.genma.fr/local/cache-vignettes/L8xH11/puce-32883.gif?1494182300" width="8" height="11" alt="-"> ...</p></div>
<p><img src="media/42493842.dd4318d0d3a7d2ffb13756f63b76d85d" data-original-source="http://cdn.libravatar.org/avatar/dd4318d0d3a7d2ffb13756f63b76d85d" alt="Gravatar de genma" class="gravatar" /><br/><i>Original post of <a href="https://blog.genma.fr/?Yunohost-et-les-applications-Framasoft" title="Visit the source">genma</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>


feed_id: https://miamondo.org/2017/09/12/creer-une-cle-usb-persistante-avec-archlinux/
title: Miamondo : Créer une clé USB persistante avec Archlinux.
uri: 2017-09-18-Miamondo-Créer-une-clé-USB-persistante-avec-Archlinux
url: https://miamondo.org/2017/09/12/creer-une-cle-usb-persistante-avec-archlinux/
content:
<p>Bonjour,</p>
<p>C’est avec une certaine joie que je rédige cet article qui <a href="https://ordinosor.wordpress.com/2017/09/09/framakey-lapplication-des-nomades/" target="_blank" rel="noopener">fait suite à celui-ci</a>. Souvenez-vous, je vous avais parlé de <a href="https://framakey.org/Pack/Framakey-Mint" target="_blank" rel="noopener">Framakey</a>, une application que j’avais installée sur une clé USB de 31 GB. Je rappelle que Framakey se présente sous la forme d’une clé USB sur laquelle est installée la disrtribution Linux Mint et qui offre à son propriétaire, la persistance de données. Vous pouvez créer des dossiers ou des fichiers, télécharger une application ou en supprimer. Lorsque vous démonterez la clé, rien ne disparaîtra et au prochain reboot, vous retrouverez toutes vos données intactes.</p>
<p>Malheureusement, il s’est avéré qu’à l’usage, la navigation sur Internet était relativement hasardeuse voire carrément impossible. Attention! Loin de moi l’idée de jeter la pierre à Framakey car il faut être prudent : il est tout à fait possible que le problème vienne de ma clé USB elle-même. Mais y a-t-il des clés plus adaptées à ce genre de geekeries? Je n’en sais fichtre rien!</p>
<p>Toujours est-il que l’idée m’est venue de créer moi-même ma clé persistante (estampillée « qualité France » bien évidemment). Pour ce faire, j’ai jeté mon dévolu sur Lubuntu, un système d’exploitation très léger. Hélas, j’ai essuyé un échec. Or, il se trouve qu’il y a quelques semaines, sur mon netbook, j’avais installé Archlinux une distribution qui, il faut bien le reconnaître, tient toujours ses promesses.</p>
<p>Comme <del>j’ai un pète au casque</del>  j’aime bien expérimenter, je me suis dit que ce serait peut-être une bonne idée de créer une clé USB persistante en y installant, tenez-vous bien, Archlinux. Pourquoi faire simple quand on peut faire compliqué? Pour ceux qui découvrent le nom de ce système d’exploitation, Archlinux est aux distributions GNU/Linux ce que la Légion Étrangère est aux troupes conventionnelles… C’est un peu spécial. Eh bien pourtant, à ma grande surprise, ça tient la route! La clé est persistante et parfaitement opérationnelle. Certes, le démarrage est un peu lent et la navigation sur Internet également mais ça reste dans les limites du raisonnable! Ça ne freeze jamais! Regardez comme c’est beau!</p>
<p><img data-attachment-id="17908" data-permalink="https://ordinosor.wordpress.com/2017/09/12/creer-une-cle-usb-persistante-avec-archlinux/screenshot/" data-orig-file="https://ordinosor.files.wordpress.com/2017/09/screenshot.png?w=656&amp;h=384" data-orig-size="1024,600" data-comments-opened="1" data-image-meta='{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}' data-image-title="Screenshot" data-image-description="" data-medium-file="https://ordinosor.files.wordpress.com/2017/09/screenshot.png?w=656&amp;h=384?w=300" data-large-file="https://ordinosor.files.wordpress.com/2017/09/screenshot.png?w=656&amp;h=384?w=840" src="https://ordinosor.files.wordpress.com/2017/09/screenshot.png?w=656&amp;h=384" alt="Screenshot" width="656" height="384" srcset="https://ordinosor.files.wordpress.com/2017/09/screenshot.png?w=656&amp;h=384 656w, https://ordinosor.files.wordpress.com/2017/09/screenshot.png?w=150&amp;h=88 150w, https://ordinosor.files.wordpress.com/2017/09/screenshot.png?w=300&amp;h=176 300w, https://ordinosor.files.wordpress.com/2017/09/screenshot.png?w=768&amp;h=450 768w, https://ordinosor.files.wordpress.com/2017/09/screenshot.png 1024w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px"></p>
<p>Voici donc comment j’ai procédé pour parvenir à mes fins. Je me suis servi de deux clés USB :</p>
<ul><li>une clé de 31 GB destinée à accueillir le système persistant,</li>
<li>une clé de 4 GB qui contient l’image iso d’<a href="https://archlinux32.org/" target="_blank" rel="noopener">Archlinux 32bit</a>.</li>
</ul><p><img data-attachment-id="17895" data-permalink="https://ordinosor.wordpress.com/2017/09/12/creer-une-cle-usb-persistante-avec-archlinux/clef/" data-orig-file="https://ordinosor.files.wordpress.com/2017/09/clef.png?w=840" data-orig-size="579,466" data-comments-opened="1" data-image-meta='{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}' data-image-title="clef" data-image-description="" data-medium-file="https://ordinosor.files.wordpress.com/2017/09/clef.png?w=840?w=300" data-large-file="https://ordinosor.files.wordpress.com/2017/09/clef.png?w=840?w=579" src="https://ordinosor.files.wordpress.com/2017/09/clef.png?w=840" alt="clef" srcset="https://ordinosor.files.wordpress.com/2017/09/clef.png 579w, https://ordinosor.files.wordpress.com/2017/09/clef.png?w=150 150w, https://ordinosor.files.wordpress.com/2017/09/clef.png?w=300 300w" sizes="(max-width: 579px) 85vw, 579px"></p>
<p>J’ai enfiché mes deux clés dans les ports de ma tour et j’ai modifié le Bios pour que ce dernier boote sur la clé de 4 GB. Évidemment, après une page d’accueil sommaire, je me suis retrouvé dans un terminal tout noir (Ben oui! c’est du Archlinux). Le disque dur de l’ordinateur sur lequel j’opérais était en <strong>/dev/sda</strong>, la clé de 4 GB contenant l’image iso était en <strong>/dev/sdb</strong> et la clé de 31 GB en <strong>/dev/sdc</strong>.</p>
<p>J’ai rentré en root la commande <strong>cfdisk /dev/sdc</strong> dans un terminal. Cela m’a permis de valider que <strong>/dev/sdc</strong> correspondait bien à la clé de 31 GB. C’est important pour la suite! Je me suis plus ou moins aidé de ce <a href="https://wiki.archlinux.fr/Installation" target="_blank" rel="noopener">guide officiel pour l’installation</a>. J’ai donc procédé au partitionnement du disque comme suit :</p>
<ul><li>/dev/sdc1 pour le boot</li>
<li>/dev/sdc2 pour la swap</li>
<li>/dev/sdc3 pour le /</li>
<li>/dev/sdc4 pour le /home</li>
</ul><p>Ce qui nous donne :</p>
<p><img data-attachment-id="17860" data-permalink="https://ordinosor.wordpress.com/2017/09/12/creer-une-cle-usb-persistante-avec-archlinux/cfdisk/" data-orig-file="https://ordinosor.files.wordpress.com/2017/09/cfdisk.png?w=840" data-orig-size="815,512" data-comments-opened="1" data-image-meta='{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}' data-image-title="cfdisk" data-image-description="" data-medium-file="https://ordinosor.files.wordpress.com/2017/09/cfdisk.png?w=840?w=300" data-large-file="https://ordinosor.files.wordpress.com/2017/09/cfdisk.png?w=840?w=815" src="https://ordinosor.files.wordpress.com/2017/09/cfdisk.png?w=840" alt="cfdisk" srcset="https://ordinosor.files.wordpress.com/2017/09/cfdisk.png 815w, https://ordinosor.files.wordpress.com/2017/09/cfdisk.png?w=150 150w, https://ordinosor.files.wordpress.com/2017/09/cfdisk.png?w=300 300w, https://ordinosor.files.wordpress.com/2017/09/cfdisk.png?w=768 768w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px"></p>
<p>J’ai partitionné la clé avec <strong>cfdisk</strong> mais vous pouvez le faire aussi avec <strong>gparted</strong>. Moi je suis plus à l’aise avec <strong>cfdisk</strong>. Puis, j’ai formaté tout ça :</p>
<p><strong>mkfs.ext2 /dev/sd<span>c</span>1</strong><br><strong>mkfs.ext4 /dev/sd<span><span>c</span></span>3</strong><br><strong>mkfs.ext4 /dev/sd<span>c</span>4</strong></p>
<p><strong>mkswap /dev/sd<span>c</span>2</strong></p>
<p>Et j’ai monté les partitions. Je ne rentre pas dans les détails. Je ne vais pas recopier le guide. Ce n’est pas l’objet de cet article. Enfin, j’ai procédé à l’installation proprement dite et ce qui est tout bonnement extraordinaire dans cette histoire, ce qui est absolument incroyable, c’est que… eh bien en fait, il n’y a rien d’extraordinaire, ça s’installe comme sur un vulgaire disque dur. Cela dit, ça reste du bon vieux Archlinux. Prévoyez tout de même du savon à microbilles pour faire partir le cambouis et retrouver des mains propres. Mais franchement, je l’ai installé en suivant la même procédure que pour mon netbook et ça fait le boulot pour peu qu’on lui laisse le temps de chauffer! Comme navigateur, j’ai préféré Chromium à Firefox qui m’avait causé quelques déboires avec ma clé version Linux Mint Framakey.</p>
<p>Voilà donc une histoire qui se termine bien. Toutefois, il y a une question qui reste en suspend. J’ai ouï-dire qu’avec une clé persistante, il ne fallait surtout pas faire de mise à jour système. Pourquoi donc? Est-ce que quelqu’un peut éclairer ma lanterne sur ce sujet?</p>
<p> </p><br><a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ordinosor.wordpress.com/17792/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ordinosor.wordpress.com/17792/"></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=ordinosor.wordpress.com&amp;blog=88640341&amp;post=17792&amp;subd=ordinosor&amp;ref=&amp;feed=1" width="1" height="1">
<p><img src="media/848c13f4.27be241458674ac3359b0353fdc37c4a" data-original-source="http://cdn.libravatar.org/avatar/27be241458674ac3359b0353fdc37c4a" alt="Gravatar de Miamondo" class="gravatar" /><br/><i>Original post of <a href="https://miamondo.org/2017/09/12/creer-une-cle-usb-persistante-avec-archlinux/" title="Visit the source">Miamondo</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>Miamondo : <a href="">Archlinux : Finalisation de mon installation</a> (11/01/2017)</li><li>Miamondo : <a href="">Archlinux, une installation qui r&eacute;serve bien des surprises!</a> (08/01/2017)</li><li>Miamondo : <a href="">T-UI launcher, un bel outil destin&eacute; aux geeks</a> (19/05/2017)</li><li>Miamondo : <a href="">Installer une distribution Linux sur un smartphone Android</a> (26/05/2017)</li><li>La vache libre : <a href="">Volumectl &ndash; G&eacute;rez le volume sonore de votre machine en ligne de commande, sur Arch Linux et Manjaro</a> (12/07/2014)</li></ul></div></p>


title: Renault : Participez à la journée de test consacrée à l'internationalisation
uri: 2017-09-19-Renault-Participez-à-la-journée-de-test-consacrée-à-l-internatio
feed_id:
https://blog.fedora-fr.org/renault/post/Participez-%C3%A0-la-journ%C3%A9e-de-test-consacr%C3%A9e-%C3%A0-l-internationalisation2

url:
https://blog.fedora-fr.org/renault/post/Participez-%C3%A0-la-journ%C3%A9e-de-test-consacr%C3%A9e-%C3%A0-l-internationalisation2

content:
<p>Aujourd'hui, ce mardi 19 septembre, est une journée dédiée à un test précis
: sur l'internationalisation de Fedora. En effet, durant le cycle de
développement, l'équipe d'assurance qualité dédie quelques journées autours de
certains composants ou nouveautés afin de remonter un maximum de problèmes sur
le sujet.</p>
<p>Elle fournit en plus une liste de tests précis à effectuer. Il vous suffit
de les suivre, comparer votre résultat au résultat attendu et le notifier.</p>
<h3>En quoi consiste ce test ?</h3>
<p>Comme chaque version de Fedora, la mise à jour de ses outils impliquent
souvent l’apparition de nouvelles chaînes de caractères à traduire et de
nouveaux outils liés à la prise en charge de langues (en particulier
asiatiques).</p>
<p>Pour favoriser l'usage de Fedora dans l'ensemble des pays du monde, il est
préférable de s'assurer que tout ce qui touche à l'internationalisation de
Fedora soit testée et fonctionne. Notamment parce qu'une partie doit être
fonctionnelle dès le LiveCD d'installation (donc sans mise à jour).</p>
<p>Les tests du jour couvrent :</p>
<ul><li>Le bon fonctionnement d'ibus pour la gestion des entrées claviers ;</li>
<li>La personnalisation des polices de caractères ;</li>
<li>L'installation automatique des paquets de langues des logiciels installés
suivant la langue du système ;</li>
<li>La traduction fonctionnelle par défaut des applications ;</li>
<li>Les polices Serif chinois par défaut (changement de Fedora 27) ;</li>
<li>Test de libpinyin 2.1 pour la saisie rapide du chinois Pinyin (changement
de Fedora 27).</li>
</ul><p>Bien entendu, étant donné les critères, à moins de savoir une langue
chinoise, l'ensemble des tests n'est pas forcément réalisable. Mais en tant que
francophones, de nombreuses problématiques nous concernent et remonter les
problèmes est important. En effet, ce ne sont pas les autres communautés
linguistiques qui identifieront les problèmes d'intégration de la langue
française.</p>
<h3>Comment y participer ?</h3>
<p>Vous pouvez vous rendre sur <a href="http://testdays.fedorainfracloud.org/events/26" hreflang="en">la page des
tests</a> pour lister les tests disponibles et rapporter vos résultats. La
<a href="http://fedoraproject.org/wiki/Test_Day:2017-09-19_I18N_Test_Day" hreflang="en">page wiki</a> récapitule les modalités de la journée.</p>
<p>Si vous avez besoin d'aide lors du déroulement des tests, n'hésitez pas de
faire un tour sur IRC pour recevoir un coup de main sur les canaux
#fedora-test-days et #fedora-fr (respectivement en anglais et en français) sur
le serveur Freenode.</p>
<p>En cas de bogue, il est nécessaire de le rapporter sur le <a href="https://bugzilla.redhat.com/index.cgi" hreflang="en">BugZilla</a>. Si vous ne
savez pas faire, n'hésitez pas à consulter <a href="http://doc.fedora-fr.org/wiki/Apprendre_%C3%A0_rapporter_un_bogue" hreflang="fr">la documentation correspondante</a>.</p>
<p>De plus, si une journée est dédiée à ces tests, il reste possible de les
effectuer quelques jours plus tard sans problème ! Les résultats seront
globalement d'actualité.</p>
<p><img src="media/d143d7a6.f792a7629fb4a46c01613eb1976730ef" data-original-source="http://cdn.libravatar.org/avatar/f792a7629fb4a46c01613eb1976730ef" alt="Gravatar de Renault" class="gravatar" /><br/><i>Original post of <a href="https://blog.fedora-fr.org/renault/post/Participez-%C3%A0-la-journ%C3%A9e-de-test-consacr%C3%A9e-%C3%A0-l-internationalisation2" title="Visit the source">Renault</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>Renault : <a href="">Participez &agrave; la journ&eacute;e de test consacr&eacute;e &agrave; l&#039;internationalisation</a> (23/05/2017)</li><li>Renault : <a href="">Participez &agrave; la journ&eacute;e de test de Fedora 25 sur Wayland</a> (13/10/2016)</li><li>Renault : <a href="">Participez &agrave; la journ&eacute;e de test de Fedora 25 sur les images Cloud et Atomic</a> (24/10/2016)</li><li>Renault : <a href="">Participez &agrave; la journ&eacute;e de test de Fedora 25 sur les cartes graphiques</a> (03/11/2016)</li><li>Renault : <a href="">Participez &agrave; la journ&eacute;e de test de Fedora 26 sur l&#039;interface de partitionnement d&#039;Anaconda</a> (06/04/2017)</li></ul></div></p>


feed_id: https://carlchenet.com/100-abonnes-au-courrier-du-hacker-une-semaine-apres-son-lancement/
title: Carl Chenet : Déjà 100 abonnés au Courrier du hacker une semaine après son lancement
uri: Carl-Chenet-Déjà-100-abonnés-au-Courrier-du-hacker-une-semaine-ap
url: https://carlchenet.com/100-abonnes-au-courrier-du-hacker-une-semaine-apres-son-lancement/
content:
<p>Une semaine après son lancement, <a href="https://lecourrierduhacker.com/">le Courrier du hacker</a>, une newsletter hebdomadaire publiée le vendredi qui propose les meilleurs liens du Logiciel Libre et Open Source francophones, vient de passer les 100 abonnés !</p>
<p><img src="media/dbba4040.fiesta-300x232.png" data-original-source="https://carlchenet.com/wp-content/uploads/2016/09/fiesta-300x232.png" alt="" width="300" height="232" srcset="https://carlchenet.com/wp-content/uploads/2016/09/fiesta-300x232.png 300w, https://carlchenet.com/wp-content/uploads/2016/09/fiesta.png 423w" sizes="(max-width: 300px) 100vw, 300px"></p>
<p>La première édition du Courrier du hacker a été publiée vendredi dernier à 80 abonnés. Le nombre d’abonnés avant la première édition a démontré l’intérêt d’une newsletter hebdomadaire récapitulative.</p>
<div><a href="https://www.journalduhacker.net/"><img src="media/88d7c669.logo-journal-du-hacker-300x88.png" data-original-source="https://carlchenet.com/wp-content/uploads/2015/07/logo-journal-du-hacker-300x88.png" alt="" width="300" height="88" srcset="https://carlchenet.com/wp-content/uploads/2015/07/logo-journal-du-hacker-300x88.png 300w, https://carlchenet.com/wp-content/uploads/2015/07/logo-journal-du-hacker-768x225.png 768w, https://carlchenet.com/wp-content/uploads/2015/07/logo-journal-du-hacker-1024x299.png 1024w, https://carlchenet.com/wp-content/uploads/2015/07/logo-journal-du-hacker.png 1036w" sizes="(max-width: 300px) 100vw, 300px"></a><p>La source des liens du Courrier du hacker</p></div>
<p>En effet pour ceux qui ne peuvent pas se connecter régulièrement au <a href="https://www.journalduhacker.net/">Journal du hacker</a>, il était dommage de passer à côté de nombres de liens très intéressants. D’où l’idée de rassembler au sein d’une newsletter arrivant directement dans vos e-mails le vendredi afin de la parcourir tranquillement pendant le week-end.</p>
<p> </p>
<p><a href="https://lecourrierduhacker.com/"><img src="media/848ce166.courrierduhacker-logo.png" data-original-source="https://carlchenet.com/wp-content/uploads/2017/09/courrierduhacker-logo.png" alt="" width="818" height="168" srcset="https://carlchenet.com/wp-content/uploads/2017/09/courrierduhacker-logo.png 818w, https://carlchenet.com/wp-content/uploads/2017/09/courrierduhacker-logo-300x62.png 300w, https://carlchenet.com/wp-content/uploads/2017/09/courrierduhacker-logo-768x158.png 768w" sizes="(max-width: 818px) 100vw, 818px"></a></p>

	<section><form method="POST" data-attr-form-id="1">

													<label for="EMAIL">

										<!-- dictate label visibility -->
																					<span>
												E-mail											</span>
										
										<!-- Description Above -->
										
										<input name="EMAIL" placeholder="" required="required" type="email" value=""><!-- Description Below --></label>
									
				<!-- Honeypot Trap -->
				<input type="hidden" name="yikes-mailchimp-honeypot" value=""><!-- List ID --><input type="hidden" name="yikes-mailchimp-associated-list-id" value="22e5c06162"><!-- The form that is being submitted! Used to display error/success messages above the correct form --><input type="hidden" name="yikes-mailchimp-submitted-form" value="1"><!-- Submit Button --><button type="submit"> <span>S'abonner</span></button>				<!-- Nonce Security Check -->
				<input type="hidden" name="yikes_easy_mc_new_subscriber" value="1b0d982cae"><input type="hidden" name="_wp_http_referer" value="/category/planet-libre/feed/"></form>
			<!-- MailChimp Form generated by Easy Forms for MailChimp v6.3.24 (https://wordpress.org/plugins/yikes-inc-easy-mailchimp-extender/) -->

			</section><p>Si vous n’avez pas le temps de suivre l’évolution de l’actualité sur le Journal du hacker, n’hésitez pas à vous abonner via le formulaire ci-dessus ou directement sur le Courrier du hacker.</p>
<p><img src="media/46f73009.e1f1addc890668ce2561431b7be810bc" data-original-source="http://cdn.libravatar.org/avatar/e1f1addc890668ce2561431b7be810bc" alt="Gravatar de Carl Chenet" class="gravatar" /><br/><i>Original post of <a href="https://carlchenet.com/100-abonnes-au-courrier-du-hacker-une-semaine-apres-son-lancement/" title="Visit the source">Carl Chenet</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>Carl Chenet : <a href="">Le Journal du hacker choisit son logo !</a> (27/07/2015)</li><li>Carl Chenet : <a href="">Le Journal du hacker choisit son nom de domaine !</a> (24/08/2015)</li><li>Carl Chenet : <a href="">De l&rsquo;importance de bien choisir son instance Mastodon</a> (15/05/2017)</li><li>Carl Chenet : <a href="">Sur Mastodon, cr&eacute;er son compte de secours&hellip; ou tout perdre</a> (25/07/2017)</li><li>Carl Chenet : <a href="">Le meilleur du Journal du hacker une fois par semaine dans vos e-mails</a> (12/09/2017)</li></ul></div></p>


feed_id: https://miamondo.org/2017/09/19/le-logiciel-libre-kesako/
title: Miamondo : Le logiciel libre, késako?
uri: Miamondo-Le-logiciel-libre-késako
url: https://miamondo.org/2017/09/19/le-logiciel-libre-kesako/
content:
<p>Chères lectrices, chers lecteurs,</p>
<p>Je suis ravi d’accueillir le <a href="http://emmabuntus.sourceforge.net/blog/category/francais/">collectif Emmabuntüs</a> en tant que nouvel auteur de Miamondo. Voici donc le tout premier article signé « Emmabuntüs » accompagné d’un beau dessin de Péhä. Cet article a également été publié aujourd’hui même dans le journal  <a href="https://www.lagedefaire-lejournal.fr/logiciel-libre-kesako/" target="_blank" rel="noopener">l’âge de faire</a>. Je vous souhaite une bonne lecture.</p>
<p>Benoît.</p>
<p><a href="media/8e00788a.240px-logo_libre_emmabuntus.png" data-original-source="https://ordinosor.files.wordpress.com/2017/09/240px-logo_libre_emmabuntus.png"><img data-attachment-id="17980" data-permalink="https://miamondo.org/2017/09/19/le-logiciel-libre-kesako/240px-logo_libre_emmabuntus/" data-orig-file="https://ordinosor.files.wordpress.com/2017/09/240px-logo_libre_emmabuntus.png?w=166&amp;h=166" data-orig-size="240,240" data-comments-opened="1" data-image-meta='{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}' data-image-title="240px-Logo_Libre_Emmabuntus" data-image-description="" data-medium-file="https://ordinosor.files.wordpress.com/2017/09/240px-logo_libre_emmabuntus.png?w=166&amp;h=166?w=240" data-large-file="https://ordinosor.files.wordpress.com/2017/09/240px-logo_libre_emmabuntus.png?w=166&amp;h=166?w=240" src="https://ordinosor.files.wordpress.com/2017/09/240px-logo_libre_emmabuntus.png?w=166&amp;h=166" alt="" width="166" height="166" srcset="https://ordinosor.files.wordpress.com/2017/09/240px-logo_libre_emmabuntus.png?w=166&amp;h=166 166w, https://ordinosor.files.wordpress.com/2017/09/240px-logo_libre_emmabuntus.png?w=150&amp;h=150 150w, https://ordinosor.files.wordpress.com/2017/09/240px-logo_libre_emmabuntus.png 240w" sizes="(max-width: 166px) 85vw, 166px"></a></p>
<hr><p><img data-attachment-id="17977" data-permalink="https://miamondo.org/2017/09/19/le-logiciel-libre-kesako/peha_logiciel_libre-2/" data-orig-file="https://ordinosor.files.wordpress.com/2017/09/peha_logiciel_libre1.png?w=840" data-orig-size="1014,715" data-comments-opened="1" data-image-meta='{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}' data-image-title="peha_logiciel_libre" data-image-description="" data-medium-file="https://ordinosor.files.wordpress.com/2017/09/peha_logiciel_libre1.png?w=840?w=300" data-large-file="https://ordinosor.files.wordpress.com/2017/09/peha_logiciel_libre1.png?w=840?w=840" src="https://ordinosor.files.wordpress.com/2017/09/peha_logiciel_libre1.png?w=840" alt="peha_logiciel_libre" srcset="https://ordinosor.files.wordpress.com/2017/09/peha_logiciel_libre1.png?w=840 840w, https://ordinosor.files.wordpress.com/2017/09/peha_logiciel_libre1.png?w=150 150w, https://ordinosor.files.wordpress.com/2017/09/peha_logiciel_libre1.png?w=300 300w, https://ordinosor.files.wordpress.com/2017/09/peha_logiciel_libre1.png?w=768 768w, https://ordinosor.files.wordpress.com/2017/09/peha_logiciel_libre1.png 1014w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px"></p>
<p> </p>
<p>Pour bien débuter cette nouvelle saison, revenons sur la définition du <a href="https://fr.wikipedia.org/wiki/Logiciel_libre" target="_blank" rel="noopener">logiciel libre</a>, que certains d’entre vous confondent avec un logiciel gratuit dénommé « Freeware » ou <a href="https://fr.wikipedia.org/wiki/Freeware" target="_blank" rel="noopener">gratuiciel</a>. Or, on va voir que la gratuité n’est pas la principale qualité d’un logiciel libre, et que les logiciels gratuits (gratuiciels) ne sont pas nécessairement libres… Cet amalgame vient du fait qu’il y a une ambiguïté en langue anglaise autour du mot « free » qui peut signifier libre aussi bien que gratuit. Donc dans notre contexte, « Free software » se traduit par « logiciel libre » et non pas « gratuit ». D’ailleurs, un certain nombre d’anglophones utilisent désormais le vocable « Software libre » pour bien marquer la différence.</p>
<p>Alors pourquoi parle-t-on de liberté pour un logiciel ? Cela a plus de sens pour les êtres vivants que pour du virtuel ! En fait, il s’agit d’une liberté d’usage pour vous, pour nous, qui est constituée de <a href="https://fr.wikipedia.org/wiki/Logiciel_libre#D.C3.A9finition_de_la_Free_Software_Fondation_.28FSF.29" target="_blank" rel="noopener">4 libertés numérotées de 0 à 3</a> (humour typique des informaticiens, Ndlr) par la <a href="https://fr.wikipedia.org/wiki/Free_Software_Foundation" target="_blank" rel="noopener">Free Software Foundation</a>, permettant de définir le logiciel comme libre :</p>
<p><strong>0. la liberté d’exécuter le programme par vous, pour tous vos usages.</strong><br><strong> 1. la liberté d’étudier le fonctionnement du programme et de l’adapter à vos besoins.</strong><br><strong> 2. la liberté de redistribuer des copies du programme -ce qui implique la possibilité de donner, aussi bien que de vendre des copies. Par exemple en France, le chiffre d’affaires du logiciel libre représentait <a href="http://www.journaldunet.com/solutions/reseau-social-d-entreprise/1188013-open-source-en-france/" target="_blank" rel="noopener">4,5 Milliards d’euros en 2016</a>.</strong><br><strong> 3. la liberté d’améliorer le programme et de distribuer vos améliorations au public, pour en faire profiter tout le monde.</strong></p>
<p>Quand le logiciel ne remplit pas ces 4 libertés, il est qualifié de <a href="https://fr.wikipedia.org/wiki/Logiciel_propri%C3%A9taire" target="_blank" rel="noopener">propriétaire</a> (ou de privateur) même s’il est distribué gratuitement. En l’utilisant, vous acceptez implicitement la licence, qui vous interdit de l’étudier, de le modifier, de le céder à des tiers. Il ne vous appartient pas, vous avez simplement un droit d’usage très limité.</p>
<p>Pour compléter la présentation du logiciel libre, voici une réflexion le concernant, proposée par <a href="https://fr.wikipedia.org/wiki/Richard_Stallman" target="_blank" rel="noopener">Richard Stallman</a>, qui fonda il y a 30 ans ce mouvement libertaire, ainsi que la Free Software Foundation :</p>
<blockquote>
<p>« Quand les utilisateurs ne contrôlent pas le programme, c’est le programme qui contrôle les utilisateurs. Le développeur contrôle le programme, et par ce biais, contrôle les utilisateurs. Ce programme non libre, ou « privateur », devient donc l’instrument d’un pouvoir injuste. »</p>
</blockquote>
<p>A partir du principe du logiciel libre, sont nés de grands logiciels que vous utilisez tous les jours, comme <a href="https://fr.wikipedia.org/wiki/Wikip%C3%A9dia" target="_blank" rel="noopener">Wikipédia</a>, <a href="https://fr.wikipedia.org/wiki/Noyau_Linux" target="_blank" rel="noopener">Linux</a> (la base, entre autres, d’<a href="https://fr.wikipedia.org/wiki/Android" target="_blank" rel="noopener">Android</a>), <a href="https://fr.wikipedia.org/wiki/Mozilla_Firefox" target="_blank" rel="noopener">Firefox</a>, <a href="https://fr.wikipedia.org/wiki/LibreOffice" target="_blank" rel="noopener">LibreOffice</a>, <a href="https://fr.wikipedia.org/wiki/VLC_media_player" target="_blank" rel="noopener">VLC</a>, etc. Preuve que la liberté est gage de qualité et d’utilisation pour tous !</p>
<p>Le concept de la licence du logiciel libre (GPL : <a href="https://fr.wikipedia.org/wiki/Licence_publique_g%C3%A9n%C3%A9rale_GNU" target="_blank" rel="noopener">GNU General Public License</a>) a aussi permis la création des <a href="https://fr.wikipedia.org/wiki/Format_ouvert" target="_blank" rel="noopener">formats ouverts</a>. Avec les formats, on ne fait pas référence au logiciel global, mais à la structure même des données du logiciel, qui est donc ouvertement publiée, ceci permettant à des développeurs de créer des logiciels pour traiter ces données dans le présent mais aussi dans le futur, comme la <a href="https://fr.wikipedia.org/wiki/Jean-Fran%C3%A7ois_Champollion#D.C3.A9chiffrement_des_hi.C3.A9roglyphes" target="_blank" rel="noopener">Pierre de Rosette</a> a permis à Jean-François Champollion de déchiffrer les hiéroglyphes. Dans un format propriétaire, si l’éditeur arrête de développer son logiciel pour lire vos données, celles-ci deviennent de facto illisibles, car personne ne sait, et n’a souvent même pas le droit de savoir, comment elles sont codées <img src="media/df923a89.1f626.png" data-original-source="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f626.png" alt="😦"></p>
<p>Dans cet article, nous avons uniquement employé le terme logiciel libre, et non pas celui d’<a href="https://fr.wikipedia.org/wiki/Open_source" target="_blank" rel="noopener">Open Source</a>, que vous pouvez entendre ou lire dans les médias. Cela n’est pas une erreur de notre part, car ces deux concepts, bien que poursuivant un but similaire (celui de donner une plus grande liberté d’usage aux utilisateurs de logiciels) ont cependant une différence fondamentale qui réside dans leurs philosophies respectives. Selon Richard Stallman dont nous partageons complètement l’analyse,</p>
<blockquote>
<p>«  L’open source est une méthodologie de développement; le logiciel libre est un mouvement social ».</p>
</blockquote>
<p>Voici deux articles, qui vous permettrons de former votre propre opinion sur ce sujet :<br><a href="https://www.gnu.org/philosophy/free-software-for-freedom.fr.html" target="_blank" rel="noopener">Pourquoi l’expression « logiciel libre » est meilleure qu’« open source »</a><br><a href="https://www.gnu.org/philosophy/open-source-misses-the-point.html" target="_blank" rel="noopener">En quoi l’open source perd de vue l’éthique du logiciel libre</a></p>
<p>Le mois prochain dans L’âge de faire : comment trouver des ressources libres : musique, images, etc.</p>
<p><a href="http://emmabuntus.sourceforge.net/mediawiki/index.php/Emmabuntus:Community_portal" target="_blank" rel="noopener">Collectif Emmabuntüs</a> – <a href="https://fr.wikipedia.org/wiki/Licence_publique_g%C3%A9n%C3%A9rale_GNU" target="_blank" rel="noopener">GPL</a> V3<br>
Dessin : <a href="https://lesptitsdessinsdepeha.wordpress.com/" target="_blank" rel="noopener">Péhä</a> <a href="https://fr.wikipedia.org/wiki/Licence_Creative_Commons" target="_blank" rel="noopener">CC-BY-SA</a> 2017</p>
<p> </p><br><a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ordinosor.wordpress.com/17952/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ordinosor.wordpress.com/17952/"></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=miamondo.org&amp;blog=88640341&amp;post=17952&amp;subd=ordinosor&amp;ref=&amp;feed=1" width="1" height="1">
<p><img src="media/848c13f4.27be241458674ac3359b0353fdc37c4a" data-original-source="http://cdn.libravatar.org/avatar/27be241458674ac3359b0353fdc37c4a" alt="Gravatar de Miamondo" class="gravatar" /><br/><i>Original post of <a href="https://miamondo.org/2017/09/19/le-logiciel-libre-kesako/" title="Visit the source">Miamondo</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>Miamondo : <a href="">Comment je suis devenu un biffin du num&eacute;rique gr&acirc;ce &agrave; Emmabunt&uuml;s</a> (12/08/2017)</li><li>Miamondo : <a href="">Installer une distribution Linux sur un smartphone Android</a> (26/05/2017)</li><li>Asher256 : <a href="">Script pour GNU/Linux : lancer un logiciel X (graphique) avec un utilisateur n&rsquo;ayant pas le droit</a> (31/08/2008)</li><li>Asher256 : <a href="">Miro : la t&eacute;l&eacute;vision gratuite par Internet</a> (15/01/2008)</li><li>Lionel Zuber : <a href="">A la d&eacute;couverte de VIM</a> (17/08/2012)</li></ul></div></p>


feed_id: https://yeuxdelibad.net/Blog/?d=2017/09/30/07/21/01-bilan-libre-de-septembre-2017-n10
title: Thuban : Bilan libre de septembre 2017 (n°10)
uri: Thuban-Bilan-libre-de-septembre-2017-(n-10)
url: https://yeuxdelibad.net/Blog/?d=2017/09/30/07/21/01-bilan-libre-de-septembre-2017-n10
content:
<p>Un peu en avance ce mois-ci, mais je sais que la fin du mois ne sera pas très riche car l'emploi du temps est chargé. Voici donc un résumé de mes quelques contributions à des projets libres au cours du mois de septembre, en espérant vous donner envie d'en faire autant.</p>

<p><b><span>Manuel (auto)? hébergement</span></b><br>
Concernant le manuel pour s'(auto?) héberger, j'ai bien avancé et je suis en mesure de le publier lorsqu'OpenBSD 6.2 le sera (d'ici un mois?). Les gains de la précédente version couvreront une publication simple (pas en librairie) et c'est très bien puisque de toutes façon il n'y a pas de ventes chez les libraires. Cependant, selon mes moyens, je voudrais accompagner le manuel d'un petit plus. À ce propos, ce sont vraiment vos remarques qui m'ont permi de le corriger/simplifier/améliorer. C'est en discutant avec des collègues néophytes que j'ai reçu une bonne claque :</p>

<blockquote>- C'est super intéressant ce truc! Tu peux vraiment être tranquille au moins comme ça. C'est difficile?<br>
- Ce n'est pas plus difficile que se mettre à jardiner. Il faut être soigneux surtout, et y aller étape par étape.<br>
- Et ton bouquin là, il est long?<br>
- Euh, environ 200 pages...<br>
- Ah ouais quand même ! C'est pas si accessible que ça, s'il faut se taper 200 pages avant d'y arriver.</blockquote>

<p><em>*VLAN</em>.<br>
C'est tellement vrai. Mis à part quelques êtres à parts, il faut être carrément motivé.<br>
J'ai donc décidé d'accompagner le manuel complet par un e-book plus court qui contient des fiches pratiques. Vous y trouverez la recette pour avoir son serveur web, une autre pour avoir son serveur mail... Chaque chapitre ne dépasse pas les 4 pages (c'est le max) et va à l'essentiel.</p>

<p><b><span>Autres projets</span></b></p>

<ul><li> J'ai configuré la prochaine session de l'iso permettant d'aborder OpenBSD, à savoir <a href="https://yeuxdelibad.net/Blog/J'ai%20bricol%C3%A9%20des%20th%C3%A8mes%20pour%20la%20plateforme">isotop</a>. Elle se construit en -current et ma foi ça semble fonctionner comme prévu. J'attends la publication d'OpenBSD 6.2 pour approfondir les tests.</li>
<li> Pour <a href="https://obsd4a.net/">obsd4a.net</a>, j'ai bricolé des thèmes et je termine le partenariat avec notre hébergeur.</li>
<li> Avec l'aide de <a href="https://stephane-huc.net/">PengouinBSD</a>, le miroir OpenBSD hébergé par obsd4a a maintenant une <a href="https://mirror.obsd4a.net/">version https</a>.</li>
<li> Un peu de traduction de la FAQ d'OpenBSD sur le <a href="https://wiki.obsd4a.net/doku.php?id=openbsd.org:faq:start">wiki obsd4a</a>.</li>
<li> Je suis de près le projet <a href="https://framagit.org/22decembre/ldnscripts/">ldnscripts</a> de <a href="https://www.22decembre.eu/">22decembre</a> pour DNSSEC. Cet outil remplace les usines à gaz comme Opendnssec Quelques commits sont de moi, mais ce n'est rien comparé à son travail.</li>
<li> J'ai fait quelques commits à blogotext, le moteur de ce blog. Notamment, on peut retenir la <a href="https://github.com/BlogoText/blogotext/pull/313">séparation du javascript</a> en fichier à part, la création de logos (qui n'ont pas été retenus par le vote de la communauté :) ), le passage de <a href="https://github.com/BlogoText/blogotext/pull/307">l'user-agent à une version plus à jour</a>, la création d'un fichier <a href="https://github.com/BlogoText/blogotext/pull/304">robots.txt</a> à l'installation.</li></ul><p>Et voilà, ça sera tout :)</p>

<div><img src="media/37d81a4c.imout.gif" data-original-source="http://https//yeuxdelibad.net/Blog//Images/gifs/imout.gif" alt="i'm out"></div>
<p><img src="media/0d200000.a17c14dbfc42f0936cee56ed7a9b3b31" data-original-source="http://cdn.libravatar.org/avatar/a17c14dbfc42f0936cee56ed7a9b3b31" alt="Gravatar de Thuban" class="gravatar" /><br/><i>Original post of <a href="https://yeuxdelibad.net/Blog/?d=2017/09/30/07/21/01-bilan-libre-de-septembre-2017-n10" title="Visit the source">Thuban</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>


feed_id: https://blog.rom1v.com/2017/09/gnirehtet-reecrit-en-rust/
title: ®om : Gnirehtet réécrit en Rust
uri: om-Gnirehtet-réécrit-en-Rust
url: https://blog.rom1v.com/2017/09/gnirehtet-reecrit-en-rust/
content:
<p>Il y a quelques mois, j’ai présenté <a href="https://blog.rom1v.com/2017/03/gnirehtet/">Gnirehtet</a>, un outil de
<em>reverse tethering</em> pour Android que j’ai écrit en Java.</p>

<p>Depuis, <strong>je l’ai réécrit en <a href="https://www.rust-lang.org/">Rust</a></strong>.</p>

<p>Et il est également open source ! <a href="https://github.com/Genymobile/gnirehtet">Téléchargez-le</a>, branchez un
téléphone ou une tablette Android, et exécutez :</p>

<div><pre><code>./gnirehtet run
</code></pre></div>

<p><em>(adb doit être installé)</em></p>

<ul><li><a href="https://blog.rom1v.com/#pourquoi-rust">Pourquoi Rust?</a></li>
  <li><a href="https://blog.rom1v.com/#apprendre-rust">Apprendre Rust</a></li>
  <li><a href="https://blog.rom1v.com/#difficults">Difficultés</a>    <ul><li><a href="https://blog.rom1v.com/#encapsulation">Encapsulation</a></li>
      <li><a href="https://blog.rom1v.com/#observateur">Observateur</a></li>
      <li><a href="https://blog.rom1v.com/#partage-de-donnes-mutables">Partage de données mutables</a></li>
      <li><a href="https://blog.rom1v.com/#limitations-du-compilateur">Limitations du compilateur</a></li>
    </ul></li>
  <li><a href="https://blog.rom1v.com/#sret-et-piges">Sûreté et pièges</a>    <ul><li><a href="https://blog.rom1v.com/#leakpocalypse">Leakpocalypse</a></li>
      <li><a href="https://blog.rom1v.com/#infinit-indfinie">Infinité indéfinie</a></li>
    </ul></li>
  <li><a href="https://blog.rom1v.com/#stats">Stats</a>    <ul><li><a href="https://blog.rom1v.com/#nombre-de-lignes">Nombre de lignes</a></li>
      <li><a href="https://blog.rom1v.com/#taille-des-binaires">Taille des binaires</a></li>
      <li><a href="https://blog.rom1v.com/#utilisation-mmoire">Utilisation mémoire</a></li>
      <li><a href="https://blog.rom1v.com/#utilisation-cpu">Utilisation CPU</a></li>
    </ul></li>
  <li><a href="https://blog.rom1v.com/#conclusion">Conclusion</a></li>
</ul><h2>Pourquoi Rust?</h2>

<p>À Genymobile, nous voulions que <em>Gnirehtet</em> ne nécessite pas d’environnement
d’exécution Java (JRE), donc le besoin principal était de compiler l’application
vers un binaire exécutable <em>natif</em>.</p>

<p>Par conséquent, j’ai d’abord pensé la réécrire en C ou C++. Mais à ce moment-là
(début mai), apprendre Rust m’intéressait, après avoir vaguement entendu parler
de ses fonctionnalités:</p>
<ul><li><a href="https://blog.rust-lang.org/2015/04/10/Fearless-Concurrency.html">sûreté mémoire sans <em>garbage collection</em></a>,</li>
  <li><a href="https://blog.rust-lang.org/2015/04/10/Fearless-Concurrency.html">concurrence sans <em>data races</em></a>,</li>
  <li><a href="https://blog.rust-lang.org/2015/05/11/traits.html">abstraction sans coût</a>.</li>
</ul><p>Cependant, je n’avais jamais écrit une ligne de Rust ni entendu parler de son
système de <a href="https://doc.rust-lang.org/book/first-edition/ownership.html">possession</a>, d’<a href="https://doc.rust-lang.org/book/first-edition/references-and-borrowing.html">emprunt</a> ou de <a href="https://doc.rust-lang.org/book/first-edition/lifetimes.html">durées de
vie</a>.</p>

<p>Mais je suis convaincu que le meilleur moyen d’apprendre un langage de
programmation est de travailler à plein temps sur un projet dans ce langage.</p>

<p>J’étais motivé, donc après avoir vérifié que ça pouvait convenir (en gros, j’ai
écrit un exemple utilisant la bibliothèque d’<a href="https://en.wikipedia.org/wiki/Asynchronous_I/O">I/O asynchrone</a> <a href="https://crates.io/crates/mio">mio</a>,
et je l’ai exécuté à la fois sur Linux et Windows), j’ai décidé de réécrire
<em>Gnirehtet</em> en Rust.</p>

<h2>Apprendre Rust</h2>

<p>Pendant la réécriture, j’ai <em>dévoré</em> successivement le <a href="https://doc.rust-lang.org/book/first-edition/">Rust book</a>, <a href="https://rustbyexample.com/">Rust by
example</a> et le <a href="https://doc.rust-lang.org/nomicon/">Rustonomicon</a>. J’ai beaucoup appris, et j’aime énormément ce
langage. Beaucoup de ses fonctionnalités me manquent maintenant quand je
travaille sur un projet C++ :</p>
<ul><li><a href="https://rustbyexample.com/cast/inference.html">inférence de type avancée</a>,</li>
  <li><a href="https://doc.rust-lang.org/book/first-edition/enums.html">enums</a>,</li>
  <li><a href="https://doc.rust-lang.org/book/first-edition/patterns.html">patterns</a>,</li>
  <li><a href="https://doc.rust-lang.org/book/first-edition/traits.html">trait bounds</a>,</li>
  <li><a href="https://doc.rust-lang.org/std/option/"><code>Option<T></code></a> (comme <a href="https://github.com/tvaneerd/cpp17_in_TTs/blob/master/ALL_IN_ONE.md#stdoptionalt"><code>std::optional<T></code></a> en C++17, mais tirant bénéfice des
enums et des patterns),</li>
  <li><a href="https://doc.rust-lang.org/book/first-edition/macros.html">macros hygiéniques</a>,</li>
  <li>l’absence de fichiers d’en-têtes,</li>
  <li>le (si simple) système de <em>build</em>, <em>et bien sûr</em></li>
  <li>la garantie de sûreté mémoire.</li>
</ul><p>À propos de l’apprentissage, Paul Graham <a href="http://paulgraham.com/know.html">a écrit</a>:</p>

<blockquote>
  <p><strong>Reading and experience train your model of the world.</strong> And even if you
forget the experience or what you read, its effect on your model of the world
persists. Your mind is like a compiled program you’ve lost the source of. It
works, but you don’t know why.</p>
</blockquote>

<p>Pour les non-anglophones, ma propre traduction :</p>

<blockquote>
  <p><strong>La lecture et l’expérience entraînent votre modèle du monde.</strong> Et même si
vous oubliez l’expérience ou ce que vous avez lu, son effet sur votre modèle
du monde persiste. Votre esprit est comme un programme compilé dont vous
auriez perdu le code source. Ça fonctionne, mais vous ne savez pas pourquoi.</p>
</blockquote>

<p>Certains des concepts de Rust (comme les <a href="https://doc.rust-lang.org/book/first-edition/lifetimes.html">durées de vie</a> ou la
<a href="https://doc.rust-lang.org/book/first-edition/ownership.html#move-semantics">sémantique de mouvement</a> par défaut) m’ont fourni un <em>jeu de
données</em> significativement différent, qui a sans aucun doute affecté mon modèle
du monde (de la programmation).</p>

<p>Je ne vais pas présenter toutes ces fonctionnaliés (cliquez sur les liens de la
documentation si ça vous intéresse). À la place, je vais essayer d’expliquer où
et pourquoi Rust a resisté au <em>design</em> que je voulais implémenter, et comment
repenser les problèmes dans le périmètre des contraintes de Rust.</p>

<p><em>La partie suivant nécessite une certaine connaissance de Rust. Vous pourriez
vouloir la passer pour aller directement aux <a href="https://blog.rom1v.com/#stats">stats</a>.</em></p>

<h2>Difficultés</h2>

<p>Je trouvais la conception de l’application Java plutôt réussie, donc je voulais
reproduire l’architecture globale dans la version Rust (avec d’éventuelles
adaptations pour la <em>rustifier</em>).</p>

<p>Mais j’ai lutté sur les détails, en particulier pour satisfaire le <a href="https://doc.rust-lang.org/book/first-edition/references-and-borrowing.html"><em>borrow
checker</em></a>. Les <a href="https://doc.rust-lang.org/book/first-edition/references-and-borrowing.html#the-rules">règles</a> sont simples:</p>

<blockquote>
  <p>First, any borrow must last for a scope no greater than that of the owner.
Second, you may have one or the other of these two kinds of borrows, but not
both at the same time:</p>
  <ul><li>one or more references (<code>&amp;T</code>) to a resource,</li>
    <li>exactly one mutable reference (<code>&amp;mut T</code>).</li>
  </ul></blockquote>

<p>En français :</p>

<blockquote>
  <p>Premièrement, aucun emprunt ne doit avoir une portée plus grande que celle de
son propriétaire.
Deuxièmement, vous pouvez avoir l’un ou l’autre de ces types d’emprunts, mais
pas les deux à la fois:</p>
  <ul><li>une ou plusieurs références (<code>&amp;T</code>) vers une ressource,</li>
    <li>exactement une référence mutable (<code>&amp;mut T</code>).</li>
  </ul></blockquote>

<p>Cependant, il m’a fallu un peu de temps pour réaliser comment elles entrent en
conflit avec certains principes ou modèles de conception.</p>

<p>Voici donc mes retours. J’ai sélectionné 4 sujets qui sont suffisamment généraux
pour être indépendants de ce projet particulier :</p>

<ul><li>les conflits avec l’<a href="https://blog.rom1v.com/#encapsulation">encapsulation</a> ;</li>
  <li>le <em>design pattern</em> <a href="https://blog.rom1v.com/#observateur">observateur</a> ;</li>
  <li>comment <a href="https://blog.rom1v.com/#partage-de-donnes-mutables">partager des données mutables</a> ;</li>
  <li>un retour rapide sur les <a href="https://blog.rom1v.com/#limitations-du-compilateur">limitations ennuyeuses du
compilateur</a>.</li>
</ul><h3>Encapsulation</h3>

<p><strong>Les règles d’emprunt contraignent l’encapsulation.</strong> C’est la première
conséquence que j’ai réalisée.</p>

<p>Voici un exemple canonique :</p>

<figure><pre><code data-lang="rust"><span>pub</span> <span>struct</span> <span>Data</span> <span>{</span>
    <span>header</span><span>:</span> <span>[</span><span>u8</span><span>;</span> <span>4</span><span>],</span>
    <span>payload</span><span>:</span> <span>[</span><span>u8</span><span>;</span> <span>20</span><span>],</span>
<span>}</span>

<span>impl</span> <span>Data</span> <span>{</span>
    <span>pub</span> <span>fn</span> <span>new</span><span>()</span> <span>-></span> <span>Self</span> <span>{</span>
        <span>Self</span> <span>{</span>
            <span>header</span><span>:</span> <span>[</span><span>0</span><span>;</span> <span>4</span><span>],</span>
            <span>payload</span><span>:</span> <span>[</span><span>0</span><span>;</span> <span>20</span><span>],</span>
        <span>}</span>
    <span>}</span>

    <span>pub</span> <span>fn</span> <span>header</span><span>(</span><span>&amp;</span><span>mut</span> <span>self</span><span>)</span> <span>-></span> <span>&amp;</span><span>mut</span> <span>[</span><span>u8</span><span>]</span> <span>{</span>
        <span>&amp;</span><span>mut</span> <span>self</span><span>.header</span>
    <span>}</span>

    <span>pub</span> <span>fn</span> <span>payload</span><span>(</span><span>&amp;</span><span>mut</span> <span>self</span><span>)</span> <span>-></span> <span>&amp;</span><span>mut</span> <span>[</span><span>u8</span><span>]</span> <span>{</span>
        <span>&amp;</span><span>mut</span> <span>self</span><span>.payload</span>
    <span>}</span>
<span>}</span>

<span>fn</span> <span>main</span><span>()</span> <span>{</span>
    <span>let</span> <span>mut</span> <span>data</span> <span>=</span> <span>Data</span><span>::</span><span>new</span><span>();</span>
    <span>let</span> <span>header</span> <span>=</span> <span>data</span><span>.header</span><span>();</span>
    <span>let</span> <span>payload</span> <span>=</span> <span>data</span><span>.payload</span><span>();</span>
<span>}</span></code></pre></figure><p>Nous créons juste une nouvelle instance de <code>Data</code>, puis associons à des
variables locales des références mutables vers les tableaux <code>header</code> et
<code>payload</code>, en passant par des accesseurs.</p>

<p>Cependant, cela ne compile pas :</p>

<div><pre><code>$ rustc sample.rs
error[E0499]: cannot borrow `data` as mutable more than once at a time
  --> sample.rs:21:19
   |
25 |     let header = data.header();
   |                  ---- first mutable borrow occurs here
26 |     let payload = data.payload();
   |                   ^^^^ second mutable borrow occurs here
27 | }
   | - first borrow ends here
</code></pre></div>

<p>Le compilateur ne peut pas faire l’hypothèse que <code>header()</code> et <code>payload()</code>
retournent des références vers des données disjointes dans la structure <code>Data</code>.
Par conséquent, chacun <em>emprunte</em> la structure <code>data</code> entièrement. Vu que les
règles d’emprunt interdisent d’obtenir deux références mutables vers la même
ressource, il rejette le second appel.</p>

<p>Parfois, nous faisons face à des limitations temporaires parce que le
compilateur n’est pas (encore) assez malin. Ce n’est pas le cas ici :
l’implémentation de <code>header()</code> pourrait très bien retourner une référence vers
<code>payload</code>, ou écrire dans le tableau <code>payload</code>, enfreignant ainsi les règles
d’emprunt. Et la validité d’un appel d’une méthode ne peut pas dépendre de
l’implementation de la méthode.</p>

<p>Pour corriger le problème, le compilateur doit être capable de savoir que les
variables locales <code>header</code> et <code>payload</code> référencent des <strong>données disjointes</strong>,
par exemple en accédant aux champs directement :</p>

<figure><pre><code data-lang="rust">    <span>let</span> <span>header</span> <span>=</span> <span>&amp;</span><span>mut</span> <span>data</span><span>.header</span><span>;</span>
    <span>let</span> <span>payload</span> <span>=</span> <span>&amp;</span><span>mut</span> <span>data</span><span>.payload</span><span>;</span></code></pre></figure><p>ou en exposant une méthode fournissant les deux références simultanément :</p>

<figure><pre><code data-lang="rust"><span>struct</span> <span>Data</span> <span>{</span>
    <span>fn</span> <span>header_and_payload</span><span>(</span><span>&amp;</span><span>mut</span> <span>self</span><span>)</span> <span>-></span> <span>(</span><span>&amp;</span><span>mut</span> <span>[</span><span>u8</span><span>],</span> <span>&amp;</span><span>mut</span> <span>[</span><span>u8</span><span>])</span> <span>{</span>
        <span>(</span><span>&amp;</span><span>mut</span> <span>self</span><span>.header</span><span>,</span> <span>&amp;</span><span>mut</span> <span>self</span><span>.payload</span><span>)</span>
    <span>}</span>
<span>}</span>

<span>fn</span> <span>main</span><span>()</span> <span>{</span>
    <span>let</span> <span>mut</span> <span>data</span> <span>=</span> <span>Data</span><span>::</span><span>new</span><span>();</span>
    <span>let</span> <span>(</span><span>header</span><span>,</span> <span>payload</span><span>)</span> <span>=</span> <span>data</span><span>.header_and_payload</span><span>();</span>
<span>}</span></code></pre></figure><p>De même, dans l’implémentation d’une structure, les règles d’emprunt empêchent
de factoriser du code dans une méthode privée facilement. Prenons cet exemple
(artificiel) :</p>

<figure><pre><code data-lang="rust"><span>pub</span> <span>struct</span> <span>Data</span> <span>{</span>
    <span>buf</span><span>:</span> <span>[</span><span>u8</span><span>;</span> <span>20</span><span>],</span>
    <span>prefix_length</span><span>:</span> <span>usize</span><span>,</span>
    <span>sum</span><span>:</span> <span>u32</span><span>,</span>
    <span>port</span><span>:</span> <span>u16</span><span>,</span>
<span>}</span>

<span>impl</span> <span>Data</span> <span>{</span>
    <span>pub</span> <span>fn</span> <span>update_sum</span><span>(</span><span>&amp;</span><span>mut</span> <span>self</span><span>)</span> <span>{</span>
        <span>let</span> <span>content</span> <span>=</span> <span>&amp;</span><span>self</span><span>.buf</span><span>[</span><span>self</span><span>.prefix_length</span><span>..</span><span>];</span>
        <span>self</span><span>.sum</span> <span>=</span> <span>content</span><span>.iter</span><span>()</span><span>.cloned</span><span>()</span><span>.map</span><span>(</span><span>u32</span><span>::</span><span>from</span><span>)</span><span>.sum</span><span>();</span>
    <span>}</span>

    <span>pub</span> <span>fn</span> <span>update_port</span><span>(</span><span>&amp;</span><span>mut</span> <span>self</span><span>)</span> <span>{</span>
        <span>let</span> <span>content</span> <span>=</span> <span>&amp;</span><span>self</span><span>.buf</span><span>[</span><span>self</span><span>.prefix_length</span><span>..</span><span>];</span>
        <span>self</span><span>.port</span> <span>=</span> <span>(</span><span>content</span><span>[</span><span>2</span><span>]</span> <span>as</span> <span>u16</span><span>)</span> <span><<</span> <span>8</span> <span>|</span> <span>content</span><span>[</span><span>3</span><span>]</span> <span>as</span> <span>u16</span><span>;</span>
    <span>}</span>
<span>}</span></code></pre></figure><p>Ici, le champ <code>buf</code> est un tableau stockant un préfixe et un contenu de manière
contiguë.</p>

<p>Nous voulons factoriser la manière dont nous récupérons la <em>slice</em> <code>content</code>,
pour que les méthodes <code>update_*()</code> n’aient pas à se préoccuper des détails.
Essayons :</p>

<figure><pre><code data-lang="diff"> impl Data {
     pub fn update_sum(&amp;mut self) {
<span>-        let content = &amp;self.buf[self.prefix_length..];
</span><span>+        let content = self.content();
</span>         self.sum = content.iter().cloned().map(u32::from).sum();
     }

     pub fn update_port(&amp;mut self) {
<span>-        let content = &amp;self.buf[self.prefix_length..];
</span><span>+        let content = self.content();
</span>         self.port = (content[2] as u16) << 8 | content[3] as u16;
     }
<span>+
+    fn content(&amp;mut self) -> &amp;[u8] {
+        &amp;self.buf[self.prefix_length..]
+    }
</span> }</code></pre></figure><p>Malheureusement, cela ne compile pas :</p>

<div><pre><code>error[E0506]: cannot assign to `self.sum` because it is borrowed
  --> facto2.rs:11:9
   |
10 |         let content = self.content();
   |                       ---- borrow of `self.sum` occurs here
11 |         self.sum = content.iter().cloned().map(u32::from).sum();
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ assignment to borrowed `self.sum` occurs here

error[E0506]: cannot assign to `self.port` because it is borrowed
  --> facto2.rs:16:9
   |
15 |         let content = self.content();
   |                       ---- borrow of `self.port` occurs here
16 |         self.port = (content[2] as u16) << 8 &amp; content[3] as u16;
   |
</code></pre></div>

<p>Comme dans l’exemple précédent, récupérer une référence à travers une méthode
<em>emprunte</em> la structure complète (ici, <code>self</code>).</p>

<p>Pour contourner le problème, nous pouvons expliquer au compilateur que les
champs sont disjoints :</p>

<figure><pre><code data-lang="rust"><span>impl</span> <span>Data</span> <span>{</span>
    <span>pub</span> <span>fn</span> <span>update_sum</span><span>(</span><span>&amp;</span><span>mut</span> <span>self</span><span>)</span> <span>{</span>
        <span>let</span> <span>content</span> <span>=</span> <span>Self</span><span>::</span><span>content</span><span>(</span><span>&amp;</span><span>self</span><span>.buf</span><span>,</span> <span>self</span><span>.prefix_length</span><span>);</span>
        <span>self</span><span>.sum</span> <span>=</span> <span>content</span><span>.iter</span><span>()</span><span>.cloned</span><span>()</span><span>.map</span><span>(</span><span>u32</span><span>::</span><span>from</span><span>)</span><span>.sum</span><span>();</span>
    <span>}</span>

    <span>pub</span> <span>fn</span> <span>update_port</span><span>(</span><span>&amp;</span><span>mut</span> <span>self</span><span>)</span> <span>{</span>
        <span>let</span> <span>content</span> <span>=</span> <span>Self</span><span>::</span><span>content</span><span>(</span><span>&amp;</span><span>self</span><span>.buf</span><span>,</span> <span>self</span><span>.prefix_length</span><span>);</span>
        <span>self</span><span>.port</span> <span>=</span> <span>(</span><span>content</span><span>[</span><span>2</span><span>]</span> <span>as</span> <span>u16</span><span>)</span> <span><<</span> <span>8</span> <span>|</span> <span>content</span><span>[</span><span>3</span><span>]</span> <span>as</span> <span>u16</span><span>;</span>
    <span>}</span>

    <span>fn</span> <span>content</span><span>(</span><span>buf</span><span>:</span> <span>&amp;</span><span>[</span><span>u8</span><span>],</span> <span>prefix_length</span><span>:</span> <span>usize</span><span>)</span> <span>-></span> <span>&amp;</span><span>[</span><span>u8</span><span>]</span> <span>{</span>
        <span>&amp;</span><span>buf</span><span>[</span><span>prefix_length</span><span>..</span><span>]</span>
    <span>}</span>
<span>}</span></code></pre></figure><p>Ça compile, mais cela va totalement à l’encontre de la factorisation :
l’appelant doit fournir les champs nécessaires.</p>

<p>Comme alternative, nous pouvons utiliser une <a href="https://doc.rust-lang.org/book/first-edition/macros.html">macro</a> pour <em>inliner</em> le
code :</p>

<figure><pre><code data-lang="rust"><span>macro_rules!</span> <span>content</span> <span>{</span>
    <span>(</span><span>$self:ident</span><span>)</span> <span>=></span> <span>{</span>
        <span>&amp;</span><span>$self</span><span>.buf</span><span>[</span><span>$self</span><span>.prefix_length</span>..<span>]</span>
    <span>}</span>
<span>}</span>

<span>impl</span> <span>Data</span> <span>{</span>
    <span>pub</span> <span>fn</span> <span>update_sum</span><span>(</span><span>&amp;</span><span>mut</span> <span>self</span><span>)</span> <span>{</span>
        <span>let</span> <span>content</span> <span>=</span> <span>content!</span><span>(</span><span>self</span><span>);</span>
        <span>self</span><span>.sum</span> <span>=</span> <span>content</span><span>.iter</span><span>()</span><span>.cloned</span><span>()</span><span>.map</span><span>(</span><span>u32</span><span>::</span><span>from</span><span>)</span><span>.sum</span><span>();</span>
    <span>}</span>

    <span>pub</span> <span>fn</span> <span>update_port</span><span>(</span><span>&amp;</span><span>mut</span> <span>self</span><span>)</span> <span>{</span>
        <span>let</span> <span>content</span> <span>=</span> <span>content!</span><span>(</span><span>self</span><span>);</span>
        <span>self</span><span>.port</span> <span>=</span> <span>(</span><span>content</span><span>[</span><span>2</span><span>]</span> <span>as</span> <span>u16</span><span>)</span> <span><<</span> <span>8</span> <span>|</span> <span>content</span><span>[</span><span>3</span><span>]</span> <span>as</span> <span>u16</span><span>;</span>
    <span>}</span>
<span>}</span></code></pre></figure><p>Mais c’est loin d’être idéal.</p>

<p>Je pense que nous devons juste l’accepter : l’encapsulation entre parfois en
conflit avec les règles d’emprunt. Après tout, ce n’est pas si surprenant :
imposer les règles d’emprunt nécessite de suivre chaque accès concret aux
ressources, alors que l’encapsulation vise à les abstraire.</p>

<h3>Observateur</h3>

<p>Le <em>design pattern</em> <a href="https://en.wikipedia.org/wiki/Observer_pattern">observateur</a> est utile pour enregistrer des
événements sur un objet.</p>

<p>Dans certains cas, <strong>ce pattern pose des difficultés d’implémentation en Rust</strong>.</p>

<p>Pour faire simple, considérons que les événements sont des valeurs <code>u32</code>. Voici
une implémentation possible :</p>

<figure><pre><code data-lang="rust"><span>pub</span> <span>trait</span> <span>EventListener</span> <span>{</span>
    <span>fn</span> <span>on_event</span><span>(</span><span>&amp;</span><span>self</span><span>,</span> <span>event</span><span>:</span> <span>u32</span><span>);</span>
<span>}</span>

<span>pub</span> <span>struct</span> <span>Notifier</span> <span>{</span>
    <span>listeners</span><span>:</span> <span>Vec</span><span><</span><span>Box</span><span><</span><span>EventListener</span><span>>></span><span>,</span>
<span>}</span>

<span>impl</span> <span>Notifier</span> <span>{</span>
    <span>pub</span> <span>fn</span> <span>new</span><span>()</span> <span>-></span> <span>Self</span> <span>{</span>
        <span>Self</span> <span>{</span> <span>listeners</span><span>:</span> <span>Vec</span><span>::</span><span>new</span><span>()</span> <span>}</span>
    <span>}</span>

    <span>pub</span> <span>fn</span> <span>register</span><span><</span><span>T</span><span>:</span> <span>EventListener</span> <span>+</span> <span>'</span><span>static</span><span>></span><span>(</span><span>&amp;</span><span>mut</span> <span>self</span><span>,</span> <span>listener</span><span>:</span> <span>T</span><span>)</span> <span>{</span>
        <span>self</span><span>.listeners</span><span>.push</span><span>(</span><span>Box</span><span>::</span><span>new</span><span>(</span><span>listener</span><span>));</span>
    <span>}</span>

    <span>pub</span> <span>fn</span> <span>notify</span><span>(</span><span>&amp;</span><span>self</span><span>,</span> <span>event</span><span>:</span> <span>u32</span><span>)</span> <span>{</span>
        <span>for</span> <span>listener</span> <span>in</span> <span>&amp;</span><span>self</span><span>.listeners</span> <span>{</span>
            <span>listener</span><span>.on_event</span><span>(</span><span>event</span><span>);</span>
        <span>}</span>
    <span>}</span>
<span>}</span></code></pre></figure><p>Par commodité, implémentons notre trait <code>EventListener</code> pour les closures :</p>

<figure><pre><code data-lang="rust"><span>impl</span><span><</span><span>F</span><span>:</span> <span>Fn</span><span>(</span><span>u32</span><span>)</span><span>></span> <span>EventListener</span> <span>for</span> <span>F</span> <span>{</span>
    <span>fn</span> <span>on_event</span><span>(</span><span>&amp;</span><span>self</span><span>,</span> <span>event</span><span>:</span> <span>u32</span><span>)</span> <span>{</span>
        <span>self</span><span>(</span><span>event</span><span>);</span>
    <span>}</span>
<span>}</span></code></pre></figure><p>Ainsi, son utilisation est simple :</p>

<figure><pre><code data-lang="rust">    <span>let</span> <span>mut</span> <span>notifier</span> <span>=</span> <span>Notifier</span><span>::</span><span>new</span><span>();</span>
    <span>notifier</span><span>.register</span><span>(|</span><span>event</span><span>|</span> <span>println!</span><span>(</span><span>"received [{}]"</span><span>,</span> <span>event</span><span>));</span>
    <span>println!</span><span>(</span><span>"notifying..."</span><span>);</span>
    <span>notifier</span><span>.notify</span><span>(</span><span>42</span><span>);</span></code></pre></figure><p>Cela affiche :</p>

<div><pre><code>notifying...
received [42]
</code></pre></div>

<p>Jusqu’ici, tout va bien.</p>

<p>Cependant, les choses se compliquent si nous voulons modifier un état sur la
réception d’un événement. Par exemple, implémentons une structure pour stocker
tous les événements reçus :</p>

<figure><pre><code data-lang="rust"><span>pub</span> <span>struct</span> <span>Storage</span> <span>{</span>
    <span>events</span><span>:</span> <span>Vec</span><span><</span><span>u32</span><span>></span><span>,</span>
<span>}</span>

<span>impl</span> <span>Storage</span> <span>{</span>
    <span>pub</span> <span>fn</span> <span>new</span><span>()</span> <span>-></span> <span>Self</span> <span>{</span>
        <span>Self</span> <span>{</span> <span>events</span><span>:</span> <span>Vec</span><span>::</span><span>new</span><span>()</span> <span>}</span>
    <span>}</span>

    <span>pub</span> <span>fn</span> <span>store</span><span>(</span><span>&amp;</span><span>mut</span> <span>self</span><span>,</span> <span>value</span><span>:</span> <span>u32</span><span>)</span> <span>{</span>
        <span>self</span><span>.events</span><span>.push</span><span>(</span><span>value</span><span>);</span>
    <span>}</span>

    <span>pub</span> <span>fn</span> <span>events</span><span>(</span><span>&amp;</span><span>self</span><span>)</span> <span>-></span> <span>&amp;</span><span>Vec</span><span><</span><span>u32</span><span>></span> <span>{</span>
        <span>&amp;</span><span>self</span><span>.events</span>
    <span>}</span>
<span>}</span></code></pre></figure><p>Pour pouvoir remplir ce <code>Storage</code> sur chaque événement reçu, nous devons d’une
manière ou d’une autre le passer avec l’<em>event listener</em>, qui sera stocké dans
le <code>Notifier</code>. Par conséquent, nous avons besoin qu’une instance de <code>Storage</code>
soit <strong>partagée</strong> entre le code appelant et le <code>Notifier</code>.</p>

<p>Avoir deux références mutables vers le même objet enfreint évidemment les règles
d’emprunt, donc nous avons besoin d’un <a href="https://doc.rust-lang.org/std/rc/">pointeur à compteur de références</a>.</p>

<p>Cependant, un tel pointeur est en lecture seul, donc nous avons également besoin
d’un <a href="https://doc.rust-lang.org/std/cell/index.html"><code>RefCell</code></a> pour la <a href="https://ricardomartins.cc/2016/06/08/interior-mutability"><em>mutabilité intérieure</em></a>.</p>

<p>Ainsi, nous allons utiliser une instance de <code>Rc<RefCell<Storage>></code>. Cela peut
sembler trop verbeux, mais utiliser <code>Rc<RefCell<T>></code> (ou <code>Arc<Mutex<T>></code> pour
la <em>thread-safety</em>) est très courant en Rust. Et <a href="https://www.reddit.com/r/rust/comments/33jv62/vecrcrefcellboxtrait_is_there_a_better_way/">il y a pire</a>.</p>

<p>Voici ce que donne le code client :</p>

<figure><pre><code data-lang="rust">    <span>use</span> <span>std</span><span>::</span><span>cell</span><span>::</span><span>RefCell</span><span>;</span>
    <span>use</span> <span>std</span><span>::</span><span>rc</span><span>::</span><span>Rc</span><span>;</span>

    <span>let</span> <span>mut</span> <span>notifier</span> <span>=</span> <span>Notifier</span><span>::</span><span>new</span><span>();</span>

    <span>// first Rc to the Storage</span>
    <span>let</span> <span>rc</span> <span>=</span> <span>Rc</span><span>::</span><span>new</span><span>(</span><span>RefCell</span><span>::</span><span>new</span><span>(</span><span>Storage</span><span>::</span><span>new</span><span>()));</span>

    <span>// second Rc to the Storage</span>
    <span>let</span> <span>rc2</span> <span>=</span> <span>rc</span><span>.clone</span><span>();</span>

    <span>// register the listener saving all the received events to the Storage</span>
    <span>notifier</span><span>.register</span><span>(</span><span>move</span> <span>|</span><span>event</span><span>|</span> <span>rc2</span><span>.borrow_mut</span><span>()</span><span>.store</span><span>(</span><span>event</span><span>));</span>

    <span>notifier</span><span>.notify</span><span>(</span><span>3</span><span>);</span>
    <span>notifier</span><span>.notify</span><span>(</span><span>141</span><span>);</span>
    <span>notifier</span><span>.notify</span><span>(</span><span>59</span><span>);</span>
    <span>assert_eq!</span><span>(</span><span>&amp;</span><span>vec!</span><span>[</span><span>3</span><span>,</span> <span>141</span><span>,</span> <span>59</span><span>],</span> <span>rc</span><span>.borrow</span><span>()</span><span>.events</span><span>());</span></code></pre></figure><p>De cette manière, le <code>Storage</code> est correctement modifié à partir de l’<em>event
listener</em>.</p>

<p>Tout n’est pas résolu pour autant. Dans cet exemple, c’était facile, nous avions
accès à l’instance <code>Rc<RefCell<Storage>></code>. Comment faire si nous avons seulement
accès au <code>Storage</code>, par exemple si nous voulons que le <code>Storage</code> s’enregistre
lui-même à partir de l’une de ses méthodes, sans que l’appelant n’ait à fournir
l’instance <code>Rc<RefCell<Storage>></code> ?</p>

<figure><pre><code data-lang="rust"><span>impl</span> <span>Storage</span> <span>{</span>
    <span>pub</span> <span>fn</span> <span>register_to</span><span>(</span><span>&amp;</span><span>self</span><span>,</span> <span>notifier</span><span>:</span> <span>&amp;</span><span>mut</span> <span>Notifier</span><span>)</span> <span>{</span>
        <span>notifier</span><span>.register</span><span>(</span><span>move</span> <span>|</span><span>event</span><span>|</span> <span>{</span>
            <span>/* how to retrieve a &amp;mut Storage from here? */</span>
        <span>});</span>
    <span>}</span>
<span>}</span></code></pre></figure><p>Nous devons trouver un moyen de récupérer le <code>Rc<RefCell<Storage>></code> à partir du
<code>Storage</code>.</p>

<p>Pour cela, l’idée consiste à rendre <code>Storage</code> conscient de son pointeur à
compteur de références. <em>Bien sûr, cela n’a du sens que si <code>Storage</code> est
construit dans un <code>Rc<RefCell<Storage>></code>.</em></p>

<p>C’est exactement ce que <a href="http://en.cppreference.com/w/cpp/memory/enable_shared_from_this"><code>enable_shared_from_this</code></a> fournit en C++, donc nous
pouvons nous inspirer de <a href="https://stackoverflow.com/a/34062114/1987178">son fonctionnement</a> : juste
stocker un <code>Weak<RefCell<…>></code>, <a href="https://doc.rust-lang.org/std/rc/struct.Rc.html#method.downgrade"><em>downgradé</em></a> à partir du
<code>Rc<RefCell<…>></code>, dans la structure elle-même. De cette manière, nous pouvons
l’utiliser pour récupérer une référence <code>&amp;mut Storage</code> à partir de l’<em>event
listener</em> :</p>

<figure><pre><code data-lang="rust"><span>use</span> <span>std</span><span>::</span><span>rc</span><span>::{</span><span>Rc</span><span>,</span> <span>Weak</span><span>};</span>
<span>use</span> <span>std</span><span>::</span><span>cell</span><span>::</span><span>RefCell</span><span>;</span>

<span>pub</span> <span>struct</span> <span>Storage</span> <span>{</span>
    <span>self_weak</span><span>:</span> <span>Weak</span><span><</span><span>RefCell</span><span><</span><span>Storage</span><span>>></span><span>,</span>
    <span>events</span><span>:</span> <span>Vec</span><span><</span><span>u32</span><span>></span><span>,</span>
<span>}</span>

<span>impl</span> <span>Storage</span> <span>{</span>
    <span>pub</span> <span>fn</span> <span>new</span><span>()</span> <span>-></span> <span>Rc</span><span><</span><span>RefCell</span><span><</span><span>Self</span><span>>></span> <span>{</span>
        <span>let</span> <span>rc</span> <span>=</span> <span>Rc</span><span>::</span><span>new</span><span>(</span><span>RefCell</span><span>::</span><span>new</span><span>(</span><span>Self</span> <span>{</span>
            <span>self_weak</span><span>:</span> <span>Weak</span><span>::</span><span>new</span><span>(),</span> <span>// initialize empty</span>
            <span>events</span><span>:</span> <span>Vec</span><span>::</span><span>new</span><span>(),</span>
        <span>}));</span>
        <span>// set self_weak once we get the Rc instance</span>
        <span>rc</span><span>.borrow_mut</span><span>()</span><span>.self_weak</span> <span>=</span> <span>Rc</span><span>::</span><span>downgrade</span><span>(</span><span>&amp;</span><span>rc</span><span>);</span>
        <span>rc</span>
    <span>}</span>

    <span>pub</span> <span>fn</span> <span>register_to</span><span>(</span><span>&amp;</span><span>self</span><span>,</span> <span>notifier</span><span>:</span> <span>&amp;</span><span>mut</span> <span>Notifier</span><span>)</span> <span>{</span>
        <span>let</span> <span>rc</span> <span>=</span> <span>self</span><span>.self_weak</span><span>.upgrade</span><span>()</span><span>.unwrap</span><span>();</span>
        <span>notifier</span><span>.register</span><span>(</span><span>move</span> <span>|</span><span>event</span><span>|</span> <span>rc</span><span>.borrow_mut</span><span>()</span><span>.store</span><span>(</span><span>event</span><span>))</span>
    <span>}</span>
<span>}</span></code></pre></figure><p>Voici comment l’utiliser :</p>

<figure><pre><code data-lang="rust">    <span>let</span> <span>mut</span> <span>notifier</span> <span>=</span> <span>Notifier</span><span>::</span><span>new</span><span>();</span>
    <span>let</span> <span>rc</span> <span>=</span> <span>Storage</span><span>::</span><span>new</span><span>();</span>
    <span>rc</span><span>.borrow</span><span>()</span><span>.register_to</span><span>(</span><span>&amp;</span><span>mut</span> <span>notifier</span><span>);</span>
    <span>notifier</span><span>.notify</span><span>(</span><span>3</span><span>);</span>
    <span>notifier</span><span>.notify</span><span>(</span><span>141</span><span>);</span>
    <span>notifier</span><span>.notify</span><span>(</span><span>59</span><span>);</span>
    <span>assert_eq!</span><span>(</span><span>&amp;</span><span>vec!</span><span>[</span><span>3</span><span>,</span> <span>141</span><span>,</span> <span>59</span><span>],</span> <span>rc</span><span>.borrow</span><span>()</span><span>.events</span><span>());</span></code></pre></figure><p>Il est donc possible d’implémenter le design pattern <em>observateur</em> en Rust, mais
c’est un peu plus difficile qu’en Java ;-)</p>

<p>Lorsque c’est possible, il est probablement préférable de l’éviter.</p>

<h3>Partage de données mutables</h3>

<blockquote>
  <p>Mutable references cannot be <a href="https://doc.rust-lang.org/nomicon/references.html">aliased</a>.</p>
</blockquote>

<p>En français :</p>

<blockquote>
  <p>Les références mutables ne peuvent pas être <a href="https://doc.rust-lang.org/nomicon/references.html">aliasées</a>.</p>
</blockquote>

<p>Comment partager des données mutables, alors ?</p>

<p>Nous avons vu que nous pouvions utiliser <code>Rc<RefCell<…>></code> (ou <code>Arc<Mutex<…>></code>),
qui impose les règles d’emprunt à l’exécution. Cependant, ce n’est pas toujours
désirable :</p>
<ul><li>cela force une nouvelle allocation sur le tas,</li>
  <li>chaque accès a un coût à l’exécution,</li>
  <li>l’emprunt concerne toujours la ressource entière.</li>
</ul><p>Au lieu de cela, nous pourrions utiliser des pointeurs <em>bruts</em> manuellement dans
du code <a href="https://doc.rust-lang.org/book/first-edition/unsafe.html">non-sûr</a>, mais alors ce serait <em>non-sûr</em>.</p>

<p>Et il y a une autre solution, qui consiste à exposer des <strong>vues temporaires
d’emprunt</strong> d’un objet. Laissez-moi expliquer.</p>

<p>Dans <em>Gnirehtet</em>, un paquet contient une référence vers les données brutes
(stockées dans un buffer quelque part) ainsi que les valeur des champs des
en-têtes <a href="https://en.wikipedia.org/wiki/IPv4#Packet_structure">IP</a> et <a href="https://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structure">TCP</a>/<a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol#Packet_structure">UDP</a> (parsées à partir du tableau d’octets brut). Nous
aurions pu utiliser une structure à plat pour tout stocker :</p>

<figure><pre><code data-lang="rust"><span>pub</span> <span>struct</span> <span>Packet</span><span><</span><span>'</span><span>a</span><span>></span> <span>{</span>
    <span>raw</span><span>:</span> <span>&amp;</span><span>'</span><span>a</span> <span>mut</span> <span>[</span><span>u8</span><span>],</span>
    <span>ipv4_source</span><span>:</span> <span>u32</span><span>,</span>
    <span>ipv4_destination</span><span>:</span> <span>u32</span><span>,</span>
    <span>ipv4_protocol</span><span>:</span> <span>u8</span><span>,</span>
    <span>// + other ipv4 fields</span>
    <span>transport_source</span><span>:</span> <span>u16</span><span>,</span>
    <span>transport_destination</span><span>:</span> <span>u16</span><span>,</span>
    <span>// + other transport fields</span>
<span>}</span></code></pre></figure><p>Le <code>Packet</code> aurait fourni des <em>setters</em> pour tous les champs d’en-têtes
(modifiant à la fois les champs du paquet et le tableau d’octets). Par exemple :</p>

<figure><pre><code data-lang="rust"><span>impl</span><span><</span><span>'</span><span>a</span><span>></span> <span>Packet</span><span><</span><span>'</span><span>a</span><span>></span> <span>{</span>
    <span>pub</span> <span>fn</span> <span>set_transport_source</span><span>(</span><span>&amp;</span><span>mut</span> <span>self</span><span>,</span> <span>transport_source</span><span>:</span> <span>u16</span><span>)</span> <span>{</span>
        <span>self</span><span>.transport_source</span> <span>=</span> <span>transport_source</span><span>;</span>
        <span>let</span> <span>transport</span> <span>=</span> <span>&amp;</span><span>mut</span> <span>self</span><span>.raw</span><span>[</span><span>20</span><span>..</span><span>];</span>
        <span>BigEndian</span><span>::</span><span>write_u16</span><span>(</span><span>&amp;</span><span>mut</span> <span>transport</span><span>[</span><span>0</span><span>..</span><span>2</span><span>],</span> <span>port</span><span>);</span>
    <span>}</span>
<span>}</span></code></pre></figure><p>Mais cette conception ne serait pas terrible (surtout que les champs d’en-têtes
TCP et UDP sont différents).</p>

<p>À la place, nous voudrions extraire les en-têtes d’IP et de transport vers des
structures séparées, gérant leur propre partie du tableau d’octets :</p>

<figure><pre><code data-lang="rust"><span>// violates the borrowing rules</span>

<span>pub</span> <span>struct</span> <span>Packet</span><span><</span><span>'</span><span>a</span><span>></span> <span>{</span>
    <span>raw</span><span>:</span> <span>&amp;</span><span>'</span><span>a</span> <span>mut</span> <span>[</span><span>u8</span><span>],</span> <span>// the whole packet (including headers)</span>
    <span>ipv4_header</span><span>:</span> <span>Ipv4Header</span><span><</span><span>'</span><span>a</span><span>></span><span>,</span>
    <span>transport_header</span><span>:</span> <span>TransportHeader</span><span><</span><span>'</span><span>a</span><span>></span><span>,</span>
<span>}</span>

<span>pub</span> <span>struct</span> <span>Ipv4Header</span><span><</span><span>'</span><span>a</span><span>></span> <span>{</span>
    <span>raw</span><span>:</span> <span>&amp;</span><span>'</span><span>a</span> <span>mut</span> <span>[</span><span>u8</span><span>],</span> <span>// slice related to ipv4 headers</span>
    <span>source</span><span>:</span> <span>u32</span><span>,</span>
    <span>destination</span><span>:</span> <span>u32</span><span>,</span>
    <span>protocol</span><span>:</span> <span>u8</span><span>,</span>
    <span>// + other ipv4 fields</span>
<span>}</span>

<span>pub</span> <span>struct</span> <span>TransportHeader</span><span><</span><span>'</span><span>a</span><span>></span> <span>{</span>
    <span>raw</span><span>:</span> <span>&amp;</span><span>'</span><span>a</span> <span>mut</span> <span>[</span><span>u8</span><span>],</span> <span>// slice related to transport headers</span>
    <span>source</span><span>:</span> <span>u16</span><span>,</span>
    <span>destination</span><span>:</span> <span>u16</span><span>,</span>
    <span>// + other transport fields</span>
<span>}</span></code></pre></figure><p>Vous avez immédiatement repéré le problème : <strong>il y a plusieurs références vers
la même ressource, le tableau d’octets <code>raw</code>, en même temps</strong>.</p>

<p><em>Remarquez que <a href="https://doc.rust-lang.org/std/primitive.slice.html#method.split_at_mut">diviser</a> le tableau n’est pas une possibilité ici, vu
que les slices de <code>raw</code> se chevauchent : nous avons besoin d’écrire le paquet
complet en une seule fois vers la couche réseau, donc le tableau <code>raw</code> dans
<code>Packet</code> doit inclure les headers.</em></p>

<p>Nous avons besoin d’une solution compatible avec les règles d’emprunt.</p>

<p>Voici celle à laquelle je suis parvenu :</p>
<ul><li>stocker les données des en-têtes séparément, sans les <em>slices</em> de <code>raw</code>,</li>
  <li>créer des structures de <em>vues</em> pour les en-têtes d’IP et de transport, liées
à une <a href="https://doc.rust-lang.org/book/first-edition/lifetimes.html#in-structs">durée de vie</a>,</li>
  <li>exposer des méthodes de <code>Packet</code> retournant des instances de <em>vues</em>.</li>
</ul><p>Et voici une simplification de l’implémentation réelle :</p>

<figure><pre><code data-lang="rust"><span>pub</span> <span>struct</span> <span>Packet</span><span><</span><span>'</span><span>a</span><span>></span> <span>{</span>
    <span>raw</span><span>:</span> <span>&amp;</span><span>'</span><span>a</span> <span>mut</span> <span>[</span><span>u8</span><span>],</span>
    <span>ipv4_header</span><span>:</span> <span>Ipv4HeaderData</span><span>,</span>
    <span>transport_header</span><span>:</span> <span>TransportHeaderData</span><span>,</span>
<span>}</span>

<span>pub</span> <span>struct</span> <span>Ipv4HeaderData</span> <span>{</span>
    <span>source</span><span>:</span> <span>u32</span><span>,</span>
    <span>destination</span><span>:</span> <span>u32</span><span>,</span>
    <span>protocol</span><span>:</span> <span>u8</span><span>,</span>
    <span>// + other ipv4 fields</span>
<span>}</span>

<span>pub</span> <span>struct</span> <span>TransportHeaderData</span> <span>{</span>
    <span>source</span><span>:</span> <span>u16</span><span>,</span>
    <span>destination</span><span>:</span> <span>u16</span><span>,</span>
    <span>// + other transport fields</span>
<span>}</span>

<span>pub</span> <span>struct</span> <span>Ipv4Header</span><span><</span><span>'</span><span>a</span><span>></span> <span>{</span>
    <span>raw</span><span>:</span> <span>&amp;</span><span>'</span><span>a</span> <span>mut</span> <span>[</span><span>u8</span><span>],</span>
    <span>data</span><span>:</span> <span>&amp;</span><span>'</span><span>a</span> <span>mut</span> <span>Ipv4HeaderData</span><span>,</span>
<span>}</span>

<span>pub</span> <span>struct</span> <span>TransportHeader</span><span><</span><span>'</span><span>a</span><span>></span> <span>{</span>
    <span>raw</span><span>:</span> <span>&amp;</span><span>'</span><span>a</span> <span>mut</span> <span>[</span><span>u8</span><span>],</span>
    <span>data</span><span>:</span> <span>&amp;</span><span>'</span><span>a</span> <span>mut</span> <span>TransportHeaderData</span><span>,</span>
<span>}</span>

<span>impl</span><span><</span><span>'</span><span>a</span><span>></span> <span>Packet</span><span><</span><span>'</span><span>a</span><span>></span> <span>{</span>
    <span>pub</span> <span>fn</span> <span>ipv4_header</span><span>(</span><span>&amp;</span><span>mut</span> <span>self</span><span>)</span> <span>-></span> <span>Ipv4Header</span> <span>{</span>
        <span>Ipv4Header</span> <span>{</span>
            <span>raw</span><span>:</span> <span>&amp;</span><span>mut</span> <span>self</span><span>.raw</span><span>[</span><span>..</span><span>20</span><span>],</span>
            <span>data</span><span>:</span> <span>&amp;</span><span>mut</span> <span>self</span><span>.ipv4_header</span><span>,</span>
        <span>}</span>
    <span>}</span>

    <span>pub</span> <span>fn</span> <span>transport_header</span><span>(</span><span>&amp;</span><span>mut</span> <span>self</span><span>)</span> <span>-></span> <span>TransportHeader</span> <span>{</span>
        <span>TransportHeader</span> <span>{</span>
            <span>raw</span><span>:</span> <span>&amp;</span><span>mut</span> <span>self</span><span>.raw</span><span>[</span><span>20</span><span>..</span><span>40</span><span>],</span>
            <span>data</span><span>:</span> <span>&amp;</span><span>mut</span> <span>self</span><span>.transport_header</span><span>,</span>
        <span>}</span>
    <span>}</span>
<span>}</span></code></pre></figure><p>Les <em>setters</em> sont implémentés sur les vues, où ils détiennent une référence
mutable vers le tableau brut :</p>

<figure><pre><code data-lang="rust"><span>impl</span><span><</span><span>'</span><span>a</span><span>></span> <span>TransportHeader</span><span><</span><span>'</span><span>a</span><span>></span> <span>{</span>
    <span>pub</span> <span>fn</span> <span>set_source</span><span>(</span><span>&amp;</span><span>mut</span> <span>self</span><span>,</span> <span>source</span><span>:</span> <span>u16</span><span>)</span> <span>{</span>
        <span>self</span><span>.data.source</span> <span>=</span> <span>source</span><span>;</span>
        <span>BigEndian</span><span>::</span><span>write_u16</span><span>(</span><span>&amp;</span><span>mut</span> <span>raw</span><span>[</span><span>0</span><span>..</span><span>2</span><span>],</span> <span>source</span><span>);</span>
    <span>}</span>

    <span>pub</span> <span>fn</span> <span>set_destination</span><span>(</span><span>&amp;</span><span>mut</span> <span>self</span><span>,</span> <span>destination</span><span>:</span> <span>u16</span><span>)</span> <span>{</span>
        <span>self</span><span>.data.destination</span> <span>=</span> <span>destination</span><span>;</span>
        <span>BigEndian</span><span>::</span><span>write_u16</span><span>(</span><span>&amp;</span><span>mut</span> <span>raw</span><span>[</span><span>2</span><span>..</span><span>4</span><span>],</span> <span>destination</span><span>);</span>
    <span>}</span>
<span>}</span></code></pre></figure><p>De cette manière, les règles d’emprunt sont respectées, et l’API est élégante :</p>

<figure><pre><code data-lang="rust">    <span>let</span> <span>mut</span> <span>packet</span> <span>=</span> <span>…</span><span>;</span>
    <span>// "transport_header" borrows "packet" during its scope</span>
    <span>let</span> <span>mut</span> <span>transport_header</span> <span>=</span> <span>packet</span><span>.transport_header</span><span>();</span>
    <span>transport_header</span><span>.set_source</span><span>(</span><span>1234</span><span>);</span>
    <span>transport_header</span><span>.set_destination</span><span>(</span><span>1234</span><span>);</span></code></pre></figure><h3>Limitations du compilateur</h3>

<p>Rust est un langage jeune, et le compilateur a quelques problèmes ennuyeux.</p>

<p>Le pire, d’après moi, est lié aux <a href="http://smallcultfollowing.com/babysteps/blog/2016/04/27/non-lexical-lifetimes-introduction/#problem-case-2-conditional-control-flow">durées de vie non-lexicales</a>, qui provoque des <a href="https://stackoverflow.com/questions/44417491/non-lexical-lifetime-workaround-failure">erreurs inattendues</a> :</p>

<figure><pre><code data-lang="rust"><span>struct</span> <span>Container</span> <span>{</span>
    <span>vec</span><span>:</span> <span>Vec</span><span><</span><span>i32</span><span>></span><span>,</span>
<span>}</span>

<span>impl</span> <span>Container</span> <span>{</span>
    <span>fn</span> <span>find</span><span>(</span><span>&amp;</span><span>mut</span> <span>self</span><span>,</span> <span>v</span><span>:</span> <span>i32</span><span>)</span> <span>-></span> <span>Option</span><span><&amp;</span><span>mut</span> <span>i32</span><span>></span> <span>{</span>
        <span>None</span> <span>// we don't care the implementation</span>
    <span>}</span>

    <span>fn</span> <span>get</span><span>(</span><span>&amp;</span><span>mut</span> <span>self</span><span>,</span> <span>v</span><span>:</span> <span>i32</span><span>)</span> <span>-></span> <span>&amp;</span><span>mut</span> <span>i32</span> <span>{</span>
        <span>if</span> <span>let</span> <span>Some</span><span>(</span><span>x</span><span>)</span> <span>=</span> <span>self</span><span>.find</span><span>(</span><span>v</span><span>)</span> <span>{</span>
            <span>return</span> <span>x</span><span>;</span>
        <span>}</span>
        <span>self</span><span>.vec</span><span>.push</span><span>(</span><span>v</span><span>);</span>
        <span>self</span><span>.vec</span><span>.last_mut</span><span>()</span><span>.unwrap</span><span>()</span>
    <span>}</span>
<span>}</span></code></pre></figure><div><pre><code>error[E0499]: cannot borrow `self.vec` as mutable more than once at a time
  --> sample.rs:14:9
   |
11 |         if let Some(x) = self.find(v) {
   |                          ---- first mutable borrow occurs here
...
14 |         self.vec.push(v);
   |         ^^^^^^^^ second mutable borrow occurs here
15 |         self.vec.last_mut().unwrap()
16 |     }
   |     - first borrow ends here
</code></pre></div>

<p>Heureusement, <a href="http://smallcultfollowing.com/babysteps/blog/2017/07/11/non-lexical-lifetimes-draft-rfc-and-prototype-available/">cela devrait être corrigé prochainement</a>.</p>

<p>La fonctionnalité d’<a href="https://github.com/rust-lang/rfcs/blob/master/text/1522-conservative-impl-trait.md"><em>Impl Trait</em></a>, permettant aux fonctions de
retourner des types abstraits <em>non-boxés</em>, devrait aussi améliorer l’expérience
(il y a aussi une proposition <a href="https://github.com/rust-lang/rfcs/blob/master/text/1951-expand-impl-trait.md">étendue</a>).</p>

<p>Le compilateur produit généralement des messages d’erreur très utiles. Mais
quand ce n’est pas le cas, ils peuvent être très <a href="https://stackoverflow.com/questions/44003622/implementing-trait-for-fnsomething-in-rust">déroutants</a>.</p>

<h2>Sûreté et pièges</h2>

<p>Le <a href="https://doc.rust-lang.org/nomicon/meet-safe-and-unsafe.html">premier chapitre du <em>Rustonomicon</em></a> dit :</p>

<blockquote>
  <p>Safe Rust is For Reals Totally Safe.</p>

  <p>[…]</p>

  <p>Safe Rust is the true Rust programming language. If all you do is write Safe
Rust, you will never have to worry about type-safety or memory-safety. You
will never endure a null or dangling pointer, or any of that Undefined
Behavior nonsense.</p>
</blockquote>

<p>En français :</p>

<blockquote>
  <p>La partie Sûre de Rust est Réellement Totallement Sûre.</p>

  <p>[…]</p>

  <p>Le Rust Sûr est le vrai langage de programmation Rust. Si vous n’écrivez que
du Rust Sûr, vous n’aurez jamais à vous inquiétez de la sûreté des types ou de
la mémoire. Vous n’aurez jamais à supporter un pointeur null ou <a href="https://fr.wikipedia.org/wiki/Dangling_pointer"><em>dangling</em></a>,
ou l’un de ces <a href="https://blog.rom1v.com/2014/10/comportement-indefini-et-optimisation/"><em>comportements indéfinis</em></a> insensés.</p>
</blockquote>

<p>C’est le but. Et c’est <em>presque</em> vrai.</p>

<h3>Leakpocalypse</h3>

<p>Dans le passé, il a été <a href="https://github.com/rust-lang/rust/issues/24292">possible</a> d’écrire du code <em>Rust sûr</em>
<strong>accédant à de la mémoire libérée</strong>.</p>

<p>Cette “<a href="http://cglab.ca/~abeinges/blah/everyone-poops/">leakpocalypse</a>” a conduit à la <a href="https://github.com/alexcrichton/rfcs/blob/safe-mem-forget/text/0000-safe-mem-forget.md">clarification</a> des guaranties
de sûreté : ne pas exécuter un destructeur est maintenant <a href="https://github.com/rust-lang/rfcs/pull/1066">considéré
<em>sûr</em></a>. En d’autres termes, <strong>la sûreté mémoire ne peut plus
reposer sur <a href="https://en.wikipedia.org/wiki/Resource_acquisition_is_initialization">RAII</a></strong> (en fait, elle n’a jamais pu, mais cela n’a été remarqué
que tardivement).</p>

<p>En conséquence, <a href="https://doc.rust-lang.org/std/mem/fn.forget.html"><code>std::mem::forget</code></a> est maintenant <em>sûr</em>, et <a href="https://doc.rust-lang.org/1.0.0/std/thread/struct.JoinGuard.html"><code>JoinGuard</code></a> a
été déprécié et supprimé de la bibliothèque standard (il a été déplacé vers un
<a href="http://arcnmx.github.io/thread-scoped-rs/thread_scoped/">crate séparé</a>).</p>

<p>Les autres outils s’appuyant sur RAII (comme <a href="https://doc.rust-lang.org/std/vec/struct.Vec.html#method.drain"><code>Vec::drain()</code></a>) doivent prendre
des <a href="https://github.com/rust-lang/rust/blob/1.20.0/src/liballoc/vec.rs#L1094-L1102">précautions particulières</a> pour garantir que la mémoire
ne sera pas corrompue.</p>

<p>Ouf, la <em>sûreté mémoire</em> est (maintenant) sauvée.</p>

<h3>Infinité indéfinie</h3>

<p>En C et C++, les <a href="https://stackoverflow.com/questions/3592557/optimizing-away-a-while1-in-c0x">boucles infinies</a> sans effets de bords sont un cas
d’<a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1528.htm"><em>undefined behavior</em></a>. À cause de cela, il est possible d’écrire des
programmes qui, de façon inattendue, <a href="https://blog.regehr.org/archives/140">réfutent le dernier théorème de
Fermat</a>.</p>

<p>En pratique, le compilateur Rust s’appuie sur LLVM, qui (actuellement) applique
ses optimisations en faisant l’hypothèse que les boucles infinies sans effets de
bords ont un <em>comportement indéfini</em>. En conséquence, de tels <em>undefined
behaviors</em> se produisent également en Rust.</p>

<p>Voici un exemple minimal pour l’observer :</p>

<figure><pre><code data-lang="rust"><span>fn</span> <span>infinite</span><span>()</span> <span>{</span>
    <span>loop</span> <span>{}</span>
<span>}</span>

<span>fn</span> <span>main</span><span>()</span> <span>{</span>
    <span>infinite</span><span>();</span>
<span>}</span></code></pre></figure><p>Quand on l’exécute sans optimisations, il se comporte comme “attendu” :</p>

<div><pre><code>$ rustc ub.rs &amp;&amp; ./ub
^C                    (infinite loop, interrupt it)
</code></pre></div>

<p>Mais activer les optimisations fait <em>paniquer</em> le programme :</p>

<div><pre><code>$ rustc -O ub.rs &amp;&amp; ./ub
thread 'main' panicked at 'assertion failed: c.borrow().is_none()', /checkout/src/libstd/sys_common/thread_info.rs:51
note: Run with `RUST_BACKTRACE=1` for a backtrace.
</code></pre></div>

<p>Nous pouvons aussi produire des résultats inattendus sans plantage :</p>

<figure><pre><code data-lang="rust"><span>fn</span> <span>infinite</span><span>(</span><span>mut</span> <span>value</span><span>:</span> <span>u32</span><span>)</span> <span>{</span>
    <span>// infinite loop unless value initially equals 0</span>
    <span>while</span> <span>value</span> <span>!=</span> <span>0</span> <span>{</span>
        <span>if</span> <span>value</span> <span>!=</span> <span>1</span> <span>{</span>
            <span>value</span> <span>-=</span> <span>1</span><span>;</span>
        <span>}</span>
    <span>}</span>
<span>}</span>

<span>fn</span> <span>main</span><span>()</span> <span>{</span>
    <span>infinite</span><span>(</span><span>42</span><span>);</span>
    <span>println!</span><span>(</span><span>"end"</span><span>);</span>
<span>}</span></code></pre></figure><div><pre><code>$ rustc ub.rs &amp;&amp; ./ub
^C                    (infinite loop, interrupt it)
</code></pre></div>

<p>Mais avec optimisations :</p>

<div><pre><code>$ rustc -O ub.rs &amp;&amp; ./ub
end
</code></pre></div>

<p>C’est un cas particulier, qui sera probablement corrigé dans le futur. En
pratique, <strong>les garanties de sûreté de Rust sont très fortes</strong> (au prix d’être
contraignantes).</p>

<h2>Stats</h2>

<p>C’est tout pour mes retours sur le langage lui-même.</p>

<p>En supplément, comparons les versions <em>Java</em> et <em>Rust</em> du serveur relais.</p>

<h3>Nombre de lignes</h3>

<div><pre><code>$ cloc relay-{java,rust}/src
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Rust                            29            687            655           4506
Java                            37            726            701           2931
-------------------------------------------------------------------------------
</code></pre></div>

<p><em>(tests included)</em></p>

<p>Le projet Rust est significativement plus gros, pour plusieurs raisons :</p>
<ul><li>il y a beaucoup de classes de <a href="https://blog.rom1v.com/#partage-de-donnes-mutables"><em>vues d’emprunt</em></a> ;</li>
  <li>la version Rust définit sa propre classe de <em>selecteur</em> d’I/O asynchrone,
encapsulant <a href="https://docs.rs/mio/0.6.10/mio/struct.Poll.html"><code>Poll</code></a> de plus bas niveau, alors que la version Java
utilise le <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/channels/Selector.html"><code>Selector</code></a> standard ;</li>
  <li>la <a href="https://doc.rust-lang.org/book/first-edition/error-handling.html">gestion d’erreur</a> pour l’analyse de la ligne de commande
est plus verbeuse.</li>
</ul><p>La version Java contient plus de fichiers car les tests unitaires sont séparés,
alors qu’en Rust ils se trouvent dans le même fichier que les classes qu’ils
testent.</p>

<p>Juste pour information, voici les résultats pour le client Android :</p>

<div><pre><code>$ cloc app/src
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Java                            15            198            321            875
XML                              6              7              2             76
-------------------------------------------------------------------------------
SUM:                            21            205            323            951
-------------------------------------------------------------------------------
</code></pre></div>

<h3>Taille des binaires</h3>

<div><pre><code>--------------------------------------------
Java     gnirehtet.jar                   61K
--------------------------------------------
Rust     gnirehtet                      3.0M
         after "strip -g gnirehtet"     747K
         after "strip gnirehtet"        588K
--------------------------------------------
</code></pre></div>

<p>Le binaire Java lui-même est bien plus petit. La comparaison n’est pas juste
cependant, vu qu’il nécessite l’<em>environnement d’exécution Java</em> :</p>

<div><pre><code>$ du -sh /usr/lib/jvm/java-1.8.0-openjdk-amd64/
156M	/usr/lib/jvm/java-1.8.0-openjdk-amd64/
</code></pre></div>

<h3>Utilisation mémoire</h3>

<p>Avec une seule connection TCP ouvert, voici la consommation mémoire pour le
serveur relais en Java :</p>

<div><pre><code>$ sudo pmap -x $RELAY_JAVA_PID
                  Kbytes     RSS   Dirty
total kB         4364052   86148   69316
</code></pre></div>

<p><em>(résultat filtré)</em></p>

<p>Et pour le serveur relais en Rust :</p>

<div><pre><code>$ sudo pmap -x $RELAY_RUST_PID
                  Kbytes     RSS   Dirty
total kB           19272    2736     640
</code></pre></div>

<p><em>Regardez la valeur <a href="https://en.wikipedia.org/wiki/Resident_set_size">RSS</a>, qui indique la mémoire réellement utilisée.</em></p>

<p>Comment on pouvait s’y attendre, la version Java consomme plus de mémoire
(86Mo) que la version Rust (moins de 3Mo). De plus, sa valeur est instable à
cause de l’allocation de petits objets et leur <a href="https://en.wikipedia.org/wiki/Garbage_collection_(computer_science)"><em>garbage collection</em></a>, qui
génère aussi davantage de <em>dirty pages</em>. La valeur pour Rust, quant à elle, est
très stable : une fois la connection créée, il n’y a plus d’allocations mémoire
<em>du tout</em>.</p>

<h3>Utilisation CPU</h3>

<p>Pour comparer l’utilisation CPU, voici mon scénario : un fichier de 500Mo est
hébergé par Apache sur mon ordinateur, je démarre le serveur relais avec <code>perf
stat</code>, puis je télécharge le fichier à partir de Firefox sur Android. Dès que le
fichier est téléchargé, je stoppe le serveur relais (Ctrl+C).</p>

<p>Voici les résultats pour la version Java :</p>

<div><pre><code>$ perf stat -B java -jar gnirehtet.jar relay
 Performance counter stats for 'java -jar gnirehtet.jar relay':

      11805,458302      task-clock:u (msec)       #    0,088 CPUs utilized
                 0      context-switches:u        #    0,000 K/sec
                 0      cpu-migrations:u          #    0,000 K/sec
            28 618      page-faults:u             #    0,002 M/sec
    17 908 360 446      cycles:u                  #    1,517 GHz
    13 944 172 792      stalled-cycles-frontend:u #   77,86% frontend cycles idle
    18 437 279 663      instructions:u            #    1,03  insn per cycle
                                                  #    0,76  stalled cycles per insn
     3 088 215 431      branches:u                #  261,592 M/sec
        70 647 760      branch-misses:u           #    2,29% of all branches

     133,975117164 seconds time elapsed
</code></pre></div>

<p>Et pour la version Rust :</p>

<div><pre><code>$ perf stat -B ./gnirehtet relay
 Performance counter stats for 'target/release/gnirehtet relay':

       2707,479968      task-clock:u (msec)       #    0,020 CPUs utilized
                 0      context-switches:u        #    0,000 K/sec
                 0      cpu-migrations:u          #    0,000 K/sec
             1 001      page-faults:u             #    0,370 K/sec
     1 011 527 340      cycles:u                  #    0,374 GHz
     2 033 810 378      stalled-cycles-frontend:u #  201,06% frontend cycles idle
       981 103 003      instructions:u            #    0,97  insn per cycle
                                                  #    2,07  stalled cycles per insn
        98 929 222      branches:u                #   36,539 M/sec
         3 220 527      branch-misses:u           #    3,26% of all branches

     133,766035253 seconds time elapsed
</code></pre></div>

<p>Je ne suis pas un expert pour analyser les résultats, mais de ce que je
comprends de la valeur <code>task-clock:u</code>, la version Rust consomme 4× moins de
temps CPU.</p>

<h2>Conclusion</h2>

<p>Réécrire <em>Gnirehtet</em> en Rust a été une formidable expérience, où j’ai appris un
super langage et de nouveaux concepts de programmation. Et maintenant, nous
avons une application native avec de meilleures performances.</p>

<p>Bon reverse tethering !</p>
<p><img src="media/7cefb81c.1a63f34b9244a38a08fd9b3e5a4aa85e" data-original-source="http://cdn.libravatar.org/avatar/1a63f34b9244a38a08fd9b3e5a4aa85e" alt="Gravatar de &reg;om" class="gravatar" /><br/><i>Original post of <a href="https://blog.rom1v.com/2017/09/gnirehtet-reecrit-en-rust/" title="Visit the source">®om</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>


feed_id: http://blog.ght1pc9kc.fr/Hello-OSGi-World,-Part-5/
title: Marthym : Hello OSGi World, Part 5, Fragment Bundles
uri: Marthym-Hello-OSGi-World-Part-5-Fragment-Bundles
url: http://blog.ght1pc9kc.fr/Hello-OSGi-World,-Part-5/
content:
<p>Disons que cette partie est un bonus si vous n’avez pas encore saturé ! Depuis le vous devez bien avoir remarqué que l’on utilise log4j 2 et que les logs ne s’affichent pas. À la place on a un message d’erreur qui dit qu’il manque un fichier de configuration. Et malheureusement, l’ajouter dans le répertoire de conf ne suffit pas, ni dans le répertoire courant. Il doit se trouver dans le classpath de <code>log4j2-core</code>.</p>

<h2>Fragment Bundle</h2>
<p>Le problème est là, l’isolation des classpaths induite par OSGi interdit donc de rajouter un fichier dans le classpath d’un bundle. À moins de modifier le jar original de log4j, ce qui n’est pas vraiment génial.</p>

<p>C’est là qu’interviennent les Fragments Bundles. En effet, ce sont des genres d’ajout fait à des bundles existant. Les fichiers qu’ils contiennent vont être ajouté au bundle qui les abrite et vont donc partager le même classpath.</p>

<h3>Création du module how-log4j2</h3>
<p>Pour créer un Fragment Bundle, il faut ajouter dans le <code>MANIFEST.MF</code> la ligne :</p>

<div><pre><code>Fragment-Host: org.apache.logging.log4j.core
</code></pre>
</div>
<p>Pour dire que le fragment est hébergé par log4j2-core.</p>

<p>Dans la configuration du <code>maven-bundle-plugin</code> on a précisé</p>
<div><pre><code><span><configuration></span>
    <span><instructions</span> <span>combine.children=</span><span>"append"</span><span>></span>
        <span><_include></span>-src/main/osgi/osgi.bnd<span></_include></span>
    <span></instructions></span>
<span></configuration></span>
</code></pre>
</div>

<p>Cette configuration permet, via un fichier <code>src/main/osgi/osgi.bnd</code>, d’ajouter des instructions à BND. On ajoute le module <code>how-log4j2</code> avec le fichier <code>osgi.bnd</code> contenant la ligne nécessaire. Et on ajoute au module le ficher de configuration log4j2.</p>

<p>On build et on re-teste :</p>
<pre>
START LEVEL 1
   ID|State      |Level|Name
   16|Resolved   |    1|how-log4j2 (1.0.0.SNAPSHOT)|1.0.0.SNAPSHOT
</pre>

<p>Dans la liste des bundle on voit le nouveau Fragment. Les Fragments s’activent par l’intermédiaire de leur hôte. C’est pour cela qu’il est noté <code>Resolved</code> au lieu de <code>Active</code>.</p>

<p>Les logs s’affichent maintenant correctement !</p>

<h2>Conclusion</h2>
<p>Si vous êtes arrivé là, merci de votre patience et indulgence. N’hésitez pas à me faire un retour dans les commentaires !</p>

<p>J’utilise OSGi depuis 4 ans sur un projet conséquent en production. Quand on a commencé, on a essuyé les mêmes plâtres que décrit dans ces articles et même plus ! Au final le projet fonctionne bien mais la maintenance en est souvent complexe. Nous n’avons pas abordé la question des tests mais c’est tout aussi compliqué. En outre, les ressources que ce soit documentation ou humaines sont difficiles à trouver. La multitude d’implémentations de chaque partie du framework crée en plus une fragmentation qui amplifie encore le phénomène.
De plus, vous avez du le voir, malgré l’ajout de la dépendance <code>Xnio</code> dans le composant <code>http-server</code> il arrive que l’erreur XNIO se produise. C’est une question de timing. Pour la résoudre définitivement, en plus de demander à Felix de vider son cache sur chaque démarrage, il faut ajouter un niveau de chargement des bundles. Un répertoire <code>core</code> qui serait chargé avant <code>application</code> et qui contiendrait tout sauf les jars de notre application. Mais on constate que la gestion de l’ordre de chargement est aussi un élément compliqué d’OSGi qui vient s’ajouter aux autres.</p>

<p>Pour ces raisons, je ne choisirais pas d’utiliser OSGi en production sur les prochains projets. C’est un sujet intéressant à explorer mais le coût en est très élevé comparé au gain qu’on en retire.</p>

<p><a href="https://github.com/Marthym/hello-osgi-world">Code source: Part 5, Fragment Bundles</a></p>

<ul><li><a href="http://blog.ght1pc9kc.fr/Hello-OSGi-World,-Part-1/">Part 1, Introduction</a></li>
  <li><a href="http://blog.ght1pc9kc.fr/Hello-OSGi-World,-Part-2/">Part 2, Premiers concepts OSGi</a></li>
  <li><a href="http://blog.ght1pc9kc.fr/Hello-OSGi-World,-Part-3/">Part 3, Configuration du runner</a></li>
  <li><a href="http://blog.ght1pc9kc.fr/Hello-OSGi-World,-Part-4/">Part 4, Injection de dépendances</a></li>
  <li><a href="http://blog.ght1pc9kc.fr/">Part 5, Fragment Bundles</a></li>
</ul><p><a href="http://blog.ght1pc9kc.fr/Hello-OSGi-World,-Part-5/">Hello OSGi World, Part 5, Fragment Bundles</a> écrit à l'origine par Marthym pour <a href="http://blog.ght1pc9kc.fr/">J'ai acheté un PC neuf cassé ...</a> le September 23, 2017.</p>
<p><img src="media/b4d43823.16f8ed3b71457256797eac76e92d6db9" data-original-source="http://cdn.libravatar.org/avatar/16f8ed3b71457256797eac76e92d6db9" alt="Gravatar de Marthym" class="gravatar" /><br/><i>Original post of <a href="http://blog.ght1pc9kc.fr/Hello-OSGi-World,-Part-5/" title="Visit the source">Marthym</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>


feed_id: http://blog.info16.fr/index.php?article66/dns-menteurs-censure-sur-internet
title: Bartounet : - DNS MENTEURS - - CENSURE SUR INTERNET -
uri: Bartounet-DNS-MENTEURS-CENSURE-SUR-INTERNET
url: http://blog.info16.fr/index.php?article66/dns-menteurs-censure-sur-internet
content:
    
      
        <meta content="text/html; charset=UTF-8" http-equiv="content-type"><title>DNS-MENTEURS</title><br><p><img src="media/33e87931.file404120200024.jpg" data-original-source="http://stocklib.assetsdelivery.com/compings/file404/file4041202/file404120200024.jpg" alt="file404120200024" itemprop="image" data-toggle="magnify"></p>
        <p><br></p>
        <p>De nos jours tout Internet est basé sur les noms de domaines.</p>
        <p>Sans le système DNS quasiment plus rien ne fonctionnerait.</p>
        <p>Pour rappel selon Wikipédia:</p>
        <p>Le<a href="https://fr.wikipedia.org/wiki/Domain_Name_System"> <span lang="en"><b>Domain Name System</b></span></a> (ou
          <b>DNS</b>, système de noms de domaine) est un service permettant de
          traduire un <a href="https://fr.wikipedia.org/wiki/Nom_de_domaine" title="Nom de domaine">nom
            de domaine</a> en informations,</p>
        <p> notamment en <a href="https://fr.wikipedia.org/wiki/Adresse_IP" title="Adresse IP">adresses
            IP</a> .</p>
        <p><br></p>
        <p>Autrement dit quand vous tapper sur <a href="http://blog.info16.fr/via%20les%20DNS%20Menteurs">http://blog.info16.fr</a>,
          votre machine va tenter de transformer ce nom en Adresse IP.</p>
        <p>Grace à cette addresse votre système va pouvoir aller communiquer
          avec l'adresse IP de mon blog.</p>
        <p><br></p>
        <h1>La structure et le fonctionnement du DNS</h1>
        <p><br></p>
        <p><b>Le système DNS utilise une structure en arbre.</b></p>
        <img src="media/8298f8c5.Structure_DNS.jpg" data-original-source="http://www.info16.fr/ftpl/Structure_DNS.jpg" alt="http://www.info16.fr/ftpl/Structure_DNS.jpg"><p>Tout commence depuis les serveurs Racines ( Root ) : Officiellement
          il y en a 13 ( 13 adresses IP) , mais réèllement il y en a plus <br></p>
        <p>de 130 répartis dans le monde </p>
        <p>Les serveurs racines utilisent la technologie réseau unicast ; selon
          votre localisation, l'adresse IP va être routée vers un serveur</p>
        <p>le plus prêt de la requete.</p>
        <p><br></p>
        <p><img src="media/34da2540.Root-current.svg.png" data-original-source="http://www.info16.fr/ftpl/Root-current.svg.png" alt="http://www.info16.fr/ftpl/Root-current.svg.png"></p>
        <p>sources: <a href="https://fr.wikipedia.org/wiki/Serveur_racine_du_DNS">https://fr.wikipedia.org/wiki/Serveur_racine_du_DNS</a></p>
        <p><br></p>
        <p><br></p>
        <p>Puis les serveur de TLD ( .fr, .com, ...) ou de premier niveau</p>
        <p>Puis les serveurs de second niveau</p>
        <p>Puis les serveur de troisième niveau</p>
        <p>etc ...</p>
        <p><br></p>
        <p>Autrement dit une requete récursive vers ce blog donnerait:</p>
        <p><b>1. Quelle est l'adresse IP de blog.info16.fr ?  ( Les
            serveurs racines voit toujours la requête complète)</b></p>
        <p><b>2. les serveurs racines répondent la liste des serveurs faisant
            autorité pour le .FR</b></p>
        <p><b>3. Le client DNS interroge alors un des serveurs faisant autorité
            pour .FR en lui demandant "quelle est l'adresse IP de
            blog.info16.fr"</b></p>
        <p><b>4. Un des serveurs faisant autorité pour .FR répond la liste des
            serveurs faisant autorité pour le domaine info16.fr</b></p>
        <p><b>5. Le client DNS interroge alors un des serveurs faisant autorité
            pour info16.fr  en lui demandant "qu'elle est l'adresse IP de
            blog.info16.fr"</b></p>
        <p><b>6. le serveurs faisant autorité pour .info16.fr répond la ou les
            adresses IP correspondantes au nom blog.info16.fr</b></p>
        <p>On le voit très bien en utilisant la commande dig + Trace</p>
        <p><br></p>
        <h1>Le resolveur</h1>
        <p></p>
        <p>Cet enchainement de questions/réponses est ce que fait un résolveur</p>
        <p>Le résolveur va de plus mettre en cache les réponses trouvées afin de
          pouvoir les fournir plus rapidement </p>
        <p>la prochaine fois qu'on lui demandera. ( le temps du TTL du DNS)</p>
        <p><br></p>
        <p>Cela permet de ne pas de réinterroger tous les racines et les
          serveurs faisant autorités à chaque fois.</p>
        <p>Cela explique que les DNS Racines ne sont pas très chargés car la
          plupart des requetes clients sont fournies via des résolveurs</p>
        <p>qui ont la réponse en cache.</p>
        <p>Plus le résolveurs est sollicité plus son cache sera fourni et moins
          il interrogera les serveurs racines.</p>
        <p><br></p>
        <p><img src="media/06f62bbf.dns_resolution.png" data-original-source="http://www.info16.fr/ftpl/dns_resolution.png" alt="http://www.info16.fr/ftpl/dns_resolution.png"></p>
        <p>Source <a href="http://www.afnic.fr/">www.afnic.fr</a></p>
        <p><br></p>
        <p><b>Il y a donc deux types de serveurs DNS:</b></p>
        <ul><li>Les Serveurs faisants autorité ( à différents niveaux)</li>
          <li>Les resolveurs ( qui connaissent en durs les IP des racines)</li>
        </ul><p><br></p>
        <p>Les serveurs faisant autorité ont l'autorité sur un domaine: <span>c'est-à-dire
            que la réponse ne <b>fait</b> pas appel à un autre serveur ou à un
            cache</span></p>
        <p><span>Les resolveurs  sont des serveurs qui vont
            intérroger les serveurs faisant autorité et mettre en cache les
            réponses pour les fournir à ses clients.</span></p>
        <p><span><br></span></p>
        <p><span><b>La plupart des utilisateurs de l'internet on
              peu ou pas conscience de ce fonctionnement.</b><br></span></p>
        <p><span>L'utilisateur LAMBDA utilise sa box internet
            fourni par son FAI et navigue sans se poser de question.</span></p>
        <p><span><br></span></p>
        <p><span>La plupart du temps les box internet utilisent les
            résolveurs du Fournisseur d'accès.</span></p>
        <p><span>PAr exemple :</span></p>
        <p><span>Free:</span></p>
        <p><span>212.27.40.240<br>
            212.27.40.241</span></p>
        <p><span>Orange:</span><span></span><br>
          80.10.246.2<br>
          80.10.246.1291</p>
        <p><br></p>
        <p>SFR:</p>
        <p>109.0.66.10<br>
          109.0.66.20</p>
        <p><span>Et beaucoup d'autres...<br></span></p>
        <p><span><a href="http://www.ariase.com/fr/guides/adresses-dns.html">http://www.ariase.com/fr/guides/adresses-dns.html</a></span></p>
        <p><span><br></span></p>
        <h1><span>La censure via les DNS Menteurs</span></h1>
        <p><b>Mais alors mon FAI peut me renvoyer n'importe quelle adresse ?
            quand j'interroge un domaine ?</b></p>
        <p><img src="media/e9b9ed5f.censored-1680266_960_720.png" data-original-source="http://www.info16.fr/ftpl/censored-1680266_960_720.png" alt="http://www.info16.fr/ftpl/censored-1680266_960_720.png"></p>
        <p><img src="media/34b8214e.smiley-1958283_960_720.png" data-original-source="http://www.info16.fr/ftpl/smiley-1958283_960_720.png" alt="http://www.info16.fr/ftpl/smiley-1958283_960_720.png"></p>
        <p><b>OUI mon capitaine.</b></p>
        <p>D'ailleurs si vous suivez l'actualité, des décrets français
          permettent d'obliger les FAI à bloquer, filtrer des sites internet</p>
        <p>Sur décision de justice.</p>
        <p>La réponse la plus simple des FAI est d'utiliser le mensonge DNS.</p>
        <p><br></p>
        <p>Par exemple cela à été le cas sur des sites de streaming, Torrent,
          etc ..</p>
        <p>T411, Pirate Bay, libertyland, voirfilm ...</p>
        <p>Mais aussi des sites islamistes, propagandes, etc ...</p>
        <p><a href="http://www.numerama.com/pop-culture/291796-apres-t411-libertyland-streamcomplet-et-voirfilms-se-font-bloquer-en-france.html">http://www.numerama.com/pop-culture/291796-apres-t411-libertyland-streamcomplet-et-voirfilms-se-font-bloquer-en-france.html</a></p>
        <p><br></p>
        <p>Vous allez me dire, oui... c'est pour notre sécurité, et c'est normal
          de bloquer ce qui est illégal.</p>
        <p>On peut le voir comme cela en effet, si vous arrivez à dormir avec
          cela et que cela ne vous gène pas que</p>
        <p>ce qu'on vous affiche à l'écran est ce qu'a décidé votre FAI et votre
          gouvernement, alors continuez comme cela.</p>
        <p>Il faut des moutons :)</p>
        <p><img src="media/1384f4a7.face-47810_960_720.png" data-original-source="http://www.info16.fr/ftpl/face-47810_960_720.png" alt="http://www.info16.fr/ftpl/face-47810_960_720.png"></p>
        <p><br></p>
        <p>Pour ma part je milite pour la neutralité du NET depuis longtemps.</p>
        <p>La Quadrature du NET en parle beaucoup mieux que moi : <a href="https://www.laquadrature.net/fr/neutralite_du_Net">https://www.laquadrature.net/fr/neutralite_du_Net</a></p>
        <p><br></p>
        <p>On peut imaginer alors que ces résolveurs peuvent vous mentir à
          chaque instant et vous </p>
        <p>envoyer l'adresse IP qui leur plait.</p>
        <p>Pour par exemple:</p>
        <ul><li>Bloquer des sites</li>
          <li>Vous envoyer sur des adresses publicitaires</li>
          <li>Monetiser des sites</li>
          <li>...</li>
        </ul><p>Plus en détail, <a target="_blank" href="http://www.bortzmeyer.org/dns-menteur.html">bortzmeyer.org</a>. explique que «<em> certains FAI
            prétendent mettre en place des DNS menteurs pour « le bien des
            clients »</em></p>
        <p><em> alors qu'en réalité, ils sont poussés par des intermédiaires qui
            leur proposent de « monétiser » l'audience du site Web ainsi pointé,
            comme l'a bien expliqué </em><a target="_blank" href="http://www.mail-archive.com/frnog@frnog.org/msg06675.html"><em>le directeur technique de Free</em></a><em>).</em></p>
        <p><br></p>
        <h2>La preuve du mensonge.</h2>
        <p><img src="media/e864a896.stepreuve.png" data-original-source="http://www.info16.fr/ftpl/stepreuve.png" alt="http://www.info16.fr/ftpl/stepreuve.png"></p>
        <p>Vous allez me dire; oui mais comment prouver que mon résolveur me
          ment ?</p>
        <p>En effet, il y a des cas facile et d'autres nons.</p>
        <p>Dans certains cas, la résolution d'un nom de domaine par un resolveur
          menteur aboutit à la réponse 127.0.0.1</p>
        <p>qui est votre adresse locale ce qui explique une page blanche ou une
          erreur dans votre navigateur.</p>
        <p>Dans d'autres cas, le DNS va vous renvoyer un code erreur</p>
        <p>Dans d'autre le DNS va vous envoyer sur une page de bloquage ou une
          publicité.</p>
        <p><br></p>
        <p><br></p>
        <p>Exemple : Allez avec votre navigateur sur <a href="http://streamcomplet.me/">
            http://streamcomplet.me/</a>  ( juste pour voir, le
          téléchargement d'oeuvres protégées est illégales)</p>
        <p><br></p>
        <h3>Avec mon résolveur:</h3>
        <p>Pour ma part en utilisant mon propre résolveur ( je vous en parlerait
          plus loin), le site s'affiche: </p>
        <p>D'ailleurs il me redirige vers un autre domaine, car le site essaye
          déjà de contourner la censure</p>
        <p><img src="media/69656b4a.streamok.png" data-original-source="http://www.info16.fr/ftpl/streamok.png" alt="http://www.info16.fr/ftpl/streamok.png"></p>
        <p><br></p>
        <p>La résolution DNS donne les adresses IP du FQDN</p>
        <p>Moi@linux:~# dig streamcomplet.com +short</p>
        <p>104.28.6.68<br>
          104.28.7.68</p>
        <h3>Avec le résolveur de mon FAI </h3>
        <p>Avec le résolveur de mon FAI ( je vous laisse deviner lequel)</p>
        <p>Page blanche.</p>
        <p><br></p>
        <p><img src="media/03bba4b3.streamnok.png" data-original-source="http://www.info16.fr/ftpl/streamnok.png" alt="http://www.info16.fr/ftpl/streamnok.png"></p>
        <p>La résolution DNS renvoi 127.0.0.1</p>
        <p>root@NAS:~# dig streamcomplet.com +short @212.27.40.241<br>
          127.0.0.1</p>
        <p></p>
        <p><br></p>
        <h3>La preuve avec les sondes ATLAS:</h3>
        <p>Il est difficile d'avoir une vue de l'internet depuis n'importe quel
          endroit du monde.</p>
        <p>Qui me dit que l'internet est le même si je navigue depuis La France
          ou ou depuis l'Allemagne.</p>
        <p></p>
        <p>Pour cela il existe le projet  RIPE NCC , qui à un réseau de
          sonde Atlas.</p>
        <p><br></p>
        <p>Selon mon grand gourou Stéphane BORTZMEYER </p>
        <p><a href="http://www.bortzmeyer.org/">http://www.bortzmeyer.org</a></p>
        <p>Le réseau des sondes <b>Atlas</b>, créé et géré par
          le <b><a hreflang="fr" href="https://fr.wikipedia.org/wiki/RIPE%20Network%20Coordination%20Centre" title="Consultez l'article "RIPE Network Coordination Centre" de l'encyclopédie libre Wikipedia">RIPE-NCC</a></b>,
          couvre
          l'<b><a hreflang="fr" href="https://fr.wikipedia.org/wiki/Europe" title="Consultez l'article "Europe" de l'encyclopédie libre Wikipedia">Europe</a></b>
          (et au delà) de petites machines
          connectées à l'internet et qui effectuent en permanence des
          mesuresdiverses, qui servent par exemple de base aux <a href="https://labs.ripe.net/">très
            intéressants articles des RIPE
            Labs</a>. Cela permet par exemple de détecter <a href="http://www.bortzmeyer.org/reseau-128.html" title='Consultez ce blog à propos de "reseau-128"'>une
            bogue présente dans beaucoup de
            routeurs</a>. Les Atlas ne savaient faire au début que des mesures
          commandées par le RIPE-NCC. Depuis quelque temps, les
          utilisateurspeuvent également commander des mesures selon leur goût,
          un système
          connu sous le nom d'<b>UDM</b>, <i><a href="https://atlas.ripe.net/udm/" hreflang="en">User-Defined
              Measurements</a></i>.</p>
        <p><br></p>
        <p>Ces petites sondes, tout le monde peut faire la demande d'en héberger
          et de la brancher sur sa connection internet.</p>
        <p>Si RIPE NCC accepte votre demande vous recevrez votre petite sonde,
          qui contribuera à sonder la qualité de l'internet.</p>
        <p><br></p>
        <p><img src="media/1f01bb5e.201405_sonde_ripe_atlas_1.jpg" data-original-source="http://www.info16.fr/ftpl/201405_sonde_ripe_atlas_1.jpg" alt="http://www.info16.fr/ftpl/201405_sonde_ripe_atlas_1.jpg"></p>
        <p><br></p>
        <p>Héberger cette sonde vous permet de gagner des crédits chez <a href="https://atlas.ripe.net/">https://atlas.ripe.net/</a></p>
        <p><span></span>Ces crédit vous permettent de
          lancer des mesures internet depuis le site mais aussi depuis leurs
          APIs</p>
        <p>Des scripts disponibles sur Github vous permettent d'utiliser ces
          API:</p>
        <p><a href="https://github.com/RIPE-Atlas-Community/ripe-atlas-community-contrib">https://github.com/RIPE-Atlas-Community/ripe-atlas-community-contrib</a></p>
        <br><p><span>J'ai la chance d'héberger une sonde, et donc de
            pouvoir faire ces mesures.</span></p>
        <p><span>Parmis ces mesures on peut mesurer les DNS.<br></span></p>
        <p><span><br></span></p>
        <p><span>Reprenons l'éxemple de </span>streamcomplet.com</p>
        <p><b>En FRANCE</b></p>
        <p>Nous allons utiliser le script atlas-resolve</p>
        <p><br></p>
        <pre><code>% atlas-resolve --country FR --requested 100 streamcomplet.com
[ERROR: SERVFAIL] : 10 occurrences 
[104.28.6.68 104.28.7.68] : 47 occurrences 
[ERROR: NXDOMAIN] : 7 occurrences 
[127.0.0.1] : 35 occurrences 
[TIMEOUT(S)] : 1 occurrences 
Test #9327211 done at 2017-09-23T10:15:02Z</code></pre>
        <p></p>
        <p><br></p>
        <p>on lui demande, "résoud moi <b>streamcomplet.com</b>, depuis <b>100
            sondes ATLAS</b>  hébergées en <b>FRANCE</b>"</p>
        <p>On obtient:</p>
        <p>47 bonnes réponse sur 100 requetes ...</p>
        <p><b>Ce domaine est donc en partie "censuré" en France</b></p>
        <p><b><br></b></p>
        <p><b>En ALLEMAGNE</b></p>
        <p>Nous allons utiliser le script atlas-resolve</p>
        <pre><code>% atlas-resolve --country DE --requested 100 streamcomplet.com 
[104.28.6.68 104.28.7.68] : 100 occurrences 
Test #9327213 done at 2017-09-23T10:16:08Z<br><br></code>on lui demande, "résoud moi <b>streamcomplet.com</b>, depuis <b>100 sondes ATLAS</b>  hébergées en <b>FRANCE</b>"<br></pre><p>On obtient:</p>
<p>100 bonnes réponse sur 100 requetes !!!</p><b>Ce domaine ne subit pas de censure en Allemagne.<br></b><pre><br></pre><h1><span>Mais alors !! Qu'est ce que je dois faire ??</span></h1><p><br></p><p><img src="media/98368f4b.deep-thought-1296377_960_720.png" data-original-source="http://www.info16.fr/ftpl/deep-thought-1296377_960_720.png" alt="http://www.info16.fr/ftpl/deep-thought-1296377_960_720.png"></p><p><br></p><h2>Les Resolveurs publics</h2><p>Si vous vous interessez un peu à la question, les premières réponses qu'on trouve</p><p>sur le NET c'est:</p><p><b>Les DNS de ton FAI ce sont des menteurs, utilise les DNS de Google ; les fameux 8.8... !!! Eux ils te respectent <br></b></p><p><b>D'autres te diront Utilise ceux de Open DNS c'est les meilleurs et ils sont OPEN</b></p><p><b>D'autres réponses un peu moin bêtes vous recommande des Résolveurs associatif qui revendiquent la liberte du NET</b></p><p><br></p><p>Tout cela se discute sur plusieurs points:</p><p><b>Google</b> --> Vous êtes sérieux ? certes ils ne sont pas connus pour mentir, mais encore cela peu changer</p><p>Mais vous vous doutez bien que c'est vous le produit, et que vos requetes seront utilisées d'une manière ou d'une autre.</p><p>Ceci dit vous utilisez surement leur moteur de recherche . ils savent dejà tout de vous.</p><p>Du moment que vous en êtes conscient ...</p><p><br></p><p><b>OpenDNS </b>--> Cela pourrait paraitre une bonne idée à première vue, mais leurs intentions ne sont pas différentes</p><p>de celle de Google.</p><p>Ils vont même a vous ajouter de la Pub, quand le FQDN n'existe pas.</p><p>Tout cela est réglable dans leur interface, mais ma confiance en eux est toute relative.</p><p>NB; L'utilisation de OPEN DNS en tant que filtrage parentale peut apporter une solution à mondre cout</p><p>Si on est conscient du risque pourquoi pas.</p><p><br></p><p><b>Les DNS Associatifs et les autres  </b>--> Certains DNS associatifs s'engagent sur la pureté des résolutions de nom (pas
 de censure...etc.) </p><p>comme les DNS proposés par FDN : 80.67.169.12 et 
80.67.169.40.</p><p><b>pourquoi pas, ce serait le moins pire.</b></p><p>Mais encore une fois nous ne savons pas à 100% qu'ils respecteront leurs engagements,et si les resolveurs ne disparaitront pas du jour au lendemain</p><p><br></p><p>Il faut aussi voir le coté performance.</p><p>En règle général les resolveurs de vos FAI seront les plus rapides ( mais pas toujours)</p><p>Ils sont sur le même réseau que vous et sont donc censé etre plus performants.</p><p>Si vou ssouhaitez utiliser des résolveurs ouverts publics n'hésitez pas à tester leur temps de réponses avec dig par exemple</p><p><b>;; Query time: 59 msec</b><br>;; SERVER: 212.27.40.241#53(212.27.40.241)<br>;; WHEN: Sat Sep 23 14:54:36 CEST 2017<br>;; MSG SIZE  rcvd: 138</p><p><br></p><h2>Avoir son propre résolveur.</h2><p><img src="media/58fc251d.deoxyribonucleic-acid-1500068_960_720.jpg" data-original-source="http://www.info16.fr/ftpl/deoxyribonucleic-acid-1500068_960_720.jpg" alt="http://www.info16.fr/ftpl/deoxyribonucleic-acid-1500068_960_720.jpg"></p><p><br></p><p><b>J'en suis arrivé à la conclusion, que la moins pire des solutions est</b></p><p><b>d'utiliser son propre resolveur</b></p><p>Cela demande un peu ( très peu) de travail, mais c'est le seul moyen d'éviter les problèmes de DNS Menteur et </p><p>d'exploitation de vos requetes DNS</p><p>Le tout en gardant une meilleure performance.</p><p><br></p><p>Il y a plusieurs outils qui vous permettent de monter votre résolveur</p><p>Les plus connus : Unbound et BIND</p><p>Unbound est pas mal car beaucoup plus léger que BIND.</p><p><a href="https://www.unbound.net/">https://www.unbound.net/</a></p><p><br></p><p>Je ne vais pas écrire d'article sur comment monter un résolveur; Il y en a plein sur le NET.</p><p>Ce résolveur va lui même réaliser les requetes récursive depuis les racines et les mettre en cache </p><p>PAr conséquent, pas de censure, et vous maitrisez vos requetes DNS</p><p>de plus la performance est au rendez vous, puisque si votre resolveurs est local, la réponse</p><p>en cache sera quasi instantanée</p><p><br></p><p>Exemple d'une requete depuis un de mes postes clients, qui utilise mon resolveur local unbound</p><p><br></p><p><b>Premiere requete elle n'est pas en cache --> 176ms</b><br></p><p>Moi@NAS:~# dig www.info16.fr</p><p>;; QUESTION SECTION:<br>;www.info16.fr.                 IN      A<br><br>;; ANSWER SECTION:<br>www.info16.fr.          3600    IN      A       212.129.3.40<br><br>;; AUTHORITY SECTION:<br>info16.fr.              10800   IN      NS      b.dns.gandi.net.<br>info16.fr.              10800   IN      NS      c.dns.gandi.net.<br>info16.fr.              10800   IN      NS      a.dns.gandi.net.<br><br>;; Query time: 176 msec<br>;; SERVER: 10.0.0.254#53(10.0.0.254)<br>;; WHEN: Sat Sep 23 15:06:31 CEST 2017<br>;; MSG SIZE  rcvd: 119</p><p><b>On relance la même requetes --> Elle est instantanée 0ms</b></p><p>Moi@NAS:~# dig www.info16.fr<br><br>;; QUESTION SECTION:<br>;www.info16.fr.                 IN      A<br><br>;; ANSWER SECTION:<br>www.info16.fr.          3592    IN      A       212.129.3.40<br><br>;; AUTHORITY SECTION:<br>info16.fr.              10792   IN      NS      b.dns.gandi.net.<br>info16.fr.              10792   IN      NS      c.dns.gandi.net.<br>info16.fr.              10792   IN      NS      a.dns.gandi.net.<br><br>;; Query time: 0 msec<br>;; SERVER: 10.0.0.254#53(10.0.0.254)<br>;; WHEN: Sat Sep 23 15:06:39 CEST 2017<br>;; MSG SIZE  rcvd: 119</p><p><br></p><p><b>Il existe tout de même des inconvénients non négligeables.</b></p><p><b>Vous ne bénéficier pas de l'énorme cache du résolveur de votre FAI</b></p><p><b>Sur l'ensemble des requetes de tous ses clients, le cache emmagazine les informations et les fournis</b></p><p><b>sans faire de requetes récursive.</b></p><p><b><br></b></p><p><b>Vous solliciterez plus les serveurs racines et contribuerez à leur montée en charge.</b></p><p><b><br></b></p><p><b>Mais a mon avis cela reste la meilleures solution à l'heure actuelle.</b></p><p><b><br></b></p><p>Pour finir, c'est vrai que monter son resolveur, n'est pas toujours évident.</p><p>Surtout pour le grand public ( les entreprises c'est plus facile, elles bénéficient déjà d'infrastructures serveurs))</p><p>Avoir un petit serveur qui tourne dans un coin, ou un vrai serveur dédié demande de l'investissement et du temps</p><p><br></p><p>Pour ma part j'ai trouvé le compromis qui me convient : Cela est intégré dans mon routeur.</p><p>J'utilise ma Box en mode Bridge, ce qui me permet de mettre un vrai routeur / Firewall en frontal de ma connexion.</p><p>Pour cela j'utilise le magnifique PFSENSE que j'ai monté dans un petit boitier ALIX:</p><p><img src="media/b2ea2daf.image02.png" data-original-source="https://www.3cx.com/wp-content/uploads/2014/05/image02.png" alt="https://www.3cx.com/wp-content/uploads/2014/05/image02.png"></p><p><a href="http://blog.info16.fr/index.php?article62/remplacement-d-une-box-adsl-ovh-par-un-routeur-firewall-pfsense">http://blog.info16.fr/index.php?article62/remplacement-d-une-box-adsl-ovh-par-un-routeur-firewall-pfsense</a></p><p><br></p><p><b>Dans PFSENSE, le choix de faire un DNS Forwarder ou Resolver est possible: ( d'ailleurs PFSense utilise Unbound)<br></b></p><p><b><br></b></p><p><br><img src="media/4de89e05.32015_19_06-pfSense.localdomain20-20Services_20DNS20Resolver.png" data-original-source="http://www.info16.fr/ftpl/2017-09-23%2015_19_06-pfSense.localdomain%20-%20Services_%20DNS%20Resolver.png" alt="http://www.info16.fr/ftpl/2017-09-23%2015_19_06-pfSense.localdomain%20-%20Services_%20DNS%20Resolver.png"></p><p><b><br></b></p><p><b><br></b></p><p><b><br></b></p><p><br></p><p><br></p>
<p></p><pre><br></pre>

<p><img src="media/fcc00551.98675c4464be4889b858e1cf143907f3" data-original-source="http://cdn.libravatar.org/avatar/98675c4464be4889b858e1cf143907f3" alt="Gravatar de Bartounet" class="gravatar" /><br/><i>Original post of <a href="http://blog.info16.fr/index.php?article66/dns-menteurs-censure-sur-internet" title="Visit the source">Bartounet</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>Planet Libre : <a href="">Br&egrave;ves du Planet Libre - lundi 17, mars 2014</a> (17/03/2014)</li><li>Planet Libre : <a href="">Br&egrave;ves du Planet Libre - lundi 30, mars 2015</a> (30/03/2015)</li><li>crowd42 : <a href="">DNS Telecomix</a> (27/12/2011)</li><li>HacKurx : <a href="">DNS contre la censure</a> (02/01/2012)</li><li>crowd42 : <a href="">WCIT 2012, un sommet pour r&eacute;guler Internet et instaurer la censure</a> (10/12/2012)</li></ul></div></p>


feed_id: https://www.blog-libre.org/2017/09/24/mutualisation/
title: blog-libre : Mutualisation
uri: blog-libre-Mutualisation
url: https://www.blog-libre.org/2017/09/24/mutualisation/
content:
<p>En 2015 je parlais de <a href="https://www.blog-libre.org/2015/04/25/confiance-et-cercle-de-confiance/" target="_blank">confiance</a>, en 2016 je parlais de <a href="https://www.blog-libre.org/2016/02/21/faire/" target="_blank">faire</a>, en 2017 je souhaite <strong>faire confiance</strong>.</p>
<p>Depuis 10 jours je n’ai plus de net à la maison, c’est en cours de résolution chez Free. Ça ne me dérange pas particulièrement pour surfer, je fais un partage de connexion à partir de mon téléphone portable. En revanche je m’auto-héberge, j’ai notamment un gros besoin de <a href="https://github.com/FreshRSS/FreshRSS" target="_blank">FreshRSS</a> et <a href="https://github.com/shaarli/Shaarli" target="_blank">Shaarli</a>. Simultanément avec A1 on échange sur les besoins de sauvegarde des particuliers. Foutre ses données chez Microsoft One Drive ou Google Drive, ça fait pas envie niveau vie privée mais c’est gratuit et simple (donc grand public).</p>
<p>Il y a une autre solution, confier ses données à une personne de confiance : un voisin, un pote, quelqu’un de la famille. Décentralisation totale, <a href="https://fr.wikipedia.org/wiki/Pair_%C3%A0_pair" target="_blank">pair à pair</a>, confiance à hauteur d’homme.</p>
<p>En ce moment je vois moins d’intérêt à m’auto-héberger, c’est sympa pour apprendre mais avec Debian une fois que c’est mis en place, ça juste marche et c’est presque increvable. Je veux aller plus loin, je veux mutualiser. Je cherche quelqu’un pour héberger mes données :</p>
<ul><li>J’ai besoin d’un FreshRSS et de Shaarli (PHP, MariaDB). Évidemment ce sera avec des logiciels libres, on partagera probablement des idées communes sur le Libre. Je veux pouvoir récupérer des sauvegardes facilement genre avec curl ou via un partage Syncthing, il me faut également une rétention de minimum 3 jours. Une connexion internet fiable et supérieure à 10 Mbps car si comme moi vous avez une connexion de 1,2 Mbps et des coupures régulières autant que je reste comme actuellement lol</li>
<li>Je n’ai aucun problème à être hébergé sur un VPS ou serveur mutualisé chez OVH, Gandi… De même si vous proposez mieux que mes besoins de base comme https, meilleure rétention, fibre, etc. c’est encore plus top !
</li><li>Pour l’instant je ne compte pas payer/participer même à hauteur de quelques euros. Je ne suis pas du tout fermé sur la question, c’est juste que je veux toucher du doigt l’expression <strong>rendre service</strong></li>
</ul><p>Pourquoi ne pas faire ça avec <a href="https://latitude77.org/" target="_blank">A1</a>, avec <a href="https://www.blog-libre.org/auteurs/" target="_blank">Laurent</a> ici même, sur le serveur du Jdh avec <a href="https://carlchenet.com/" target="_blank">Carl</a>, avec <a href="https://max-koder.fr/" target="_blank">Max</a>, chez <a href="https://cyrille-borne.com/pluxml/" target="_blank">Cyrille</a> ? Parce que justement je souhaite <strong>faire confiance</strong>, j’ai déjà entièrement confiance en eux, je les connais, ce sont des personnes de qualité. Je veux <strong>créer du lien</strong> avec d’autres personnes, échanger, partager avec elles. Je veux de l’ouverture, montrer que ce qu’on prône c’est autre chose, de l’humain, donner sa confiance, faire confiance, prendre ses responsabilités, amener des solutions.</p>
<p>Pourquoi ne pas faire ça chez un <a href="https://chatons.org/" target="_blank">CHATONS</a> ? Essentiellement parce que je veux rester dans du pair à pair, <strong>à hauteur d’homme</strong>. S’appeler par son prénom ou son pseudo, se tutoyer, tisser un lien avec celui qui me rend service.</p>
<p>En retour je vous remercierai chaleureusement, j’espère qu’on échangera et qu’on sympathisera mais n’attendez guère plus. Il s’agit de deux personnes qui se font confiance et s’entraident. Je vais surtout compter sur vous, placer des choses précieuses entre vos mains, ma confiance et mes données. C’est un geste anodin mais aussi fort et symbolique, des choses qui n’ont pas de prix mais qui signifient beaucoup.</p>
<p>Puisqu’on parle de mutualisation, de mon côté je peux stocker 1 To de données. Je suis un des rares zozos à avoir un NAS débranché électriquement donc éteint. Ça évite le piratage, le vol de données, la corruption liée à une MAJ foireuse, les surcharges électriques, l’usure des disques. Le seul vrai risque c’est le vol mais le NAS pèse lourd lol. Typiquement vous m’envoyez votre disque dur externe par la poste, je charge les données puis j’éteins le NAS. Je n’ai aucun problème à payer de ma poche les frais de retour. C’est pour faire du <a href="https://www.backblaze.com/blog/whats-the-diff-hot-and-cold-data-storage/" target="_blank">cold storage</a> (stocker des données auxquelles vous n’avez pas besoin d’accéder souvent) typiquement des photos/vidéos de famille dont vous voulez être sûr d’avoir un backup ailleurs que chez vous (externalisé) mais auquel vous n’avez pas besoin d’accéder régulièrement. Vous m’envoyez le DD externe tous les 6 mois et voilà. Le but étant de rendre service et de ne pas virer à la multinationale, je ne rends ce service qu’à 2-3 personnes. Je ne vais pas héberger 10 Go de données pour 50 personnes, ça serait ingérable.</p>
<p>Je rappelle que je suis sysadmin, je sais parfaitement héberger mes données et trouver des solutions mais ce n’est pas ce que je souhaite faire. Je souhaite mutualiser nos forces, faire confiance à d’autres personnes, m’appuyer sur leurs moyens et/ou leurs connaissances.</p>
<p>Je vous laisse passer par le <a href="https://www.blog-libre.org/contact/" target="_blank">formulaire de contact</a> ou laisser un message avec votre « vraie » adresse mail ci-dessous. Mon besoin est assez urgent, merci <img src="media/4933b95c.icon_wink.gif" data-original-source="https://www.blog-libre.org/wp-content/uploads/smilies/icon_wink.gif" alt=";)"></p>
<p><img src="media/25c7216e.1ea6f31074367d57d77721240d30fda9" data-original-source="http://cdn.libravatar.org/avatar/1ea6f31074367d57d77721240d30fda9" alt="Gravatar de blog-libre" class="gravatar" /><br/><i>Original post of <a href="https://www.blog-libre.org/2017/09/24/mutualisation/" title="Visit the source">blog-libre</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>


feed_id: https://blog.genma.fr/?Goaccess-Rapport-HTML-depuis-des-logs-d-un-serveur-web
title: genma : Yunohost - Goaccess - Rapport HTML depuis des logs d'un serveur web
uri: genma-Yunohost-Goaccess-Rapport-HTML-depuis-des-logs-d-un-serveu
url: https://blog.genma.fr/?Goaccess-Rapport-HTML-depuis-des-logs-d-un-serveur-web
content:
<img alt="" src="https://blog.genma.fr/IMG/arton2683.jpg?1502358437" width="150" height="79"><div><p><strong>Présentation de GoAcess</strong></p>
<p><i>GoAccess présente des statistiques en lisant les logs de votre serveur Web, non pas en exécutant du code côté utilisateur.</i></p>
<p>Site : <a href="https://goaccess.io/" title="https://goaccess.io/">https://goaccess.io/</a></p>
<p><i>GoAccess fonctionne en ligne de commande et présente par défaut ses résultats dans la console, en temps réel. Une série de panels (que l'on peut étendre individuellement) présentent les différents types de données : nombres de visiteurs uniques, URL non trouvées, OS, etc. Classique. Il est également possible de générer une − plutôt jolie − page html</i></p>
<p><span>
<img src="https://blog.genma.fr/IMG/png/goaccess-dashboard-2.png?1502358394" width="500" height="298" alt=""></span></p>
<p>Le site <a href="https://hal-9000.fr/?s11R3Q" title="GoAccess : analyse simple et efficace des logs d'un serveur Web">GoAccess : analyse simple et efficace des logs d'un serveur Web - https://hal-9000.fr/?s11R3Q</a> a fait un tutoriel qui montre qu'il est assez simple d'installer et d'utiliser GoAccess.</p>
<p>Autres tutoriels présentant des astuces complémentaires :
<br><img src="https://blog.genma.fr/local/cache-vignettes/L8xH11/puce-32883.gif?1494182300" width="8" height="11" alt="-"><a href="https://www.dsfc.net/internet/web-analytics/goaccess-outil-de-web-analytics/" title="Goaccess : un autre outil de Web Analytics par Denis Szalkowski">Goaccess : un autre outil de Web Analytics par Denis Szalkowski</a>
<br><img src="https://blog.genma.fr/local/cache-vignettes/L8xH11/puce-32883.gif?1494182300" width="8" height="11" alt="-"><a href="https://computerz.solutions/goaccess-logs-web-realtime/" title="GoAccess – Des logs web en temps réel et en cli">GoAccess – Des logs web en temps réel et en cli</a></p>
<p><strong>GoAccess répond à mon besoin</strong></p>
<p>J'ai étudié différents systèmes permettant de générer des rapports à partir de logs, je connais un peu ELK (ElasticSearch, LogStash, Kibana), mais ça reste très complexe et un peu usine à gaz pour mon besoin qui est de tout simplement superviser / avoir des rapports issus des logs de mon serveur Yunohost. Donc GoAcess correspond bien à mon besoin.</p>
<p>Par défaut, Yunohost conserve les logs du serveur Nginx un certain temps (il faudra que je regarde en détail la configuration de logrotate), cela convient</p>
<p><strong>Automatisons un peu tout ça...</strong></p>
<p>L'objectif est d'avoir des rapports réguliers en HTML. Pour ça, j'ai mis en place une tâche CROn qui va faire une concatènation des différents fichiers de logs et générer un seul et même rapport HTML via GoAccess qui contient donc une visualisation graphique de l'ensemble des données issues de ces logs. Je peux ensuite m'envoyer le rapport par mail, le récupérer, le mettre à disposition dans un espace dédié du serveur web...</p>
<div dir="ltr"><code>#/bin/bash<br><br>
# On fait le cat dans /tmp pour que ce soit effacer ensuite<br>
cat /var/log/nginx/blog.genma.fr-access.log* > /tmp/blog.genma.fr-access.full.log<br>
echo "Goacess - Lancement de la generation des rapports HTML"<br>
goaccess --log-format=COMBINED -f /tmp/blog.genma.fr-access.full.log -a -o BlogFullReport.html<br>
# Le fichier BlogFullReport.html contient un beau rapport HTML complet généré par Goaccess.<br>
echo "Goacess - Fini"</code></div>
<p><strong>Yunohost ?</strong></p>
<p>Yunohost propose la création de coquille vide pour des applications, via les <a href="https://github.com/YunoHost-Apps/multi_webapp_ynh" title="Custom Webapp">Multi Custom Webapp</a>, une version forkée des Custom Webapp qui permettent d'en créer plusieurs.</p>
<p>J'installe l'application en indiquant comme paramétrage : <br><img src="https://blog.genma.fr/local/cache-vignettes/L8xH11/puce-32883.gif?1494182300" width="8" height="11" alt="-"> Nom de l'application : GoAccess
<br><img src="https://blog.genma.fr/local/cache-vignettes/L8xH11/puce-32883.gif?1494182300" width="8" height="11" alt="-"> Adresse et chemin : moninstanceyunohost.fr et /goacess comme sous répertoire
<br><img src="https://blog.genma.fr/local/cache-vignettes/L8xH11/puce-32883.gif?1494182300" width="8" height="11" alt="-"> Utilisateur : genma</p>
<p>Ca mouline (il y a la création et modification de la configuration nginx qui se fait) et ensuite j'ai bien une tuile "GoAccess" dans la liste des applications et un dossier "/var/www/webapp_genma/GoAccess" dans lequel j'ai par défaut le fichier "index.html".</p>
<p>Il ne reste qu'à ajouter au script ci-dessus une ligne du type</p>
<div dir="ltr"><code>mv /tmp/BlogFullReport.html /var/www/webapp_genma/GoAccess</code></div>
<p>et depuis un navigateur web, en étant connecté à Yunohost d'aller sur<br><a href="https://moninstanceyunohost.org/goacess/BlogFullReport.html" rel="nofollow external">https://moninstanceyunohost.org/goacess/BlogFullReport.html</a></p>
<p>pour avoir le beau rapport généré par GoAccess !</p>
<p><strong>Aller plus loin ?</strong></p>
<p>Il suffit de faire un script un peu plus avancé, de le mettre en tâche planifiée (cron) et de créer par exemple un fichier index.html qui contiendra par exemple une série de liens :
<br><img src="https://blog.genma.fr/local/cache-vignettes/L8xH11/puce-32883.gif?1494182300" width="8" height="11" alt="-"> BlogFullReport_Jour1.html
<br><img src="https://blog.genma.fr/local/cache-vignettes/L8xH11/puce-32883.gif?1494182300" width="8" height="11" alt="-"> BlogFullReport_Jour2.html
<br><img src="https://blog.genma.fr/local/cache-vignettes/L8xH11/puce-32883.gif?1494182300" width="8" height="11" alt="-"> BlogFullReport_Jour3.html
<br><img src="https://blog.genma.fr/local/cache-vignettes/L8xH11/puce-32883.gif?1494182300" width="8" height="11" alt="-"> InstanceFullReport_Jour1.html
<br><img src="https://blog.genma.fr/local/cache-vignettes/L8xH11/puce-32883.gif?1494182300" width="8" height="11" alt="-"> InstanceFullReport_Jour2.html
<br><img src="https://blog.genma.fr/local/cache-vignettes/L8xH11/puce-32883.gif?1494182300" width="8" height="11" alt="-"> InstanceFullReport_Jour3.html</p>
<p>Ici les fichers InstanceFullReport_JourX.html étant généré par une ligne faisant appel à GoAcess mais pour un cumul de logs de fichiers Nginx pour l'instance (cumul des fichiers de log nginx pour monistanceyunohost.fr).</p></div>
<p><img src="media/42493842.dd4318d0d3a7d2ffb13756f63b76d85d" data-original-source="http://cdn.libravatar.org/avatar/dd4318d0d3a7d2ffb13756f63b76d85d" alt="Gravatar de genma" class="gravatar" /><br/><i>Original post of <a href="https://blog.genma.fr/?Goaccess-Rapport-HTML-depuis-des-logs-d-un-serveur-web" title="Visit the source">genma</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>


title: Journal du hacker : Liens intéressants Journal du hacker semaine #38
uri: 2017-09-25-Journal-du-hacker-Liens-intéressants-Journal-du-hacker-semaine-38
feed_id:
https://blog.journalduhacker.net/index.php?article126/liens-interessants-journal-du-hacker-semaine-38-2017

url:
https://blog.journalduhacker.net/index.php?article126/liens-interessants-journal-du-hacker-semaine-38-2017

content:
<p>Pour la 38ème semaine de 2017, voici <strong>10 liens</strong> intéressants que vous avez peut-être ratés, relayés par <a href="https://www.journalduhacker.net/">le Journal du hacker</a>, votre source d’informations pour le Logiciel Libre francophone !</p>

<a href="https://www.journalduhacker.net/"><img src="media/01f45034.logo-journal-du-hacker.png" data-original-source="https://blog.journalduhacker.net/data/medias/logo-journal-du-hacker.png"></a>

<ul><li><a href="https://www.journalduhacker.net/s/wmi0sw/comment_rennes_va_conomiser_500_000_euros">Comment Rennes va économiser 500.000 euros en se séparant de Microsoft</a></li>
<li><a href="https://www.journalduhacker.net/s/re2lcn/weboob_sort_une_nouvelle_version_qui_va">Weboob sort une nouvelle version qui va vous porter chance</a></li>
<li><a href="https://www.journalduhacker.net/s/epppaj/si_cest_gratuit_vous_tes_le_produit">« Si c'est gratuit, vous êtes le produit » : interview avec un indépendant du web</a></li>
<li><a href="https://www.journalduhacker.net/s/rzot5y/quatre_ans_avec_atos">Quatre ans avec Atos</a></li>
<li><a href="https://www.journalduhacker.net/s/njnq7p/r_cup_rer_les_images_dun_site_avec_wget">Récupérer les images d'un site avec wget</a></li>
<li><a href="https://www.journalduhacker.net/s/mortdc/messagerie_email_thique_comment_pr">Messagerie email éthique : comment préserver sa vie privée (et celle de son entourage)</a></li>
<li><a href="https://www.journalduhacker.net/s/artarq/la_fondation_gnome_annonce_son_soutien_au">La fondation GNOME annonce son soutien au développement du Librem5</a></li>
<li><a href="https://www.journalduhacker.net/s/l3rylb/mythes_et_r_alit_s_de_docker">Mythes et réalités de Docker</a></li>
<li><a href="https://www.journalduhacker.net/s/izc6xe/d_j_100_abonn_s_au_courrier_du_hacker_une">Déjà 100 abonnés au Courrier du hacker une semaine après son lancement</a></li>
<li><a href="https://www.journalduhacker.net/s/lwvsem/leff_quitte_le_w3c_suite_la">L'EFF quitte le W3C, suite à la standardisation des Encrypted Media Extensions</a></li>
</ul><p>Pour ne plus rater aucun article de la communauté francophone, voici :</p>

<ul><li><a href="https://www.journalduhacker.net/rss">Le flux RSS du Journal du hacker</a></li>
<li><a href="https://twitter.com/journalduhacker">Le compte Twitter du Journal du hacker</a></li>
<li><a href="https://framasphere.org/u/journalduhacker">Le compte Diaspora* du Journal du hacker</a></li>
<li><a href="https://framapiaf.org/@journalduhacker">Le compte Mastodon du Journal du hacker</a></li>
</ul><p>De plus le site web du Journal du hacker est « adaptatif (responsive) ». N’hésitez pas à le consulter depuis votre smartphone ou votre tablette !</p>

<p>Le Journal du hacker fonctionne de manière collaborative, grâce à la participation de ses membres. <a href="https://www.journalduhacker.net/invitations/request">Rejoignez-nous</a> pour proposer vos contenus à partager avec la communauté du Logiciel Libre francophone et faire connaître vos projets !</p>

<p><strong>Et vous ? Qu’avez-vous pensé de ces articles ?</strong> N’hésitez pas à réagir directement dans les commentaires de l’article sur le Journal du hacker ou bien dans les commentaires de ce billet :)</p>
<p><img src="media/ffe97a17.7916ee3cafa0bc3e9583bedad876dcd5" data-original-source="http://cdn.libravatar.org/avatar/7916ee3cafa0bc3e9583bedad876dcd5" alt="Gravatar de Journal du hacker" class="gravatar" /><br/><i>Original post of <a href="https://blog.journalduhacker.net/index.php?article126/liens-interessants-journal-du-hacker-semaine-38-2017" title="Visit the source">Journal du hacker</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>Carl Chenet : <a href="">Liens int&eacute;ressants Journal du hacker semaine #38</a> (21/09/2015)</li><li>Journal du hacker : <a href="">Liens int&eacute;ressants Journal du hacker semaine #38</a> (26/09/2016)</li></ul></div></p>


feed_id: https://framablog.org/2017/09/25/degooglisons-internet-cest-la-fin-du-debut/
title: Framablog : Dégooglisons Internet : c’est la fin du début !
uri: Framablog-Dégooglisons-Internet-c-est-la-fin-du-début
url: https://framablog.org/2017/09/25/degooglisons-internet-cest-la-fin-du-debut/
content:
<p>Rassurez-vous : hors de question de fermer les services ni de s’arrêter en si bon chemin ! Seulement voilà : en octobre 2014, nous annoncions nous lancer dans la campagne <a href="https://degooglisons-internet.org/">Dégooglisons Internet</a> pour les 3 années à venir.<br><span></span><br>
3 ans plus tard, il est temps de conclure ce chapitre… pour mieux continuer cette histoire commune.</p>
<h2>Nous étions jeunes et flou·e·s !</h2>
<p>Nous <a href="https://framablog.org/2016/10/03/degooglisons-saison-3-30-services-alternatifs-aux-produits-de-google-co/">en avons déjà parlé</a>, le succès de la campagne <a href="https://degooglisons-internet.org/">Dégooglisons Internet</a> nous a pris par surprise.</p>
<p>Nous nous lancions dans un pari flou, non pas celui de remplacer Google et consorts (il n’en a jamais été question, même s’il nous a fallu le préciser à chaque fois, à cause d’un titre trop accrocheur), mais celui de sensibiliser qui voulait l’entendre à un enjeu sociétal qui nous inquiète encore aujourd’hui : la captation des données numériques qui décrivent nos vies (rien de moins) par quelques grands acteurs privés, les trop fameux GAFAM (pour qui découvre tout cela, on parle de Google, Apple, Facebook, Amazon et Microsoft) et tous les prédateurs qui ne rêvent que de prendre leur place et qui <a href="http://www.lemonde.fr/entreprises/article/2017/09/17/internet-le-grand-bond-des-licornes-chinoises_5186986_1656994.html">un jour ou l’autre leur tailleront des croupières</a>.</p>
<div><a href="https://framablog.org/2017/09/08/la-rentree-des-gafam/"><img src="media/33ddfa53.dm_014_miniature.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/dm_014_miniature.png" alt="" width="800" height="445" srcset="https://framablog.org/wp-content/uploads/2017/09/dm_014_miniature.png 800w, https://framablog.org/wp-content/uploads/2017/09/dm_014_miniature-300x167.png 300w, https://framablog.org/wp-content/uploads/2017/09/dm_014_miniature-768x427.png 768w" sizes="(max-width: 800px) 100vw, 800px"></a><p>Cliquez sur l’image pour lire la BD « La rentrée des GAFAM », par <a href="http://ptilouk.net/">Simon « Gee » Giraudot</a>.</p></div>
<p> </p>
<p>Pour cela, nous souhaitions démontrer que le logiciel libre est une alternative éthique et pratique, en proposant sur trois ans la mise en ligne de 30 services alternatifs à ceux des GAFAM, tous issus du logiciel libre. L’idée de cette démonstration, dans nos têtes, était simple :</p>
<blockquote><p>Venez tester les services chez nous, utilisez-les tant que vous n’avez pas d’autre solution, puis voguez vers votre indépendance numérique en cherchant un hébergement mutualisé, en les hébergeant pour votre asso/école/syndicat/entreprise/etc. ou carrément en auto-hébergeant vos services web chez vous !</p></blockquote>
<p>Sur le papier ça paraissait simple, comme allant de soi. Bon OK, c’était déjà un sacré défi, mais un défi naïf. Car nous n’avions pas prévu ni l’engouement de votre côté ni la complexité de proposer un tel parcours… Bref, nous nous sommes confrontés à la réalité.</p>
<h2>C’est en dégooglisant qu’on devient dégooglisons</h2>
<p>Nous avons eu la chance qu’une telle proposition (que d’autres ont pu faire avant nous et à leur manière, <a href="http://zaclys.org/">la mère zaclys</a>, <a href="https://www.lautre.net/">lautre.net</a>, <a href="http://infini.fr/">infini.fr</a>, etc.) arrive à un moment et d’une façon qui a su parler à un public bien plus large que le petit monde libriste, tout en étant saluée par ce dernier.</p>
<p>Sauf qu’un grand coup de bol implique de grandes responsabilités : avec <a href="https://wiki.framasoft.org/evenements">près d’une centaine de rencontres par an</a> (publiques et/ou privées), que ce soit dans des conférences, des ateliers, des stands, des festivals, des partenariats… Nous avons appris et compris de nombreuses choses :</p>
<ul><li>Proposer un service fonctionne mieux dans les conditions de la confiance (transparence sur les <a href="https://framasoft.org/nav/html/cgu.html">Conditions Générales d’Utilisation</a> et le modèle économique, réputation, jusqu’à cet affreux nommage des Frama-trucs, qui rassure mais que même nous on n’en peut plus !) ;</li>
<li>Proposer ne suffit pas, il faut accompagner la transition vers un service libre, avec des <a href="https://docs.framasoft.org/">tutoriaux</a>, des exemples d’utilisation, un peu de bidouille esthétique – car nous ne sommes ni ergonomes, ni designers – des ateliers… et des réponses à vos questions. Donc beaucoup, beaucoup, <a href="https://contact.framasoft.org/">beaucoup de support</a> ;</li>
<li>Notre proposition deviendrait contre-productive et centraliserait vos vies numériques si nous ne nous lancions pas, en parallèle, dans les projets qui vous permettront à terme de sortir de Framasoft pour aller vers l’indépendance numérique (parce que les tutos « <a href="https://framacloud.org/">comment faire la même chose sur vos serveurs</a> » , c’est bien… <strong>et</strong> ça ne suffit pas).</li>
</ul><p>Nous avons donc passé trois ans à écouter, à chercher et à comprendre ce que signifiait <a href="https://degooglisons-internet.org/">Dégoogliser Internet</a>. Dégoogliser, c’est :</p>
<ul><li>tester, choisir, adapter et <a href="https://degooglisons-internet.org/liste">proposer des services web alternatifs</a> et les maintenir en place et à jour ;</li>
<li>et en même temps soutenir les personnes et communautés qui créent les logiciels derrière ces alternatives (la plupart du temps, ce n’est pas nous ! ! !) ;</li>
<li>et en même temps accompagner ces alternatives de <a href="https://docs.framasoft.org/">documentations</a>, <a href="https://framacloud.org/">tutoriels</a>, <a href="https://framablog.org/category/libres-services/">exemples</a> ;</li>
<li>et en même temps répondre aux invitations, <a href="https://wiki.framasoft.org/evenements">aller à votre rencontre</a>, faire des conférences et ateliers, communiquer sans cesse ;</li>
<li>et en même temps <a href="https://contact.framasoft.org/">rester à votre écoute</a> et répondre à vos questions aussi nombreuses que variées ;</li>
<li>et en même temps mettre en place les fondations vers des hébergements locaux et mutualités (comme <a href="https://chatons.org/">les CHATONS</a>, un collectif « d’AMAP du numérique ») ou vers l’auto-hébergement (en consacrant du temps salarié de développement au projet <a href="https://yunohost.org/">YUNOHOST</a>) ;</li>
<li>et en même temps poursuivre <a href="https://framablog.org/tag/jonas/">une veille sur les nouvelles trouvailles des GAFAM</a> pour mieux vous en informer, ainsi que sur ces personnes formidables qui cherchent à mieux cerner les dangers pour nos vies et nos sociétés ;</li>
<li>et en même temps <a href="https://framablog.org/category/internet-et-societe/">vous donner la parole</a> pour mettre en lumière vos projets et initiatives ;</li>
<li>et en même temps ne pas oublier de vous demander <a href="https://soutenir.framasoft.org/">votre soutien</a>, car ce sont vos dons qui assurent notre budget pour continuer ;</li>
<li>et en même temps boire des coups, avec ou sans <del datetime="2017-09-20T13:18:35+00:00">alcool</del> modération (non parce qu’on va pas faire tout ça dans la tristesse, non plus, hein !).</li>
</ul><p><a href="media/4df64650.degFin2.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/degFin2.png"><img src="media/4df64650.degFin2.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/degFin2.png" alt="" width="800" height="600" srcset="https://framablog.org/wp-content/uploads/2017/09/degFin2.png 800w, https://framablog.org/wp-content/uploads/2017/09/degFin2-300x225.png 300w, https://framablog.org/wp-content/uploads/2017/09/degFin2-768x576.png 768w" sizes="(max-width: 800px) 100vw, 800px"></a></p>
<h2>Ce que l’on retient de ces trois années…</h2>
<p>…c’est qu’il est temps d’arrêter. Non pas d’arrêter de Dégoogliser (c’est loin d’être fini : on vous prépare plein de belles choses !), mais d’arrêter de le faire comme ça, à une telle cadence. Il y a dans ces trois ans un aspect <em>publish or perish</em>, « sors un service ou finis aux oubliettes » , qui ne convient pas à l’attention et au soin que l’on veut apporter à nos propositions.</p>
<p>Jusqu’à présent, cette cadence nous a servi à proposer 32 alternatives, un ensemble sérieux et solide, mais continuer ainsi pourrait desservir tout le monde.</p>
<p>Certes, il serait possible de transformer Framasoft en entreprise, de faire une levée de fonds de quelques millions d’euros, d’en profiter pour faire un « séminaire de <em>team building</em> » aux Bahamas (ouais, on a besoin de repos ^^) et de… perdre notre identité et nos valeurs. Ce n’est clairement pas notre choix. En trois ans, notre association est passée de 2 à 7 permanent·e·s (avec environ 35 membres), et même si cette croissance pose déjà de nombreux soucis, nous sommes fier·e·s de rester cette bande de potes qui caractérise l’association Framasoft, et <a href="https://framatube.org/media/framasoft-ne-soyons-pas-serieux">de ne pas nous prendre au sérieux</a> (tout en faisant les choses le plus sérieusement possible).</p>
<p>Ce que l’on retient, aussi, c’est que la problématique des silos de données centralisés par quelques monopoles mérite une réponse bien plus complexe et complète que simplement proposer « 32 services alternatifs ». Nous pourrions continuer et faire grimper les enchères : « <em>42… 42 sur ma gauche, 53, ah ! 69 services ! Qui dit mieux ?</em> », mais à quoi bon si on n’inscrit pas cette réponse dans un ensemble d’outils et de projets pensés différemment de ce « <em>GAFAM way of life</em> » qui nous est vendu avec chaque <em>Google Home</em> qui nous écoute, avec chaque <em>iPhone</em> qui nous dévisage, et avec tous ces autres projets ubérisants ?</p>
<div><a href="http://mashable.france24.com/divertissement/20170915-south-park-e1s21-amazon-echo-alexa-google-home"><img src="media/d654459a.south-park-alexa-google-home.jpg" data-original-source="https://framablog.org/wp-content/uploads/2017/09/south-park-alexa-google-home.jpg" alt="" width="850" height="524" srcset="https://framablog.org/wp-content/uploads/2017/09/south-park-alexa-google-home.jpg 850w, https://framablog.org/wp-content/uploads/2017/09/south-park-alexa-google-home-300x185.jpg 300w, https://framablog.org/wp-content/uploads/2017/09/south-park-alexa-google-home-768x473.jpg 768w, https://framablog.org/wp-content/uploads/2017/09/south-park-alexa-google-home-80x50.jpg 80w" sizes="(max-width: 850px) 100vw, 850px"></a><p>Cliquez pour découvrir comment un récent épisode de South Park a trollé les foyers possédant un Google Home, un Amazon Echo ou Siri sur ses produits Apple.<br>Image : © Comedy Central</p></div>
<p>Ce que l’on retient, enfin, c’est que nombre de personnes (qui ne s’intéressent pas spécialement à l’informatique ni au Libre) partagent, parfois sans le savoir, les valeurs du Libre. Ce sont des membres d’associations, de fédérations, des gens de l’Économie Sociale et Solidaire, de l’éducation populaire, du personnel enseignant, encadrant, formateur. Ce sont des personnes impliquées dans une vie locale, dans des MJC, des tiers-lieux, des locaux syndicaux, des espaces de co-working et des maisons associatives. Ce sont des personnes à même de comprendre, intégrer et partager ces valeurs autour d’elles et de nous enseigner leurs valeurs, connaissances et savoirs en retour.</p>
<p>Le plus souvent : c’est vous.</p>
<p> </p>
<h2>« OK, mais il est où mon Framamail ? »</h2>
<p>Alors voilà, touchant du doigt la fin des 3 années annoncées, c’est l’occasion de faire le bilan (on vous prépare une belle infographie afin de raconter cela) et de prendre un peu de recul pour chercher quelle suite donner à cette aventure. Car c’est loin d’être fini : si nous avons bel et bien dégooglisé trente services, c’est que nous en avons rajouté en cours de route, et certains ne sont pas (encore) là…</p>
<div><a href="media/de110f47.carte-roman-2014-2016.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/carte-roman-2014-2016.png"><img src="media/01973c72.carte-roman-2014-2016-1024x597.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/carte-roman-2014-2016-1024x597.png" alt="" width="1024" height="597" srcset="https://framablog.org/wp-content/uploads/2017/09/carte-roman-2014-2016-1024x597.png 1024w, https://framablog.org/wp-content/uploads/2017/09/carte-roman-2014-2016-300x175.png 300w, https://framablog.org/wp-content/uploads/2017/09/carte-roman-2014-2016-768x448.png 768w, https://framablog.org/wp-content/uploads/2017/09/carte-roman-2014-2016.png 1218w" sizes="(max-width: 1024px) 100vw, 1024px"></a><p>Toi aussi, joue avec Framasoft au jeu des 7… 12… au jeu des plein de différences ! (Cartes « Dégooglisons Internet » 2014 et 2016, par <a href="http://ptilouk.net/">Gee</a>.)</p></div>
<p> </p>
<p>Nous allons vous décevoir tout de suite : nous n’allons pas proposer de Framamail, tout du moins pas sous la forme que vous imaginez. L’e-mail est une technologie à la fois simple (dans sa conception) et extrêmement complexe (dans sa maintenance parmi le champ de mines que sont les SPAM et <a href="https://framablog.org/2017/02/17/etre-un-geant-du-mail-cest-faire-la-loi/">les règles imposées par les géants du web</a>). C’est d’autant plus complexe si vous avez un grand nombre de boîtes mail à gérer (et ouvrir un Framamail, c’est risquer d’avoir 10 000 inscriptions dès la première semaine -_-…)</p>
<p>Nous sommes dans l’exemple typique de ce que l’on décrivait juste avant : si on ouvre un Framamail, et si on ne veut pas de pannes de plus de deux heures sur un outil aussi sensible, il nous faut embaucher deux administratrices système et un technicien support à plein temps juste pour ce service. Ce qui peut se financer par vos dons… mais au détriment des autres services et projets ; ou en faisant de vous des clients-consommateurs (alors que, depuis le début, nous cherchons à prendre chacun de nos échanges avec vous comme autant de contributions à cette aventure commune).</p>
<p>Heureusement, il existe d’autres pistes à explorer… pour l’email tout comme pour les alternatives à YouTube, Change.org, MeetUp, Blogger qu’il nous reste à rayer de la carte !</p>
<h2>Bienvenue au banquet de Dégooglisons !</h2>
<div><a href="https://degooglisons-internet.org/"><img src="media/09eb89d7.Peha-Banquet-CC-By-1920-1024x743.jpg" data-original-source="https://framablog.org/wp-content/uploads/2017/09/Peha-Banquet-CC-By-1920-1024x743.jpg" alt="" width="1024" height="743" srcset="https://framablog.org/wp-content/uploads/2017/09/Peha-Banquet-CC-By-1920-1024x743.jpg 1024w, https://framablog.org/wp-content/uploads/2017/09/Peha-Banquet-CC-By-1920-300x218.jpg 300w, https://framablog.org/wp-content/uploads/2017/09/Peha-Banquet-CC-By-1920-768x558.jpg 768w, https://framablog.org/wp-content/uploads/2017/09/Peha-Banquet-CC-By-1920.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px"></a><p>Bienvenue au banquet concluant Dégooglisons Internet, <a href="https://framasphere.org/people/955cdfb03c8f013250b62a0000053625">par Péhä</a> (CC-By)</p></div>
<p> </p>
<p>Il est donc temps de clore cet album, de sortir des gauloiseries en vous invitant à aiguiser vos canines sur les GAFAM… Nous en profitons pour remercier <a href="https://framasphere.org/people/955cdfb03c8f013250b62a0000053625">l’illustrateur Péhä</a> de cette magnifique image qui nous permet de conclure en beauté ces trois années d’expérimentations en commun.</p>
<p>Nous vous proposons, dès aujourd’hui, une refonte complète du site <a href="https://degooglisons-internet.org/">Dégooglisons Internet</a> visant à répondre au plus vite à vos attentes. C’est un peu la v1, la première mouture finie de ce portail, après trois années de gestation. Nous espérons que vous aurez encore plus de facilité à partager ce site pour Dégoogliser votre entourage.</p>
<p>Cette conclusion est pour nous l’opportunité d’avoir une pensée emplie de gratitude et de <em>datalove</em> pour toutes les personnes, les communautés, les bénévoles, les donatrices, les salariés, les passionnées, les partageurs, les contributrices… bref, pour cette foultitude qui a rendu cela possible.</p>
<p>Chaque fin d’album est surtout l’occasion de tourner la page, afin d’ouvrir un nouveau chapitre… Promis, ceci n’est que le début, on en reparle d’ici quelques semaines.</p>
<p>Merci, vraiment, du fond de nos petits cœurs de libristes, et à très vite,</p>
<p><strong>L’équipe de Framasoft.</strong></p>
<p><a href="media/fdd78a59.gauloiseries.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/gauloiseries.png"><img src="media/fdd78a59.gauloiseries.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/gauloiseries.png" alt="" width="800" height="600" srcset="https://framablog.org/wp-content/uploads/2017/09/gauloiseries.png 800w, https://framablog.org/wp-content/uploads/2017/09/gauloiseries-300x225.png 300w, https://framablog.org/wp-content/uploads/2017/09/gauloiseries-768x576.png 768w" sizes="(max-width: 800px) 100vw, 800px"></a></p>
<p><img src="media/d4130779.f411e4809021b786b7eb0c8956612e76" data-original-source="http://cdn.libravatar.org/avatar/f411e4809021b786b7eb0c8956612e76" alt="Gravatar de Framablog" class="gravatar" /><br/><i>Original post of <a href="https://framablog.org/2017/09/25/degooglisons-internet-cest-la-fin-du-debut/" title="Visit the source">Framablog</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>Framablog : <a href="">MyPads&amp;nbsp;: l&amp;rsquo;alternative de Framasoft &amp;agrave; Google Docs</a> (06/10/2015)</li><li>Framablog : <a href="">Framadrive, conservez et synchronisez 2 Go sur nos serveurs</a> (05/10/2015)</li><li>Framablog : <a href="">D&amp;eacute;googlisons saison 2&amp;nbsp;: ils ne savaient pas que c&amp;rsquo;&amp;eacute;tait impossible, alors ils l&amp;rsquo;ont fait&amp;nbsp;!</a> (05/10/2015)</li><li>Framablog : <a href="">Framaboard&amp;nbsp;: les libristes ont r&amp;eacute;invent&amp;eacute; le tableau blanc&amp;hellip; mais en mieux&amp;nbsp;!</a> (07/10/2015)</li><li>Framablog : <a href="">Framadrop&amp;nbsp;: envoyez de gros fichiers en toute s&amp;eacute;curit&amp;eacute;&amp;nbsp;!</a> (09/10/2015)</li></ul></div></p>


feed_id: https://angristan.fr/ecrire-japonais-arch-linux/
title: Angristan : Écrire en japonais sous Arch Linux
uri: Angristan-Écrire-en-japonais-sous-Arch-Linux
url: https://angristan.fr/ecrire-japonais-arch-linux/
content:
<p><img width="480" height="270" src="media/6a73bb22.moe_arch_linux-480x270.png" data-original-source="https://angristan.fr/wp-content/uploads/2017/08/moe_arch_linux-480x270.png" alt="" srcset="https://angristan.fr/wp-content/uploads/2017/08/moe_arch_linux-480x270.png 480w, https://angristan.fr/wp-content/uploads/2017/08/moe_arch_linux-300x169.png 300w, https://angristan.fr/wp-content/uploads/2017/08/moe_arch_linux-1024x576.png 1024w" sizes="(max-width: 480px) 100vw, 480px"></p>Lorsque l'on apprend le japonais ou que l'on le parle, il arrive un moment ou l'on a envie ou besoin de pouvoir s'exprimer en japonais sur un outil numérique. Quand je parle de japonais je parle bien sûr des Kana (Hiragana et Katakana) et des Kanji.

Sur des systèmes d'exploitation tels que Android, iOS, macOS ou encore Windows, il est très facile de rajouter la disposition japonaise du clavier depuis les réglages. Sous Arch Linux, ça n'est absolument pas natif. Malgré <a href="https://wiki.archlinux.org/index.php/Internationalization/Japanese">une page de wiki dédiée</a>, c'est vraiment très peu explicite, et c'est <a href="https://namelivia.com/how-to-get-japanese-input-on-archlinux-openbox/">cet article</a> qui m'a le plus aidé.

Notez que je fais ce tutoriel pour Arch Linux, puis que c'est mon OS actuel, mais la démarche est similaire pour toutes les distributions GNU/Linux utilisant iBus et, c'est à dire la majorité. D'ailleurs iBus est une dépendance de Gnome donc il doit supprimer quelques étapes, mais si vous utilisez un autre environnement de bureau, comme chez moi KDE, il va falloir partir de zéro.<span></span>

Pour information, <a href="https://fr.wikipedia.org/wiki/Intelligent_Input_Bus">iBus</a> est un gestionnaire de méthodes d'entrée pour des systèmes Linux et Unix, et <a href="https://github.com/ibus/ibus-anthy">ibus-anthy</a> est la méthode d'entré japonaise pour iBus.
<h2>Installation et configuration des polices</h2>
Avant toute chose, nous allons installer les polices nous permettant d'avoir un bon rendu des Kanji et des Kana.

Depuis les dépôts :
<pre>sudo pacman -S adobe-source-han-sans-jp-fonts otf-ipafont</pre>
Depuis le AUR (remplacer pacaur par votre gestionnaire de paquets pour le AUR)
<pre><span>pacaur -S ttf-monapo
</span></pre>
Décommettez <code>ja_JP.UTF-8</code> dans <code>/etc/locale.gen</code>.
<h2>Installation et configuration</h2>
On installe les paquets présentés plus haut :
<pre>sudo pacman -S ibus ibus-anthy</pre>
Ensuite on ajoute quelques lignes à notre <a href="https://wiki.archlinux.org/index.php/Xprofile">xprofile</a>, ce qui nous permet dans lancer iBus au démarrage de la session X.
<pre>echo "# Settings for Japanese input
export GTK_IM_MODULE='ibus'
export QT_IM_MODULE='ibus'
export XMODIFIERS=@im='ibus'
# Toolbar for anthy
ibus-daemon -drx" >> .xprofile</pre>
Ensuite, redémarrez votre PC afin d'avoir les bonnes polices ainsi que l'icône iBus dans votre barre des tâches, puis accéder aux préférences via un clic droit.

Pour info vous pouvez aussi accéder aux préférences via la commande <code>ibus-setup</code>.

Ajoutez la disposition "Japonais - Anthy"

<a href="media/f3e0dd42.ibus_prC3A9fC3A9rences.png" data-original-source="https://angristan.fr/wp-content/uploads/2017/09/ibus_pr%C3%A9f%C3%A9rences.png"><img src="media/f3e0dd42.ibus_prC3A9fC3A9rences.png" data-original-source="https://angristan.fr/wp-content/uploads/2017/09/ibus_pr%C3%A9f%C3%A9rences.png" alt="Écrire en Japonais sous Arch Linux" width="1101" height="658"></a>

Ensuite vous pouvez cliquer sur "Préférences" pour modifier les nombres options disponibles.

<a href="media/4d4edffa.ibus_anthy.png" data-original-source="https://angristan.fr/wp-content/uploads/2017/09/ibus_anthy.png"><img src="media/4d4edffa.ibus_anthy.png" data-original-source="https://angristan.fr/wp-content/uploads/2017/09/ibus_anthy.png" alt="Écrire en Japonais sous Arch Linux" width="1311" height="710"></a>

Pour prendre en main ce nouveau clavier, voici quelques raccourcis utiles :
<ul><li><em>super</em> + <em>espace</em> pour passer de français à japonais et inversement</li>
 	<li><em>espace</em> lors de l'écriture d'un mot pour faire apparaître les suggestions (kanji et autres, voir GIF ci-dessous)</li>
 	<li>F6 pour passer le ou les signes soulignés en Hiragana</li>
 	<li>F7 pour passer les signes soulignés en Katakana</li>
 	<li>"l" + Kana pour écrire le petit Kana. Exemple : "l" + "つ" = "っ"</li>
</ul><a href="media/6b6318ed.kanji.gif" data-original-source="https://angristan.fr/wp-content/uploads/2017/09/kanji.gif"><img src="media/6b6318ed.kanji.gif" data-original-source="https://angristan.fr/wp-content/uploads/2017/09/kanji.gif" alt="Écrire en Japonais sous Arch Linux" width="508" height="306"></a>

Pour info les petits Kana sont remplacés automatiquement dans les combinaisons comme きゅ ou みょ, et dans les pauses comme dans 待って ou いってらっしゃい (double exemple hehe).

Anthy supporte le système <a href="https://fr.wikipedia.org/wiki/M%C3%A9thode_Hepburn">Hepburn</a> et <a href="https://fr.wikipedia.org/wiki/Kunrei">Kunrei</a>, ce que signifie vous pouvez écrire <em>tu</em> ou <em>tsu</em>, <em>hu</em> ou <em>fu</em>, <em>si</em> ou <em>shi</em>, etc.

Les signes de ponctuation comme "。" ou "、" sont accessible via les mêmes touches que sur clavier AZERTY. Le signe d'allongement pour les Katakana "ー" est le trait d'union "-" .

<a href="media/803c90bd.E99DA2E799BDE38184.gif" data-original-source="https://angristan.fr/wp-content/uploads/2017/09/%E9%9D%A2%E7%99%BD%E3%81%84.gif"><img src="media/803c90bd.E99DA2E799BDE38184.gif" data-original-source="https://angristan.fr/wp-content/uploads/2017/09/%E9%9D%A2%E7%99%BD%E3%81%84.gif" alt="Écrire en Japonais sous Arch Linux" width="980" height="461"></a>

<em>Auto-promotion : les GIFs sont faits avec <a href="https://angristan.fr/peek-enregistrer-gif-linux/">Peek</a>. :P</em>

Et voilà, vous savez maintenant comment écrire en japonais sous Arch. Comme vous pouvez le voir, l'installation des polices et du moteur d'entrée ne sont pas compliqués, mais ça ne s'invente pas. Concernant la disposition, celle-ci n'est pas compliquée à prendre en main, et avec un peu de pratique ça devient naturel.

En espérant en avoir aidé plus d'un... またね！<p>L'article <a rel="nofollow" href="https://angristan.fr/ecrire-japonais-arch-linux/">Écrire en japonais sous Arch Linux</a> a été publié sur <a rel="nofollow" href="https://angristan.fr/">Angristan</a></p>
<p><img src="media/40491783.6296566c96741c84fec8de9da966d261" data-original-source="http://cdn.libravatar.org/avatar/6296566c96741c84fec8de9da966d261" alt="Gravatar de Angristan" class="gravatar" /><br/><i>Original post of <a href="https://angristan.fr/ecrire-japonais-arch-linux/" title="Visit the source">Angristan</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>TheGlu : <a href="">Apachetop, ou comment observer la vie tr&eacute;pidante de son serveur apache en direct.</a> (11/01/2008)</li><li>Angristan : <a href="">Don du mois : Arch Linux</a> (27/08/2017)</li><li>Angristan : <a href="">Un proxy HTTP en quelques minutes avec Squid</a> (02/02/2017)</li><li>Angristan : <a href="">Mettre en place un bot &laquo;&nbsp;User Count&nbsp;&raquo; pour son instance Mastodon</a> (08/04/2017)</li><li>TheGlu : <a href="">Songbird, le lecteur audio qu&rsquo;il est pratique !</a> (18/11/2007)</li></ul></div></p>


feed_id: https://framablog.org/2017/09/26/framasoft-on-vous-a-fait-un-dessin/
title: Framablog : Framasoft : on vous a fait un dessin !
uri: Framablog-Framasoft-on-vous-a-fait-un-dessin
url: https://framablog.org/2017/09/26/framasoft-on-vous-a-fait-un-dessin/
content:
<p>Ça nous étonne souvent. L’image de Framasoft est parfois bien loin de notre réalité quotidienne. Partant de l’adage selon lequel une image vaut plus que mille mots, nous sommes allé·e·s demander de l’aide à un certain Geoffrey Dorne.</p>
<p><span></span></p>
<h2>Framasoft : une image disproportionnée</h2>
<p>Même si nous essayons de <a href="https://soutenier.framasoft.org/association">nous présenter en toute transparence</a>, nombre de personnes qui bénéficient de nos projets et services ne savent pas vraiment qui nous sommes.</p>
<p>Nous le constatons principalement dans les questions, suggestions (voire exigences) qui sont exprimées <a href="https://contact.framasoft.org/">dans le support</a>, sur les stands ou dans les réseaux sociaux : nous avons parfois l’image d’une grosse boite de logiciels, armée de centaines d’employé·e·s et d’un budget ministériel ^^. Cela provient peut-être d’un nom créé en réaction à Microsoft, à l’époque où la firme de Redmond régnait sur le monde informatique.</p>
<p>Bref, rétablissons un peu la réalité. 35 membres (dont 7 salarié·e·s) gèrent une association qui anime et maintient une cinquantaine de projets auxquels plus de 700 personnes contribuent. Ces projets sont financés par plus de 2000 donateurs et donatrices, avec un budget avoisinant les 250 000 € par an (ça varie selon les années ^^)…</p>
<p>Ces dons, qui représentent 90 % de nos revenus, sont ce qui nous permet d’accueillir entre 200 000 et 400 000 personnes sur nos sites web chaque mois, de participer à une centaine d’événements par an, d’y distribuer des milliers de flyers et stickers… Énorme pour une bande de potes, mais on est loin de la multinationale !</p>
<p>Du coup, au lieu d’aligner des chiffres en mode entreprise-qui-fait-trop-sérieux, le mieux, c’est de vous les montrer.</p>
<h2>L’infographie « Le monde de Framasoft »</h2>
<p><a href="http://geoffreydorne.com/">Geoffrey Dorne</a> est un designer éthique, auteur du <a href="https://graphism.fr/">blog Graphism.fr</a> et fondateur de l’agence <a href="http://designandhuman.com/">Design &amp; Human</a>. Cela fait un moment que nous nous suivons, mutuellement, sur les réseaux sociaux et dans nos actions respectives, avec une complicité grandissante. Nous lui avons donc demandé de nous aider à présenter Framasoft et son évolution après ces trois années de campagne Dégooglisons Internet, qui ont entraîné de nombreuses mutations dans notre association, ainsi que dans le réseau de projets.</p>
<p>Nous tenons à le remercier pour l’attention, le talent et l’humanité qu’il a apportées à la commande de cette infographie, qu’il a placée sous la licence libre CC-By-SA.</p>
<p>Et puis soyons franc·he·s, nous avons été un peu pénibles ! C’était compliqué de mettre tout notre bazar dans une seule image qui convienne aux sensibilités diverses de nos personnes, non moins variées. Le résultat ? C’est à vous de nous dire, et surtout de vous en emparer.</p>
<div><a href="media/1cd2b0c9.graphie_Le-Monde-de-Framasoft_CC-By-SA-Geoffrey-Dorne-1920px.jpg" data-original-source="https://framablog.org/wp-content/uploads/2017/09/infographie_Le-Monde-de-Framasoft_CC-By-SA-Geoffrey-Dorne-1920px.jpg"><img src="media/1cd2b0c9.graphie_Le-Monde-de-Framasoft_CC-By-SA-Geoffrey-Dorne-1920px.jpg" data-original-source="https://framablog.org/wp-content/uploads/2017/09/infographie_Le-Monde-de-Framasoft_CC-By-SA-Geoffrey-Dorne-1920px.jpg" alt="" width="1920" height="3956" srcset="https://framablog.org/wp-content/uploads/2017/09/infographie_Le-Monde-de-Framasoft_CC-By-SA-Geoffrey-Dorne-1920px.jpg 1920w, https://framablog.org/wp-content/uploads/2017/09/infographie_Le-Monde-de-Framasoft_CC-By-SA-Geoffrey-Dorne-1920px-146x300.jpg 146w, https://framablog.org/wp-content/uploads/2017/09/infographie_Le-Monde-de-Framasoft_CC-By-SA-Geoffrey-Dorne-1920px-768x1582.jpg 768w, https://framablog.org/wp-content/uploads/2017/09/infographie_Le-Monde-de-Framasoft_CC-By-SA-Geoffrey-Dorne-1920px-497x1024.jpg 497w" sizes="(max-width: 1920px) 100vw, 1920px"></a><p>Cliquez sur l’image pour l’agrandir.<br>Infographie réalisée par <a href="http://geoffreydorne.com/">Geoffrey Dorne</a>, CC-By-SA</p></div>
<p> </p>
<h3>Pour aller plus loin</h3>
<ul><li><a href="http://geoffreydorne.com/">Site web de Geoffrey Dorne</a></li>
<li><a href="https://soutenir.framasoft.org/association">Présentation de l’association Framasoft</a></li>
</ul><p> </p>
<p> </p>
<p><img src="media/d4130779.f411e4809021b786b7eb0c8956612e76" data-original-source="http://cdn.libravatar.org/avatar/f411e4809021b786b7eb0c8956612e76" alt="Gravatar de Framablog" class="gravatar" /><br/><i>Original post of <a href="https://framablog.org/2017/09/26/framasoft-on-vous-a-fait-un-dessin/" title="Visit the source">Framablog</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>Framablog : <a href="">(B&amp;ecirc;tisier) Hey&amp;nbsp;! J&amp;rsquo;ai trouv&amp;eacute; 7 nouveaux moyens de d&amp;eacute;googliser (le 6e va te surprendre)</a> (08/10/2016)</li><li>Framablog : <a href="">D&amp;eacute;googlisons Internet&amp;nbsp;: c&amp;rsquo;est la fin du d&amp;eacute;but&amp;nbsp;!</a> (25/09/2017)</li><li>Framablog : <a href="">Framasph&egrave;re : c&#039;est gratuit, mais ce n&#039;est pas toi le produit !</a> (07/10/2014)</li><li>Framablog : <a href="">MyPads : le d&amp;eacute;veloppement est lanc&amp;eacute;</a> (11/12/2014)</li><li>Framablog : <a href="">Framasph&amp;egrave;re : c&amp;rsquo;est gratuit, mais ce n&amp;rsquo;est pas toi le produit !</a> (07/10/2014)</li></ul></div></p>


feed_id: https://www.dadall.info/article615/ubuntu-touch-ota-2-disponible
title: dada : Ubuntu Touch OTA-2 disponible et Librem 5
uri: dada-Ubuntu-Touch-OTA-2-disponible-et-Librem-5
url: https://www.dadall.info/article615/ubuntu-touch-ota-2-disponible
content:
<br><div align="center"><img src="media/446bed59.ubuntu-logo14.png" data-original-source="https://www.dadall.info/data/images/logo/ubuntu-logo14.png" alt=""><br></div><br><br>J'en parlais il y a maintenant <a href="https://www.dadall.info/article603/ubports-prend-le-relai-d-ubuntu-touch" title="4 mois">4 mois</a>, les gars d'UBPorts ont pris le relais de Canonical pour le développement d'Ubuntu Touch. Après nous avoir fait profiter d'une <a href="https://ubports.com/blog/ubports-blog-1/post/stable-ota-1-halium-is-heating-up-convergence-works-37" title="mise à jour en juin">mise à jour en juin</a>, ils reviennent avec <a href="https://ubports.com/blog/ubports-blog-1/post/ubuntu-touch-ota-2-release-78" title="une OTA-2">une OTA-2</a>  !<br>Au programme de cette «Over The Air» numéro 2, pas grand chose, qu'on se le dise. Les plus heureux devraient être les propriétaires de Nexus 5 et de OnePlus. Ces deux appareils concentrent la grande majorité des quelques les corrections de bug. Ceci-dit, hors de question de bouder une mise à jour, ça ne se fait pas !<br><br>Nous avons donc : <br><ul><li>Amélioration du magasin d'application OpenStore</li><li>La possibilité de changer facilement entre les canaux stable/RC/développement.</li><li>Le support direct de Caldav dans le calendrier intégré (!)</li><li>Correction du crash navigateur quand l'appareil est branché à un écran externe</li><li>Et le reste par <a href="https://ubports.com/blog/ubports-blog-1/post/ubuntu-touch-ota-2-release-78" title="ici">ici</a>.</li></ul><br>J'en profite pour balancer un commentaire un peu trollesque sur ce truc :<br><center><br><iframe src="https://framapiaf.org/@Bristow_69/2330139/embed" width="500"></iframe><br></center><br><br><br>Comme dit dans les commentaires de ce Toot, après Firefox OS et Ubuntu Touch, j'avoue être devenu très frileux vis-à-vis des tentatives qui s'acharnent à faire des OS pour appareils mobiles. UBPorts fait très bien le boulot sur ma tablette et c'est maintenant hors de question de bidouiller mon téléphone ou d'en acheter un autre. Mon Fairphone 2 ne bougera pas avant de très nombreuses années !<br><br>M'enfin, si vous voulez mettre la main à la poche, laissez-vous aller, l'idée sera peut-être un réussite !<br><br><br><noscript><!-- Piwik Image Tracker--><img src="http://www.dadall.info/piwik/piwik.php?idsite=1&amp;rec=1&amp;action_name=RSS" alt=""><!-- End Piwik --></noscript>
<p><img src="media/48d98f88.9bcde41f0ceee54d4588bb741ab92e6f" data-original-source="http://cdn.libravatar.org/avatar/9bcde41f0ceee54d4588bb741ab92e6f" alt="Gravatar de dada" class="gravatar" /><br/><i>Original post of <a href="https://www.dadall.info/article615/ubuntu-touch-ota-2-disponible" title="Visit the source">dada</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>


feed_id: https://framablog.org/2017/09/27/se-degoogliser-en-toute-facilite/
title: Framablog : (se) Dégoogliser en toute facilité
uri: Framablog-(se)-Dégoogliser-en-toute-facilité
url: https://framablog.org/2017/09/27/se-degoogliser-en-toute-facilite/
content:
<p>Lundi, <a href="https://framablog.org/2017/09/25/degooglisons-internet-cest-la-fin-du-debut/">nous vous annoncions la refonte du site Dégooglisons Internet</a>. Aujourd’hui, nous vous proposons un petit tour des co-propriétaires (ben oui : il est sous <a href="https://creativecommons.org/licenses/by-sa/2.0/fr/">licence CC-By-SA</a> !), afin que vous puissiez encore mieux vous emparer de cet outil pour vous dégoogliser, et dégoogliser votre entourage.</p>
<p><span></span></p>
<h2>Les GAFAM, au bûcheeeeeeer !</h2>
<p>Le site <a href="https://degooglisons-internet.org/">Dégooglisons Internet</a> a servi, durant trois ans, à présenter une campagne d’information, d’actions, d’intentions de Framasoft tout en proposant un portail d’accès aux services qui venaient s’ajouter aux conquêtes de la communauté libriste.</p>
<p>Maintenant que nous avons conclu cette campagne, il va remplir une fonction unique : faciliter l’adoption de services éthiques, respectueux de ces données personnelles qui décrivent nos vies numériques. En trois ans, nous avons fait bien plus qu’héberger des services, et il était grand temps de vous présenter tout cela de manière claire et facile d’accès.</p>
<p>Dès l’accueil, nous vous invitons à faire feu des GAFAM (les géants du web que sont Google, Apple, Facebook, Amazon et Microsoft) en expliquant en trois bulles la problématique à laquelle nous essayons de répondre.</p>
<p><a href="media/a9fbb89e.DIo3-01-accueil.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/DIo3-01-accueil.png"><img src="media/a9fbb89e.DIo3-01-accueil.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/DIo3-01-accueil.png" alt="" width="1863" height="824" srcset="https://framablog.org/wp-content/uploads/2017/09/DIo3-01-accueil.png 1863w, https://framablog.org/wp-content/uploads/2017/09/DIo3-01-accueil-300x133.png 300w, https://framablog.org/wp-content/uploads/2017/09/DIo3-01-accueil-768x340.png 768w, https://framablog.org/wp-content/uploads/2017/09/DIo3-01-accueil-1024x453.png 1024w" sizes="(max-width: 1863px) 100vw, 1863px"></a></p>
<p>Bien vite, on arrive au cœur de la proposition : les services. Si vous ne pouvez pas les essayer, comment pourrez-vous les adopter ? Nous vous invitons donc à trouver le service que vous cherchez suivant deux entrées possibles (on y reviendra !)</p>
<p><a href="media/8041d721.DIo3-02-choix.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/DIo3-02-choix.png"><img src="media/8041d721.DIo3-02-choix.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/DIo3-02-choix.png" alt="" width="1470" height="298" srcset="https://framablog.org/wp-content/uploads/2017/09/DIo3-02-choix.png 1470w, https://framablog.org/wp-content/uploads/2017/09/DIo3-02-choix-300x61.png 300w, https://framablog.org/wp-content/uploads/2017/09/DIo3-02-choix-768x156.png 768w, https://framablog.org/wp-content/uploads/2017/09/DIo3-02-choix-1024x208.png 1024w" sizes="(max-width: 1470px) 100vw, 1470px"></a></p>
<p>Néanmoins, tester des services n’est qu’une première étape, et nous vous proposons ensuite d’aller plus loin :</p>
<ul><li>apprendre à les utiliser et les maîtriser avec <a href="https://docs.framasoft.org/fr/">notre documentation</a> ;</li>
<li>aller vers l’auto-hébergement via <a href="https://framacloud.org/fr/cultiver-son-jardin">le Framacloud</a> ;</li>
<li>savoir s’il n’y aurait pas un hébergeur éthique près de chez vous : <a href="https://chatons.org/">l’un des CHATONS</a>.</li>
</ul><p><a href="media/87fefaab.DIo3-03-aller-plus-loin.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/DIo3-03-aller-plus-loin.png"><img src="media/87fefaab.DIo3-03-aller-plus-loin.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/DIo3-03-aller-plus-loin.png" alt="" width="1445" height="422" srcset="https://framablog.org/wp-content/uploads/2017/09/DIo3-03-aller-plus-loin.png 1445w, https://framablog.org/wp-content/uploads/2017/09/DIo3-03-aller-plus-loin-300x88.png 300w, https://framablog.org/wp-content/uploads/2017/09/DIo3-03-aller-plus-loin-768x224.png 768w, https://framablog.org/wp-content/uploads/2017/09/DIo3-03-aller-plus-loin-1024x299.png 1024w" sizes="(max-width: 1445px) 100vw, 1445px"></a></p>
<p>Seulement voilà, vous pouvez aussi vous poser des questions sur les raisons d’une telle démarche. C’est même très sain, puisque c’est ainsi que peut naître la confiance (ou la défiance, d’ailleurs) : ce sentiment qui nous pousse à confier nos données, nos vies numériques, à un hébergeur. Nous exposons donc :</p>
<ul><li>les <a href="https://degooglisons-internet.org/#enjeux">dangers et enjeux</a> que nous avons identifiés ;</li>
<li>les <a href="https://degooglisons-internet.org/#solutions">solutions</a> que nous proposons ;</li>
<li>et <a href="https://soutenir.framasoft.org/association">qui nous sommes</a>, en toute transparence.</li>
</ul><p><a href="media/170f2805.DIo3-04-pourquoi.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/DIo3-04-pourquoi.png"><img src="media/170f2805.DIo3-04-pourquoi.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/DIo3-04-pourquoi.png" alt="" width="1441" height="411" srcset="https://framablog.org/wp-content/uploads/2017/09/DIo3-04-pourquoi.png 1441w, https://framablog.org/wp-content/uploads/2017/09/DIo3-04-pourquoi-300x86.png 300w, https://framablog.org/wp-content/uploads/2017/09/DIo3-04-pourquoi-768x219.png 768w, https://framablog.org/wp-content/uploads/2017/09/DIo3-04-pourquoi-1024x292.png 1024w" sizes="(max-width: 1441px) 100vw, 1441px"></a></p>
<p>Tout ceci est, et demeure, une aventure collaborative. Nous prenons donc le temps d’expliquer :</p>
<ul><li>comment <a href="https://contact.framasoft.org/">nous contacter</a>, quelle que soit votre demande ;</li>
<li>comment <a href="https://soutenir.framasoft.org/">nous soutenir</a>, notamment par un don.</li>
</ul><p><a href="media/91fcb4e9.DIo3-05-contact-soutien.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/DIo3-05-contact-soutien.png"><img src="media/91fcb4e9.DIo3-05-contact-soutien.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/DIo3-05-contact-soutien.png" alt="" width="1386" height="412" srcset="https://framablog.org/wp-content/uploads/2017/09/DIo3-05-contact-soutien.png 1386w, https://framablog.org/wp-content/uploads/2017/09/DIo3-05-contact-soutien-300x89.png 300w, https://framablog.org/wp-content/uploads/2017/09/DIo3-05-contact-soutien-768x228.png 768w, https://framablog.org/wp-content/uploads/2017/09/DIo3-05-contact-soutien-1024x304.png 1024w" sizes="(max-width: 1386px) 100vw, 1386px"></a></p>
<p>Un espace final est réservé aux médias qui ont parlé de cette aventure, avec un lien vers <a href="https://degooglisons-internet.org/medias">notre espace médias</a>, que chacun·e peut librement visiter et utiliser.</p>
<p><a href="media/88d0bb1b.DIo3-06-presse.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/DIo3-06-presse.png"><img src="media/88d0bb1b.DIo3-06-presse.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/DIo3-06-presse.png" alt="" width="1446" height="387" srcset="https://framablog.org/wp-content/uploads/2017/09/DIo3-06-presse.png 1446w, https://framablog.org/wp-content/uploads/2017/09/DIo3-06-presse-300x80.png 300w, https://framablog.org/wp-content/uploads/2017/09/DIo3-06-presse-768x206.png 768w, https://framablog.org/wp-content/uploads/2017/09/DIo3-06-presse-1024x274.png 1024w" sizes="(max-width: 1446px) 100vw, 1446px"></a></p>
<h2>Chacun·e peut trouver service à son pied</h2>
<p>Nous avons décidé de présenter de deux manières différentes les 32 services qui sont actuellement à votre disposition, car tout le monde ne cherche pas de la même manière.</p>
<p>La première démarche, lorsque l’on cherche selon un besoin précis, correspond à cette partie de la page d’accueil :</p>
<p><a href="media/ea0bb2f6.DIo3-07-choix-liste.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/DIo3-07-choix-liste.png"><img src="media/ea0bb2f6.DIo3-07-choix-liste.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/DIo3-07-choix-liste.png" alt="" width="735" height="298" srcset="https://framablog.org/wp-content/uploads/2017/09/DIo3-07-choix-liste.png 735w, https://framablog.org/wp-content/uploads/2017/09/DIo3-07-choix-liste-300x122.png 300w" sizes="(max-width: 735px) 100vw, 735px"></a></p>
<p>Cela vous mènera vers <a href="https://degooglisons-internet.org/liste/">une toute nouvelle page où les services sont classés selon les usages</a>, avec une barre de recherche pour mieux vous aider à trouver celui qui correspond à vos attentes :</p>
<p><a href="media/03ee7af3.DIo3-08-liste.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/DIo3-08-liste.png"><img src="media/03ee7af3.DIo3-08-liste.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/DIo3-08-liste.png" alt="" width="1440" height="1348" srcset="https://framablog.org/wp-content/uploads/2017/09/DIo3-08-liste.png 1440w, https://framablog.org/wp-content/uploads/2017/09/DIo3-08-liste-300x281.png 300w, https://framablog.org/wp-content/uploads/2017/09/DIo3-08-liste-768x719.png 768w, https://framablog.org/wp-content/uploads/2017/09/DIo3-08-liste-1024x959.png 1024w" sizes="(max-width: 1440px) 100vw, 1440px"></a></p>
<p>La deuxième démarche consiste à <a href="https://degooglisons-internet.org/alternative">chercher un service alternatif</a> au service propriétaire que l’on utilise et que l’on connaît.</p>
<p><a href="media/9f095833.DIo3-09-choix-alternatives.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/DIo3-09-choix-alternatives.png"><img src="media/9f095833.DIo3-09-choix-alternatives.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/DIo3-09-choix-alternatives.png" alt="" width="735" height="298" srcset="https://framablog.org/wp-content/uploads/2017/09/DIo3-09-choix-alternatives.png 735w, https://framablog.org/wp-content/uploads/2017/09/DIo3-09-choix-alternatives-300x122.png 300w" sizes="(max-width: 735px) 100vw, 735px"></a></p>
<p>Ici vous retrouverez d’abord la fameuse carte Dégooglisons, où il vous suffit de cliquer sur le camp romain du service qui vous intéresse pour en découvrir une alternative.</p>
<p><a href="media/8ceb542d.DIo3-10-alternatives-carte.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/DIo3-10-alternatives-carte.png"><img src="media/8ceb542d.DIo3-10-alternatives-carte.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/DIo3-10-alternatives-carte.png" alt="" width="947" height="1134" srcset="https://framablog.org/wp-content/uploads/2017/09/DIo3-10-alternatives-carte.png 947w, https://framablog.org/wp-content/uploads/2017/09/DIo3-10-alternatives-carte-251x300.png 251w, https://framablog.org/wp-content/uploads/2017/09/DIo3-10-alternatives-carte-768x920.png 768w, https://framablog.org/wp-content/uploads/2017/09/DIo3-10-alternatives-carte-855x1024.png 855w" sizes="(max-width: 947px) 100vw, 947px"></a></p>
<p>Mais il n’y a pas que les « Framachins » dans la vie. Très vite, vous trouverez en dessous de cette carte une liste bien plus complète d’alternatives en tous genres pour se dégoogliser plus complètement. Cette liste est inspirée de l’<a href="https://prism-break.org/fr">excellent site Prism-Break</a>, un site à garder dans ses marque-pages !</p>
<div><a href="media/0fab44b7.DIo3-11-alternatives-prism-break.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/DIo3-11-alternatives-prism-break.png"><img src="media/0fab44b7.DIo3-11-alternatives-prism-break.png" data-original-source="https://framablog.org/wp-content/uploads/2017/09/DIo3-11-alternatives-prism-break.png" alt="" width="1388" height="507" srcset="https://framablog.org/wp-content/uploads/2017/09/DIo3-11-alternatives-prism-break.png 1388w, https://framablog.org/wp-content/uploads/2017/09/DIo3-11-alternatives-prism-break-300x110.png 300w, https://framablog.org/wp-content/uploads/2017/09/DIo3-11-alternatives-prism-break-768x281.png 768w, https://framablog.org/wp-content/uploads/2017/09/DIo3-11-alternatives-prism-break-1024x374.png 1024w" sizes="(max-width: 1388px) 100vw, 1388px"></a><p>Un exemple, totalement au hasard, pour les alternatives à l’email ;)</p></div>
<h2>À vous de dégoogliser !</h2>
<p>Vous l’avez saisi, l’idée du site <a href="https://degooglisons-internet.org/">degooglisons-internet.org</a>, c’est qu’il vous soit utile. Que ce soit pour trouver des alternatives qui vous sont nécessaires, ou pour aider votre entourage à se dégoogliser, c’est désormais à vous de vous en emparer.</p>
<p>D’ailleurs, n’hésitez pas à aller visiter l’<a href="https://degooglisons-internet.org/medias">espace médias</a>, qui s’est enrichi d’une fresque racontant ces trois années de Dégooglisons, ainsi que <a href="https://framasphere.org/people/955cdfb03c8f013250b62a0000053625">des dessins de Péhä</a>, aux côtés de nombreux autres visuels libres… et à partager dans vos réseaux !</p>
<p>Nous espérons, sincèrement, que la refonte de ce site vous simplifiera la dégooglisation et même (soyons folles et fous) la vie !</p>
<p> </p>
<h3>Pour aller plus loin</h3>
<ul><li><a href="https://degooglisons-internet.org/">Dégooglisons Internet</a>
<ul><li><a href="https://degooglisons-internet.org/liste">Liste des services</a></li>
<li><a href="https://degooglisons-internet.org/alternative">Liste des alternatives</a></li>
<li><a href="https://degooglisons-internet.org/medias">Espace médias</a></li>
</ul></li>
<li><a href="https://framagit.org/framasoft/degooglisons">Dépôt git du site</a>, pour qui aime coder !</li>
<li><a href="https://framasphere.org/people/955cdfb03c8f013250b62a0000053625">Péhä, dessinateur</a>, auteur de l’image du banquet</li>
</ul><div><a href="https://degooglisons-internet.org/"><img src="media/030a8cb7.Peha-Banquet-CC-By-1920.jpg" data-original-source="https://framablog.org/wp-content/uploads/2017/09/Peha-Banquet-CC-By-1920.jpg" alt="" width="1920" height="1394" srcset="https://framablog.org/wp-content/uploads/2017/09/Peha-Banquet-CC-By-1920.jpg 1920w, https://framablog.org/wp-content/uploads/2017/09/Peha-Banquet-CC-By-1920-300x218.jpg 300w, https://framablog.org/wp-content/uploads/2017/09/Peha-Banquet-CC-By-1920-768x558.jpg 768w, https://framablog.org/wp-content/uploads/2017/09/Peha-Banquet-CC-By-1920-1024x743.jpg 1024w" sizes="(max-width: 1920px) 100vw, 1920px"></a><p>Bienvenue au banquet concluant Dégooglisons Internet, <a href="https://framasphere.org/people/955cdfb03c8f013250b62a0000053625">par Péhä</a> (CC-By)</p></div>
<p><img src="media/d4130779.f411e4809021b786b7eb0c8956612e76" data-original-source="http://cdn.libravatar.org/avatar/f411e4809021b786b7eb0c8956612e76" alt="Gravatar de Framablog" class="gravatar" /><br/><i>Original post of <a href="https://framablog.org/2017/09/27/se-degoogliser-en-toute-facilite/" title="Visit the source">Framablog</a>.Votez pour ce billet sur <a href="http://www.planet-libre.org" title="Aller sur le planet">Planet Libre</a>.</i></p>
<p><div class="similar-block"><h3>Articles similaires</h3><ul><li>Framablog : <a href="">MyPads&amp;nbsp;: l&amp;rsquo;alternative de Framasoft &amp;agrave; Google Docs</a> (06/10/2015)</li><li>Framablog : <a href="">Framaboard&amp;nbsp;: les libristes ont r&amp;eacute;invent&amp;eacute; le tableau blanc&amp;hellip; mais en mieux&amp;nbsp;!</a> (07/10/2015)</li><li>Framablog : <a href="">Framadrop&amp;nbsp;: envoyez de gros fichiers en toute s&amp;eacute;curit&amp;eacute;&amp;nbsp;!</a> (09/10/2015)</li><li>Framablog : <a href="">D&amp;eacute;googlisons Internet&amp;nbsp;: c&amp;rsquo;est la fin du d&amp;eacute;but&amp;nbsp;!</a> (25/09/2017)</li><li>Framablog : <a href="">Framadrive, conservez et synchronisez 2 Go sur nos serveurs</a> (05/10/2015)</li></ul></div></p>


