<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Famille de geeks</title>
    <link>http://blog.jesuislibre.org/</link>
    <description>Recent content on Famille de geeks</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>fr-FR</language>
    <managingEditor>bruno@adele.im (Bruno Adelé)</managingEditor>
    <webMaster>bruno@adele.im (Bruno Adelé)</webMaster>
    <lastBuildDate>Sun, 04 Mar 2018 00:00:00 +0000</lastBuildDate>
    
        <atom:link href="http://blog.jesuislibre.org/feed.atom" rel="self" type="application/rss+atom" />
    
    
    <item>
      <title>Migration de Pelican vers Hugo</title>
      <link>http://blog.jesuislibre.org/migration-de-pelican-vers-hugo/</link>
      <pubDate>Sun, 04 Mar 2018 00:00:00 +0000</pubDate>
      <author>bruno@adele.im (Bruno Adelé)</author>
      <guid>http://blog.jesuislibre.org/migration-de-pelican-vers-hugo/</guid>
      <description>

&lt;p&gt;Comme vous avez pu le remarquer, je suis assez friand de sites statiques. C&amp;rsquo;est pour cette raison que ce blog migre une nouvelle fois vers un nouveau moteur de blog statique, encore me direz vous ? Nous allons voir pourquoi.&lt;/p&gt;

&lt;h2 id=&#34;pourquoi-une-nouvelle-migration&#34;&gt;Pourquoi une nouvelle migration ?&lt;/h2&gt;

&lt;p&gt;Après avoir fait du &lt;a href=&#34;https://www.python.org/&#34;&gt;Python&lt;/a&gt; pendant de nombreuses années, il m&amp;rsquo;arrive de temps en temps de coder en &lt;a href=&#34;https://golang.org/&#34;&gt;Go&lt;/a&gt;. Ce langage est relativement simple, performant, et compilable sur de nombreuses architectures (notamment ARM).&lt;/p&gt;

&lt;p&gt;J&amp;rsquo;en ai donc profité pour analyser les offres de blogs statiques développés en &lt;strong&gt;Go&lt;/strong&gt;. J&amp;rsquo;ai découvert l&amp;rsquo;excellent projet nommé &lt;a href=&#34;https://gohugo.io&#34;&gt;Hugo&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&#34;les-avantages-d-hugo&#34;&gt;Les avantages d&amp;rsquo;&lt;strong&gt;Hugo&lt;/strong&gt;&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;S&amp;rsquo;installe facilement, il suffit de copier un binaire. En Python, parfois on se retrouve confronté à des problèmes de dépendance (même en utilisant des &lt;strong&gt;virtual env&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Ultra rapide, il permet de générer environ 1000 pages en 1 seconde&lt;/li&gt;
&lt;li&gt;Multi-langue (i18n)&lt;/li&gt;
&lt;li&gt;Base de données virtuelles (data)&lt;/li&gt;
&lt;li&gt;Raccourci (shortcode)&lt;/li&gt;
&lt;li&gt;Facile d&amp;rsquo;utilisation, flexible, &amp;hellip;&lt;/li&gt;
&lt;li&gt;Nombreux thèmes&lt;/li&gt;
&lt;li&gt;etc ..&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;etapes-de-la-migration&#34;&gt;Etapes de la migration&lt;/h2&gt;

&lt;p&gt;J&amp;rsquo;ai profité de cette migration pour effectuer quelques changements, notamment :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Changer de thème (&lt;a href=&#34;https://github.com/halogenica/beautifulhugo/pulls?utf8=%E2%9C%93&amp;amp;q=is%3Apr%20author%3Abadele&#34;&gt;Voir mes contributions&lt;/a&gt;), j&amp;rsquo;ai préféré contribuer à une nouveau thème que convertir le mien.&lt;/li&gt;
&lt;li&gt;Passer les commentaires en full statique en utilisant le projet (&lt;a href=&#34;https://staticman.net/&#34;&gt;Staticman&lt;/a&gt;), malgrès l&amp;rsquo;ébauche du projet cacause que nous avions initié il y a environ 5 ans avec &lt;a href=&#34;https://github.com/nadley&#34;&gt;Nahir Mohamed&lt;/a&gt; &amp;amp; &lt;a href=&#34;https://github.com/kianby&#34;&gt;Yannic Arnoux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;1-passage-de-restructuredtext-vers-markdown&#34;&gt;1) Passage de reStructuredText vers Markdown&lt;/h3&gt;

&lt;p&gt;La première étape a été de migrer le contenu des billets du format &lt;a href=&#34;http://docutils.sourceforge.net/rst.html&#34;&gt;reStructuredText&lt;/a&gt; vers  &lt;a href=&#34;https://daringfireball.net/projects/markdown/&#34;&gt;MarkDown&lt;/a&gt;. Etant donné que je n&amp;rsquo;avais pas beaucoup de fichiers à convertir (environ une vingtaine). J&amp;rsquo;ai effectué la conversion fichier par fichier avec la commande suivante &lt;code&gt;pandoc --from=rst --to=markdown --output=monbillet.md&lt;/code&gt; pour ensuite finaliser la conversion à la main pour lequel l&amp;rsquo;outil &lt;strong&gt;pandoc&lt;/strong&gt; n&amp;rsquo;a pas réussi la conversion.&lt;/p&gt;

&lt;h3 id=&#34;compatibilité-avec-le-blog-précédent&#34;&gt;Compatibilité avec le blog précédent&lt;/h3&gt;

&lt;p&gt;Afin que la migration soit la plus transparente possible, que ce soit pour les précédents billets ou les flux RSS. Il a fallu effectuer quelques modifications sur la configuration par défaut d&amp;rsquo;&lt;strong&gt;Hugo&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Création d&amp;rsquo;alias

&lt;ul&gt;
&lt;li&gt;Cela se configure en utilisant le tag &lt;code&gt;Aliases&lt;/code&gt; dans les métadonnées d&amp;rsquo;un billet (&lt;a href=&#34;https://raw.githubusercontent.com/badele/blog.jesuislibre.org/master/content/post/2009/naissance-dun-geek.md&#34;&gt;Voir exemple&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Compatiblité des flux RSS

&lt;ul&gt;
&lt;li&gt;En changeant le &lt;a href=&#34;https://github.com/badele/blog.jesuislibre.org/blob/bc3f7d8893e82d2b4eda8f9bf5abf6f9b00b23eb/config.yaml#L24&#34;&gt;format des flux RSS généré&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://raw.githubusercontent.com/badele/blog.jesuislibre.org/master/layouts/_default/rss.atom&#34;&gt;Création d&amp;rsquo;un nouveau template&lt;/a&gt; pour ne pas avoir des flux RSS tronqués.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&#34;alias&#34;&gt;Alias&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Hugo&lt;/strong&gt; permet de créer des &lt;code&gt;Aliases&lt;/code&gt; pour une page. Je me sers de cette option pour migrer les URL de mon ancien blog vers les nouvelles. Ceci sans devoir utiliser la technique de l&amp;rsquo;URL rewriting des serveurs webs (Apache ou Nginx).&lt;/p&gt;

&lt;h4 id=&#34;feed-rss&#34;&gt;Feed RSS&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Hugo&lt;/strong&gt; gènère des fichiers RSS avec le format &lt;code&gt;index.xml&lt;/code&gt;, mes anciens flux avaient le format &lt;code&gt;feed.atom&lt;/code&gt;. Pour garder ce format, il faut ajouter au fichier &lt;code&gt;config.yaml&lt;/code&gt; les lignes suivantes :&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Rename RSS feed&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;outputs&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;home&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;HTML&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;RSS&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;taxonomy&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;HTML&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;RSS&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;mediaTypes&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;application/rss&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;suffix&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;atom&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;outputFormats&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;RSS&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;mediatype&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;application/rss&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;baseName&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;feed&amp;#34;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Je ne sais pour quelle raison, &lt;strong&gt;Hugo&lt;/strong&gt; ne propose pas d&amp;rsquo;option pour désactiver la génération des flux RSS non tronqué, pour cela on est obligé de créer un &lt;a href=&#34;https://raw.githubusercontent.com/badele/blog.jesuislibre.org/master/layouts/_default/rss.atom&#34;&gt;nouveau template&lt;/a&gt; dans le fichier &lt;code&gt;layouts/_default/rss.atom&lt;/code&gt;&lt;/p&gt;

&lt;h3 id=&#34;migration-vers-un-nouveau-thème&#34;&gt;Migration vers un nouveau thème&lt;/h3&gt;

&lt;p&gt;Dans un premier temps, j&amp;rsquo;ai voulu conserver mon thème, mais n&amp;rsquo;ayant pas touché des feuilles de style depuis un bon bout de temps, j&amp;rsquo;ai préféré me rabattre sur un nouveau thème et de contribuer au projet &lt;a href=&#34;https://themes.gohugo.io/theme/beautifulhugo/&#34;&gt;Beautiful Hugo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;J&amp;rsquo;ai rajouté quelques contributions au thème d&amp;rsquo;origine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ajout du &lt;a href=&#34;https://github.com/halogenica/beautifulhugo/pull/92&#34;&gt;support de la langue Française&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Ajout d&amp;rsquo;une nouvelle feature &lt;a href=&#34;https://github.com/halogenica/beautifulhugo/pull/93&#34;&gt;Image title&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Modification des feuilles de style pour le &lt;a href=&#34;https://github.com/halogenica/beautifulhugo/pull/94&#34;&gt;support de Chroma&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Modification des templates pour le support des renommages des &lt;a href=&#34;https://github.com/halogenica/beautifulhugo/pull/95&#34;&gt;flux RSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Ajout du support des &lt;a href=&#34;https://github.com/halogenica/beautifulhugo/pull/99&#34;&gt;commentaires statiques&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Affichage &lt;a href=&#34;https://github.com/halogenica/beautifulhugo/pull/100&#34;&gt;d&amp;rsquo;informations supplémentaires concernant un billet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/halogenica/beautifulhugo/pull/102&#34;&gt;Support piwik&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;ajout-du-support-des-commentaires-statiques&#34;&gt;Ajout du support des commentaires statiques&lt;/h3&gt;

&lt;p&gt;Pour cela, j&amp;rsquo;utilise l&amp;rsquo;excellent projet &lt;a href=&#34;https://staticman.net/&#34;&gt;Staticman&lt;/a&gt;. Pour ajouter un commentaire, &lt;strong&gt;staticman&lt;/strong&gt; utilise &lt;strong&gt;github&lt;/strong&gt; pour effectuer une &lt;strong&gt;pull request&lt;/strong&gt; sur le projet du blog&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Créer le fichier &lt;a href=&#34;https://github.com/badele/blog.jesuislibre.org/blob/master/staticman.yml&#34;&gt;staticman.yml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dans &lt;a href=&#34;http://github.com&#34;&gt;github&lt;/a&gt; ajouter l&amp;rsquo;utilisateur &lt;code&gt;staticmanapp&lt;/code&gt; en tant que collaborateur de votre blog.&lt;/li&gt;
&lt;li&gt;Accepter l&amp;rsquo;invitation de collaboration &lt;code&gt;curl https://api.staticman.net/v2/connect/&amp;lt;USERNAME&amp;gt;/&amp;lt;REPOSITORYNAME&amp;gt;&lt;/code&gt;, Si l&amp;rsquo;invitation est acceptée, vous devriez voir le texte &lt;strong&gt;OK!&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&#34;vérification-du-bon-déroulement-de-migration&#34;&gt;Vérification du bon déroulement de migration&lt;/h3&gt;

&lt;p&gt;Afin de vérifier que la migration s&amp;rsquo;est déroulée sans encombre, j&amp;rsquo;ai comparé les noms des fichiers générés entre l&amp;rsquo;ancien et nouveau contenu.&lt;/p&gt;

&lt;h4 id=&#34;recupération-de-l-ancien-contenu&#34;&gt;Recupération de l&amp;rsquo;ancien contenu&lt;/h4&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;rsync -avr --delete  w4a153382@ssh.web4all.fr:/datas/vol3/w4a153382/var/www/blog.jesuislibre.org/htdocs .
&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; htdocs
find . &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sort &amp;gt; /tmp/old.txt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4 id=&#34;génération-du-nouveau-contenu&#34;&gt;Génération du nouveau contenu&lt;/h4&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;hugo
&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; public
find . &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sort &amp;gt; /tmp/new.txt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4 id=&#34;comparaison-des-fichiers&#34;&gt;Comparaison des fichiers&lt;/h4&gt;

&lt;p&gt;Pour finir, je me suis assuré via &lt;strong&gt;meld&lt;/strong&gt; que le contenu de chaque billet a été migré sans trop d&amp;rsquo;incidence.&lt;/p&gt;

&lt;h3 id=&#34;prochaine-étapes&#34;&gt;Prochaine étapes&lt;/h3&gt;

&lt;p&gt;Afin d&amp;rsquo;améliorer la génération du blog, la prochaine étape sera d&amp;rsquo;ajouter de l&amp;rsquo;automatisation via des plugins github, par exemple vérifier avec &lt;a href=&#34;https://travis-ci.org/&#34;&gt;Travis-ci&lt;/a&gt; qu&amp;rsquo;aucune erreur ne se produit lors de l&amp;rsquo;ajout d&amp;rsquo;un commentaire ou d&amp;rsquo;un nouveau billet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Source:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gohugo.io/&#34;&gt;hugo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://staticman.net/docs/&#34;&gt;staticman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/eduardoboucas/hugo-plus-staticman&#34;&gt;hugo-plus-staticman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://jamstatic.fr/2016/12/09/des-commentaires-statiques-avec-jekyll-et-staticman/&#34;&gt;jekyll et staticman&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Questions secrètes version 2</title>
      <link>http://blog.jesuislibre.org/questions-secr%C3%A8tes-version-2/</link>
      <pubDate>Sat, 04 Oct 2014 00:00:00 +0000</pubDate>
      <author>bruno@adele.im (Bruno Adelé)</author>
      <guid>http://blog.jesuislibre.org/questions-secr%C3%A8tes-version-2/</guid>
      <description>

&lt;p&gt;&lt;img src=&#34;http://blog.jesuislibre.org/img/2014/fb4.png&#34; alt=&#34;Copie d&#39;ecran d&#39;une question secrete&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Je ne suis pas trés friand des applications Clouds. D&amp;rsquo;une part, comment
se laisser tenter pour stocker ses données privées sur des serveurs
publics ? Et d&amp;rsquo;autre part, comment laisser une totale confiance aux
mains d&amp;rsquo;une seule équipe de développement qui ne vous indique même pas
les règles de sécurité, mis à part de vous dire qu&amp;rsquo;ils sont certifiés
&lt;a href=&#34;http://fr.wikipedia.org/wiki/ISO/CEI_27001&#34;&gt;ISO 27001&lt;/a&gt; ? La preuve en
est avec l&amp;rsquo;affaire des &lt;a href=&#34;http://www.lemondeinformatique.fr/actualites/lire-piratage-de-icloud-l-attaque-par-force-brute-certainement-utilisee-58479.html&#34;&gt;photos
volées&lt;/a&gt;
des stars sur les serveurs d&amp;rsquo;Apple. Les photos étaient stockées sur le
cloud d&amp;rsquo;Apple. Il semblerait que cela soit dû à une attaque par brute
force. Comme à son habitude les sociétés dans un premier temps indiquent
que ce n&amp;rsquo;est pas de &lt;a href=&#34;http://www.journaldugeek.com/2014/09/03/pour-apple-icloud-nest-pour-rien-dans-la-fuite-des-photos-denudees/&#34;&gt;leurs
fautes&lt;/a&gt;,
pour ensuite sortir une &lt;a href=&#34;http://www.numerama.com/magazine/30405-photos-de-stars-nues-volees-sur-icloud-apple-serait-bien-fautif.html&#34;&gt;mise à
jour&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Plusieurs questions se posent à moi : comment une boite comme Apple
puisse &lt;strong&gt;autoriser le brute force&lt;/strong&gt; ? Et comment est-il possible qu&amp;rsquo;elle
n&amp;rsquo;ait pas une procédure stricte lorsqu&amp;rsquo;une authentification est requise
? Que ce soit via leur interface web ou depuis leur application mobile
ou via leur API ? Et qu&amp;rsquo;il n&amp;rsquo;impose pas une limitation du nombre de mots
de passe erronés par minute ?&lt;/p&gt;

&lt;h2 id=&#34;question-secrète&#34;&gt;Question secrète&lt;/h2&gt;

&lt;p&gt;Je vais maintenant en venir aux questions secrètes. En 2009 j&amp;rsquo;avais déjà
écris un
&lt;a href=&#34;http://blog.jesuislibre.org/2009/5/20/webmail-faille-de-securite-des-questions-non-secretes/&#34;&gt;billet&lt;/a&gt;
sur le risque de ces questions secrètes. Je trouve que l&amp;rsquo;on ne
sensibilise pas assez les utilisateurs sur le risque encouru.&lt;/p&gt;

&lt;p&gt;Dernièrement j&amp;rsquo;ai soumis une requête au support de Facebook en pensant
avoir trouvé une brèche sur le respect de la vie privée des
utilisateurs, notamment sur la divulgation partielle d&amp;rsquo;une adresse
email. En effet lorsque un utilisateur désire réinitialiser son mot de
passe, il doit passer par un système de question secrète, du style &amp;ldquo;Quel
est le nom de ton ami(e)&amp;ldquo;. Cette étape peut être outrepassée. Mais pour
Facebook ceci ne semble pas être une violation de vie privée, mais une
fonctionnalité ! Ce qui peut se comprendre, car Facebook ne semble pas
vouloir perdre l&amp;rsquo;historique d&amp;rsquo;un utilisateur.&lt;/p&gt;

&lt;p&gt;Ci-dessous je vais détailler la version par défaut pour réinitialiser
son mot de passe.&lt;/p&gt;

&lt;h2 id=&#34;récupération-adresse-email-partielle-classique&#34;&gt;Récupération adresse email partielle classique&lt;/h2&gt;

&lt;p&gt;Voici en temps normal les étapes pour récupérer son adresse email&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ouvrir le navigateur web en mode privé afin de ne pas utiliser sa
connexion Facebook en cours&lt;/li&gt;
&lt;li&gt;Se connecter à l&amp;rsquo;adresse suivante
&lt;a href=&#34;https://www.facebook.com/login/identify?ctx=reason&#34;&gt;https://www.facebook.com/login/identify?ctx=reason&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Saisir son nom et prénom&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&#34;http://blog.jesuislibre.org/img/2014/fb1.png&#34; alt=&#34;image&#34; /&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Saisir le nom de son ami(e)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&#34;http://blog.jesuislibre.org/img/2014/fb2.png&#34; alt=&#34;image&#34; /&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Indiquer les raisons pour lesquelles vous ne pouvez pas vous
 authentifier&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&#34;http://blog.jesuislibre.org/img/2014/fb3.png&#34; alt=&#34;image&#34; /&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vous pouvez apercevoir une partie de l&amp;rsquo;adresse d&amp;rsquo;inscription sur
Facebook.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&#34;http://blog.jesuislibre.org/img/2014/fb4.png&#34; alt=&#34;image&#34; /&gt;&lt;/p&gt;

&lt;h2 id=&#34;récupération-adresse-version-courte&#34;&gt;Récupération adresse version courte&lt;/h2&gt;

&lt;p&gt;Je vais ici détailler la récupération d&amp;rsquo;une adresse email partielle,
sans passer par l&amp;rsquo;étape question secrète. Imaginons que je veuille
connaître l&amp;rsquo;adresse email d&amp;rsquo;inscription du compte Facebook de bruno
adele. Avant d&amp;rsquo;effectuer les étapes ci-dessous, je récupère l&amp;rsquo;URL
Facebook du compte de l&amp;rsquo;utilisateur, ex
&lt;a href=&#34;https://www.facebook.com/bruno.adele&#34;&gt;https://www.facebook.com/bruno.adele&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ouvrir le navigateur web en mode privé afin de ne pas utiliser sa
 connexion Facebook en cours&lt;/li&gt;
&lt;li&gt;Se connecter à l&amp;rsquo;adresse suivante
 &lt;a href=&#34;https://www.facebook.com/login/identify?ctx=reason&#34;&gt;https://www.facebook.com/login/identify?ctx=reason&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Saisir la fin de l&amp;rsquo;URL du compte Facebook. ex: bruno.adele&lt;/li&gt;
&lt;li&gt;Vous pouvez maintenant apercevoir une partie de l&amp;rsquo;adresse
 d&amp;rsquo;inscription sur Facebook.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&#34;http://blog.jesuislibre.org/img/2014/fb4.png&#34; alt=&#34;image&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Il n&amp;rsquo;est pas trop difficile de constater que mon adresse email peux être
&amp;ldquo;brunoadele à gmail.com&amp;rdquo; ou &amp;ldquo;bruno.adele à jesuislibre.org&amp;rdquo;. De fil en
aiguille, il pourrait être facile d&amp;rsquo;accéder à un compte email.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Faites parler votre Raspberry PI avec svox</title>
      <link>http://blog.jesuislibre.org/faites-parler-votre-raspberry-pi-avec-svox/</link>
      <pubDate>Tue, 25 Feb 2014 00:00:00 +0000</pubDate>
      <author>bruno@adele.im (Bruno Adelé)</author>
      <guid>http://blog.jesuislibre.org/faites-parler-votre-raspberry-pi-avec-svox/</guid>
      <description>

&lt;p&gt;Dans le cadre de mon projet domotique
&lt;a href=&#34;https://github.com/badele/serialkiller&#34;&gt;serialkiller&lt;/a&gt;, j&amp;rsquo;ai créé un
module qui permet de dicter vocalement certains états de mes capteurs.
Comme par exemple lors d&amp;rsquo;un changement de température extérieure.&lt;/p&gt;

&lt;p&gt;Pour avoir le support de la synthèse vocale sur Raspberry PI, le moyen
le plus simpe que j&amp;rsquo;ai trouvé, c&amp;rsquo;est d&amp;rsquo;utiliser la version Archlinux.
Celle-ci permet en quelques lignes de commandes d&amp;rsquo;avoir un système
opérationnel. Voici 2 exemples de fichiers audios générés via svox
&lt;a href=&#34;http://blog.jesuislibre.org/files/tts/2014/heure.wav&#34;&gt;heure&lt;/a&gt; et &lt;a href=&#34;http://blog.jesuislibre.org/files/tts/2014/temp.wav&#34;&gt;temp&lt;/a&gt; (voir les
commandes au bas de ce billet)&lt;/p&gt;

&lt;h2 id=&#34;installation-de-archlinux-arm-sur-la-carte-sd&#34;&gt;Installation de Archlinux ARM sur la carte SD&lt;/h2&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /tmp
wget &lt;span class=&#34;s2&#34;&gt;&amp;#34;http://archlinuxarm.org/os/ArchLinuxARM-rpi-latest.zip&amp;#34;&lt;/span&gt;
7z x ArchLinuxARM-rpi-latest.zip
dd &lt;span class=&#34;nv&#34;&gt;bs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;1M &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ArchLinuxARM*.img &lt;span class=&#34;nv&#34;&gt;of&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/dev/mmcblk0
sync
# Insérer la carte sur le raspberry PI et il vous suffit de booter dessus en allumant le raspberry PI&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3 id=&#34;configuration-optimisation&#34;&gt;Configuration &amp;amp; Optimisation&lt;/h3&gt;

&lt;p&gt;Connecter votre Raspberry sur le réseau et se connecter avec le login
&lt;strong&gt;root&lt;/strong&gt; et password &lt;strong&gt;root&lt;/strong&gt;. Les optimisations suivantes permettent de
réduire l&amp;rsquo;écriture sur la carte SD&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/dev/root  /  ext4  noatime,discard  0  0&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; /etc/fstab
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;tmpfs   /var/log        tmpfs   nodev,nosuid,size=16M   0       0&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; /etc/fstab
rm -R /var/log
ln -sf /dev/null ~/.bash_history&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3 id=&#34;installation-de-yaourt-upgrade&#34;&gt;Installation de yaourt &amp;amp; upgrade&lt;/h3&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;pacman -S yaourt
yaourt -Syua&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3 id=&#34;installation-de-svox&#34;&gt;Installation de svox&lt;/h3&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;yaourt -S base-devel svox-pico-git&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3 id=&#34;exemples-d-utilisation&#34;&gt;Exemples d&amp;rsquo;utilisation&lt;/h3&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;pico2wave -l fr-FR -w /tmp/heure.wav &lt;span class=&#34;s2&#34;&gt;&amp;#34;Bonjour cher linuxien, Il est 20h53&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; aplay /tmp/heure.wav&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Résultat : &lt;a href=&#34;http://blog.jesuislibre.org/files/tts/2014/heure.wav&#34;&gt;heure&lt;/a&gt;&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;pico2wave -l fr-FR -w /tmp/temp.wav &lt;span class=&#34;s2&#34;&gt;&amp;#34;Il fait une température extérieure de : 15°&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; aplay /tmp/temp.wav&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Résultat : &lt;a href=&#34;http://blog.jesuislibre.org/files/tts/2014/temp.wav&#34;&gt;temp&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>github-summary, je contribue au logiciel libre</title>
      <link>http://blog.jesuislibre.org/github-summary-je-contribue-au-logiciel-libre/</link>
      <pubDate>Fri, 20 Dec 2013 00:00:00 +0000</pubDate>
      <author>bruno@adele.im (Bruno Adelé)</author>
      <guid>http://blog.jesuislibre.org/github-summary-je-contribue-au-logiciel-libre/</guid>
      <description>

&lt;p&gt;&lt;img src=&#34;http://blog.jesuislibre.org/img/2013/github-summary.png&#34; alt=&#34;github-summary&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Il m&amp;rsquo;est arrivé par le passé de contribuer modestement à certains
projets libres dont j&amp;rsquo;en ai oublié les noms. Auparavant, les projets
étaient dispersés sur les sites des auteurs ou sur des forges comme
&lt;a href=&#34;http://www.sourceforge.net&#34;&gt;Sourceforge&lt;/a&gt; ou
&lt;a href=&#34;http://savannah.gnu.org&#34;&gt;Savannah&lt;/a&gt;. Habituellement pour participer à un
projet il fallait soit patcher les sources du projet soit être membres
d&amp;rsquo;un projet.&lt;/p&gt;

&lt;p&gt;Puis vint &lt;a href=&#34;https://github.com&#34;&gt;Github&lt;/a&gt;, son point fort est qu&amp;rsquo;il vous
oblige à forker le projet avant d&amp;rsquo;effectuer la moindre modification. Au
premier abord, on pourrait penser que trop de fork aurait pour
conséquence de tuer le projet initial, mais il n&amp;rsquo;en est rien !&lt;/p&gt;

&lt;p&gt;Grâce à &lt;a href=&#34;http://git-scm.com&#34;&gt;Git&lt;/a&gt; et &lt;a href=&#34;https://github.com&#34;&gt;Github&lt;/a&gt; il est
beaucoup plus facile pour moi de contribuer d&amp;rsquo;avantage au logiciel
libre. La prochaine étape serait d&amp;rsquo;apporter mon savoir faire dans une
société Opensource.&lt;/p&gt;

&lt;p&gt;Revenons à nos moutons :) Pour résumer mes contributions sur la page
principale de mon blog, j&amp;rsquo;ai créé un outil qui permet de générer sous
divers formats un condensé de mes projets github auxquels j&amp;rsquo;ai
participés.&lt;/p&gt;

&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;

&lt;p&gt;Pour installer &lt;code&gt;github-summary&lt;/code&gt;, vous avez 2 possibilités:&lt;/p&gt;

&lt;p&gt;Soit l&amp;rsquo;installer depuis
&lt;a href=&#34;http://pypi.python.org/pypi/github-summary&#34;&gt;PyPI&lt;/a&gt;&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;pip install github-summary&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ou directement depuis le dépot
&lt;a href=&#34;https://github.com/badele/github-summary&#34;&gt;GitHub&lt;/a&gt; :)&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;pip install git+git://github.com/badele/github-summary.git&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2 id=&#34;utilisation&#34;&gt;Utilisation&lt;/h2&gt;

&lt;p&gt;Modifier le fichier de configuration &lt;code&gt;~/.github-summary.py&lt;/code&gt; ou
&lt;code&gt;config.py&lt;/code&gt;. Pour des raisons de sécurité je vous conseille de modifier
vos paramètres dans le fichier &lt;code&gt;~/.github-summary.py&lt;/code&gt; afin d&amp;rsquo;y stocker
vos identifiants &lt;a href=&#34;https://github.com&#34;&gt;Github&lt;/a&gt; (token).&lt;/p&gt;

&lt;p&gt;Puis il suffit de lancer la commande ci-dessous.&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;githubsummary -t rst/index-en.rst -j example_projects.json -s example.rst&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ceci génèrera une page au format RST (pour le blog
&lt;a href=&#34;http://blog.getpelican.com/&#34;&gt;Pelican&lt;/a&gt;) en utilisant les options JSON&lt;/p&gt;

&lt;h2 id=&#34;options&#34;&gt;Options&lt;/h2&gt;

&lt;p&gt;Vous pouvez apporter des options pour chaque projet, le paramétrage se
fait au format JSON. Pour l&amp;rsquo;instant, il est possible de modifier les
heures passées sur un projet (grâce à org2json), comme par exemple le
temps passé sur la contribution d&amp;rsquo;un projet (Pour cela j&amp;rsquo;utilise
l&amp;rsquo;excellent &lt;a href=&#34;http://orgmode.org/fr&#34;&gt;Org mode d&amp;rsquo;emacs&lt;/a&gt;).&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
 &lt;span class=&#34;nt&#34;&gt;&amp;#34;fabrecipes&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
     &lt;span class=&#34;nt&#34;&gt;&amp;#34;hours&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;89&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
     &lt;span class=&#34;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;A overwriting description text for fabrecipe.&amp;#34;&lt;/span&gt;
 &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
 &lt;span class=&#34;nt&#34;&gt;&amp;#34;JobCatcher&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
     &lt;span class=&#34;nt&#34;&gt;&amp;#34;hours&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;108&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
     &lt;span class=&#34;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Another overwriting description text for JobCatcher.&amp;#34;&lt;/span&gt;
 &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
 &lt;span class=&#34;nt&#34;&gt;&amp;#34;gitcheck&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
     &lt;span class=&#34;nt&#34;&gt;&amp;#34;hours&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;15&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
     &lt;span class=&#34;nt&#34;&gt;&amp;#34;url&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;http://bruno.adele.im/projets/gitcheck&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
     &lt;span class=&#34;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Check multiple git repository in one pass.&amp;#34;&lt;/span&gt;
 &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
 &lt;span class=&#34;nt&#34;&gt;&amp;#34;github-summary&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
     &lt;span class=&#34;nt&#34;&gt;&amp;#34;coveralls&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;True&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
     &lt;span class=&#34;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Python tool for generate github summary in multiple formats (TXT, RST, HTML, ...)&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
     &lt;span class=&#34;nt&#34;&gt;&amp;#34;pypi&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;True&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
     &lt;span class=&#34;nt&#34;&gt;&amp;#34;pydownload&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;True&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
     &lt;span class=&#34;nt&#34;&gt;&amp;#34;hours&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;30&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
     &lt;span class=&#34;nt&#34;&gt;&amp;#34;travis&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;True&amp;#34;&lt;/span&gt;
 &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Comme expliqué précédemment, il est possible avant d&amp;rsquo;appeler
&lt;code&gt;github-summary&lt;/code&gt; de surcharger le fichier de configuration avec les
heures passées sur un projet, pour cela il suffit d&amp;rsquo;exécuter la commande
suivante&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;org2json -o project.org -s example_projects.json&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Voici un exemple pour la génération d&amp;rsquo;une page example.rst&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;githubsummary -t rst/index-en.rst -j example_projects.json -s example.rst&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Vous pouvez visualiser le résultat sur la capture ci-dessous ou sur &lt;a href=&#34;http://bruno.adele.im&#34;&gt;mon
site personnel&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;http://blog.jesuislibre.org/img/2013/github-summary-result.png&#34; alt=&#34;github-summary&#34; /&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Vérifiez vos dépôts git en une seule passe.</title>
      <link>http://blog.jesuislibre.org/v%C3%A9rifiez-vos-d%C3%A9p%C3%B4ts-git-en-une-seule-passe./</link>
      <pubDate>Tue, 16 Apr 2013 00:00:00 +0000</pubDate>
      <author>bruno@adele.im (Bruno Adelé)</author>
      <guid>http://blog.jesuislibre.org/v%C3%A9rifiez-vos-d%C3%A9p%C3%B4ts-git-en-une-seule-passe./</guid>
      <description>

&lt;h2 id=&#34;utilisation&#34;&gt;Utilisation&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Commande&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pour l&amp;rsquo;utiliser, rien de plus simple&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /usr/local/bin
wget https://raw.github.com/badele/gitcheck/master/gitcheck.py
chmod &lt;span class=&#34;m&#34;&gt;755&lt;/span&gt; gitcheck.py
gitcheck.py
ou
gitcheck.py -v&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Version simplifiée&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Exemple d&amp;rsquo;utilisation en version simple.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;http://blog.jesuislibre.org/img/2013/gitcheck.png&#34; alt=&#34;gitcheck&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Cette version affiche l&amp;rsquo;ensemble de vos dépôts git avec une mise en
évidence de l&amp;rsquo;état du projet, en vert les dépôts git non modifiés, en
rose les dépôts git modifiés.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Version verbale&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;http://blog.jesuislibre.org/img/2013/gitcheck_verbose.png&#34; alt=&#34;gitcheck en mode verbose&#34; /&gt;&lt;/p&gt;

&lt;p&gt;La version verbose, indique en sus de la version précédente les fichiers
modifiés en orange.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Les sources&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Les sources du script sont disponibles sur le dépot github
&lt;a href=&#34;https://github.com/badele/gitcheck&#34;&gt;https://github.com/badele/gitcheck&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Automatiser vos tâches avec Fabrecipes</title>
      <link>http://blog.jesuislibre.org/automatiser-vos-t%C3%A2ches-avec-fabrecipes/</link>
      <pubDate>Wed, 06 Mar 2013 00:00:00 +0000</pubDate>
      <author>bruno@adele.im (Bruno Adelé)</author>
      <guid>http://blog.jesuislibre.org/automatiser-vos-t%C3%A2ches-avec-fabrecipes/</guid>
      <description>

&lt;h2 id=&#34;le-projet&#34;&gt;Le projet&lt;/h2&gt;

&lt;p&gt;Dernièrement, il m&amp;rsquo;est arrivé divers incidents sur mon poste de travail
(problèmes matériels), et ce malgré qu&amp;rsquo;au sein de mon foyer je possède
d&amp;rsquo;autres postes, il m&amp;rsquo;a été impossible de basculer sur l&amp;rsquo;un d&amp;rsquo;eux de
façon rapide( manque d&amp;rsquo;outils de développement, manque de données de
travail)&lt;/p&gt;

&lt;p&gt;J&amp;rsquo;ai donc décidé de créer l&amp;rsquo;outil
&lt;a href=&#34;https://github.com/badele/fabrecipes&#34;&gt;fabrecipes&lt;/a&gt; afin d&amp;rsquo;automatiser et
simplifier l&amp;rsquo;installation d&amp;rsquo;un poste de travail. Pour cela je m&amp;rsquo;appuie
sur l&amp;rsquo;excellent &lt;a href=&#34;https://github.com/ronnix/fabtools&#34;&gt;fabtools&lt;/a&gt; qui lui
même repose sur &lt;a href=&#34;http://docs.fabfile.org/&#34;&gt;fabric&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&#34;les-besoins&#34;&gt;Les besoins&lt;/h2&gt;

&lt;p&gt;Suite à mes précédents incidents, j&amp;rsquo;ai donc décidé de travailler ainsi :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Automatiser l&amp;rsquo;installation de mon environnement de travail sur
l&amp;rsquo;ensemble des postes au sein de mon foyer en tenant compte des
différences matérielles &amp;amp; des spécificités de la famille (je
travaille exclusivement sous Linux).&lt;/li&gt;
&lt;li&gt;Travailler en live sur les données.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&#34;apport-de-réponse&#34;&gt;Apport de réponse&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Pour répondre au point 1, j&amp;rsquo;ai créé la recette
&lt;a href=&#34;https://github.com/badele/fabrecipes&#34;&gt;fabrecipes&lt;/a&gt;
&lt;strong&gt;archlinux/autoinstall&lt;/strong&gt;, celle ci permet d&amp;rsquo;installer de façon
automatique une distribution Archlinux depuis un LiveCD&lt;/li&gt;
&lt;li&gt;Pour le point 2, j&amp;rsquo;ai décidé de travailler directement sur un disque
USB chiffré + partition ZFS. J&amp;rsquo;ai créé la recette &lt;strong&gt;archlinux/zfs&lt;/strong&gt;.
Ceci permet de faire des snapshots ainsi que de répliquer à
l&amp;rsquo;identique sur un deuxième disque chiffré + ZFS (les snapshots sont
également répliqués)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&#34;exemple-de-recette&#34;&gt;Exemple de recette&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;autoinstall&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Voici un exemple détaillé pour la recette &lt;strong&gt;archlinux/autoinstall&lt;/strong&gt;,
accompagné de captures d&amp;rsquo;écrans et vidéo (I3 sur couche XFCE)&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;http://blog.jesuislibre.org/img/2013/2013-06-23-154417_1280x800_scrot.png&#34; alt=&#34;X-Windows choser&#34; width=&#34;50%&#34; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;http://blog.jesuislibre.org/img/2013/2013-06-23-154812_1280x800_scrot.png&#34; alt=&#34;XFCE Desktop&#34; width=&#34;50%&#34; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;http://blog.jesuislibre.org/img/2013/2013-06-23-154854_1280x800_scrot.png&#34; alt=&#34;I3 Desktop&#34; width=&#34;50%&#34; /&gt;&lt;/p&gt;


&lt;div style=&#34;position: relative; padding-bottom: 56.25%; padding-top: 30px; height: 0; overflow: hidden;&#34;&gt;
  &lt;iframe src=&#34;//www.youtube.com/embed/Z_Q8vXKB6Ok&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%;&#34; allowfullscreen frameborder=&#34;0&#34; title=&#34;YouTube Video&#34;&gt;&lt;/iframe&gt;
 &lt;/div&gt;


&lt;p&gt;La recette autoinstall permet d&amp;rsquo;exécuter les tâches suivantes :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Installation

&lt;ul&gt;
&lt;li&gt;Prépare &amp;amp; formate les partitions&lt;/li&gt;
&lt;li&gt;Chiffre la partition /home&lt;/li&gt;
&lt;li&gt;Installe le système de base&lt;/li&gt;
&lt;li&gt;Installe le boot&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Configuration (depuis une configuration de poste de travail
computer.xxx)

&lt;ul&gt;
&lt;li&gt;Définition du hostname&lt;/li&gt;
&lt;li&gt;Ajout d&amp;rsquo;un utilisateur&lt;/li&gt;
&lt;li&gt;Définition de la disposition du clavier, locale, timezone&lt;/li&gt;
&lt;li&gt;Configuration du package manager Yaourt&lt;/li&gt;
&lt;li&gt;Vérification des paquets du système de base

&lt;ul&gt;
&lt;li&gt;zsh&lt;/li&gt;
&lt;li&gt;yaourt&lt;/li&gt;
&lt;li&gt;wget&lt;/li&gt;
&lt;li&gt;git&lt;/li&gt;
&lt;li&gt;rsync&lt;/li&gt;
&lt;li&gt;sudo&lt;/li&gt;
&lt;li&gt;net-tools&lt;/li&gt;
&lt;li&gt;python2&lt;/li&gt;
&lt;li&gt;virtualenv&lt;/li&gt;
&lt;li&gt;virtualenvwrapper&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Installation bonus

&lt;ul&gt;
&lt;li&gt;Installation de votre système de base&lt;/li&gt;
&lt;li&gt;Installation de XFCE + I3 (choix de l&amp;rsquo;interface X-Window au
démarrage) avec le support des fonctionnalités de XFCE depuis I3&lt;/li&gt;
&lt;li&gt;Synchonisation des dotfiles depuis 3 niveaux:

&lt;ul&gt;
&lt;li&gt;Application&lt;/li&gt;
&lt;li&gt;Profils d&amp;rsquo;un portable type&lt;/li&gt;
&lt;li&gt;Utilisateur&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Actuellement il existe également d&amp;rsquo;autres recettes :&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Emacs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Installation d&amp;rsquo;emacs sous un environnement virtualisé python (pour
l&amp;rsquo;utilisation des composants comme pyflake)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Installation de l&amp;rsquo;environnement virtuel python2&lt;/li&gt;
&lt;li&gt;Installation des packages nécessaires pour l&amp;rsquo;utilisation de emacs
avec le support de python ( el-get, magit, auto-complete, yasnippet,
rope, ropemode, ropemacs, flymake, flymake-cursor, python-pep8,
nxhtml, color-theme, color-theme-solarized, graphviz-dot-mode,
pkgbuild-mode, smex, projectile)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;ZFS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Installation du support du système de fichier ZFS sur Archlinux&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Installation du support de ZFS depuis le projet
&lt;a href=&#34;https://wiki.archlinux.org/index.php/ZFS#Unofficial_repository&#34;&gt;archzfs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Mise à disposition des outils pour sauvegarder et repliquer son
environnement de travail.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Liste complète des fonctionalités&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;N&amp;rsquo;hésitez donc pas à essayer
&lt;a href=&#34;https://github.com/badele/fabrecipes&#34;&gt;fabrecipes&lt;/a&gt; et d&amp;rsquo;apporter vos
contributions sur &lt;a href=&#34;https://github.com/badele/fabrecipes&#34;&gt;github&lt;/a&gt; :)&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Créer son blog statique avec rstblog</title>
      <link>http://blog.jesuislibre.org/cr%C3%A9er-son-blog-statique-avec-rstblog/</link>
      <pubDate>Wed, 06 Mar 2013 00:00:00 +0000</pubDate>
      <author>bruno@adele.im (Bruno Adelé)</author>
      <guid>http://blog.jesuislibre.org/cr%C3%A9er-son-blog-statique-avec-rstblog/</guid>
      <description>

&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt; J&amp;rsquo;ai migré dorénavant ce blog vers &lt;del&gt;&lt;a href=&#34;http://blog.getpelican.com/&#34;&gt;Pelican&lt;/a&gt;&lt;/del&gt; &lt;a href=&#34;http://blog.jesuislibre.org/migration-de-pelican-vers-hugo&#34;&gt;Hugo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Après plusieurs recherches, je pense avoir trouvé mon moteur de blog, il
se nomme &lt;a href=&#34;https://github.com/mitsuhiko/rstblog&#34;&gt;rstblog&lt;/a&gt;, créé par
&lt;a href=&#34;http://lucumr.pocoo.org&#34;&gt;Armin Ronacher&lt;/a&gt;, également auteur de
&lt;a href=&#34;http://flask.pocoo.org&#34;&gt;Flask&lt;/a&gt;. Auparavant pour certains de mes autres
sites, j&amp;rsquo;utilisais un CMS+Blog statique qui se nommait
&lt;a href=&#34;http://get-simple.info&#34;&gt;GetSimple&lt;/a&gt;. Mais allez savoir pourquoi, malgré
la qualité de cette application web, je n&amp;rsquo;ai pas accroché ! Pendant mes
recherches sur une alternative à Django, je suis tombé sur l&amp;rsquo;auteur de
&lt;a href=&#34;http://flask.pocoo.org&#34;&gt;Flask&lt;/a&gt; qui a lui-même conçu son blog avec
rstblog (normal me direz vous, il en est l&amp;rsquo;auteur :) )&lt;/p&gt;

&lt;h2 id=&#34;rstblog-c-est-quoi&#34;&gt;rstblog c&amp;rsquo;est quoi&lt;/h2&gt;

&lt;p&gt;rstblog est un blog statique qui utilise la syntaxe rst
(&lt;a href=&#34;http://docutils.sourceforge.net/docs/user/rst/quickref.html&#34;&gt;reStructuredText&lt;/a&gt;),
celle-ci est sensiblement identique aux syntaxes wiki. Pourquoi avoir
choisi rstblog ? Les raisons sont les suivantes :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sa simplicité et sa légèreté, on ne peut plus simple. L&amp;rsquo;écriture des
billets se fait avec un simple éditeur de texte, pour ma part
j&amp;rsquo;utilise emacs.&lt;/li&gt;
&lt;li&gt;Du full statique, pas de code exécuté sur le serveur (contrairement
à &lt;a href=&#34;http://get-simple.info&#34;&gt;GetSimple&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Le générateur est en Python, ça tombe bien, j&amp;rsquo;aime ce langage :)&lt;/li&gt;
&lt;li&gt;Couplé avec git on peut d&amp;rsquo;une part historiser l&amp;rsquo;évolution du blog,
mais également s&amp;rsquo;en servir comme outil de sauvegarde.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;

&lt;p&gt;Afin d&amp;rsquo;éviter d&amp;rsquo;avoir des conflits avec des scripts python, j&amp;rsquo;ai pris
l&amp;rsquo;habitude de créer un environnement virtuel, je vais donc créer un
espace virtuel dédié pour rstblog&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;mkvirtualenv --no-site-packages -p python2.7 rstblog
pip install pyyaml babel blinker docutils jinja2 werkzeug pygments&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Initialisation du blog&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; votre_blog
mkdir -p &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;static,_templates,2013/3/3&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;

wget -O static/style.css &lt;span class=&#34;s2&#34;&gt;&amp;#34;https://raw.github.com/badele/blog.jesuislibre.org/master/img/2013/style.css&amp;#34;&lt;/span&gt;
wget -O _template/layout.html &lt;span class=&#34;s2&#34;&gt;&amp;#34;https://raw.github.com/badele/blog.jesuislibre.org/master/_templates/layout.html&amp;#34;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;nano config.yml&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;active_modules&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;pygments&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tags&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;blog&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;author&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Bruno&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Adele&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;canonical_url&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;//blog.jesuislibre.org/&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;feed&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;name&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Famille&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;de&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;geeks&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;subtitle&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Une&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;famille&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;complètement&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;geek&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;modules&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;pygments&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;style&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tango&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Je crée ensuite une arborescence qui devrait ressembler au schéma
ci-dessous.&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-plaintext&#34; data-lang=&#34;plaintext&#34;&gt;blog.jesuislibre.org
├── 2013
│   ├── 2
│       ├── 19
│       │    ├── test-unitaire-automatise-lors-dun-push-sur-github.rst
│       │
│       └── 26
│            ├── decouverte-de-lenvironnement-arduino.rst
├── 2009
│   ├── 5
│       ├── 20
│            ├── naissance-dun-geek.rst
│            ├── export-vos-donnees-de-kphotoalbum-vers-iptc.rst
│            ├── generer-un-schema-xsd-depuis-un-fichier-xml.rst
│
│
├── a-propos.rst
├── config.yml
└── _templates
    └── layout.html&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Pour faciliter mes tâches répétitives, notamment le commit sur
&lt;a href=&#34;https://github.com/badele/blog.jesuislibre.org&#34;&gt;github&lt;/a&gt; ainsi que
l&amp;rsquo;upload sur le serveur., je crée donc un Makefile.&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-makefile&#34; data-lang=&#34;makefile&#34;&gt;&lt;span class=&#34;nf&#34;&gt;clean&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
  rm -rf _build

&lt;span class=&#34;nf&#34;&gt;build&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
      run-rstblog build

&lt;span class=&#34;nf&#34;&gt;serve&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
      run-rstblog serve

&lt;span class=&#34;nf&#34;&gt;push&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
      git push github master

&lt;span class=&#34;nf&#34;&gt;upload&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
      rsync -a _build/ votrecompte@votreserveur:/home/votrerepertoire/
      @echo &lt;span class=&#34;s2&#34;&gt;&amp;#34;Done...&amp;#34;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Votre installation est maintenant terminée, il ne vous reste plus qu&amp;rsquo;à
créer vos billets, comme cité plus haut, pour cela, j&amp;rsquo;utilise le couple
Emacs + rest mode&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;http://blog.jesuislibre.org/img/2013/emacs_rst_mode.png&#34; alt=&#34;rstmode for emacs&#34; width=&#34;75%&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Exemple de process pour la publication d&amp;rsquo;un billet.&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; votre_blog
workon rstblog
emacs &lt;span class=&#34;m&#34;&gt;2013&lt;/span&gt;/3/3/votre_billet
make build serve &lt;span class=&#34;c1&#34;&gt;# Pour tester votre blog avant publication sur localhost:5000
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;git commit
make clean build upload push # Pour upload sur votre serveur ainsi que sur github&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;En espérant que cela donnera aux indécis l&amp;rsquo;envie de passer le cap :)&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Test unitaire automatisé lors d’un push sur github</title>
      <link>http://blog.jesuislibre.org/test-unitaire-automatis%C3%A9-lors-dun-push-sur-github/</link>
      <pubDate>Tue, 19 Feb 2013 00:00:00 +0000</pubDate>
      <author>bruno@adele.im (Bruno Adelé)</author>
      <guid>http://blog.jesuislibre.org/test-unitaire-automatis%C3%A9-lors-dun-push-sur-github/</guid>
      <description>

&lt;p&gt;&lt;img src=&#34;http://blog.jesuislibre.org/img/2013/travis.png&#34; alt=&#34;travis&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Suite au développement de
&lt;a href=&#34;http://bruno.adele.im/projets/garchdeps/&#34;&gt;garchdeps&lt;/a&gt; (outils de gestion
des dépendances pour Archlinux). J’ai rencontré des problèmes lors de
l’accès à certaines propriétés de mon code Python, je n’utilisais pas
les nouvelles méthodes de &lt;a href=&#34;http://docs.python.org/2/glossary.html#term-new-style-class&#34;&gt;création de
classe&lt;/a&gt;.
C’est pour cela que je me suis mis à la recherche d’une solution
permettant d’effectuer des tests unitaires automatiques après chaque
push sur le dépot &lt;a href=&#34;http://www.github.com/badele&#34;&gt;github&lt;/a&gt;, Pratique en
travail d’équipe, cela permet de s’assurer que le code est toujours
valide lorsqu’un membre pushe son code.&lt;/p&gt;

&lt;p&gt;Pour cela, je vais utiliser le projet communautaire www.travis-ci.org
couplé à &lt;a href=&#34;http://www.github.com/badele&#34;&gt;github&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&#34;travis-ci-c-est-quoi&#34;&gt;Travis-CI c’est quoi ?&lt;/h2&gt;

&lt;p&gt;Travis-CI est une plateforme d’intégration continue, créée par la
communauté Ruby, cette plateforme est libre et comme le dit la dévise du
projet:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A distributed build system for the open source community&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Cette plateforme est principalement dédiée à la communauté du libre,
d’ailleurs dans sa version communautaire, elle ne prend en compte que
les dépôts github publics. Actuellement travis-ci gère une &lt;a href=&#34;http://about.travis-ci.org/docs/#Specific-Language-Help&#34;&gt;quinzaine de
langages&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A noter que les sources travis-ci sont disponibles sur le dépôt
&lt;a href=&#34;https://github.com/travis-ci/travis-ci&#34;&gt;github&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&#34;synchronisation-entre-travis-et-github&#34;&gt;Synchronisation entre travis et github&lt;/h2&gt;

&lt;p&gt;Pour créer un compte sur travis-CI, rien de plus simple, il suffit de
cliquer sur « sign in with github », une fois que vous vous êtes
connecté, sélectionnez les dépôts sur lesquels vous désirez effectuer
des tests unitaires&lt;/p&gt;

&lt;h2 id=&#34;configuration-de-votre-projet-pour-supporter-le-test-unitaire-python&#34;&gt;Configuration de votre projet pour supporter le test unitaire (Python)&lt;/h2&gt;

&lt;p&gt;A la racine de votre projet, créez le fichier &lt;strong&gt;.travis.yml&lt;/strong&gt; contenant
au minimum les lignes suivantes&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Language à parser&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;language&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Version de python à tester&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;python&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;2.7&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;3.2&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# script du test unitaire à executer&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;script&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./garchdeps.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--test&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Exemple d’un code de test unitaire&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;TestPackages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unittest&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TestCase&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
 &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;setUp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
     &lt;span class=&#34;sa&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Before unittest&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
     &lt;span class=&#34;n&#34;&gt;pwd&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dirname&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;vm&#34;&gt;__file__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
     &lt;span class=&#34;n&#34;&gt;filename&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%s&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%s&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;%&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pwd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;packages.cache&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
     &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__allpackages&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;loadPkgInfo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filename&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

 &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;test_summary&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
     &lt;span class=&#34;sa&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34; test summary properties&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
     &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;assertEqual&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__allpackages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1277&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
     &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;assertEqual&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__allpackages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fullsize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;6347736&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

 &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;test_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
     &lt;span class=&#34;sa&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34; test object size&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
     &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;assertEqual&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__allpackages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getPkgByName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;libreoffice-common&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;241767&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
     &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;assertEqual&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__allpackages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getPkgByName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;kdebase-workspace&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;73720&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
     &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;assertEqual&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__allpackages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getPkgByName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;arduino&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;47104&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

 &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;test_maxiobject&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
     &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;assertEqual&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__allpackages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;maxi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;size&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pkgname&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
                      &lt;span class=&#34;sa&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;libreoffice-common&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
     &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;assertEqual&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__allpackages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;maxi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;depssize&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pkgname&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
                      &lt;span class=&#34;sa&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;kdeplasma-applets-networkmanagement&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
     &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;assertEqual&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__allpackages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;maxi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;nbused&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pkgname&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
                      &lt;span class=&#34;sa&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;glibc&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
     &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;assertEqual&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__allpackages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;maxi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;nbtotaldeps&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pkgname&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
                      &lt;span class=&#34;sa&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;kdeplasma-applets-networkmanagement&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
     &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;assertEqual&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__allpackages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;maxi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;maxdepth&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pkgname&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
                      &lt;span class=&#34;sa&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;kdeutils-kremotecontrol&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

 &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;test_maxivalue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
     &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;assertEqual&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__allpackages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;maxi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;size&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
                      &lt;span class=&#34;mf&#34;&gt;241767.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
     &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;assertEqual&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__allpackages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;maxi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;depssize&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;depssize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
                      &lt;span class=&#34;mf&#34;&gt;1472500.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
     &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;assertEqual&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__allpackages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;maxi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;nbused&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nbused&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
                      &lt;span class=&#34;mi&#34;&gt;165&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
     &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;assertEqual&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__allpackages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;maxi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;nbtotaldeps&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nbtotaldeps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
                      &lt;span class=&#34;mi&#34;&gt;292&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
     &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;assertEqual&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__allpackages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;maxi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;maxdepth&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;maxdepth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
                      &lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2 id=&#34;push-du-code-vers-github&#34;&gt;Push du code vers github&lt;/h2&gt;

&lt;p&gt;Après avoir commité et pushé le code vers github, et après une attente
de quelques secondes, le résultat de votre build devrait apparaître sur
le site travis-ci et devrait ressembler à la capture ci-dessous&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;http://blog.jesuislibre.org/img/2013/travis-ci.png&#34; alt=&#34;travis ci&#34; /&gt;&lt;/p&gt;

&lt;h2 id=&#34;bonus&#34;&gt;Bonus&lt;/h2&gt;

&lt;p&gt;Sur la page README.md de votre projet (github) il est possible d’ajouter
un bouton qui permet d’indiquer si les tests se sont correctement
déroulés. Il vous suffit d’ajouter la ligne suivante&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;[&lt;span class=&#34;nt&#34;&gt;![Build Status&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://secure.travis-ci.org/badele/garchdeps.png&lt;/span&gt;)](http://travis-ci.org/badele/garchdeps)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;Ce qui donne ceci&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://secure.travis-ci.org/badele/garchdeps.png&#34; alt=&#34;garchdeps&#34; /&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Support de l’Android Market depuis l’emulateur du SDK de Google</title>
      <link>http://blog.jesuislibre.org/support-de-landroid-market-depuis-lemulateur-du-sdk-de-google/</link>
      <pubDate>Mon, 22 Oct 2012 00:00:00 +0000</pubDate>
      <author>bruno@adele.im (Bruno Adelé)</author>
      <guid>http://blog.jesuislibre.org/support-de-landroid-market-depuis-lemulateur-du-sdk-de-google/</guid>
      <description>

&lt;p&gt;&lt;img src=&#34;http://blog.jesuislibre.org/img/2012/android-0.png&#34; alt=&#34;android screen&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Pour ceux qui n’ont pas encore la chance d’avoir un téléphone Android,
ils peuvent tester le système d’exploitation Android grâce au SDK de
Google, puisque celui ci est fourni avec un émulateur de téléphone.&lt;/p&gt;

&lt;p&gt;Hélas, l’émulateur fourni avec le SDK ne contient pas les applications
propriétaires de Google comme par exemple GMail,GTalk et bien entendu
l’&lt;a href=&#34;http://blog.jesuislibre.org/2009/10/support-de-landroid-market-depuis-lemulateur-du-sdk-de-google/www.android.com/market/&#34;&gt;Android
Market&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;De ce fait il perd une grande partie de son intérêt, et il n’est même
pas possible de tester les applications de l’&lt;a href=&#34;http://blog.jesuislibre.org/2009/10/support-de-landroid-market-depuis-lemulateur-du-sdk-de-google/www.android.com/market/&#34;&gt;Android
Market&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Une petite astuce s’impose:&lt;/p&gt;

&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;

&lt;p&gt;Installer le SDK de google ensuite Télécharger la version de
développement du HTC Dream
&lt;strong&gt;signed-dream_devphone_userdebug-img-150275.zip&lt;/strong&gt; depuis l’adresse
suivante &lt;a href=&#34;http://developer.htc.com/adp.html&#34;&gt;http://developer.htc.com/adp.html&lt;/a&gt;. Déposer le fichier dans
/tmp&lt;/p&gt;

&lt;p&gt;L’astuce est de copier les ROMs provenant du kit de développement du HTC
Dream.&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;unzip -x /tmp/signed-dream_devphone_userdebug-img-150275.zip -d /tmp/android/
cp system.img /usr/local/android-sdk-linux_x86-1.5_r3/add-ons/google_apis-3/images/
cp userdata.img /usr/local/android-sdk-linux_x86-1.5_r3/add-ons/google_apis-3/images/
sudo chmod a+r /usr/local/android-sdk-linux_x86-1.5_r3/add-ons/google_apis-3/images/*.img&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Préparer un périphérique virtuel&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;android create avd -t &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; -n virtual_phone&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Lancer l’émulateur&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;emulator -avd virtual_phone&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Etape 1 cliquer sur l’écran, pour commencer l’inscription&lt;/li&gt;
&lt;li&gt;Etape 2 passer l’étape du tutoriel&lt;/li&gt;
&lt;li&gt;Etape 3,4 Créer ou utiliser un compte google&lt;/li&gt;
&lt;li&gt;Etape 5 Tester vos applications sur le market.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&#34;http://blog.jesuislibre.org/img/2012/android-1.png&#34; alt=&#34;android screenshot&#34; /&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Découverte de l’environnement Arduino</title>
      <link>http://blog.jesuislibre.org/d%C3%A9couverte-de-lenvironnement-arduino/</link>
      <pubDate>Sun, 07 Oct 2012 00:00:00 +0000</pubDate>
      <author>bruno@adele.im (Bruno Adelé)</author>
      <guid>http://blog.jesuislibre.org/d%C3%A9couverte-de-lenvironnement-arduino/</guid>
      <description>&lt;p&gt;Afin d’aider à la compréhension de mes prochains billets concernant un
projet de domotique avec des kits arduino, j’ai décidé de faire une
petite introduction sur la technologie Arduino.&lt;/p&gt;

&lt;p&gt;Arduino permet d’effectuer des montages électroniques sans avoir de
compétence particulière, me concernant je connais quelques notions comme
U=RI, je n’ai pas assez de pratique pour comprendre en profondeur le
fonctionnement d’un transistor ou un condensateur. C’est pour cela que
je me suis tourné vers Arduino, cette techno permet, de façon simple, de
créer de petits montages (ex: faire clignoter une lampe, mesurer la
température, etc …)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Electronique classique VS Arduino&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Avant de voir en détails les bases de l’Arduino, nous allons comparer 2
montages qui effectuent la même fonctionnalité. L’une sous la forme d’un
montage électronique classique et l’autre sous forme de montage à base
d’Arduino. Ce montage permet de faire clignoter une led.&lt;/p&gt;

&lt;p&gt;Montage classique&lt;/p&gt;

&lt;p&gt;Schéma sur breadboard&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;http://blog.jesuislibre.org/img/2010/blink_led_astable_bb_reduced.png&#34; alt=&#34;blink astable&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Schéma électronique&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;http://blog.jesuislibre.org/img/2010/blink_led_astable_schem_reduced.png&#34; alt=&#34;schema astable&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Pour calculer la durée de l’allumage et de l’extinction, il faut jongler
avec les valeurs des résistances et des condensateurs.&lt;/p&gt;

&lt;p&gt;Montage à base d’Arduino&lt;/p&gt;

&lt;p&gt;Schéma sur breadboard&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;http://blog.jesuislibre.org/img/2010/arduino_blink_bb_reduced.png&#34; alt=&#34;breadboard&#34; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ATTENTION: Sur l’Arduino Uno, vous pouvez brancher une LED directement
sur la PIN 13 (car elle possède une résistance interne). Sur les autres
PIN, n’oubliez pas d’ajouter une résistance pour limiter l’intensité de
la LED.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Schéma electronique&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;http://blog.jesuislibre.org/img/2010/arduino_blink_schem_reduced.png&#34; alt=&#34;schema reduit&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Le code&lt;/p&gt;

&lt;p&gt;Arduino c’est quoi ?&lt;/p&gt;

&lt;p&gt;Arduino c’est un packaging d’un microcontrôleur à base d’Atmel AVR + un
outil de développement. Ce kit permet de créer facilement des modules
électroniques sans avoir de compétence électronique particulière, de
plus les cartes Arduino sont publiées sous licence Creative Common. Il
existe plusieurs modèles de carte Arduino (Nano, Leonardo, LilyPad, Mega
2560). La plus utilisée est l’Arduino Uno.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Détail de la carte Arduino Uno&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;http://arduino.cc/en/uploads/Main/ArduinoUnoFront.jpg&#34; width=&#34;75%&#34; alt=&#34;Carte arduino&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Arduino Uno est basée sur un microcontrôleur ATmega328 cadencé à 16Mhz.
Celle ci comprend :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;14 Entrées / Sorties digitales (0/1 – On/Off), dont 6 qui peuvent
être utlisées en mode PWM, 40mA par sortie&lt;/li&gt;
&lt;li&gt;6 entrées analogiques (0-5V ou 0-3.3V) avec une plage de 1024
échantillons.&lt;/li&gt;
&lt;li&gt;la carte peut être alimentée par USB ou par source extérieure (7V –
12V)&lt;/li&gt;
&lt;li&gt;32Ko pour le stockage du code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Entrées/Sorties spéciales&lt;/em&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Liaison série, 0 (RX) and 1 (TX)&lt;/li&gt;
&lt;li&gt;Génération d’interruption, les prises 2,3 peuvent générées des
interruptions&lt;/li&gt;
&lt;li&gt;Support du mode PWM 3, 5, 6, 9, 10, and 11 (schématisé ~ sur la
carte, voir photo )&lt;/li&gt;
&lt;li&gt;Communication SPI, 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK).&lt;/li&gt;
&lt;li&gt;Communication TWI, A4 or SDA &amp;amp; A5 or SCL&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Led sans utilisation de résistance, la sortie N° 13 permet de
connecter directement une led sans utiliser de résistance.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Les shields&lt;/p&gt;

&lt;p&gt;Les shields permettent d’ajouter de nouvelles fonctionnalités à une
carte Arduino, par exemple ajout du support du GPS, Ethernet, Bluetooth,
GSM, Wi-Fi, écran LCD, etc …. Ces modules sont conçus pour s’interfacer
facilement avec l’Arduino, ils s’enfichent sur l’Arduino et dupliquent
les entrées/sorties sur la carte Shields. Exemple de mise en oeuvre
d’une carte shields&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;http://site.gravitech.us/Arduino/SHIELD7/7-SEG_SHIELD-03rs.jpg&#34; width=&#34;75%&#34; alt=&#34;arduino shield&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Le mode PWM&lt;/p&gt;

&lt;p&gt;Le PWM est une astuce permettant de modifier la luminance en modifiant
la période on/off d’une led, il permet également de modifier la vitesse
d’un moteur. Ça joue en fait sur la durée des périodes hautes/basses,
voir schéma ci-dessous&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;http://arduino.cc/en/uploads/Tutorial/pwm.gif&#34; alt=&#34;detail pwm&#34; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;http://arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf&#34;&gt;Plan de la
carte&lt;/a&gt;
Arduino Uno sous licence Créative Common&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IDE&lt;/strong&gt; L’Arduino est fourni avec un &lt;a href=&#34;http://arduino.cc/hu/Main/Software&#34;&gt;kit de
développement&lt;/a&gt; qui permet de
compiler du C, C++ et de l’envoyer directement sur la carte, voici un
aperçu de l’IDE.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;http://gelendir.github.com/htcpcpd/img/arduinoIde.png&#34; alt=&#34;IDE pour arduino&#34; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concevoir des schémas&lt;/strong&gt; Les schémas visibles sur ce billet ont été
créés avec Fritzing, outil développé par l’université de Postdam en
Allemagne. Il est vraiment facile à prendre en main. Il permet de
schématiser vos montages sur breadboard, ainsi que le schéma
électronique correspondant, voire même le PCB.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;http://www.creativeapplications.net/wp-content/uploads/2009/05/fritzing-3.png&#34; width=&#34;75%&#34; alt=&#34;fritzing&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Voila, en espérant que ça vous donnera envie d’aller plus loin…&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
