<?xml version="1.0"?>
<rdf:RDF
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:foaf="http://xmlns.com/foaf/0.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns="http://purl.org/rss/1.0/"
>
<channel rdf:about="http://blog.yaal.fr">
	<title>Le blog de Yaal</title>
	<link>http://blog.yaal.fr</link>
	<description>Le blog de Yaal - http://blog.yaal.fr</description>

	<items>
		<rdf:Seq>
			<rdf:li rdf:resource="urn:md5:143a8ae3d486a60fe527a3ab14ed5c9e" />
			<rdf:li rdf:resource="http://ascendances.wordpress.com/?p=1111" />
			<rdf:li rdf:resource="http://ascendances.wordpress.com/?p=1085" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-4753053491191074994.post-6371948009702060290" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-4753053491191074994.post-2727655356993039653" />
			<rdf:li rdf:resource="http://ascendances.wordpress.com/?p=1018" />
			<rdf:li rdf:resource="http://ascendances.wordpress.com/?p=930" />
			<rdf:li rdf:resource="http://yaalblog.wordpress.com/?p=2" />
			<rdf:li rdf:resource="http://ascendances.wordpress.com/?p=905" />
			<rdf:li rdf:resource="http://ascendances.wordpress.com/?p=861" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-4753053491191074994.post-482568387340606738" />
			<rdf:li rdf:resource="http://ascendances.wordpress.com/?p=777" />
			<rdf:li rdf:resource="http://ascendances.wordpress.com/?p=689" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-4753053491191074994.post-2300487103930680845" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-4753053491191074994.post-570977540727176095" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-4753053491191074994.post-3657950480250478968" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-4753053491191074994.post-6654669583600016177" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-4753053491191074994.post-4821153328795489903" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-4753053491191074994.post-3469371192117375943" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-4753053491191074994.post-1526528654477638919" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-4753053491191074994.post-410119233369317459" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-4753053491191074994.post-883369995392211028" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-4753053491191074994.post-4505528550346418274" />
			<rdf:li rdf:resource="urn:md5:b947b9107d9260268169364046161ed9" />
			<rdf:li rdf:resource="http://ascendances.wordpress.com/?p=646" />
			<rdf:li rdf:resource="http://ascendances.wordpress.com/?p=583" />
			<rdf:li rdf:resource="http://ascendances.wordpress.com/?p=452" />
			<rdf:li rdf:resource="urn:md5:b13a43e421e85b78f8d4e87f9307641d" />
			<rdf:li rdf:resource="urn:md5:74c4244354c3d6027358e7fc6acf0c31" />
			<rdf:li rdf:resource="http://ascendances.wordpress.com/?p=415" />
			<rdf:li rdf:resource="http://ascendances.wordpress.com/?p=331" />
			<rdf:li rdf:resource="urn:md5:ba5bfe80fcf597627a15fdc5250d6961" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-4753053491191074994.post-7693831787145199855" />
			<rdf:li rdf:resource="urn:md5:bb88653515d82bc01e2f843d12831cbb" />
		</rdf:Seq>
	</items>
</channel>

<item rdf:about="urn:md5:143a8ae3d486a60fe527a3ab14ed5c9e">
	<title>Bruno Voisin: La quête d'un nouveau lecteur de flux</title>
	<link>http://blog.hikoweb.net/index.php?post/2013/05/10/La-qu%C3%AAte-d-un-nouveau-lecteur-de-flux</link>
	<content:encoded>&lt;!-- &lt;img alt=&quot;Logo de Selfoss&quot; src=&quot;http://blog.hikoweb.net/public/logos/selfoss-logo.png&quot; /&gt; --&gt;
&lt;p&gt;&lt;img title=&quot;Icône flux RSS, mai 2013 (Nyssa Brown, http://www.iconspedia.com/icon/rss-feed-orange-540.html)&quot; alt=&quot;Icône flux RSS&quot; src=&quot;http://blog.hikoweb.net/public/logos/feed-icon-orange-128.png&quot; /&gt; Comme tout le monde le sait maintenant, Google Reader ferme le 1&lt;sup&gt;er&lt;/sup&gt; juillet. Pour moi ce n'est pas vraiment une mauvaise nouvelle mais plutôt l'occasion de trouver une alternative libre à héberger moi même. Je pense qu'il est important de ne pas être dépendant d'un service fermé et de garder ses propres données pour soit.&lt;/p&gt;
&lt;p&gt;Si vous aussi vous pouvez héberger un site web, n'hésitez pas à installer votre propre lecteur de flux RSS web (&lt;em&gt;web based RSS reader&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Une liste des solutions existantes est disponible sur &lt;a href=&quot;http://sebsauvage.net/rhaa/index.php?2013/03/15/17/15/39-arretez-de-pleurer-google-reader-hebergez-un-lecteur-rss-chez-vous&quot; title=&quot;Arrêtez de pleurer Google Reader: Hébergez un lecteur RSS chez vous&quot;&gt;sebsauvage.net&lt;/a&gt;. Dans ma recherche, je me suis concentré sur les besoins suivants.&lt;/p&gt;    &lt;ul&gt;
&lt;li&gt;Je veux un affichage adapté à mon smartphone.&lt;/li&gt;
&lt;li&gt;Je veux ranger mes flux dans des catégories ou dossiers.&lt;/li&gt;
&lt;li&gt;Je veux voir la liste de mes flux pour afficher les articles d'un seul flux.&lt;/li&gt;
&lt;li&gt;Je veux importer mes flux de Google Reader (import OPML)&lt;/li&gt;
&lt;li&gt;Je veux une authentification pour accéder à mon lecteur de flux.&lt;/li&gt;
&lt;li&gt;Je veux pouvoir marquer un article comme favoris ou suivi.&lt;/li&gt;
&lt;li&gt;Je veux pouvoir mettre des étiquettes (&lt;em&gt;tag&lt;/em&gt;) aux articles.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;J'ai donc testé quelques solutions et voici ci-dessous un tableau récapitulatif.&lt;/p&gt;
&lt;table cellspacing=&quot;0&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Nom&lt;/th&gt;
&lt;th title=&quot;Langage de programation&quot;&gt;Langage&lt;/th&gt;
&lt;th title=&quot;Base de données&quot;&gt;BDD&lt;/th&gt;
&lt;th title=&quot;Affichage pour smartphone&quot;&gt;Mobile&lt;/th&gt;
&lt;th title=&quot;Catégories ou dossiers pour ranger les flux&quot;&gt;Catégories&lt;/th&gt;
&lt;th&gt;Liste des flux&lt;/th&gt;
&lt;th&gt;Import OPML&lt;/th&gt;
&lt;th title=&quot;Protection par mot de passe&quot;&gt;Mot de passe&lt;/th&gt;
&lt;th&gt;Favoris / Suivi&lt;/th&gt;
&lt;th&gt;Tags articles&lt;/th&gt;
&lt;th&gt;Démo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;http://projet.idleman.fr/leed/&quot;&gt;Leed&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;PHP 5.3&lt;/td&gt;
&lt;td&gt;MySQL&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;Non&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://projet.idleman.fr/leed/demonstration/&quot;&gt;Oui&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;http://selfoss.aditu.de/&quot;&gt;Selfoss&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;PHP 5.3&lt;/td&gt;
&lt;td&gt;MySQL, PostgreSQL, SQLite3&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;Non&lt;/td&gt;
&lt;td&gt;Non&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;http://miniflux.net/fr/&quot;&gt;Miniflux&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;PHP 5.3&lt;/td&gt;
&lt;td&gt;SQLite&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;Non&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;Non&lt;/td&gt;
&lt;td&gt;Non&lt;/td&gt;
&lt;td&gt;Non&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;http://rsslounge.aditu.de/&quot;&gt;RSS Lounge&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;PHP 5.2&lt;/td&gt;
&lt;td&gt;MySQL&lt;/td&gt;
&lt;td&gt;Non&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;Non&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;Non&lt;/td&gt;
&lt;td&gt;Non&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://feedhq.org/&quot;&gt;FeedHQ&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Python 2.7&lt;/td&gt;
&lt;td&gt;PostgreSQL&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;Non&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;Non&lt;/td&gt;
&lt;td&gt;Version d'essai sur le site&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;S'il y a une erreur dans ce tableau ou si vous voulez y ajouter des lignes, n'hésitez à m'en parler dans les commentaires.&lt;/p&gt;
&lt;p&gt;Je trouve dommage que la majorité des solutions soient en PHP et que les offres mutualisés des hébergeurs se limitent souvent à PHP. J'aurais bien essayé une solution en Python.&lt;/p&gt;
&lt;p&gt;À ce jour, je n'ai trouvé aucune solution avec la fonctionnalité des &lt;em&gt;tags&lt;/em&gt; sur les articles comme le fait Google Reader.&lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;Logo de Selfoss, mai 2013&quot; alt=&quot;Logo de Selfoss&quot; src=&quot;http://blog.hikoweb.net/public/logos/.selfoss-logo_t.png&quot; /&gt;Les deux qui correspondent le mieux à mes besoins sont Leed et Selfoss. Pour l'instant mon choix se porte sur Selfoss. Je le trouve assez simple et esthétique. Si vous aussi vous voulez installer Selfoss, alors la suite vous intéressera sûrement. Pour Leed, lisez plutôt le tutoriel sur &lt;a href=&quot;http://geekdefrance.fr/2013/03/15/tuto-installer-simplement-leed-son-hebergement-mutualise/&quot; title=&quot;[TUTO] Installer simplement Leed sur son hébergement mutualisé&quot;&gt;Geek De France.fr&lt;/a&gt;.&lt;/p&gt;
&lt;h1&gt;Selfoss&lt;/h1&gt;
&lt;p&gt;Selfoss est &lt;a href=&quot;https://fr.wikipedia.org/wiki/Responsive_Web_Design&quot; title=&quot;Responsive Web Design - Wikipédia&quot;&gt;&lt;em&gt;responsive&lt;/em&gt;&lt;/a&gt;, il s'adapte aux écrans de toutes tailles. Il y a trois affichages différents en fonction de la largeur disponible.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.hikoweb.net/public/Screens/selfoss.png&quot; title=&quot;Capture de Selfoss&quot;&gt;&lt;img src=&quot;http://blog.hikoweb.net/public/Screens/.selfoss_m.jpg&quot; alt=&quot;Capture de Selfoss&quot; title=&quot;Capture de Selfoss, mai 2013&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://blog.hikoweb.net/public/Screens/selfoss-medium.png&quot; title=&quot;Capture de Selfoss avec largeur moyenne&quot;&gt;&lt;img src=&quot;http://blog.hikoweb.net/public/Screens/.selfoss-medium_s.jpg&quot; alt=&quot;Capture de Selfoss avec largeur moyenne&quot; title=&quot;Capture de Selfoss avec largeur moyenne, mai 2013&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://blog.hikoweb.net/public/Screens/selfoss-small.png&quot; title=&quot;Capture de Selfoss avec petite largeur (smartphone)&quot;&gt;&lt;img src=&quot;http://blog.hikoweb.net/public/Screens/.selfoss-small_s.jpg&quot; alt=&quot;Capture de Selfoss avec petite largeur (smartphone)&quot; title=&quot;Capture de Selfoss avec petite largeur (smartphone), mai 2013&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Lorsqu'on clique sur un article, il se déplie. J'aime bien la disposition en trois colonnes pour lire les articles sur un grand écran.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.hikoweb.net/public/Screens/selfoss-article.png&quot; title=&quot;Capture de Selfoss avec article déplié&quot;&gt;&lt;img src=&quot;http://blog.hikoweb.net/public/Screens/.selfoss-article_m.jpg&quot; alt=&quot;Capture de Selfoss avec article déplié&quot; title=&quot;Capture de Selfoss avec article déplié, mai 2013&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://blog.hikoweb.net/public/Screens/selfoss-medium-article.png&quot; title=&quot;Capture de Selfoss avec article déplié (largeur moyenne)&quot;&gt;&lt;img src=&quot;http://blog.hikoweb.net/public/Screens/.selfoss-medium-article_s.jpg&quot; alt=&quot;Capture de Selfoss avec article déplié (largeur moyenne)&quot; title=&quot;Capture de Selfoss avec article déplié (largeur moyenne), mai 2013&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://blog.hikoweb.net/public/Screens/selfoss-small-article.png&quot; title=&quot;Capture de Selfoss avec article déplié (petite largeur)&quot;&gt;&lt;img src=&quot;http://blog.hikoweb.net/public/Screens/.selfoss-small-article_s.jpg&quot; alt=&quot;Capture de Selfoss avec article déplié (petite largeur)&quot; title=&quot;Capture de Selfoss avec article déplié (petite largeur), mai 2013&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Pour l'installer il vous faut un espace d'hébergement avec PHP 5.3. Commencez par télécharger les sources de Selfoss sur &lt;a href=&quot;http://selfoss.aditu.de/&quot;&gt;le site officiel&lt;/a&gt;. Après avoir extrait l'archive, copiez le fichier &lt;em&gt;defaults.ini&lt;/em&gt; vers &lt;strong&gt;&lt;em&gt;config.ini&lt;/em&gt;&lt;/strong&gt; et personnalisez votre configuration en fonction de vos besoins en modifiant ce nouveau fichier. Tous les paramètres sont décrit sur &lt;a href=&quot;http://selfoss.aditu.de/#documentation&quot; title=&quot;Documentation de Selfoss&quot;&gt;le site de Selfoss&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Personnellement, j'utilise une base MySQL (mais SQLite et PostgreSQL sont disponibles). Pour ça il faut saisir la valeur des paramètres suivants.&lt;/p&gt;
&lt;pre&gt;db_type=mysql
db_host=domaine ou IP de votre serveur de base de données
db_database=Nom de la base de données
db_username=Nom de l'utilisateur MySQL
db_password=Mot de passe de l'utilisateur&lt;/pre&gt;
&lt;p&gt;Par défaut l'accès à Selfoss n'est pas protégé par un mot de passe. Pour en ajouter un, saisissez votre nom d'utilisateur et votre &lt;a href=&quot;https://fr.wikipedia.org/wiki/Salage_%28informatique%29&quot; title=&quot;Salage (cryptographie) - Wikipédia&quot;&gt;salage&lt;/a&gt; pour le &lt;a href=&quot;https://fr.wikipedia.org/wiki/Fonction_de_hachage&quot; title=&quot;Fonction de hachage - Wikipédia&quot;&gt;hachage&lt;/a&gt; de votre mot de passe. Selfoss possède un générateur de &lt;em&gt;hash&lt;/em&gt; pour mot de passe. Vous saisirez donc sa valeur après son installation.&lt;/p&gt;
&lt;pre&gt;username=hiko
password=
salt=une chaîne aléatoire de caractère&lt;/pre&gt;
&lt;p&gt;Si comme moi vous voulez que les articles soient automatiquement marqués comme lus à la consultation, changer le 0 en 1 pour le paramètre &lt;code&gt;auto_mark_as_read&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;auto_mark_as_read=1&lt;/pre&gt;
&lt;p&gt;Maintenant que votre &lt;em&gt;config.ini&lt;/em&gt; est prêt, transférez le répertoire &lt;em&gt;selfoss&lt;/em&gt; sur votre serveur par FTP par exemple. Demander à votre navigateur d'accéder à cet espace et si tous va bien quelque chose qui ressemble à la capture d'écran plus haut devrait s'afficher.&lt;/p&gt;
&lt;p&gt;Pour ceux qui on opté pour un mot de passe doivent ajouter &lt;em&gt;/password&lt;/em&gt; à leur URL pour générer le &lt;em&gt;hash&lt;/em&gt; du mot de passe voulu. Ensuite retour au fichier &lt;em&gt;config.ini&lt;/em&gt; pour y coller la chaîne générée dans le paramètre &lt;code&gt;password&lt;/code&gt;. Bien sûr n'oubliez pas de le transférer sur votre serveur.&lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;Générateur de hash de Selfoss, mai 2013&quot; alt=&quot;Générateur de hash de Selfoss&quot; src=&quot;http://blog.hikoweb.net/public/Screens/selfoss-password.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Il ne reste plus qu'à ajouter vos sources. Pour les utilisateurs de Google Reader, rendez-vous sur la page &lt;em&gt;/opml&lt;/em&gt; de Selfoss (en cliquant sur l'icône en forme de nuage en bas à droite puis sur «&amp;nbsp;ou importer un fichier opml ou google reader&amp;nbsp;»). Un lien vous propose d'exporter vos sources de Google Reader. Enregistrez le sur votre disque puis importez le dans Selfoss.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://blog.hikoweb.net/public/Screens/selfoss-import.png&quot; alt=&quot;Import OPML de Selfoss&quot; title=&quot;Import OPML de Selfoss, mai 2013&quot; /&gt;&lt;/p&gt;
&lt;p&gt;C'est terminé. Vous pouvez utiliser Selfoss depuis n'importe quel appareil à condition d'avoir accès à Internet.&lt;/p&gt;</content:encoded>
	<dc:date>2013-05-17T16:00:00+00:00</dc:date>
</item>
<item rdf:about="http://ascendances.wordpress.com/?p=1111">
	<title>Stéphane Blondon: Évolution du nombre de messages sur debian-l10n-fr et debian-users-fr avec pychart</title>
	<link>http://ascendances.wordpress.com/2013/05/02/evolution-du-nombre-de-messages-sur-debian-l10n-fr-et-debian-users-fr-avec-pychart/</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://home.gna.org/pychart/&quot; title=&quot;Site web de pychart&quot;&gt;Pychart&lt;/a&gt; est une bibliothèque Python permettant des graphiques directement en python. Un paquet Debian est disponible (nommé python-pychart) avec la dernière version 1.39 (qui date de 2006).&lt;/p&gt;
&lt;p&gt;Debian utilise massivement des listes de diffusion pour la collaboration de ses membres. Parmi les nombreuses listes existantes, trois sont francophones :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;debian-users-fr, dédiée aux questions des utilisateurs ;&lt;/li&gt;
&lt;li&gt;debian-l10n-fr, dédiée aux traductions en français ;&lt;/li&gt;
&lt;li&gt;debian-news-french, dédiée aux communiqués officiels. Elle est exclue du graphique car elle ne représente pas vraiment l&amp;rsquo;activité des listes de diffusion.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pychart est utilisé pour créer un graphique montrant l&amp;rsquo;évolution du volume de messages postés sur ces deux listes pendant une année glissante (soit d&amp;rsquo;avril 2012 à avril 2013).&lt;/p&gt;
&lt;h3&gt;Le graphique&lt;/h3&gt;
&lt;p&gt;Le graphique représente le nombre de messages électroniques envoyés sur les deux listes par jour.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://ascendances.files.wordpress.com/2013/05/volume1.png&quot;&gt;&lt;img src=&quot;http://ascendances.files.wordpress.com/2013/05/volume1.png?w=300&amp;h=159&quot; alt=&quot;Volume des messages sur les listes de diffusion Debian francophones&quot; width=&quot;300&quot; height=&quot;159&quot; class=&quot;aligncenter size-medium wp-image-1147&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;On constate que les pics et les creux se font sur les mêmes mois. Par contre, les tendances générales sont inversées : en hausse pour la liste utilisateur, en baisse pour la liste dédiée aux traductions.&lt;/p&gt;
&lt;h3&gt;Réalisation&lt;/h3&gt;
&lt;p&gt;Le code Python est fourni à la fin de l&amp;rsquo;article. Pychart s&amp;rsquo;appuie sur de nombreuses inventions anciennes mais solidement éprouvées :&lt;/p&gt;
&lt;h4&gt;Invention de la poubelle (1884)&lt;/h4&gt;
&lt;p&gt;Toute la &lt;a href=&quot;http://home.gna.org/pychart/doc/index.html&quot; title=&quot;documentation de Pychart&quot;&gt;documentation&lt;/a&gt; fait des imports globaux (&lt;code&gt;from pychart import *&lt;/code&gt;), comme beaucoup d&amp;rsquo;exemples disponibles sur le web. Pour éviter de polluer l&amp;rsquo;espace de nom, il suffit d&amp;rsquo;importer les différents sous-modules de manière classique (&lt;code&gt;import pychart.sousmodule&lt;/code&gt;). Je n&amp;rsquo;ai pas eu besoin d&amp;rsquo;importer certains sous-modules bien qu&amp;rsquo;ils soient utilisés dans le script.&lt;/p&gt;
&lt;h4&gt;Création de postscript (1982)&lt;/h4&gt;
&lt;p&gt;Plusieurs formats de sortie sont disponibles (ps, pdf, png et svg). Par défaut, le fichier sera en PostScript.&lt;br /&gt;
Pour le changer vers le format png :&lt;/p&gt;
&lt;pre class=&quot;brush: python; title: ; notranslate&quot;&gt;
pychart.theme.output_format = &amp;quot;png&amp;quot;
&lt;/pre&gt;
&lt;p&gt;Pour avoir une sortie en png, ghostscript doit être installé sur le système. PIL n&amp;rsquo;est pas nécessaire.&lt;/p&gt;
&lt;h4&gt;Invention de la télévision couleur (1938)&lt;/h4&gt;
&lt;p&gt;Par défaut, les graphiques seront uniquement en nuances de gris. Si on souhaite avoir plein de couleurs, il faut le déclarer de la manière suivante :&lt;/p&gt;
&lt;pre class=&quot;brush: python; title: ; notranslate&quot;&gt;
pychart.theme.use_color = True
&lt;/pre&gt;
&lt;h4&gt;Invention de l&amp;rsquo;écriture de travers (-3400)&lt;/h4&gt;
&lt;p&gt;Il est possible d&amp;rsquo;orienter le texte affiché (que ce soit pour les axes ou des boîtes de texte ad-hoc). Pour cela, il faut définir l&amp;rsquo;angle d&amp;rsquo;orientation (« /a » pour définir que l&amp;rsquo;on modifie l&amp;rsquo;angle, « -20 » pour baisser de 20 degrés par rapport à l&amp;rsquo;horizontale dans l&amp;rsquo;exemple ci-dessous) :&lt;/p&gt;
&lt;pre class=&quot;brush: python; title: ; notranslate&quot;&gt;
pychart.axis.X(label=&amp;quot;Date&amp;quot;, format=&amp;quot;/a-20/hL%s&amp;quot;)
&lt;/pre&gt;
&lt;p&gt;La définition du formatage de la chaîne à afficher utilise le caractère « / » pour introduire un contrôle. Il est nécessaire de le doubler lorsque l&amp;rsquo;on souhaite l&amp;rsquo;afficher (pour une date par exemple).&lt;/p&gt;
&lt;h4&gt;Invention du dessin (Paléolithique)&lt;/h4&gt;
&lt;pre class=&quot;brush: python; title: ; notranslate&quot;&gt;
pychart.line_plot.T(label=u&amp;quot;debian-user-french&amp;quot;, #sert pour la légende
                    data=stats, #la structure des données à afficher
                    ycol=2, #la troisième colonne dans les données
                    line_style=_blue_line #le rendu des données
                    )
&lt;/pre&gt;
&lt;h4&gt;Invention du papier (IIième siècle avant JC)&lt;/h4&gt;
&lt;p&gt;La méthode draw() permet d&amp;rsquo;afficher les données sur la sortie standard. Il suffit simplement de la rediriger vers un fichier grâce au shell :&lt;/p&gt;
&lt;pre class=&quot;brush: bash; title: ; notranslate&quot;&gt;
$ python volume.py  &amp;gt; volume.png
&lt;/pre&gt;
&lt;h3&gt;Code source et références&lt;/h3&gt;
&lt;p&gt;Le code qui a permis de créer le graphique :&lt;/p&gt;
&lt;pre class=&quot;brush: python; title: ; notranslate&quot;&gt;
# -*- coding: utf-8 -*-

import pychart.area
import pychart.line_plot
import pychart.theme


pychart.theme.output_format = &amp;quot;png&amp;quot;
pychart.theme.use_color = True
pychart.theme.default_font_size = 14
pychart.theme.title = &amp;quot;14&amp;quot;


stats = ((&amp;quot;04//2012&amp;quot;, 12.27, 14.43),
        (&amp;quot;05//2012&amp;quot;, 10.71, 14.42),
        (&amp;quot;06//2012&amp;quot;, 11.77, 13.10),
        (&amp;quot;07//2012&amp;quot;, 10.19, 8.55),
        (&amp;quot;08//2012&amp;quot;, 11.65, 14.68),
        (&amp;quot;09//2012&amp;quot;, 13.00, 18.33),
        (&amp;quot;10//2012&amp;quot;, 10.32, 15.06),
        (&amp;quot;11//2012&amp;quot;, 6.87, 14.90),
        (&amp;quot;12//2012&amp;quot;, 5.48, 10.48),
        (&amp;quot;01//2013&amp;quot;, 5.29, 20.58),
        (&amp;quot;02//2013&amp;quot;, 10.25, 22.39),
        (&amp;quot;03//2013&amp;quot;, 9.74, 24.00),
        (&amp;quot;04//2013&amp;quot;, 8.3, 19.80))


_area = pychart.area.T(size = (700, 450),
            y_grid_interval=5,
            x_coord=pychart.category_coord.T(stats, 0),
            x_axis=pychart.axis.X(label=&amp;quot;Date&amp;quot;, format=&amp;quot;/a-20/hL%s&amp;quot;),
            y_axis=pychart.axis.Y(label=&amp;quot;Nombre de messages par jour&amp;quot;),
            legend=pychart.legend.T(),
            y_range=(0, None))

_red_line = pychart.line_style.T()
_red_line.width = 2
_red_line.dash = (5, 5)
_red_line.cap_style = 2
_red_line.join_style = 2
_red_line.color = pychart.color.red
_blue_line = pychart.line_style.T()
_blue_line.width = 2
_blue_line.color = pychart.color.royalblue
_l10n_plot = pychart.line_plot.T(label=u&amp;quot;debian-l10n-french&amp;quot;, data=stats, line_style=_red_line)
_user_plot = pychart.line_plot.T(label=u&amp;quot;debian-user-french&amp;quot;, data=stats, ycol=2, line_style=_blue_line)
_area.add_plot(_l10n_plot, _user_plot)

_area.draw()
&lt;/pre&gt;
&lt;p&gt;Les moyennes journalières ont été calculées préalablement. Elles sont exclues du code source pour ne pas l&amp;rsquo;alourdir inutilement. Voici les données brutes qui ont servi aux calculs des moyennes :&lt;br /&gt;
&lt;code&gt;date	debian-l10n-french	debian-user-french	nbre_jours&lt;br /&gt;
2012/04	368	433	30&lt;br /&gt;
2012/05	332	447	31&lt;br /&gt;
2012/06	353	393	30&lt;br /&gt;
2012/07	316	265	31&lt;br /&gt;
2012/08	361	455	31&lt;br /&gt;
2012/09	390	550	30&lt;br /&gt;
2012/10	320	467	31&lt;br /&gt;
2012/11	206	447	30&lt;br /&gt;
2012/12	170	325	31&lt;br /&gt;
2013/01	164	638	31&lt;br /&gt;
2013/02	287	627	28&lt;br /&gt;
2013/03	302	744	31&lt;br /&gt;
2013/04	190	594	30&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Les données ont été récupérées à partir des versions publiques des archives des listes de traductions.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://lists.debian.org/debian-l10n-french/&quot; rel=&quot;nofollow&quot;&gt;http://lists.debian.org/debian-l10n-french/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://lists.debian.org/debian-user-french/&quot; rel=&quot;nofollow&quot;&gt;http://lists.debian.org/debian-user-french/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La documentation de pychart est disponible à &lt;a href=&quot;http://home.gna.org/pychart/doc/pychart.html&quot; title=&quot;documentation de Pychart&quot;&gt;http://home.gna.org/pychart/doc/pychart.html&lt;/a&gt; ou dans le paquet python-pychart-doc.&lt;/p&gt;
&lt;p&gt;Enfin, &lt;a href=&quot;http://matplotlib.org/&quot; title=&quot;Site web de matplotlib&quot;&gt;Matplotlib&lt;/a&gt; répond au même besoin et semble être un projet plus vivant.&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/ascendances.wordpress.com/1111/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ascendances.wordpress.com/1111/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ascendances.wordpress.com&amp;blog=24442983&amp;post=1111&amp;subd=ascendances&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;ascendancesVolume des messages sur les listes de diffusion Debian francophones</content:encoded>
	<dc:date>2013-05-02T08:34:34+00:00</dc:date>
</item>
<item rdf:about="http://ascendances.wordpress.com/?p=1085">
	<title>Stéphane Blondon: Cohabitation Jinja et AngularJS</title>
	<link>http://ascendances.wordpress.com/2013/04/16/cohabitation-jinja-et-angularjs/</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://jinja.pocoo.org/docs/&quot; title=&quot;documentation de Jinja2&quot;&gt;Jinja2&lt;/a&gt;, un moteur de templates en Python, et &lt;a href=&quot;http://angularjs.org/&quot; title=&quot;documentation d'AngularJS&quot;&gt;AngularJS&lt;/a&gt;, un framework web côté client en Javascript, utilisent tous les deux les accolades pour indiquer une variable ou une structure à interpréter.&lt;br /&gt;
Par exemple &lt;code&gt;{{ choucroute }}&lt;/code&gt; pour une variable qui a du goût.&lt;/p&gt;
&lt;p&gt;D&amp;rsquo;où conflit.&lt;br /&gt;
Pour résoudre ce problème, trois possibilités :&lt;/p&gt;
&lt;h3&gt;Diviser les fichiers pour régner&lt;/h3&gt;
&lt;p&gt;Séparer l&amp;rsquo;utilisation de chaque template :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;variables Jinja uniquement dans les fichiers html fournis directement par l&amp;rsquo;application Python ;&lt;/li&gt;
&lt;li&gt;variables AngularJS uniquement dans les fichiers chargés dynamiquement (par exemple /partials/detail-choucroute.html).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Simple à mettre en place mais limité.&lt;/p&gt;
&lt;h3&gt;Commenter les accolades&lt;/h3&gt;
&lt;p&gt;Protéger le code AngularJS sensible en &lt;a href=&quot;http://jinja.pocoo.org/docs/templates/?highlight=raw&quot; title=&quot;Documentation de Jinja2 sur la protection de caractères&quot;&gt;empêchant son interprétation par Jinja&lt;/a&gt; : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;{{ '{{' }}&lt;/code&gt; pour ne pas interpréter des accolades ;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;{% raw %}&lt;/code&gt; pour un code plus long.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Changer les délimiteurs Jinja&lt;/h3&gt;
&lt;p&gt;Redéfinir les délimiteurs dans l&amp;rsquo;environnement de Jinja :&lt;/p&gt;
&lt;pre class=&quot;brush: python; title: ; notranslate&quot;&gt;
jinja_env = jinja2.Environment(...)
jinja_env.block_start_string = '(%'
jinja_env.block_end_string = '%)'
jinja_env.variable_start_string = '(('
jinja_env.variable_end_string = '))'
jinja_env.comment_start_string = '(#'
jinja_env.comment_end_string = '#)'
&lt;/pre&gt;
&lt;p&gt;L&amp;rsquo;ensemble des caractères accolades ont été remplacés par des parenthèses pour une raison de cohérence. Limiter la redéfinition des délimiteurs à &lt;code&gt;variable_start_string&lt;/code&gt; et &lt;code&gt;variable_end_string&lt;/code&gt; devrait suffire.&lt;/p&gt;
&lt;p&gt;Bien évidemment, libre à chacun de choisir d&amp;rsquo;autres délimiteurs. &lt;/p&gt;
&lt;p&gt;À noter qu&amp;rsquo;il est possible d&amp;rsquo;obtenir un résultat similaire avec &lt;a href=&quot;http://sametmax.com/utiliser-angularjs-avec-le-langage-de-template-de-django/&quot; title=&quot;Django et AngularJS&quot;&gt;Django&lt;/a&gt;.&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/ascendances.wordpress.com/1085/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ascendances.wordpress.com/1085/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ascendances.wordpress.com&amp;blog=24442983&amp;post=1085&amp;subd=ascendances&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;ascendances</content:encoded>
	<dc:date>2013-04-15T22:38:23+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-4753053491191074994.post-6371948009702060290">
	<title>Colin Garriga-Salaün: AgileFrBot, propulsé par rss2reddit !</title>
	<link>http://colingarrigasalaun.blogspot.com/2013/04/agilefrbot-propulse-par-rss2reddit.html</link>
	<content:encoded>Je suis heureux de vous présenter rss2reddit et AgileFrBot !

Reddit est un excellent outil pour l'intelligence collective. Il permet notamment d'ouvrir des espaces thématiques et d'y accumuler des liens vers des articles. Ces liens peuvent être qualifiés et commentés par les usagers, et sont ainsi exploitables selon les appréciations de la communauté.

rss2reddit est un outil -- réalisé par</content:encoded>
	<dc:date>2013-04-07T11:42:04+00:00</dc:date>
	<dc:creator>Colin Garriga-Salaün</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-4753053491191074994.post-2727655356993039653">
	<title>Colin Garriga-Salaün: Agile Tour Bordeaux 2012</title>
	<link>http://colingarrigasalaun.blogspot.com/2012/10/agile-tour-bordeaux-2012.html</link>
	<content:encoded>Cette année encore toute l'équipe de Yaal a participé à l'Agile Tour Bordeaux !


Merci aux organisateurs, aux orateurs, aux sponsors et partenaires, tout s'est parfaitement déroulé !

Nous sommes très heureux d'avoir pu apporter notre pierre à l'édifice en tant que partenaire technique avec la billetterie en ligne yuticket.com, et d'avoir pu y donner notre propre retour d'expérience !


J'ai</content:encoded>
	<dc:date>2013-04-06T23:37:28+00:00</dc:date>
	<dc:creator>Colin Garriga-Salaün</dc:creator>
</item>
<item rdf:about="http://ascendances.wordpress.com/?p=1018">
	<title>Stéphane Blondon: Se connecter et connaître les schémas de tables MySQL, PostgreSQL ou SQLite</title>
	<link>http://ascendances.wordpress.com/2013/03/10/se-connecter-et-connaitre-les-schemas-de-tables-mysql-postgresql-ou-sqlite/</link>
	<content:encoded>&lt;p&gt;Il arrive parfois que l&amp;rsquo;on doive jongler entre différentes bases de données, chacune ayant une syntaxe légèrement différente des autres. Voici un petit résumé de ce cirque pour éviter de passer pour un clown…&lt;/p&gt;
&lt;h3&gt;Entrée des artistes : se connecter au serveur&lt;/h3&gt;
&lt;p&gt;MySQL :
&lt;pre class=&quot;brush: bash; title: ; notranslate&quot;&gt;$ mysql -u utilisateur_avec_les_droits -p&lt;/pre&gt;
&lt;p&gt;Il faut alors saisir le mot de passe pour accéder à l&amp;rsquo;interpréteur. Il est aussi possible de saisir le mot de passe directement après le paramètre -p mais dans ce cas, le mot de passe est lisible dans l&amp;rsquo;historique de connexion de l&amp;rsquo;utilisateur (dans le fichier .bash_history si le shell utilisé est bash).&lt;/p&gt;
&lt;p&gt;PostgreSQL :&lt;/p&gt;
&lt;pre class=&quot;brush: bash; title: ; notranslate&quot;&gt;$ psql -U utilisateur_avec_les_droits&lt;/pre&gt;
&lt;p&gt;SQLite :&lt;/p&gt;
&lt;pre class=&quot;brush: bash; title: ; notranslate&quot;&gt;$ sqlite3 cirque.db&lt;/pre&gt;
&lt;p&gt;Pour les bases de données créées avec la version 2 de SQLite, il faut utiliser la commande &lt;code&gt;sqlite&lt;/code&gt; et non &lt;code&gt;sqlite3&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Voir les bases de données disponibles&lt;/h3&gt;
&lt;p&gt;MySQL: &lt;code&gt;SHOW DATABASES;&lt;/code&gt;&lt;br /&gt;
PosgreSQL : &lt;code&gt;\l&lt;/code&gt;&lt;br /&gt;
SQLite : &lt;code&gt;.databases&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Choisir la base de données à utiliser&lt;/h3&gt;
&lt;p&gt;Supposons qu&amp;rsquo;il existe une base nommée « cirque ».&lt;br /&gt;
MySQL : &lt;code&gt;USE cirque;&lt;/code&gt;&lt;br /&gt;
PostgreSQL : &lt;code&gt;\c cirque&lt;/code&gt;&lt;br /&gt;
sqlite : rien à faire, la base est déjà sélectionnée.&lt;/p&gt;
&lt;h3&gt;Lister les tables de la base&lt;/h3&gt;
&lt;p&gt;MySQL : &lt;code&gt;SHOW TABLES;&lt;/code&gt;&lt;br /&gt;
PostgreSQL : &lt;code&gt;\d&lt;/code&gt;&lt;br /&gt;
SQLite : &lt;code&gt;.tables&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Voir le schéma d&amp;rsquo;une table&lt;/h3&gt;
&lt;p&gt;Supposons qu&amp;rsquo;il existe une table nommée « spectacles ».&lt;br /&gt;
MySQL : &lt;code&gt;DESC spectacles;&lt;/code&gt;&lt;br /&gt;
PostgreSQL : &lt;code&gt;\d spectacles&lt;/code&gt;&lt;br /&gt;
SQLite : &lt;code&gt;.schema spectacles&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Aide en ligne&lt;/h3&gt;
&lt;p&gt;Si vous pensez que ce sera plus rapide que de chercher dans la première réponse trouvée par votre moteur de recherche préféré, vous pouvez utiliser l&amp;rsquo;aide en ligne de l&amp;rsquo;outil.&lt;/p&gt;
&lt;p&gt;MySQL : &lt;code&gt;help&lt;/code&gt;&lt;br /&gt;
PostgreSQL : &lt;code&gt;help&lt;/code&gt;&lt;br /&gt;
SQLite : &lt;code&gt;.help&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Le salut des artistes&lt;/h3&gt;
&lt;p&gt;Les versions utilisées pour ce tour de piste :&lt;br /&gt;
&lt;a href=&quot;http://www.mysql.fr/&quot; title=&quot;Site web francophone de MySQL&quot;&gt;MySQL&lt;/a&gt; : 5.1.66&lt;br /&gt;
&lt;a href=&quot;http://www.postgresql.org&quot; title=&quot;Site web de PostgreSQL&quot;&gt;PostgreSQL&lt;/a&gt; : 8.4.16&lt;br /&gt;
&lt;a href=&quot;http://www.sqlite.org/&quot; title=&quot;Site web de SQLite&quot;&gt;SQLite&lt;/a&gt; : 3.7.13&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/ascendances.wordpress.com/1018/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ascendances.wordpress.com/1018/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ascendances.wordpress.com&amp;blog=24442983&amp;post=1018&amp;subd=ascendances&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;&lt;/p&gt;ascendances</content:encoded>
	<dc:date>2013-03-10T19:38:55+00:00</dc:date>
</item>
<item rdf:about="http://ascendances.wordpress.com/?p=930">
	<title>Stéphane Blondon: Déterminer quelle est la meilleure distribution grâce à Python et PIL</title>
	<link>http://ascendances.wordpress.com/2013/01/12/determiner-quelle-est-la-meilleure-distribution-grace-a-python-et-pil/</link>
	<content:encoded>&lt;p&gt;N&amp;rsquo;avez-vous jamais discuté des mérites de telle ou telle distribution Linux (ou BSD) avec d&amp;rsquo;autres personnes (chacun essayant de démontrer que celle qu&amp;rsquo;il utilise au quotidien est la meilleure) ? Grâce à cet article, vous n&amp;rsquo;aurez toujours pas La réponse mais vous aurez une réponse indiscutable : il s&amp;rsquo;agit de la jouer aux cartes. Les cartes sont créées avec &lt;code&gt;Python Imaging Library&lt;/code&gt;, une bibliothèque Python de manipulation d&amp;rsquo;image. L&amp;rsquo;article explique la façon de les réaliser.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://ascendances.files.wordpress.com/2013/01/debian.png?w=497&quot; alt=&quot;Carte de jeu pour Debian&quot; class=&quot;aligncenter size-full wp-image-937&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Chaque carte possède un ensemble de caractéristiques, la plus forte remporte le pli. Ce principe de jeu existe depuis les années 70 (&lt;a href=&quot;http://en.wikipedia.org/wiki/Ace_Trumps&quot; title=&quot;Page wikipedia anglophone sur le jeu historique&quot;&gt;Ace_Trumps&lt;/a&gt;, Super Top Ass). L&amp;rsquo;ensemble des 26 cartes créées est visible &lt;a href=&quot;http://stephane.yaal.fr/cards/&quot; title=&quot;Voir les cartes&quot;&gt;ici&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;objectif de l&amp;rsquo;article est de montrer comment on peut concevoir la création de la carte, pas le détail des paramètres de chaque fonction. Pour cela, la documentation et de nombreuses explications foisonnent déjà sur le web. C&amp;rsquo;est pourquoi, par exemple, les calculs de dimensionnement ne seront pas expliqués.&lt;/p&gt;
&lt;h3&gt;Prérequis : installer PIL (ou Pillow)&lt;/h3&gt;
&lt;p&gt;Deux possibilités :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;utiliser le système de paquet de votre distribution (python-imaging pour Debian) ;&lt;/li&gt;
&lt;li&gt;utiliser Pypi : PIL n&amp;rsquo;est pas disponible, il faut installer &lt;a href=&quot;http://pypi.python.org/pypi/Pillow&quot; title=&quot;documentation de Pillow sur PyPi&quot;&gt;Pillow&lt;/a&gt;. Cela ne change pas la façon d&amp;rsquo;utiliser la bibliothèque :
&lt;pre class=&quot;brush: python; title: ; notranslate&quot;&gt;
from PIL import Image, ImageDraw, ImageFont
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Image&lt;/code&gt; sert à instancier une image, &lt;code&gt;ImageDraw&lt;/code&gt; à la modifier, &lt;code&gt;ImageFont&lt;/code&gt; à choisir une police de caractère.&lt;/p&gt;
&lt;h3&gt;Créer une carte&lt;/h3&gt;
&lt;p&gt;La base consiste à instancier un objet image sur lequel les modifications vont être apportées. Une fois les modifications réalisées, on enregistre le résultat sur le disque :&lt;/p&gt;
&lt;pre class=&quot;brush: python; title: ; notranslate&quot;&gt;
def draw_card(distrib):
    img = Image.open(BACKGROUND_PATH)
    #ajout des textes, images, etc.
    img.save(distrib[&amp;quot;img_name&amp;quot;] + &amp;quot;.png&amp;quot;)
&lt;/pre&gt;
&lt;p&gt;La carte est une superposition de couches, qui sont toutes fusionnées en une seule image. On a donc un fond sur lequel les autres éléments sont superposés.&lt;br /&gt;
Parmi les éléments remarquables :&lt;/p&gt;
&lt;h4&gt;Textes dans un cartouche&lt;/h4&gt;
&lt;p&gt;Le titre et les caractéristiques des distributions sont faits de la même manière. Il n&amp;rsquo;existe pas d&amp;rsquo;effet avec PIL pour dessiner automatiquement une bordure. Elle est réalisée en plaçant deux rectangles l&amp;rsquo;un sur l&amp;rsquo;autre, celui de dessous étant plus large et haut. &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://ascendances.files.wordpress.com/2013/01/carte_montage_titre.png?w=497&quot; alt=&quot;Montage du titre&quot; class=&quot;aligncenter size-full wp-image-953&quot; /&gt;&lt;/p&gt;
&lt;pre class=&quot;brush: python; title: ; notranslate&quot;&gt;
def draw_title(img, title):
    &amp;quot;&amp;quot;&amp;quot;
    pour dessiner le titre avec le fond et la bordure autour

    img est l'image PIL
    title est la chaine de caracteres a afficher (&amp;quot;Distribution&amp;quot;)
    &amp;quot;&amp;quot;&amp;quot;
    draw = ImageDraw.Draw(img)
    draw_cartouche(draw, 25, 55)
    font = ImageFont.truetype(FONT_PATH, TITLE_FONT_SIZE)
    width, height = draw.textsize(title, font=font)
    x = center(width)
    draw.text((x, 29), title, font=font, fill=TEXT_COLOR)

def draw_cartouche(draw, upper_height, lower_height):
    &amp;quot;&amp;quot;&amp;quot;pour dessiner les deux rectangles&amp;quot;&amp;quot;&amp;quot;
    draw.rectangle(((MARGIN_LEFT, upper_height), (CARD_WIDTH - MARGIN_RIGHT, lower_height)),
                   fill=&amp;quot;#8e6f32&amp;quot;)
    BORDER = 5
    draw.rectangle(((MARGIN_LEFT + BORDER, upper_height + BORDER), (CARD_WIDTH - MARGIN_RIGHT - BORDER, lower_height - BORDER)),
                   fill=&amp;quot;#e9b654&amp;quot;)
&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;draw.textsize()&lt;/code&gt; permet de connaître les dimensions que prendrait la chaîne passée en paramètre. Cela permet de faire un calcul (dans la fonction &lt;code&gt;center()&lt;/code&gt;, omise dans l&amp;rsquo;extrait ci-dessus) pour centrer le texte.&lt;/p&gt;
&lt;h4&gt;Le logo de la distribution&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://ascendances.files.wordpress.com/2013/01/carte_montage_image.png?w=497&quot; alt=&quot;Montage du logo&quot; class=&quot;aligncenter size-full wp-image-954&quot; /&gt;&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;affichage du logo suit la même logique en intercalant une image (nommée supernova.png) entre le fond et le logo de la distribution. Pour avoir un joli rendu , on décale simplement en hauteur l&amp;rsquo;image (&lt;code&gt;y&lt;/code&gt;) car les deux images n&amp;rsquo;ont pas la même taille.&lt;/p&gt;
&lt;pre class=&quot;brush: python; title: ; notranslate&quot;&gt;
def draw_logo(img, filename):
    &amp;quot;&amp;quot;&amp;quot;on colle supernova
       puis le fichier correspondant au parametre filename&amp;quot;&amp;quot;&amp;quot;
    image_path = SRC_IMGS_DIR + &amp;quot;supernova.png&amp;quot;
    nova = Image.open(image_path)
    nova_width, nova_height = nova.size
    x = center(nova_width)
    y = 60
    img.paste(nova.convert(&amp;quot;RGBA&amp;quot;),
              (x, y, x + nova_width, y + nova_height),
              mask=nova.convert('RGBA'))
    image_path = SRC_IMGS_DIR + filename + &amp;quot;.png&amp;quot;
    distro = Image.open(image_path)
    distro_width, distro_height = distro.size
    x = center(distro_width)
    y = 90
    img.paste(distro.convert(&amp;quot;RGBA&amp;quot;),
              (x, y, x + distro_width, y + distro_height),
              mask=distro.convert('RGBA'))
&lt;/pre&gt;
&lt;p&gt;L&amp;rsquo;exercice de factorisation de cette fonction est laissé aux lecteurs qui s&amp;rsquo;ennuient et qui ne sont pas partis faire autre chose (ce que je ne comprend pas d&amp;rsquo;ailleurs).&lt;/p&gt;
&lt;h4&gt;Le numéro de la carte&lt;/h4&gt;
&lt;p&gt;Le numéro de la carte en bas à gauche est affiché de biais. Si les images peuvent subir une rotation, les textes ne sont affichés qu&amp;rsquo;horizontalement. La solution est donc de coller le texte dans une image intermédiaire. Cette image subira une rotation puis sera collée sur l&amp;rsquo;image finale de la même manière que précédemment :&lt;/p&gt;
&lt;pre class=&quot;brush: python; title: ; notranslate&quot;&gt;
def draw_card_index(img, number):
    &amp;quot;&amp;quot;&amp;quot;pour dessiner 'number' de biais&amp;quot;&amp;quot;&amp;quot;
    HEIGHT = WIDTH = 19
    num_img = Image.new(&amp;quot;RGBA&amp;quot;,
                        (WIDTH, HEIGHT),
                        (0, 0, 0, 0))
    num_draw = ImageDraw.Draw(num_img)
    font = ImageFont.truetype(SANS_PATH, TEXT_FONT_SIZE)
    num_draw.text((0, 0), number, font=font, fill=&amp;quot;brown&amp;quot;)
    n = num_img.rotate(-45)
    X, Y = 7, 378
    img.paste(n, (X, Y, X + WIDTH, Y + HEIGHT), mask=n)
&lt;/pre&gt;
&lt;p&gt;À noter que la rotation faite ici prend peu de précaution et les nombres à deux chiffres sont légèrement tronqués. Le paramètre &lt;code&gt;expand&lt;/code&gt; peut être ajouté à &lt;code&gt;rotate()&lt;/code&gt; pour éviter la perte, mais l&amp;rsquo;image est automatiquement agrandie.&lt;/p&gt;
&lt;h3&gt;Code source et ressources&lt;/h3&gt;
&lt;p&gt;La &lt;a href=&quot;http://www.pythonware.com/library/pil/handbook/index.htm&quot; title=&quot;Documentation de PIL sur le site de son éditeur&quot;&gt;documentation de PIL&lt;/a&gt; est précieuse.&lt;br /&gt;
Un &lt;a href=&quot;http://nadiana.com/pil-tutorial-basic-advanced-drawing&quot; title=&quot;un des nombreux tutoriels PIL existant sur le web (en anglais)&quot;&gt;tutoriel&lt;/a&gt; dont certains effets ont été réutilisés pour les cartes.&lt;/p&gt;
&lt;p&gt;Les données sur les cartes proviennent principalement de &lt;a href=&quot;http://distrowatch.com/&quot; title=&quot;Put the fun back into computing. Use Linux, BSD.&quot;&gt;Distrowatch&lt;/a&gt;. Les logos des distributions sont aussi ceux affichés sur Distrowatch. « first stable » représente la première version stable avec le nom actuel de la distribution ou ce qui pourrait être considéré comme équivalent. « based on » indique le nom de la distribution parente. La valeur « Indep. » signifie qu&amp;rsquo;elle n&amp;rsquo;est basée sur aucune autre distribution. Si elle est suivie d&amp;rsquo;une étoile, cela signifie qu&amp;rsquo;elle est maintenant indépendante mais a été basée sur une autre distribution par le passé.&lt;/p&gt;
&lt;p&gt;Le fond de carte et l&amp;rsquo;effet supernova ont été réalisés avec The Gimp.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;archive contenant le code source du script au cas où quelqu&amp;rsquo;un voudrait le réutiliser, ainsi que les logos et les cartes générées est &lt;a href=&quot;http://stephane.yaal.fr/cards/cards.tar.xz&quot; title=&quot;Archive cards.tar.xz&quot;&gt;fournie&lt;/a&gt; au format .tar.xz. Le code a été écrit dans un but de démo. Il est bien perfectible&amp;#8230;&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/ascendances.wordpress.com/930/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ascendances.wordpress.com/930/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ascendances.wordpress.com&amp;blog=24442983&amp;post=930&amp;subd=ascendances&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;ascendancesCarte de jeu pour DebianMontage du titreMontage du logo</content:encoded>
	<dc:date>2013-01-12T09:39:02+00:00</dc:date>
</item>
<item rdf:about="http://yaalblog.wordpress.com/?p=2">
	<title>Aurélien Biedermann: Retour sur le TEDxBordeaux 2012</title>
	<link>http://yaalblog.wordpress.com/2013/01/03/retour-sur-le-tedxbordeaux-2012/</link>
	<content:encoded>&lt;p align=&quot;JUSTIFY&quot;&gt;Le 1er décembre dernier, la deuxième édition du TEDxBordeaux ouvrait ses portes au TNBA. Nous étions impatient de participer à cet évènement et nous n&amp;#8217;avons pas été déçus.&lt;/p&gt;
&lt;p align=&quot;JUSTIFY&quot;&gt;Les participants nous ont ouvert l&amp;#8217;esprit pendant toute une après midi. Tous avaient pour objectif de changer le monde et notre vision des choses. Que ce soit Karim qui nous propose du biomimétisme pour trouver des solutions naturelles pour un développement propre, ou Halim qui propose de hacker son corps pour se sentir mieux et réfléchir plus efficacement, en passant par Irina et son reportage sur les différentes signification du « chez soi », nous en sommes sortis grandis. La magie a opéré, et une partie d’entre nous a déja approfondi quelques sujets qui les tenaient à cœur.&lt;/p&gt;
&lt;p align=&quot;JUSTIFY&quot;&gt;Au niveau de l&amp;#8217;organisation, il n&amp;#8217;y a rien à redire : la scène était sobre et efficace (ce fauteuil avait quelque chose d&amp;#8217;hypnotisant), les speakers même s&amp;#8217;ils ne sont pas professionnels se sont très bien débrouillés, les bénévoles et partenaires ont rempli leur rôle pour que tout ce passe bien. Le maître de cérémonie François Xavier Bodin peut en être fier. Yaal remercie l&amp;#8217;ensemble des personnes présentes pour cette superbe après-midi.&lt;/p&gt;
&lt;p align=&quot;JUSTIFY&quot;&gt;Nous espérons très franchement que la prochaine édition du TEDxBordeaux arrive très rapidement et Yaal sera très certainement encore partenaire de l’évènement.&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/yaalblog.wordpress.com/2/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/yaalblog.wordpress.com/2/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=yaalblog.wordpress.com&amp;blog=44789872&amp;post=2&amp;subd=yaalblog&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;yaalblog</content:encoded>
	<dc:date>2013-01-03T15:13:05+00:00</dc:date>
</item>
<item rdf:about="http://ascendances.wordpress.com/?p=905">
	<title>Stéphane Blondon: HMAC Paybox en Python</title>
	<link>http://ascendances.wordpress.com/2012/12/03/hmac-paybox-en-python/</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://www1.paybox.com/&quot; title=&quot;Site web Paybox&quot;&gt;Paybox&lt;/a&gt; est une solution de paiement électronique que &lt;a href=&quot;http://www.yaal.fr&quot; title=&quot;Yaal&quot;&gt;nous&lt;/a&gt; avons utilisé plusieurs fois. &lt;/p&gt;
&lt;p&gt;Pour se connecter avec le service Paybox (en version 5.08), il est nécessaire de produire une &lt;a href=&quot;http://fr.wikipedia.org/wiki/Keyed-Hash_Message_Authentication_Code&quot; title=&quot;Page wikipedia francophone sur l'authentification HMAC&quot;&gt;empreinte HMAC&lt;/a&gt; des données du serveur que le client va envoyer vers le serveur Paybox pour payer. L&amp;rsquo;objectif est d&amp;rsquo;empêcher toute falsification car elle serait détectée grâce à l&amp;rsquo;empreinte qui ne correspondrait plus.&lt;/p&gt;
&lt;p&gt;La documentation fournit une implémentation d&amp;rsquo;exemple en PHP :&lt;/p&gt;
&lt;pre class=&quot;brush: php; title: ; notranslate&quot;&gt;
&amp;lt;?php
 $key = 
 &amp;quot;0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF&amp;quot;;
 $msg = &amp;quot;FORMULAIRE&amp;quot;;
 $binkey = pack(&amp;quot;H*&amp;quot;, $key);
 $hmac = strtoupper(hash_hmac('sha512', $msg, $binkey));
 ?&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Voici l&amp;rsquo;équivalent en Python :&lt;/p&gt;
&lt;pre class=&quot;brush: python; title: ; notranslate&quot;&gt;
import binascii
import hashlib
import hmac


PRIVATE_KEY = &amp;quot;0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF&amp;quot;
msg = &amp;quot;FORMULAIRE&amp;quot;
binary_key = binascii.unhexlify(PRIVATE_KEY)
hmac = hmac.new(binary_key, msg, hashlib.sha512).hexdigest().upper()
&lt;/pre&gt;
&lt;p&gt;Les deux codes fournissent le même résultat pour des couples (clé privée, message) identiques. Charge à vous de mettre les bonnes valeurs. &lt;img src=&quot;http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif&quot; alt=&quot;;-)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/ascendances.wordpress.com/905/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ascendances.wordpress.com/905/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ascendances.wordpress.com&amp;blog=24442983&amp;post=905&amp;subd=ascendances&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;ascendances</content:encoded>
	<dc:date>2012-12-02T22:40:16+00:00</dc:date>
</item>
<item rdf:about="http://ascendances.wordpress.com/?p=861">
	<title>Stéphane Blondon: Processus de traduction au sein de debian-l10n-fr</title>
	<link>http://ascendances.wordpress.com/2012/10/25/processus-de-traduction-au-sein-de-debian-l10n-fr/</link>
	<content:encoded>&lt;p&gt;L&amp;rsquo;équipe &lt;a href=&quot;http://www.debian.org/international/french/&quot; title=&quot;Projet de traduction francophone Debian&quot;&gt;debian-l0n-fr&lt;/a&gt; est l&amp;rsquo;équipe de francisation des fichiers spécifiques à Debian. Il en existe pour de &lt;a href=&quot;http://www.debian.org/international/l10n/po/&quot; title=&quot;Langues utilisées dans les fichiers PO dans Debian&quot;&gt;nombreuses autres langues&lt;/a&gt; (de l&amp;rsquo;afrikaan au zoulou en passant par le népalais), certaines étant bien plus complètes que d&amp;rsquo;autres.&lt;/p&gt;
&lt;p&gt;Les équipes de traduction Debian ne s&amp;rsquo;occupent pas des projets qui ont déjà leur propre équipe de traduction comme GNOME, KDE, Mozilla, etc. Elles se limitent aux outils spécifiques à Debian (&lt;code&gt;apt-get&lt;/code&gt;, &lt;code&gt;aptitude&lt;/code&gt;, etc.), la documentation de ces outils, le site web, &lt;a href=&quot;http://www.debian.org/News/weekly/&quot; title=&quot;Nouvelles du projet Debian&quot;&gt;les nouvelles du projet&lt;/a&gt;, …&lt;/p&gt;
&lt;p&gt;Chacune d&amp;rsquo;entre elle est libre de s&amp;rsquo;organiser en interne comme elle l&amp;rsquo;entend. Pour l&amp;rsquo;équipe francophone, il ne suffit pas de traduire un fichier et de passer immédiatement au suivant car un processus de relecture prend le relais. L&amp;rsquo;objectif est de chasser les dernières erreurs typographiques, d&amp;rsquo;alléger les constructions de phrase, d&amp;rsquo;éliminer les contre-sens et faux-amis. En réalité, il n&amp;rsquo;y a souvent pas grand chose à modifier mais cela permet d&amp;rsquo;obtenir un résultat mieux fini.&lt;/p&gt;
&lt;h3&gt;Les étapes de traduction et relecture&lt;/h3&gt;
&lt;p&gt;La succession d&amp;rsquo;étapes est représentable par un graphe orienté non cyclique :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://ascendances.files.wordpress.com/2012/10/process_debian_l10n_fr1.png&quot;&gt;&lt;img src=&quot;http://ascendances.files.wordpress.com/2012/10/process_debian_l10n_fr1.png?w=497&quot; alt=&quot;&quot; title=&quot;Étapes d'une traduction&quot; class=&quot;aligncenter size-full wp-image-881&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Les nœuds d&amp;rsquo;entrée sont le signalement d&amp;rsquo;une nouvelle traduction à faire (taf) ou à mettre à jour (maj). Un volontaire signale sa volonté de faire cette traduction (itt) puis la soumet à relecture (rfr). Après quelques temps et quelques relectures, une nouvelle étape de relecture est franchie (lcfc). La traduction est potentiellement terminée mais les dernières relectures sont encore possibles. Enfin la traduction est envoyée vers le système de rapport de bogue (bts) ou simplement déclaré comme terminé (done). L&amp;rsquo;état terminal choisi est fonction du type de fichier traduit.&lt;/p&gt;
&lt;p&gt;Parfois le nombre de relectures est plus important et il est nécessaire de faire des étapes supplémentaires. Dans ce cas, des états officieux sont utilisés (rfr2, rfr3, lcfc2, lcfc3, etc.). Cela permet d&amp;rsquo;éviter des retours en arrière (par exemple si le passage de rfr à lcfc s&amp;rsquo;est fait trop vite). C&amp;rsquo;est cette stratégie qui permet d&amp;rsquo;éviter l&amp;rsquo;existence de cycle. La situation reste ainsi plus facilement compréhensible par les humains qui participent (et aussi par ceux qui ne participent pas même si c&amp;rsquo;est moins crucial).&lt;/p&gt;
&lt;h3&gt;Article [done]&lt;/h3&gt;
&lt;p&gt;Le graphe a été réalisé avec l&amp;rsquo;outil &lt;code&gt;dot&lt;/code&gt;, disponible dans le paquet graphviz (version 2.26.3).&lt;/p&gt;
&lt;p&gt;La commande utilisée :&lt;/p&gt;
&lt;pre class=&quot;brush: plain; title: ; notranslate&quot;&gt;$ dot -Tpng process_debian_l10n_fr.gv -o process_debian_l10n_fr.png&lt;/pre&gt;
&lt;p&gt;Le script &lt;code&gt;process_debian_l10n_fr.gv&lt;/code&gt; :&lt;/p&gt;
&lt;pre class=&quot;brush: plain; title: ; notranslate&quot;&gt;
digraph G {
        taf [color=navyblue, fontcolor=navyblue];
        maj [color=navyblue, fontcolor=navyblue];

        bts [color=darkgreen, fontcolor=darkgreen];
        done [color=darkgreen, fontcolor=darkgreen];

        rfr2 [color=antiquewhite, style=filled];
        &amp;quot;rfr…&amp;quot; [color=antiquewhite, style=filled];
        &amp;quot;lcfc2&amp;quot; [color=antiquewhite, style=filled];
        &amp;quot;lcfc…&amp;quot; [color=antiquewhite, style=filled];

        taf -&amp;gt; itt;
        maj -&amp;gt; itt;
        itt -&amp;gt; rfr;
        rfr -&amp;gt; lcfc;
        rfr -&amp;gt; rfr2;
        rfr2 -&amp;gt; &amp;quot;rfr…&amp;quot;;
        rfr2 -&amp;gt; lcfc;
        &amp;quot;rfr…&amp;quot; -&amp;gt; lcfc;
        lcfc -&amp;gt; done;
        lcfc -&amp;gt; lcfc2;
        lcfc2 -&amp;gt; bts;
        lcfc2 -&amp;gt; done;
        lcfc2 -&amp;gt; &amp;quot;lcfc…&amp;quot;;
        &amp;quot;lcfc…&amp;quot; -&amp;gt; done;
        lcfc -&amp;gt; bts;
        &amp;quot;lcfc…&amp;quot; -&amp;gt; bts;
}
&lt;/pre&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/ascendances.wordpress.com/861/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ascendances.wordpress.com/861/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ascendances.wordpress.com&amp;blog=24442983&amp;post=861&amp;subd=ascendances&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;ascendancesÉtapes d'une traduction</content:encoded>
	<dc:date>2012-10-25T20:56:52+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-4753053491191074994.post-482568387340606738">
	<title>Colin Garriga-Salaün: « Livrez fréquemment un logiciel opérationnel... » 1</title>
	<link>http://colingarrigasalaun.blogspot.com/2012/03/livrez-frequemment-un-logiciel.html</link>
	<content:encoded>73 jours après notre rencontre avec un porteur de projet dynamique et 89 déploiements en plateforme de recette2, le service yuticket.com est sortie en bêta privée !


17 jours plus tard, grâce aux retours de nos 3 premiers courageux utilisateurs, nous comptons 42 nouvelles livraisons en recette, 21 livraisons en production3, et nous ouvrons la création d'événements pour tous !









3ème</content:encoded>
	<dc:date>2012-10-14T15:45:59+00:00</dc:date>
	<dc:creator>Colin Garriga-Salaün</dc:creator>
</item>
<item rdf:about="http://ascendances.wordpress.com/?p=777">
	<title>Stéphane Blondon: États des paquets Debian chez les utilisateurs (selon PopCon) – 2</title>
	<link>http://ascendances.wordpress.com/2012/08/07/etats-des-paquets-debian-chez-les-utilisateurs-selon-popcon-2/</link>
	<content:encoded>&lt;p&gt;Lors du &lt;a href=&quot;http://ascendances.wordpress.com/2012/07/09/etats-des-paquets-debian-chez-les-utilisateurs-selon-popcon/&quot; title=&quot;premier article à propos des statistiques d'utilisation des paquets avec PopCon&quot;&gt;précédent article&lt;/a&gt;, nous avions conclu que les paquets étaient surtout dans la catégorie « pas utilisé récemment ». Cependant, l&amp;rsquo;analyse ne prenait pas en compte deux cas :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;les paquets non Debian&lt;/li&gt;
&lt;li&gt;les bibliothèques&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Éliminer ces incertitudes va-t-il changer quelque chose au résultat ? C&amp;rsquo;est ce que vous saurez à la fin de cet article dont les rebondissements rendraient jaloux un kangourou sous amphétamines ! (Ou pas.)&lt;/p&gt;
&lt;h3&gt;Sans paquet non officiel&lt;/h3&gt;
&lt;p&gt;Les statistiques fournies par PopCon incluent certains paquets avec des noms bizarres. Ainsi, on peut trouver des noms tels que « 204c45e1756d0aaff35eea07ac2a52a4.784[…]32.1 » ou « 0xffff » ainsi que d&amp;rsquo;autres plus ou moins expressifs (surtout plus de moins et moins de plus). On ne comprend pas bien ce que le nom signifie, mais comme lorsqu&amp;rsquo;il y a plein de câbles, ça impressionne toujours.&lt;/p&gt;
&lt;p&gt;En réalité, la partie cliente de PopCon (celle qui est exécutée sur la machine des utilisateurs) renvoie les statistiques de tous les paquets installés, même s&amp;rsquo;ils n&amp;rsquo;existent pas dans les dépôts Debian (&lt;code&gt;main&lt;/code&gt;, &lt;code&gt;contrib&lt;/code&gt;, &lt;code&gt;non-free&lt;/code&gt;). Les statistiques incluent donc les paquets que les utilisateurs ont installés ou développés pour leur propre usage. L&amp;rsquo;idée sous-jacente est que cela sert aussi d&amp;rsquo;indice pour inclure de nouveaux paquets qui seraient nécessaires au plus grand nombre. Ce n&amp;rsquo;est donc pas un bogue mais une fonctionnalité… Il y a maintenant une ligne de plus dans la base de données de bogues souhaitant la possiblité de désactiver cette fonctionnalité (bogue n° &lt;a href=&quot;http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=681721&quot; title=&quot;rapport de bogue popcon&quot;&gt;681721&lt;/a&gt;). &lt;/p&gt;
&lt;p&gt;Si l&amp;rsquo;on filtre de nouveau les données pour se cantonner uniquement aux paquets officiels, on obtient un résultat globalement équivalent :&lt;br /&gt;
&lt;a href=&quot;http://ascendances.files.wordpress.com/2012/08/popcon_pkgs_deb_main_only1.png&quot;&gt;&lt;img src=&quot;http://ascendances.files.wordpress.com/2012/08/popcon_pkgs_deb_main_only1.png?w=497&amp;h=426&quot; alt=&quot;&quot; title=&quot;Statistiques des paquets Debian selon PopCon pour testing/main&quot; width=&quot;497&quot; height=&quot;426&quot; class=&quot;aligncenter size-full wp-image-795&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
Le nuage de points a la même forme, la moyenne reste comparable bien qu&amp;rsquo;il y ait un transvasement de l&amp;rsquo;état « peu utilisé » vers l&amp;rsquo;état « récemment installé » de 5 points.&lt;/p&gt;
&lt;p&gt;La liste des paquets sélectionnés est celle fournie dans l&amp;rsquo;archive des binaires pour l&amp;rsquo;architecture AMD64 dans la version testing/main (téléchargeable à une adresse du type votre_protocole_préféré://votre_serveur_préféré/debian/dists/testing/main/binary-amd64/Packages.bz2).&lt;/p&gt;
&lt;h3&gt;Sans les bibliothèques&lt;/h3&gt;
&lt;p&gt;PopCon détermine la date d&amp;rsquo;utilisation du logiciel avec la date d&amp;rsquo;accès sur le disque (l&amp;rsquo;information atime du fichier) . Comme précisé dans la documentation (cf. /usr/share/doc/popularity-contest/README.gz), cela fonctionne bien avec les exécutables mais pas avec les bibliothèques partagées. Il semble donc souhaitable de visualiser le résultat en enlevant aussi les bibliothèques. En supprimant tous les paquets commençant par le terme « lib » (par exemple &lt;code&gt;lib32bz2-dev&lt;/code&gt; ou &lt;code&gt;libc6&lt;/code&gt;), nous obtenons un nouveau graphique :&lt;br /&gt;
&lt;a href=&quot;http://ascendances.files.wordpress.com/2012/08/popcon_pkgs_deb_main_only_without_libs1.png&quot;&gt;&lt;img src=&quot;http://ascendances.files.wordpress.com/2012/08/popcon_pkgs_deb_main_only_without_libs1.png?w=497&amp;h=426&quot; alt=&quot;&quot; title=&quot;Statistiques des paquets Debian selon PopCon pour testing/main&quot; width=&quot;497&quot; height=&quot;426&quot; class=&quot;aligncenter size-full wp-image-808&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;La suppression des bibliothèque ne change rien en comparaison avec le filtre précédent. C&amp;rsquo;est à se demander pourquoi je pers mon temps à écrire cet article et pourquoi vous perdez votre temps à le lire !&lt;/p&gt;
&lt;p&gt;En moyenne, seulement 20 % des paquets sont donc considérés comme utilisé fréquemment. &lt;/p&gt;
&lt;h3&gt;Sources&lt;/h3&gt;
&lt;p&gt;La moulinette qui filtre les données a été écrite en Python :&lt;/p&gt;
&lt;pre class=&quot;brush: python; title: ; notranslate&quot;&gt;
#! /usr/bin/env python

POPCON_FILE = &amp;quot;filtered_popcon.csv&amp;quot;
MAIN_PACKAGES_FILE = &amp;quot;Packages&amp;quot;
POPCON_FOR_MAIN_PACKAGES_FILE = &amp;quot;filtered_popcon_for_main_without_libs.csv&amp;quot;

WITH_LIBS = False

def get_main_packages():
    with open(MAIN_PACKAGES_FILE) as f:
        return [extract_package_name(line)
                for line in f.readlines()
                if is_package_name(line)]

def is_package_name(line):
    return line.startswith(&amp;quot;Package: &amp;quot;)

def extract_package_name(line):
    return line.split()[1]

def get_popcon_stats():
    with open(POPCON_FILE) as f:
        if WITH_LIBS:
            _filter = is_official_package
        else:
            def _filter(line):
                return is_official_package(line) and not is_lib(line)

        return [line 
                for line in f.readlines()
                if _filter(line)]

def is_official_package(line):
    package_name = line.split(&amp;quot;,&amp;quot;)[0]
    return package_name in main_packages

def is_lib(line):
    return line.startswith(&amp;quot;lib&amp;quot;)

def write_filtered_popcon(stats):
    with open(POPCON_FOR_MAIN_PACKAGES_FILE, &amp;quot;w&amp;quot;) as f:
        for stat in stats:
            f.write(stat)

main_packages = get_main_packages()
write_filtered_popcon(get_popcon_stats())
&lt;/pre&gt;
&lt;p&gt;Le code produisant les graphiques est le même que dans l&amp;rsquo;article précédent, sauf pour les noms de fichier et la chaîne de caractère &amp;laquo;&amp;nbsp;Peu utilisé (« old »)&amp;nbsp;&amp;raquo; qui est suffixé par des espaces supplémentaires pour éviter de chevaucher la moyenne. L&amp;rsquo;intérêt étant proche de zéro, je préfère faire économiser quelques paquets TCP/IP à tout le monde en ne l&amp;rsquo;incluant pas.&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/ascendances.wordpress.com/777/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ascendances.wordpress.com/777/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ascendances.wordpress.com&amp;blog=24442983&amp;post=777&amp;subd=ascendances&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;ascendancesStatistiques des paquets Debian selon PopCon pour testing/mainStatistiques des paquets Debian selon PopCon pour testing/main</content:encoded>
	<dc:date>2012-08-07T12:20:44+00:00</dc:date>
</item>
<item rdf:about="http://ascendances.wordpress.com/?p=689">
	<title>Stéphane Blondon: États des paquets Debian chez les utilisateurs (selon PopCon)</title>
	<link>http://ascendances.wordpress.com/2012/07/09/etats-des-paquets-debian-chez-les-utilisateurs-selon-popcon/</link>
	<content:encoded>&lt;p&gt;PopCon (pour &lt;em&gt;Popularity contest&lt;/em&gt;) permet d&amp;rsquo;obtenir des statistiques d&amp;rsquo;utilisation de paquets Debian. La soumission des statistiques est facultative. Si le participant accepte l&amp;rsquo;envoi des statistiques, chaque semaine, une notification anonyme sera automatiquement envoyée vers Debian contenant les statistiques d&amp;rsquo;utilisation des paquets. L&amp;rsquo;état agrégé est visible sur &lt;a href=&quot;http://popcon.debian.org/&quot; title=&quot;sous-domaine debian.org pour popcon&quot;&gt;popcon.debian.org&lt;/a&gt; et mis à jour quotidiennement.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;évolution globale de l&amp;rsquo;utilisation des paquets est visible sur une page dédiée (par exemple, &lt;a href=&quot;http://qa.debian.org/popcon.php?package=flobopuyo&quot; title=&quot;page PopCon de Flobopuyo&quot;&gt;la page de Flobopuyo&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Si un paquet est installé sur une machine, alors il sera considéré dans l&amp;rsquo;un des quatre états suivants :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;« Vote » : paquet récemment utilisé&lt;/li&gt;
&lt;li&gt;« Old » : paquet qui n&amp;rsquo;a pas été utilisé depuis longtemps&lt;/li&gt;
&lt;li&gt;« Recent » : paquet récemment mis à jour&lt;/li&gt;
&lt;li&gt;« No Files » : informations insuffisantes pour statuer sur son utilisation&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;La somme des 4 états envoyés par les participants fournit le nombre de machines sur lequel ce paquet est installé. S&amp;rsquo;il n&amp;rsquo;est pas installé, il n&amp;rsquo;est pas comptabilisé.&lt;br /&gt;
Sur l&amp;rsquo;échantillon des paquets que j&amp;rsquo;ai consulté, les trois premiers états sont largement représentés. Le quatrième est peu courant, probablement car c&amp;rsquo;est quasiment un cas pathologique (les dates d&amp;rsquo;accès aux fichiers sont incorrects). Si on néglige ce dernier cas, il est possible de représenter quel est la proportion des trois états d&amp;rsquo;un paquet pour l&amp;rsquo;ensemble des participants avec un graphique triangulaire.&lt;/p&gt;
&lt;h3&gt;Résultat sur un échantillon (15 paquets)&lt;/h3&gt;
&lt;p&gt;Les paquets affichés dans le graphique :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;plusieurs logiciels couramment installés et utilisés (directement ou à l&amp;rsquo;insu de l&amp;rsquo;utilisateur) : &lt;code&gt;bash&lt;/code&gt;, &lt;code&gt;dash&lt;/code&gt;, &lt;code&gt;initramfs-tools&lt;/code&gt; et &lt;code&gt;anacron&lt;/code&gt; ;&lt;/li&gt;
&lt;li&gt;des navigateurs web  : &lt;code&gt;iceweasel&lt;/code&gt; (un renommage de Firefox), &lt;code&gt;chromium-browser&lt;/code&gt; (la version libre de Google Chrome) et &lt;code&gt;epiphany&lt;/code&gt; (le navigateur fourni par Gnome) ;&lt;/li&gt;
&lt;li&gt;des serveurs web : &lt;code&gt;aolserver4&lt;/code&gt; (les statistiques montrent qu&amp;rsquo;il est installé sur au moins 47 machines !), &lt;code&gt;apache2&lt;/code&gt;, &lt;code&gt;lighttpd&lt;/code&gt; et &lt;code&gt;nginx&lt;/code&gt; ;&lt;/li&gt;
&lt;li&gt;deux logiciels de bureautique : &lt;code&gt;libre-office&lt;/code&gt; et &lt;code&gt;koffice&lt;/code&gt; ;&lt;/li&gt;
&lt;li&gt;deux jeux équivalents : &lt;code&gt;amoebax&lt;/code&gt; (&lt;a href=&quot;http://screenshots.debian.net/package/amoebax&quot; title=&quot;Capture d'écran d'Amoebax&quot;&gt;capture d&amp;rsquo;écran&lt;/a&gt;) et &lt;code&gt;flobopuyo&lt;/code&gt; (&lt;a href=&quot;http://screenshots.debian.net/package/flobopuyo&quot; title=&quot;Capture d'écran de Flobopuyo&quot;&gt;capture d&amp;rsquo;écran&lt;/a&gt;). À titre indicatif, Amoebax est plus installé qu&amp;rsquo;Aolserver…&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;http://ascendances.files.wordpress.com/2012/07/popcon_pkgs_deb.png&quot;&gt;&lt;img src=&quot;http://ascendances.files.wordpress.com/2012/07/popcon_pkgs_deb.png?w=497&amp;h=426&quot; alt=&quot;&quot; title=&quot;Quelques paquets selon PopCon&quot; width=&quot;497&quot; height=&quot;426&quot; class=&quot;aligncenter size-full wp-image-698&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Limites&lt;/h3&gt;
&lt;h4&gt;Ignorer l&amp;rsquo;état &lt;em&gt;No Files&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;Le fait de négliger le quatrième état n&amp;rsquo;est pas forcément pertinent pour tous les paquets. Tous les paquets présentés précédemment ont un taux inférieur à 1 % pour le cas de dates invalides à deux exceptions près : &lt;code&gt;libreoffice-common&lt;/code&gt; et  &lt;code&gt;nginx&lt;/code&gt;.&lt;/p&gt;
&lt;h5&gt;Proportion de l&amp;rsquo;état &lt;em&gt;No Files&lt;/em&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;0 % pour &lt;code&gt;amoebax&lt;/code&gt;, &lt;code&gt;flobopuyo&lt;/code&gt; et &lt;code&gt;aolserver4-daemon&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;0,025 % pour &lt;code&gt;iceweasel&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;0,026 % pour &lt;code&gt;initramfr-tools&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;0,027 % pour &lt;code&gt;anacron&lt;/code&gt; et &lt;code&gt;bash&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;0,031 % pour &lt;code&gt;dash&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;0,037 % pour &lt;code&gt;apache2.2-bin&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;0,043 % pour &lt;code&gt;lighttpd&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;0,126 % pour &lt;code&gt;koffice-libs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;0,149 % pour &lt;code&gt;epiphany&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;0,696 % pour &lt;code&gt;chromium-browser&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;4,90 % pour &lt;code&gt;libreoffice-common&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;38,25 % pour &lt;code&gt;nginx&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vu l&amp;rsquo;écart, je me demande s&amp;rsquo;il n&amp;rsquo;y a pas un problème avec les fichiers surveillés par PopCon pour nginx.&lt;/p&gt;
&lt;h4&gt;Cas des logiciels séparés en plusieurs paquets&lt;/h4&gt;
&lt;p&gt;Pour faciliter la maintenance, certains logiciels sont découpés en plusieurs paquets. Dans ce cas, le fait de choisir l&amp;rsquo;un ou l&amp;rsquo;autre de ces paquets pour le représenter modifie le résultat : par exemple &lt;code&gt;apache2.2-common&lt;/code&gt; (absent du graphique) se situe au même endroit que &lt;code&gt;bash&lt;/code&gt; et &lt;code&gt;anacron&lt;/code&gt; alors qu&amp;rsquo;&lt;code&gt;apache2.2-bin&lt;/code&gt; est plus près d&amp;rsquo;&lt;code&gt;anacron&lt;/code&gt;. De même pour &lt;code&gt;nginx-common&lt;/code&gt; (absent du graphique) qui est placé à côté d&amp;rsquo;&lt;code&gt;iceweasel&lt;/code&gt; alors &lt;code&gt;nginx&lt;/code&gt; est situé en dessous d&amp;rsquo;&lt;code&gt;initramfs-tools&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Il est étonnant que l&amp;rsquo;ensemble des paquets choisis se situent tous dans la partie basse du graphique. Cependant, l&amp;rsquo;échantillon est-il vraiment représentatif ?&lt;/p&gt;
&lt;h3&gt;Résultat sur l&amp;rsquo;ensemble des paquets&lt;/h3&gt;
&lt;p&gt;Debian fournit une archive avec les statistiques de l&amp;rsquo;ensemble des paquets. Après son téléchargement, reformatage et suppression des lignes malformées, voici le graphique que l&amp;rsquo;on peut obtenir :&lt;/p&gt;
&lt;a href=&quot;http://ascendances.files.wordpress.com/2012/07/all_popcon_pkgs_deb1.png&quot;&gt;&lt;img src=&quot;http://ascendances.files.wordpress.com/2012/07/all_popcon_pkgs_deb1.png?w=497&amp;h=426&quot; alt=&quot;&quot; title=&quot;Tous les paquets selon PopCon&quot; width=&quot;497&quot; height=&quot;426&quot; class=&quot;size-full wp-image-733&quot; /&gt;&lt;/a&gt;
&lt;p&gt;Les noms des paquets ne sont pas affichés car ils recouvrent entièrement le graphique, le rendant complètement illisible. Chaque point représente un paquet. L&amp;rsquo;influence moyenne des trois facteurs considérés est ajouté.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;état « Recent » ne représente que 10 % des paquets. À mon avis, c&amp;rsquo;est dû au fait que c&amp;rsquo;est un état transitoire, les paquets étant considérés par la suite comme utilisé ou pas. La majorité d&amp;rsquo;entre eux sont considérés comme peu utilisés (le gros pâté noir dans le sommet en bas à droite du triangle). Quels sont les types de logiciels considérés comme peu utilisé, et pour quelles raisons ?&lt;/p&gt;
&lt;p&gt;Dans mon cas personnel, en regardant la liste de ces paquets (visible grâce à &lt;code&gt;popularity-contest | grep '&amp;lt;OLD&amp;gt;'&lt;/code&gt; en tant que superutilisateur), je constate la présence de logiciels (et de bibliothèques) : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;que je n&amp;rsquo;utilise plus et dont j&amp;rsquo;avais oublié l&amp;rsquo;existence (&lt;code&gt;fontmatrix&lt;/code&gt;) ;&lt;/li&gt;
&lt;li&gt;que j&amp;rsquo;utilise rarement mais que je ne veux pas désinstaller car ils peuvent me servir à l&amp;rsquo;avenir (&lt;code&gt;gftp&lt;/code&gt;, &lt;code&gt;traceroute&lt;/code&gt;, …) ;&lt;/li&gt;
&lt;li&gt;qui viennent automatiquement avec des meta-paquets mais que je n&amp;rsquo;utilise pas (&lt;code&gt;gnome-power-manager&lt;/code&gt;, &lt;code&gt;xserver-xorg-video-pleindepucesquinexistentpassurmacartemere&lt;/code&gt;, …).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Sources&lt;/h3&gt;
&lt;p&gt;Les informations concernant le fonctionnement de PopCon proviennent principalement du &lt;a href=&quot;http://popcon.debian.org/README&quot; title=&quot;le README de PopCon&quot;&gt;README&lt;/a&gt; et la &lt;a href=&quot;http://popcon.debian.org/FAQ&quot; title=&quot;la FAQ de PopCon&quot;&gt;FAQ&lt;/a&gt; fournie par les pages web de popcon elle-même (ou dans le répertoire &lt;code&gt;/usr/share/doc/popularity-contest/&lt;/code&gt; si vous n&amp;rsquo;avez pas d&amp;rsquo;accès web actuellement).&lt;/p&gt;
&lt;p&gt;Les graphiques ont été réalisés en &lt;a href=&quot;http://www.r-project.org/&quot; title=&quot;Site web du language R&quot;&gt;R&lt;/a&gt; (version 2.15.1 (2012-06-22) &amp;#8212; &amp;laquo;&amp;nbsp;Roasted Marshmallows&amp;nbsp;&amp;raquo;, disponible dans le paquet r-base), grâce à une bibliothèque externe à R, nommée &lt;code&gt;ade4&lt;/code&gt;.&lt;br /&gt;
Il est nécessaire d&amp;rsquo;installer cette bibliothèque sur le système car elle est absente avec les paquets R de base). Le mode d&amp;rsquo;installation de la bibliothèque ressemble à celui de &lt;code&gt;pip&lt;/code&gt; pour Python.&lt;br /&gt;
La commande est &lt;code&gt;install.packages(&quot;ade4&quot;, dep=TRUE)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Voici les données utilisées pour le premier graphique :&lt;/p&gt;
&lt;p&gt;Fichier &lt;code&gt;pkgs_deb.csv&lt;/code&gt; :&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;name,vote,old,recent,no_files&lt;br /&gt;
epiphany,58,563,47,1&lt;br /&gt;
iceweasel,32573,14605,12272,15&lt;br /&gt;
chromium-browser,6188,3212,876,72&lt;br /&gt;
anacron,52840,2723,4104,16&lt;br /&gt;
bash,110628,6120,5826,33&lt;br /&gt;
dash,92687,2388,3751,31&lt;br /&gt;
initramfs-tools,52369,56181,12319,31&lt;br /&gt;
amoebax,11,43,0,0&lt;br /&gt;
flobopuyo,26,201,12,0&lt;br /&gt;
aolserver4-daemon,30,15,2,0&lt;br /&gt;
apache2.2-bin,53491,6032,7339,25&lt;br /&gt;
lighttpd,1304,857,173,1&lt;br /&gt;
nginx,814,809,109,1073&lt;br /&gt;
koffice-libs,431,1122,36,2&lt;br /&gt;
libreoffice-common,14696,740,4718,1039&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Commandes &lt;code&gt;R&lt;/code&gt; :&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;library(ade4)&lt;br /&gt;
pkgs &amp;lt;- read.csv(&amp;quot;popcon_pkgs_deb.csv&amp;quot;, header=TRUE)&lt;br /&gt;
quantites &amp;lt;- data.frame(pkgs$vote, pkgs$old, pkgs$recent)&lt;br /&gt;
colnames(quantites) &amp;lt;- c(&amp;quot;Utilisé (« vote »)&amp;quot;, &amp;quot;Peu utilisé (« old »)&amp;quot;, &amp;quot;Mis à jour (« recent »)&amp;quot;)&lt;br /&gt;
png(file = &amp;quot;popcon_pkgs_deb.png&amp;quot;, width = 700, height = 600)&lt;br /&gt;
triangle.plot(quantites, label=pkgs$name, clab=0.6, show.position=FALSE)&lt;br /&gt;
dev.off()&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Pour le second graphique, les données proviennent des statistiques fournies par Debian, reformatées et filtrées car certaines ont des données bizarres. (Bonjour bugreport !)&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;wget &lt;a href=&quot;http://popcon.debian.org/all-popcon-results.txt.gz&quot; rel=&quot;nofollow&quot;&gt;http://popcon.debian.org/all-popcon-results.txt.gz&lt;/a&gt;&lt;br /&gt;
tar xzvf all-popcon-results.txt.gz&lt;br /&gt;
grep &amp;laquo;&amp;nbsp;^Package: &amp;nbsp;&amp;raquo; all-popcon-results.txt | sed -e &amp;laquo;&amp;nbsp;s/ \+ /,/g&amp;nbsp;&amp;raquo; | cut -d&amp;nbsp;&amp;raquo; &amp;nbsp;&amp;raquo; -f2  | grep -v &amp;laquo;&amp;nbsp;,0,0,0,&amp;nbsp;&amp;raquo; | grep &amp;laquo;&amp;nbsp;.*,.*,.*,.*,.*&amp;nbsp;&amp;raquo;  &amp;gt;filtered_popcon.csv&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Commandes &lt;code&gt;R&lt;/code&gt; :&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;popcon &amp;lt;- read.csv(&amp;quot;filtered_popcon.csv&amp;quot;, header=FALSE)&lt;br /&gt;
quantites &amp;lt;- data.frame(popcon$V2, popcon$V3, popcon$V4)&lt;br /&gt;
colnames(quantites) &amp;lt;- c(&amp;quot;Utilisé (« vote »)&amp;quot;, &amp;quot;Peu utilisé (« old »)        &amp;quot;, &amp;quot;Mis à jour (« recent »)&amp;quot;)&lt;br /&gt;
png(file = &amp;quot;all_popcon_pkgs_deb.png&amp;quot;, width = 700, height = 600)&lt;br /&gt;
triangle.plot(quantites, show.position=FALSE, addmean=TRUE, cpoint=0.1)&lt;br /&gt;
dev.off()&lt;/p&gt;&lt;/blockquote&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/ascendances.wordpress.com/689/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ascendances.wordpress.com/689/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ascendances.wordpress.com&amp;blog=24442983&amp;post=689&amp;subd=ascendances&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;ascendancesQuelques paquets selon PopConTous les paquets selon PopCon</content:encoded>
	<dc:date>2012-07-09T12:16:11+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-4753053491191074994.post-2300487103930680845">
	<title>Colin Garriga-Salaün: Hop ! Une bouteille à la mer...</title>
	<link>http://colingarrigasalaun.blogspot.com/2011/01/hop-une-bouteille-la-mer.html</link>
	<content:encoded>Il m'a fallu du temps pour rassembler mon courage et ordonner mes réflexions, je me lance enfin et hop ! une première bouteille à la mer !&lt;br /&gt;&lt;br /&gt;Ce qui m'a le plus longtemps retenu a été la peur d'énoncer un programme, une ambition que je n'aurais pas pu honorer... je n'en publierai donc pas et me bornerai à donner un point de départ.&lt;br /&gt;&lt;br /&gt;Je suis aujourd'hui accompagnateur agile et créateur de logiciel chez Yaal, membre associatif actif sur Bordeaux avec Okiwi et Agile Tour,  je cherche de nouvelles manières d'apprendre et travailler ensemble.&lt;br /&gt;&lt;br /&gt;J'espère que ces réflexions en amèneront d'autres !&lt;br /&gt;&lt;br /&gt;Request for comments...&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4753053491191074994-2300487103930680845?l=colingarrigasalaun.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2012-07-07T15:12:03+00:00</dc:date>
	<dc:creator>Colin Garriga-Salaün</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-4753053491191074994.post-570977540727176095">
	<title>Colin Garriga-Salaün: Coding Dojo Extreme Programming bordelais</title>
	<link>http://colingarrigasalaun.blogspot.com/2011/01/coding-dojo-extreme-programming.html</link>
	<content:encoded>Je suis très heureux du &lt;b&gt;démarrage réussi&lt;/b&gt; cette année du &lt;b&gt;&lt;a href=&quot;http://okiwi.org/blogs/?page_id=5294&quot;&gt;Coding Dojo Extreme Programming dans le cadre d'Okiwi&lt;/a&gt;&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;A l'heure où j'écris ce billet, les sessions se tiennent&lt;b&gt; les seconds et quatrièmes lundis du mois&lt;/b&gt; de 18h30 à 20h30, dans les locaux de &lt;a href=&quot;http://yaal.fr/&quot;&gt;Yaal&lt;/a&gt; au 9 rue André Darbon à Bordeaux.&lt;br /&gt;&lt;br /&gt;Tout curieux est le bienvenu ! mais attention... &lt;b&gt;si c'est votre premier jour au dojo, vous devez coder !&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-A2aI2nQD2IY/Ti3CTmQRTgI/AAAAAAAABkQ/yiooUmZ9z4I/s720/2011-07-25+20.25.29.jpg&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;300&quot; src=&quot;http://4.bp.blogspot.com/-A2aI2nQD2IY/Ti3CTmQRTgI/AAAAAAAABkQ/yiooUmZ9z4I/s400/2011-07-25+20.25.29.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Que peut-on trouver dans ce coding dojo ? Ce que vous y apporterez bien sûr !&lt;br /&gt;&lt;br /&gt;Ensemble, nous cherchons à y apprendre :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;à développer du code dirigé par les tests,&lt;/li&gt;&lt;li&gt;à développer en binôme,&lt;/li&gt;&lt;li&gt;de nouveaux langages de programmation,&lt;/li&gt;&lt;li&gt;à coder avec quelqu'un de plus fort que soi,&lt;/li&gt;&lt;li&gt;à coder avec quelqu'un de moins fort que soi,&lt;/li&gt;&lt;li&gt;à réagir lorsqu'on ne sait pas, &lt;/li&gt;&lt;li&gt;à aider le groupe à traverser les moments de doute,&lt;/li&gt;&lt;li&gt;à accueillir de nouveaux entrants,&lt;/li&gt;&lt;li&gt;...&lt;/li&gt;&lt;/ul&gt;Je suis sûr que nous pourrions nous appuyer sur ces expériences pour apprendre encore d'autres choses... des idées ?&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-PvrjkZcyBoE/Ti3CKshUEjI/AAAAAAAABkM/4-r4MSXizjQ/s720/2011-07-25+20.25.45.jpg&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;300&quot; src=&quot;http://1.bp.blogspot.com/-PvrjkZcyBoE/Ti3CKshUEjI/AAAAAAAABkM/4-r4MSXizjQ/s400/2011-07-25+20.25.45.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4753053491191074994-570977540727176095?l=colingarrigasalaun.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2012-07-07T15:11:23+00:00</dc:date>
	<dc:creator>Colin Garriga-Salaün</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-4753053491191074994.post-3657950480250478968">
	<title>Colin Garriga-Salaün: Promouvoir le changement dans son entreprise</title>
	<link>http://colingarrigasalaun.blogspot.com/2011/01/promouvoir-le-changement-dans-son.html</link>
	<content:encoded>Je participe à un cercle de coaching par téléphone animé par &lt;a href=&quot;http://www.hanoulle.be/&quot;&gt;Yves Hanoulle&lt;/a&gt;, et récemment nous nous y sommes posés cette question : &lt;b&gt;comment promouvoir le changement dans son entreprise ?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;En tant que coach, il y a  des changements que l'on se sent capable de porter directement. On peut alors s'appuyer sur des jeux agiles pour les initier ou mener des expériences sur une durée limitée.&lt;br /&gt;&lt;br /&gt;Si le budget de l'entreprise le permet, nous avons aussi la possibilité de faire venir des experts sur des problématiques ponctuelles, et de promouvoir certaines formations.&lt;br /&gt;&lt;br /&gt;Mais &lt;b&gt;que faire lorsqu'on est à court de budget ?&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Participer à un cercle de coaching par téléphone,&lt;/li&gt;&lt;li&gt;Soutenir les personnes les plus volontaires dans leurs initiatives,&lt;/li&gt;&lt;li&gt;Encourager les personnes à participer à des conférences et à en produire des compte-rendus,&lt;/li&gt;&lt;li&gt;Aménager un créneau horaire hebdomadaire dédié au coapprentissage au sein de l'entreprise,&lt;/li&gt;&lt;li&gt;Participer à un groupe de coapprentissage hors de l'entreprise,&lt;/li&gt;&lt;li&gt;En groupe, chacun explore un livre en une heure pour s'en faire une idée avant d'en rendre compte aux autres,&lt;/li&gt;&lt;li&gt;En groupe, chacun lit un même livre sur une semaine avant d'en débattre,&lt;/li&gt;&lt;li&gt;... &lt;/li&gt;&lt;/ul&gt;Auriez-vous d'autres idées ?&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4753053491191074994-3657950480250478968?l=colingarrigasalaun.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2012-07-07T15:10:07+00:00</dc:date>
	<dc:creator>Colin Garriga-Salaün</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-4753053491191074994.post-6654669583600016177">
	<title>Colin Garriga-Salaün: Qu'est-ce qu'une décision de groupe ?</title>
	<link>http://colingarrigasalaun.blogspot.com/2011/03/quest-ce-quune-decision-de-groupe.html</link>
	<content:encoded>&lt;i&gt;C'est une question qui émergea lors d'Agile Open France 2011. Y réfléchir me paraît essentiel avant de pouvoir s'attaquer à des sujets plus complexes et chers aux agilistes comme l'autoorganisation.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;La décision comme illusion&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Un point de départ pourrait être de considérer la décision comme simple résolution de contrainte, si simple qu'elle peut être inconsciente.&lt;br /&gt;&lt;br /&gt;Si je sors la tête de l'eau pour respirer, on pourra dire que le calcul était vite fait. Parler de décision dans ce cas de figure est discutable, c'est un cas limite. Si l'on refuse de qualifier cet exemple de décision, alors je pense qu'il faut admettre que l'on ne décide pas souvent dans sa journée. Je n'ai pas décidé de prendre tel bus, de relancer tel client, de développer tel logiciel.&lt;br /&gt;&lt;br /&gt;J'ai évalué autant que j'ai pu les dénombrer les contraintes qui s'imposaient à moi, et j'ai mathématiquement défini le chemin de moindre difficulté.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;La décision comme pari&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Mais nos facultés à connaître et à calculer sont limitées, et il faut admettre que ce chemin de moindre difficulté mathématiquement défini recèle en réalité une grande part d'inconnu. La résolution de la contrainte initiale n'est pas garantie : il y a risque, il y a pari.&lt;br /&gt;&lt;br /&gt;Ainsi, décider, c'est simultanément s'&lt;i&gt;engager&lt;/i&gt; en territoire inconnu et en assumer la &lt;i&gt;responsabilité&lt;/i&gt;. C'est à la fois une tentative de prise de contrôle et un abandon au hasard, c'est l'expérience du joueur.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Décider ensemble&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Décider ensemble c'est donc, ensemble :&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;inventorier les contraintes à l'oeuvre et la pression qu'elles exercent,&lt;/li&gt;&lt;li&gt;imaginer des résolutions possibles et en évaluer les risques,&lt;/li&gt;&lt;li&gt; et enfin jeter les dés, en connaissance de cause.&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4753053491191074994-6654669583600016177?l=colingarrigasalaun.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2012-07-07T15:09:28+00:00</dc:date>
	<dc:creator>Colin Garriga-Salaün</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-4753053491191074994.post-4821153328795489903">
	<title>Colin Garriga-Salaün: Course de relais et performance d'équipe</title>
	<link>http://colingarrigasalaun.blogspot.com/2011/06/performance-dequipe.html</link>
	<content:encoded>&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://jmlsite.free.fr/arron-27-08-04c.jpg&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;i&gt;«&amp;nbsp;Dans une course de relais, ce ne sont pas les vitesses individuelles qui comptent mais la vitesse du bâton de relais.&amp;nbsp;»&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://jmlsite.free.fr/arron-27-08-04c.jpg&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://jmlsite.free.fr/arron-27-08-04c.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Le commentaire vient de Serge Soudoplatoff lors de son intervention à TEDxBordeaux&lt;sup&gt;1&lt;/sup&gt; le 28 mai dernier. Il expliquait ainsi comment les sprinteuses françaises gagnèrent le 4x100 mètres en 2003 devant les américaines pourtant plus rapides individuellement : grâce à de meilleurs passages de relais.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;On en déduit les pratiques pour une performance collective&amp;nbsp;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;définir le bâton de relais de l'équipe,&lt;/li&gt;&lt;li&gt;visualiser sa progression,&lt;/li&gt;&lt;li&gt;travailler la coordination,&lt;/li&gt;&lt;li&gt;faciliter la performance de ses coéquipiers,&lt;/li&gt;&lt;li&gt;...&lt;/li&gt;&lt;/ul&gt;... et être efficace soi-même ? oui ! mais cette valeur dégringole bien bas dans la hiérarchie des pratiques depuis la démonstration de l'équipe féminine 4x100m de 2003... révolutionnaire dans une société qui espère que la performance collective émergera de la somme des performances individuelles.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;http://www.tedxbordeaux.com/intervenants/serge-soudoplatoff/&quot;&gt;http://www.tedxbordeaux.com/intervenants/serge-soudoplatoff/&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;ol&gt;&lt;/ol&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://jmlsite.free.fr/arron-27-08-04.jpg&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;212&quot; src=&quot;http://jmlsite.free.fr/arron-27-08-04.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4753053491191074994-4821153328795489903?l=colingarrigasalaun.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2012-07-07T15:08:46+00:00</dc:date>
	<dc:creator>Colin Garriga-Salaün</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-4753053491191074994.post-3469371192117375943">
	<title>Colin Garriga-Salaün: Interprétation généreuse</title>
	<link>http://colingarrigasalaun.blogspot.com/2011/06/interpretation-genereuse.html</link>
	<content:encoded>Peu citée, peu commentée, la pratique de l'interprétation généreuse me paraît être une des rares pratiques fondamentales de l'agilité. Invitant à la pensée systémique et à l'action congruente, elle peut être considérée comme le moteur de l'adaptation continue.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://www.toonpool.com/user/562/files/interpretation_286785.jpg&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;229&quot; src=&quot;http://www.toonpool.com/user/562/files/interpretation_286785.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Une formulation courante de l'interprétation généreuse est celle de la &lt;a href=&quot;http://www.retrospectives.com/pages/retroPrimeDirective.html&quot;&gt;Directive Première des rétrospectives agiles&lt;/a&gt;&amp;nbsp;: &lt;i&gt;«&amp;nbsp;Quel que soit ce que nous découvrons, nous devons comprendre et croire sincèrement que chacun a fait du mieux qu'il a pu, en fonction de ses connaissances d'alors, de ses compétences, des ressources disponibles et de la situation.&amp;nbsp;»&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Il existe aussi cet exercice difficile lorsque les émotions prennent le dessus&amp;nbsp;: &lt;i&gt;«&amp;nbsp;Puis-je trouver trois interprétations généreuses de la situation&amp;nbsp;?&amp;nbsp;»&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Cette pratique a ces grandes vertus&amp;nbsp;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;d'une part de se construire une représentation d'une situation dans laquelle le ressentiment et la culpabilité n'ont pas leur place,&lt;/li&gt;&lt;li&gt;d'autre part de mettre en lumière comment les actions des uns et des autres sont &lt;i&gt;sur-&lt;/i&gt;déterminées de manière systémique.&lt;/li&gt;&lt;/ul&gt; &lt;br /&gt;Il s'agit donc de lever un brouillard d'émotions ou d'interprétations hâtives sur les événements pour essayer de n'en garder que des ressorts vertueux, et de communiquer ainsi sur une représentation à même d'être entendue le plus largement et de créer le consensus.&lt;br /&gt;&lt;br /&gt;Il s'agit enfin de se poser la question de l'action, sur un terrain constructif.&lt;br /&gt;&lt;br /&gt;C'est du pragmatisme, pas du bisounoursisme :)&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4753053491191074994-3469371192117375943?l=colingarrigasalaun.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2012-07-07T15:08:18+00:00</dc:date>
	<dc:creator>Colin Garriga-Salaün</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-4753053491191074994.post-1526528654477638919">
	<title>Colin Garriga-Salaün: Agilité : désir et responsabilité</title>
	<link>http://colingarrigasalaun.blogspot.com/2011/08/agilite-desir-et-responsabilite.html</link>
	<content:encoded>&lt;h2&gt;Qualité logicielle et organisationnelle : des notions fuyantes&lt;/h2&gt;&lt;br /&gt;Innover suppose de sortir de la re-production, de la copie, pour imaginer et réaliser quelque chose de radicalement nouveau.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_R7XHLhk5lrA/TQlTaMw3NwI/AAAAAAAAA_o/L8Oic3A30ds/s1600/funambule.jpg&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/_R7XHLhk5lrA/TQlTaMw3NwI/AAAAAAAAA_o/L8Oic3A30ds/s1600/funambule.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Mais le terrain est fuyant :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ce que l'on juge être de valeur évolue dans le temps et selon les événements,&lt;/li&gt;&lt;li&gt;décrire un résultat à produire est un exercice d'imagination et de communication difficile,&lt;/li&gt;&lt;li&gt;planifier efficacement suppose d'anticiper l'arrivée d'évènements inconnus.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Ainsi ni la qualité du logiciel, ni la qualité de l'organisation qui le produit ne sont évaluables &lt;i&gt;a priori&lt;/i&gt; : il faut que le logiciel soit réalisé pour estimer sa valeur, et dans le même temps pour évaluer l'organisation qui l'a produit.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Stratégies légères&lt;/h2&gt;&lt;br /&gt;A ces difficultés les agilistes répondent en stratèges et se dotent d'heuristiques selon les situations. Communément, ils réalisent le logiciel petit à petit sous les yeux et dans les mains des utilisateurs, qui sont alors mis en situation d'évaluer ce qui est produit aussitôt que possible.&lt;br /&gt;&lt;br /&gt;Les utilisateurs sont mis en situation de réactualiser leur désir, et les développeurs leur organisation.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Désir et responsabilité&lt;/h2&gt;&lt;br /&gt;Réactualisant &lt;i&gt;à volonté&lt;/i&gt; leur organisation, les développeurs agiles deviennent des acteurs responsables et désirants. Désirants parce qu'ils évaluent leur organisation, en imaginent et mettent en oeuvre d'autres possibles. Responsables parce que leur organisation n'est plus choisie pour eux, mais choisie par eux.&lt;br /&gt;&lt;br /&gt;Cette condition du développeur agile peut s'avérer nouvelle et déroutante : désirants et responsables, les développeurs peuvent éprouver soit un réel plaisir à mettre en oeuvre les organisations qu'ils imaginent, soit une grande frustration en cas d'empêchement.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Organisation désirante&lt;/h2&gt;&lt;br /&gt;La réussite d'une équipe de développement agile est donc fortement liée à la culture de son entreprise, et de ses réactions face à l'expression des désirs de ses membres, et de leurs propositions de &lt;i&gt;ré-&lt;/i&gt;organisation.&lt;br /&gt;&lt;br /&gt;Vous êtes peut-être un artisan logiciel, êtes-vous aussi un artisan de votre organisation et de ses objectifs ?&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4753053491191074994-1526528654477638919?l=colingarrigasalaun.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2012-07-07T15:07:52+00:00</dc:date>
	<dc:creator>Colin Garriga-Salaün</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-4753053491191074994.post-410119233369317459">
	<title>Colin Garriga-Salaün: Mur d'organisation agile</title>
	<link>http://colingarrigasalaun.blogspot.com/2011/09/mur-dorganisation-agile.html</link>
	<content:encoded>&lt;p&gt;Après quelques billets un peu abstraits, voici un sujet qui se voit et se manipule : le mur d'organisation de notre entreprise. Il est de conception très émergente, et les dimensions des fenêtres y sont sûrement pour beaucoup dans sa structure actuelle, mais il est aujourd'hui redoutablement efficace !&lt;/p&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-RSpVvCMBMqo/TnoFA2U7y3I/AAAAAAAABvM/Qp1Mtr9oMhE/s1600/yaal_board.jpg&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-RSpVvCMBMqo/TnoFA2U7y3I/AAAAAAAABvM/Qp1Mtr9oMhE/s400/yaal_board.jpg&quot; width=&quot;500&quot; /&gt;&lt;/a&gt;&lt;p&gt;Il est composé de 4 zones principales qui sont de gauche à droite :&lt;ol&gt;&lt;li&gt;nos forces, nos pratiques, et nos métriques,&lt;/li&gt;&lt;li&gt;nos backlogs de produits,&lt;/li&gt;&lt;li&gt;notre champ de bataille de la semaine,&lt;/li&gt;&lt;li&gt;nos réalisations de la semaine.&lt;/li&gt;&lt;/ol&gt;&lt;/p&gt;&lt;p&gt;Nous avons aussi deux zones intermédiaires :&lt;ul&gt;&lt;li&gt;entre les zones 2 et 3, lorsqu'on ne sait pas choisir entre une zone et l'autre, et que l'on veut en parler avec l'équipe,&lt;/li&gt;&lt;li&gt;entre les zones 3 et 4, pour indiquer les réalisations de la journée.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;h2&gt;Zone 1 : nos forces, nos pratiques, et nos métriques&lt;/h2&gt;&lt;p&gt;Nos forces, c'est ce dont nous sonmes fiers, c'est ce que nous avons construit jusque là, et sur quoi nous pouvons nous appuyer pour construire encore.&lt;/p&gt;&lt;p&gt;Nos pratiques, c'est l'ascèse à laquelle nous pensons devoir nous astreindre pour réussir, et ce que nous aimons faire ensemble. Par exemple, nous référençons le développement dirigé par les tests, les prises de décision par Decider, limiter les encours, simplifier, comprendre avant d'être compris, etc.&lt;/p&gt;&lt;p&gt;Nos métriques, c'est ce que nous choisissons de mesurer pour s'assurer de la santé de notre équipe. Par exemple, le nombre de décisions d'équipe par semaine, ou la trésorerie.&lt;/p&gt;&lt;h2&gt;Zone 2 : nos backlogs de produits&lt;/h2&gt;&lt;p&gt;Cette zone est organisée en lignes, une ligne par produit, et toutes les activités de l'entreprise y sont référencées. Certains de ces produits sont du logiciel pour des clients ou concernent des produits internes comme notre infrastructure de développement et de déploiement. D'autres de ces produits représentent des activités comme le marketing ou la gérance.&lt;/p&gt;&lt;p&gt;Nous utilisons un code couleur pour distinguer les fonctionnalités pour des clients (vert), des décompositions de fonctionnalités clientes ou des fonctionnalités à valeur interne (jaune), des bugs ou des dettes techniques (rose), et des idées hors norme (orange).&lt;/p&gt;&lt;p&gt;Vous remarquerez que cette zone est presque pleine, nous sommes limités en place. Ca nous force à faire des choix, c'est très sain.&lt;/p&gt;&lt;h2&gt;Zone 3 : notre champ de bataille de la semaine&lt;/h2&gt;&lt;p&gt;C'est ce que dans Scrum nous appellerions le backlog d'itération, s'il ne s'agissait du développement que d'un produit. En effet, si nous cherchons à séquentialiser nos développements pour des raisons d'efficacité, notre activité de la semaine est souvent mixée avec des activités commerciales par exemple. Dans la pratique, nous nous répartissons les rôles pour ne pas avoir à jongler entre plusieurs activités, mais nous restons co-responsables de la réussite globale.&lt;/p&gt;&lt;p&gt;Nous utilisons aussi des mini post-its orange pour indiquer une activité prioritaire, et des mini post-its jaune avec nos noms pour indiquer sur quoi nous travaillons en ce moment.&lt;/p&gt;&lt;p&gt;Nous organisons (et réorganisons à volonté) les post-its en nuage pour faire apparaître ce qu'on veut. Ce qui nous paraît faire sens. Des lots de fonctionnalités à réaliser dans un ordre stratégique par exemple. C'est très libre et ça dépend de la situation.&lt;/p&gt;&lt;h2&gt;Zone 4 : nos réalisations de la semaine&lt;/h2&gt;&lt;p&gt;Nous gardons le travail réalisé dans la semaine, anticipé ou non. C'est très utile pour notre rétrospective hebdomadaire par exemple. Et puis nous faisons table rase pour démarrer une nouvelle semaine.&lt;/p&gt;&lt;p&gt;Qu'en pensez-vous ? Comment faîtes-vous de votre côté ?&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4753053491191074994-410119233369317459?l=colingarrigasalaun.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2012-07-07T15:07:14+00:00</dc:date>
	<dc:creator>Colin Garriga-Salaün</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-4753053491191074994.post-883369995392211028">
	<title>Colin Garriga-Salaün: Nietzsche, coach agile ?</title>
	<link>http://colingarrigasalaun.blogspot.com/2011/10/nietzsche-coach-agile.html</link>
	<content:encoded>&lt;p&gt;&lt;i&gt;Au cours d'échanges autour de l'agilité, je me suis souvent pris à faire des rapprochements entre la conception des méthodes agiles et la philosophie nietzschéenne. Cette dernière propose une critique des valeurs pour l'avènement de valeurs joyeuses et créatrices, et montre comment cette critique a jusqu'à présent échoué face aux valeurs tristes et réactives.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;Grâce à cet éclairage, je vous propose une re-lecture du manifeste agile et une typologie d'écueils dont pourrait pâtir l'agilité. J'espère que cela sera utile aux agilistes soucieux du devenir du mouvement.&lt;/i&gt;&lt;/p&gt;&lt;h2&gt;La philosophie de Nietzsche, une affirmation de la volonté &lt;sup&gt;1, 2, 3&lt;/sup&gt;&lt;/h2&gt;&lt;p&gt;Selon Nietzsche, affirmation et négation ne sont pas de même nature. Une affirmation s'affirme elle-même, c'est un acte de volonté, d'auto-détermination. La négation est négation de quelque chose, d'une affirmation par exemple ou d'une autre négation.&lt;/p&gt;&lt;p&gt;Nietzsche affirme la volonté individuelle comme mouvement premier. Il lui oppose ce qu'il nomme les forces réactives -- ou nihilistes --, gouvernées par la peur. Il considère par exemple les valeurs de l'Église catholique comme réactives parce qu'elles conduisent à une vie coupable du péché originel et craintive du jugement de Dieu. Aussi Nietzsche propose-t-il de dépasser les notions de Bien et de Mal, ces notions qui paraissent venir d'ailleurs mais qui ne sont que sournoisement produites par la peur.&lt;/p&gt;&lt;p&gt;Ce dépassement que Nietzsche nomme la Transmutation des valeurs doit avoir quatre composantes&amp;nbsp;:&lt;/p&gt;&lt;dl&gt;&lt;dt&gt;L'affirmation du multiple et du devenir&lt;/dt&gt;&lt;dd&gt;C'est l'affirmation de la dynamique du monde, d'un monde ouvert et surprenant.&lt;/dd&gt;&lt;dt&gt;L'affirmation de l'affirmation&lt;/dt&gt;&lt;dd&gt;C'est la valorisation de l'affirmation, de l'expression de la volonté, des intentions, du désir.&lt;/dd&gt;&lt;dt&gt;L'Éternel retour&lt;/dt&gt;&lt;dd&gt;Pour juger la valeur des valeurs, pour les requalifier et déterminer si elles proviennent de forces actives ou réactives, Nietzsche pose la question : cette chose là, cette valeur, cette pratique, est-ce que&amp;nbsp;j'en veux l'éternel retour ? c'est-à-dire pas pour une fois, pas par compromis, mais avec force :&lt;br /&gt;&lt;div&gt;&lt;blockquote&gt;«&amp;nbsp;Est-ce que &lt;i&gt;j'&lt;/i&gt;en &lt;i&gt;veux&lt;/i&gt; l'éternel retour ?&amp;nbsp;»&lt;/blockquote&gt;&lt;/div&gt;&lt;/dd&gt;&lt;dt&gt;Le surhomme&lt;/dt&gt;&lt;dd&gt;C'est la figure de l'homme libérée de ses pulsions réactives, c'est l'homme actif et créateur.&lt;/dd&gt;&lt;/dl&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://youtu.be/xd3-1tcOthg&quot; title=&quot;Cliquez pour voir la vidéo&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;180&quot; src=&quot;http://2.bp.blogspot.com/_LSikcRpxz5k/S98wZMz0dTI/AAAAAAAAABQ/W9dBOiexekQ/s400/pr%C3%A9-histoire.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h2&gt;Re-lecture du Manifeste Agile&lt;/h2&gt;&lt;p&gt;Un manifeste est l'affirmation d'une volonté. Le &lt;a href=&quot;http://agilemanifesto.org/&quot;&gt;Manifeste Agile&lt;/a&gt; affirme ses valeurs et repousse les valeurs qui leurs sont opposées, jugées nuisibles à la productivité&amp;nbsp;:&lt;ul&gt;&lt;li&gt;«&amp;nbsp;Nous valorisons &lt;em&gt;les individus et leurs interactions&lt;/em&gt; plutôt que des processus et des outils&amp;nbsp;»&lt;/li&gt;&lt;li&gt;«&amp;nbsp;Nous valorisons &lt;em&gt;le logiciel qui fonctionne&lt;/em&gt; plutôt qu'une documentation exhaustive&amp;nbsp;».&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;Le &lt;a href=&quot;http://agilemanifesto.org/&quot;&gt;Manifeste Agile&lt;/a&gt; apparaît être aussi un transmutateur de valeurs nietzschéen&amp;nbsp;&lt;/p&gt;&lt;p&gt;Affirmation du Multiple et du Devenir :&lt;ul&gt;&lt;li&gt;«&amp;nbsp;Nous &lt;em&gt;découvrons&lt;/em&gt; comment mieux développer des logiciels par la pratique et en aidant les autres à le faire.&amp;nbsp;»&lt;/li&gt;&lt;li&gt;«&amp;nbsp;&lt;em&gt;Accueillez positivement les changements de besoins&lt;/em&gt;, même tard dans le projet.&amp;nbsp;»&lt;/li&gt;&lt;li&gt;«&amp;nbsp;Les meilleures architectures, spécifications et conceptions &lt;em&gt;émergent d'équipes autoorganisées&lt;/em&gt;&amp;nbsp;»&lt;/li&gt;&lt;li&gt;«&amp;nbsp;À intervalles réguliers, l'équipe réfléchit aux moyens de devenir plus efficace, puis &lt;em&gt;règle&lt;/em&gt; et &lt;em&gt;modifie&lt;/em&gt; son comportement en conséquence.&amp;nbsp;»&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;Les affirmations -- créations -- sont valorisées :&lt;ul&gt;&lt;li&gt;«&amp;nbsp;Les processus Agiles exploitent le changement pour donner un avantage compétitif au client.&amp;nbsp;»&lt;/li&gt;&lt;li&gt;«&amp;nbsp;&lt;em&gt;Livrez fréquemment un logiciel opérationnel&lt;/em&gt; avec des cycles de quelques semaines à quelques mois et &lt;em&gt;une préférence pour les plus courts.&lt;/em&gt;&amp;nbsp;»&lt;/li&gt;&lt;li&gt;«&amp;nbsp;Réalisez les projets avec des personnes &lt;em&gt;motivées&lt;/em&gt;. &lt;em&gt;Fournissez-leur&lt;/em&gt; l’environnement et le soutien dont ils ont besoin et &lt;em&gt;faites-leur confiance&lt;/em&gt; pour atteindre les objectifs fixés.&amp;nbsp;»&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;L'Éternel Retour&amp;nbsp;:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;«&amp;nbsp;Les processus Agiles encouragent un rythme de développement &lt;em&gt;soutenable&lt;/em&gt;. Ensemble, les commanditaires, les développeurs et les utilisateurs devraient être capables de maintenir &lt;em&gt;indéfiniment&lt;/em&gt; un rythme constant.&amp;nbsp;»&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Enfin, la figure &lt;em&gt;agile&lt;/em&gt; du surhomme -- cette figure de l'homme purement actif -- se dessine dans la première phrase du texte : &lt;blockquote&gt;«&amp;nbsp;Nous découvrons comment mieux développer des logiciels par la pratique et en aidant les autres à le faire.&amp;nbsp;»&lt;/blockquote&gt;&lt;/p&gt;&lt;h2&gt;Les écueils à la Transmutations des valeurs&lt;/h2&gt;&lt;p&gt;Comme certains agilistes aujourd'hui, Nietzsche constate que la transmutation des valeurs ne se produit pas. De nouvelles valeurs réactives sont affirmées même si nous nous sommes débarrassés d'anciennes, et le mouvement créateur retombe sur lui-même. Nietzsche présente une typologie que je propose de réappliquer à l'agilité. Ces écueils sont dans cet ordre de progression&lt;sup&gt;2&lt;/sup&gt;&amp;nbsp;:&lt;dl&gt;&lt;dt&gt;Le ressentiment&lt;/dt&gt;&lt;dd&gt;C'est accuser autrui de son échec. Ceux qui agissent agissent mal ! Les développeurs ne sont pas à la hauteur ! les managers ne comprennent rien ! les coachs ne sont pas assez pédagogues !&lt;/dd&gt;&lt;dt&gt;La mauvaise conscience&lt;/dt&gt;&lt;dd&gt;C'est s'accuser soi-même...&lt;/dd&gt;&lt;dt&gt;L'idéal ascétique&lt;/dt&gt;&lt;dd&gt;C'est l'écueil de l'agilité dogmatique. C'est sans doute cette préoccupation qui pousse Rachel Davies à écrire &lt;a href=&quot;http://agilecoach.typepad.com/agile-coaching/2010/02/shuhari-considered-harmful.html&quot;&gt;ce billet sur le Shu-Ha-Ri par exemple&lt;/a&gt;, craignant l'apparition d'agilistes sans esprit critique, valorisant toujours les processus et les outils d'avantage que les individus et leurs interactions.&lt;/dd&gt;&lt;dt&gt;La mort de Dieu&lt;/dt&gt;&lt;dd&gt;C'est le fait de vouloir prendre la place de Dieu après l'avoir tué. Par exemple, les chefs de projets ne sont plus directifs, mais les scrummasters sont certifiés. Les statuts et les places de pouvoir subsistent.&lt;/dd&gt;&lt;dt&gt;Le dernier homme, et l'homme qui veut périr&lt;/dt&gt;&lt;dd&gt;Le projet échoue, il est récupéré ; ce n'est pas cela que nous voulions en écrivant le manifeste agile ! Tout est vain, autant ne rien vouloir finalement... C'est ce que j'ai cru lire dans des articles sur l'état du mouvement agile. C'est ce qui m'a poussé à écrire ce billet.&lt;/dd&gt;&lt;/dl&gt;&lt;/p&gt;&lt;h2&gt;Pour une agilité performante, joyeuse et féconde&lt;/h2&gt;&lt;p&gt;Ces écueils sont &lt;em&gt;humains, trop humains&lt;/em&gt;, c'est-à-dire réactifs. En lutte avec ces pulsions, il faudra sans doute reconnaître que l'agilité est un mouvement qui n'existera qu'à force de volonté, inlassablement ré-affirmée. Ce mouvement est condamné à évoluer et à se renouveler sans cesse, et on ignore de quoi il sera fait demain.&lt;/p&gt;&lt;p&gt;Pour paraphraser Pina Bausch&lt;sup&gt;4&lt;/sup&gt; : «&amp;nbsp;Créez, créez, sinon tout est perdu !&amp;nbsp;» ou en repensant à la première phrase du manifeste agile et à la figure du surhomme qu'elle esquisse : &lt;blockquote&gt;«&amp;nbsp;Pratiquez, découvrez, partagez, sinon tout est perdu !&amp;nbsp;»&lt;/blockquote&gt;&lt;/p&gt;&lt;p&gt;Sources :&lt;small&gt;&lt;ol&gt;&lt;li&gt;Gilles Deleuze, &lt;i&gt;Nietzsche et la Philosophie&lt;/i&gt;, puf, 1962&lt;/li&gt;&lt;li&gt;Gilles Deleuze, &lt;i&gt;Nietzsche&lt;/i&gt;, puf, 1965&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://fr.wikipedia.org/wiki/Nietzsche_%28Gilles_Deleuze%29&quot;&gt;Nietzsche par Deleuze sur Wikipedia&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://fr.wikibooks.org/wiki/Art_contemporain/Pina_Bausch&quot;&gt;Pina Bausch&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/small&gt;&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4753053491191074994-883369995392211028?l=colingarrigasalaun.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2012-07-07T15:06:31+00:00</dc:date>
	<dc:creator>Colin Garriga-Salaün</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-4753053491191074994.post-4505528550346418274">
	<title>Colin Garriga-Salaün: Un aquarium pour votre dojo extreme programming</title>
	<link>http://colingarrigasalaun.blogspot.com/2012/01/un-aquarium-pour-votre-dojo-extreme.html</link>
	<content:encoded>Après une courte pause, les dojos de programmation d'Okiwi ont repris cette année. Ils sont maintenant hébergés par Arpinum les seconds lundis du mois et chez Yaal les quatrièmes lundis. Nous étions donc lundi dernier dans les locaux de... l'Auberge Numérique... qui héberge Yaal. Vous suivez ? Pour en savoir plus sur ces dojos, voire vous joindre à nous la prochaine fois, vous pouvez vous</content:encoded>
	<dc:date>2012-07-07T15:06:07+00:00</dc:date>
	<dc:creator>Colin Garriga-Salaün</dc:creator>
</item>
<item rdf:about="urn:md5:b947b9107d9260268169364046161ed9">
	<title>Bruno Voisin: Exemple de présentation en LaTeX</title>
	<link>http://blog.hikoweb.net/index.php?post/2012/06/29/Exemple-de-presentation-en-LaTeX</link>
	<content:encoded>&lt;p&gt;J'ai déjà parlé de LaTeX dans un autre &lt;a href=&quot;http://blog.hikoweb.net/index.php?post/2011/11/06/Exemple-de-rapport-en-LaTeX&quot; title=&quot;Exemple de rapport en LaTeX&quot;&gt;article où je présente un exemple de rapport de stage&lt;/a&gt;. LaTeX permet aussi de faire des présentations sous forme de diapositives, idéal pour une soutenance de stage. C'est ce que j'ai fait l'année dernière, alors je partage un modèle de présentation en LaTeX qui, je l'espère, servira à des étudiants. LaTeX est particulièrement utile dans les domaines scientifiques notamment pour les formules mathématiques et la coloration de code source.&lt;/p&gt;    &lt;p&gt;J'ai utilisé le package &lt;em&gt;Beamer&lt;/em&gt; avec son thème &lt;em&gt;Warsaw&lt;/em&gt; pour créer cette présentation. Il y a d'autres packages LaTeX mais &lt;em&gt;Beamer&lt;/em&gt; est un des meilleurs.&lt;/p&gt;
&lt;p&gt;Les prérequis sont les mêmes que pour le &lt;a href=&quot;http://blog.hikoweb.net/index.php?post/2011/11/06/Exemple-de-rapport-en-LaTeX&quot; title=&quot;Exemple de rapport en LaTeX&quot;&gt;rapport&lt;/a&gt; avec Ubuntu : installer &lt;a href=&quot;apt://texlive,texlive-lang-french&quot; title=&quot;Cliquez ici pour installer texlive et texlive-lang-french&quot;&gt;installer les paquets texlive et texlive-lang-french&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Vous pouvez télécharger le rendu au format PDF et les sources LaTeX en cliquant respectivement sur les images ci-après.&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://blog.hikoweb.net/public/doc/slides-latex.pdf&quot; title=&quot;Télécharger la présentation au format PDF&quot;&gt;&lt;img src=&quot;http://blog.hikoweb.net/public/Autres/.slide-title_s.jpg&quot; alt=&quot;Exemple de présentation au format PDF&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://blog.hikoweb.net/public/doc/slides-latex.zip&quot; title=&quot;Télécharger les sources LaTeX de la présentation&quot;&gt;&lt;img src=&quot;http://blog.hikoweb.net/public/Autres/slides-latex-source.png&quot; alt=&quot;Source de la présentation&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Je rappelle rapidement l'utilisation dans un terminal. Commencez par télécharger les sources et les extraire.&lt;/p&gt;
&lt;pre&gt;wget http://blog.hikoweb.net/public/doc/slides-latex.zip
unzip slides-latex.zip
cd slides-latex/
chmod +x make.sh clean.sh&lt;/pre&gt;
&lt;p&gt;Ensuite, compilez et visionnez le rendu.&lt;/p&gt;
&lt;pre&gt;./make.sh           # générer le fichier PDF
evince slides.pdf &amp;amp; # ouvrir le fichier PDF
./clean.sh          # nettoyer les fichiers temporaires&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;http://blog.hikoweb.net/public/Autres/slide-columns.png&quot; alt=&quot;Une page de l'exemple de présentation en LaTeX&quot; title=&quot;Une page de l'exemple de présentation en LaTeX, juin 2012&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Vous pouvez modifier cette présentation à votre goût. De nombreuse personnalisations sont possibles. Vous trouverez votre tout ce dont vous avez besoin sur Internet, par exemple sur &lt;a href=&quot;http://germain-vallverdu.developpez.com/tutoriels/latex/beamer/1erbeamer/&quot; title=&quot;Une première présentation avec Beamer&quot;&gt;Devoloppez.com&lt;/a&gt; ou sur &lt;a href=&quot;http://www.tuteurs.ens.fr/logiciels/latex/beamer.html&quot; title=&quot;Faire des présentations en LaTeX avec beamer&quot;&gt;Tuteurs.ens.fr&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Il est possible d'insérer du code source colorisé dans les diapositives à l'aide de &lt;em&gt;Minted&lt;/em&gt;. Référez-vous à mon &lt;a href=&quot;http://blog.hikoweb.net/index.php?post/2012/02/04/Colorer-du-code-source-dans-un-rapport-LaTeX-avec-Minted&quot; title=&quot;Colorer du code source dans un rapport LaTeX avec Minted&quot;&gt;article sur le sujet&lt;/a&gt;. La procédure est la même sauf qu'il faut ici ajouter un paramètre à la &lt;em&gt;frame&lt;/em&gt; comme ci-dessous.&lt;/p&gt;
&lt;pre&gt;\begin{frame}&lt;strong&gt;[containsverbatim]&lt;/strong&gt;{Code colorisé avec Minted}
\begin{minted}[fontsize=\scriptsize]{python}
# le code source ici
\end{minted}
\end{frame}&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;http://blog.hikoweb.net/public/Autres/slide-minted.png&quot; alt=&quot;Page de l'exemple de présentation en LaTeX avec coloration de code source&quot; title=&quot;Page de l'exemple de présentation en LaTeX avec coloration de code source, juin 2012&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Vous pouvez télécharger ci-dessous le même modèle de présentation avec une page supplémentaire contenant du code source colorisé.&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://blog.hikoweb.net/public/doc/slides-latex-with-minted.pdf&quot; title=&quot;Télécharger la présentation avec coloration de code source au format PDF&quot;&gt;&lt;img src=&quot;http://blog.hikoweb.net/public/Autres/.slide-minted_s.jpg&quot; alt=&quot;Exemple de présentation avec Minted au format PDF&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://blog.hikoweb.net/public/doc/slides-latex-with-minted.zip&quot; title=&quot;Télécharger les sources LaTeX de la présentation avec coloration de code source&quot;&gt;&lt;img src=&quot;http://blog.hikoweb.net/public/Autres/slides-latex-minted-source.png&quot; alt=&quot;Source de la présentation avec Minted&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;</content:encoded>
	<dc:date>2012-07-01T10:07:00+00:00</dc:date>
</item>
<item rdf:about="http://ascendances.wordpress.com/?p=646">
	<title>Stéphane Blondon: Sélectionner des logs Subversion ou Mercurial selon une période de temps</title>
	<link>http://ascendances.wordpress.com/2012/06/03/selectionner-des-logs-subversion-ou-mercurial-selon-une-periode-de-temps/</link>
	<content:encoded>&lt;p&gt;Supposons que l&amp;rsquo;on veuille retrouver les messages de &lt;code&gt;commit&lt;/code&gt; selon une date de début et une date de fin. Selon le gestionnaire de version utilisé, les commande diffèrent légèrement.&lt;/p&gt;
&lt;p&gt;Dans les exemple suivants, on souhaite récupérer la liste des &lt;code&gt;commit&lt;/code&gt; réalisés entre le 20 et le 28 Mai 2012 inclus.&lt;/p&gt;
&lt;h3&gt;Subversion (SVN)&lt;/h3&gt;
&lt;p&gt;Voici la syntaxe à utiliser :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Version longue :&lt;br /&gt;
&lt;code&gt;svn --revision {2012-05-20}:{2012-05-28} log&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Version courte :&lt;br /&gt;
&lt;code&gt;svn -r {2012-05-20}:{2012-05-28} log&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le résultat que l&amp;rsquo;on peut obtenir sur la sortie standard :&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;r3299 | bob | 2012-05-20 02:14:59 +0200 (dim. 20 mai 2012) | 1 ligne&lt;/p&gt;
&lt;p&gt;possibilité de faire la somme de deux entiers&lt;br /&gt;
&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&lt;br /&gt;
r3300 | alice | 2012-05-21 12:24:22 +0200 (lun. 21 mai 2012) | 1 ligne&lt;/p&gt;
&lt;p&gt;FIX: somme avec une retenue&lt;br /&gt;
&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&lt;br /&gt;
r3301 | bob | 2012-05-21 12:54:27 +0200 (lun. 21 mai 2012) | 1 ligne&lt;/p&gt;
&lt;p&gt;somme avec des nombres à virgules deviennent possibles&lt;br /&gt;
&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&lt;br /&gt;
r3302 | bob | 2012-05-21 18:06:13 +0200 (lun. 21 mai 2012) | 1 ligne&lt;/p&gt;
&lt;p&gt;refacto pour recette&lt;br /&gt;
&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&lt;br /&gt;
r3303 | bob | 2012-05-22 10:11:53 +0200 (mar. 22 mai 2012) | 1 ligne&lt;/p&gt;
&lt;p&gt;le client veut des soustractions plutôt que des additions&lt;br /&gt;
&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&lt;br /&gt;
r3304 | alice | 2012-05-22 15:52:48 +0200 (mar. 22 mai 2012) | 1 ligne&lt;/p&gt;
&lt;p&gt;FIX: problème de retenue lors de la soustraction&lt;br /&gt;
&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&lt;br /&gt;
r3305 | alice | 2012-05-23 17:16:10 +0200 (mer. 23 mai 2012) | 1 ligne&lt;/p&gt;
&lt;p&gt;retouches graphiques selon préférences du client (coins arrondis et texte en #DDDDDD sur fond #EEEEEE)&lt;br /&gt;
&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Si les deux dates sont inversées, l&amp;rsquo;ordre des commits est affiché dans l&amp;rsquo;autre sens.&lt;/p&gt;
&lt;h3&gt;Mercurial&lt;/h3&gt;
&lt;p&gt;Voici les commandes équivalentes avec Mercurial :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Version longue :&lt;br /&gt;
&lt;code&gt;hg log --date &quot;2012-05-20 to 2012-05-28&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Version courte :&lt;br /&gt;
&lt;code&gt;hg log -d &quot;2012-05-20 to 2012-05-28&quot;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le résultat sur la sortie standard est différent mais affiche globalement les mêmes informations :&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
changeset: 863:9282710bfded&lt;br /&gt;
parent: 856:36ecccd6d084&lt;br /&gt;
user: &amp;laquo;&amp;nbsp;Alice&amp;nbsp;&amp;raquo; &amp;lt;alice@example.com&amp;gt;&lt;br /&gt;
date: Mon May 28 22:07:05 2012 +0200&lt;br /&gt;
summary: Cloud de calculs hautes performances dispo par webservices&lt;/p&gt;
&lt;p&gt;changeset: 862:48757838dcc3&lt;br /&gt;
user: &amp;laquo;&amp;nbsp;Bob&amp;nbsp;&amp;raquo; &amp;lt;bob@example.com&amp;gt;&lt;br /&gt;
date: Fri May 25 18:02:47 2012 +0200&lt;br /&gt;
summary: FIX: contournement calcul avec oneliner Perl&lt;/p&gt;
&lt;p&gt;changeset: 861:556dcf3215e0&lt;br /&gt;
parent: 860:64a388d648ea&lt;br /&gt;
parent: 859:6a73cea460b3&lt;br /&gt;
user: &amp;laquo;&amp;nbsp;Alice&amp;nbsp;&amp;raquo; &amp;lt;alice@example.com&amp;gt;&lt;br /&gt;
date: Fri May 25 17:10:05 2012 +0200&lt;br /&gt;
summary: import libsoustraction
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Contrairement à Subversion, la liste s&amp;rsquo;affiche du &lt;code&gt;commit&lt;/code&gt; le plus récent au plus vieux. Avec cette syntaxe, il n&amp;rsquo;est pas possible d&amp;rsquo;afficher les données dans le sens chronologique (pas de résultat). Il est aussi possible d&amp;rsquo;ajouter les heures et minutes.&lt;br /&gt;
D&amp;rsquo;autres formats de date sont possibles, mais moins pratiques à mon avis (cf. &lt;code&gt;man hg&lt;/code&gt;, section DATE FORMATS).&lt;/p&gt;
&lt;h3&gt;Versions utilisées&lt;/h3&gt;
&lt;p&gt;Client :&lt;br /&gt;
svn : version 1.6.17 (r1128011)&lt;br /&gt;
hg : version 2.2.1&lt;/p&gt;
&lt;p&gt;Serveur :&lt;br /&gt;
svn : version 1.6.6 (r40053)&lt;br /&gt;
hg : version 1.4.3&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/ascendances.wordpress.com/646/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ascendances.wordpress.com/646/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ascendances.wordpress.com&amp;blog=24442983&amp;post=646&amp;subd=ascendances&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;ascendances</content:encoded>
	<dc:date>2012-06-03T20:30:29+00:00</dc:date>
</item>
<item rdf:about="http://ascendances.wordpress.com/?p=583">
	<title>Stéphane Blondon: Nombre de paquets et délai de publication dans Debian</title>
	<link>http://ascendances.wordpress.com/2012/04/05/nombre-de-paquets-et-delai-de-publication-dans-debian/</link>
	<content:encoded>&lt;p&gt;Tout philosophe écologiste conviendrait aisément qu&amp;#8217;il est plus difficile de bouger une baleine obèse qu&amp;#8217;un canari chétif. Il en va des projets informatiques comme de mère Nature : plus la taille augmente et moins l&amp;#8217;animal est véloce. Appliqué à une distribution Linux, le problème pourrait se résumer ainsi : plus le nombre de paquets est grand, plus les dépendances sont complexes et plus il y a des chances d&amp;#8217;avoir des bugs. Cela provoque des délais de mise au point qui s&amp;#8217;allongent. Pour les dernières publications de Debian, le délai entre deux verssions a été en moyenne de 2 ans mais il a grandement varié par le passé.&lt;/p&gt;
&lt;h3&gt;délai = f(paquets) ?&lt;/h3&gt;
&lt;p&gt;Voici le nombre de paquets et la temps passé entre la sortie et la sortie de la version suivante :&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Buzz (1.1) : 474 paquets &amp;#8211; 178 jours&lt;br /&gt;
Rex (1.2) : 848 paquets &amp;#8211; 175 jours&lt;br /&gt;
Bo (1.3) : 414 paquets &amp;#8211; 974 jours&lt;br /&gt;
Hamm (2.0) : 1.500 paquets &amp;#8211;  228 jours&lt;br /&gt;
Slink (2.1) : 2.250 paquets &amp;#8211;  502 jours&lt;br /&gt;
Potato (2.2) : 2.600 paquets &amp;#8211;  703 jours&lt;br /&gt;
Woody (3.0) : 8.500 paquets &amp;#8211;  1053 jours&lt;br /&gt;
Sarge (3.1) : 15.000 paquets &amp;#8211;  671 jours&lt;br /&gt;
Etch (4.0) : 18.000 paquets &amp;#8211;  679 jours&lt;br /&gt;
Lenny (5.0) : 28.000 paquets &amp;#8211;  721 jours&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Après le traumatisme de la douloureuse publication de Sarge (la durée de Woody est très importante parce qu&amp;#8217;il a été difficile de sortir Sarge), ne pas faire trop durer la préparation des versions futures était dans toutes les têtes. Une image valant mille mots et économisant mon clavier, je vous invite à regarder ci-dessous.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://ascendances.files.wordpress.com/2012/04/debian_relation_paquets_temps.png&quot;&gt;&lt;img src=&quot;http://ascendances.files.wordpress.com/2012/04/debian_relation_paquets_temps.png?w=497&amp;h=372&quot; alt=&quot;&quot; title=&quot;Relation entre le nombre de  paquets et le délai entre deux publications&quot; width=&quot;497&quot; height=&quot;372&quot; class=&quot;aligncenter size-full wp-image-593&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
Les croix rouges sont les premières publications (jusqu&amp;#8217;à Woody incluse) ; les croix bleues sont Sarge, Etch et Lenny. Les courbes sont des estimations de régression pour chacun des deux ensembles. &lt;/p&gt;
&lt;p&gt;Première période : &lt;/p&gt;
&lt;pre&gt;g(x) = 19,29 * sqrt(x * 0,45) - 113,34&lt;/pre&gt;
&lt;p&gt;Seconde période :&lt;/p&gt;
&lt;pre&gt;h(x)= 0,004 * x + 610&lt;/pre&gt;
&lt;p&gt;(En réalité, le logiciel ayant fait les calculs a ajouté plein d&amp;#8217;autres chiffres après la virgule mais c&amp;#8217;est probablement pour permettre au processeur de chauffer un peu plus. Ou pour tenter de m&amp;#8217;impressionner.)&lt;/p&gt;
&lt;p&gt;J&amp;#8217;ignore si des résolutions officielles ont été prises après la publication de Sarge. En revanche, la volonté d&amp;#8217;améliorer la communication entre des développeurs a été considérée comme une voie d&amp;#8217;amélioration par plusieurs chefs de projet Debian successifs : par exemple, la volonté d&amp;#8217;avoir des équipes pour maintenir des ensembles de logiciels plutôt qu&amp;#8217;un personne seule, la facilitation des NMU. De même, certaines personnes a des postes clé ont été épaulées par d&amp;#8217;autres développeurs Debian car c&amp;#8217;était un goulot d&amp;#8217;étranglement. À ma connaissance (qui est très parcellaire sur le sujet), les réponses se sont concentrées sur l&amp;#8217;organisation humaine plutôt que sur les critères techniques, avec succès.&lt;/p&gt;
&lt;h3&gt;Sources&lt;/h3&gt;
&lt;p&gt;Le nombre de paquet et le calcul des durées de chaque version a été calculé à partir de &lt;a&gt;l&amp;#8217;historique de la distribution&lt;/a&gt; sauf pour Lenny. Le nombre de paquet étant absent de l&amp;#8217;annonce lors de sa sortie, le nombre de paquets de Lenny a été récupéré en enregistrant la page listant &lt;a href=&quot;http://packages.debian.org/fr/lenny/allpackages&quot; title=&quot;historique officiel Debian&quot;&gt;l&amp;#8217;ensemble des paquets de Lenny&lt;/a&gt; et un bon vieux &lt;code&gt;grep &quot;&amp;lt;dt&amp;gt;&amp;lt;a href=&quot; allpackages.htm |wc -l&lt;/code&gt; sur le fichier enregistré. Soit 28.057, arrondi à 28.000.&lt;/p&gt;
&lt;p&gt;Les calculs de régression et la création du graphique ont été faites avec &lt;code&gt;gnuplot&lt;/code&gt; (version 4.4 patchlevel 0, disponible dans testing actuellement) et le contenu des fichiers suivants :&lt;/p&gt;
&lt;h4&gt;Fichier de données pour la première période (debstat1.dat)&lt;/h4&gt;
&lt;pre&gt;# stats Buzz à Woody
#nbre_paquets	délai_en_jours
474	178
848	175
974	414
1500	228
2250	502
2600	703
8500	1053&lt;/pre&gt;
&lt;h4&gt;Fichier de données pour la seconde période (debstat2.dat)&lt;/h4&gt;
&lt;pre&gt;# stats Sarge Etch Lenny
#nbre_paquets	délai_en_jours
15000	671
18000	679
28000	721&lt;/pre&gt;
&lt;h4&gt;Script Gnuplot&lt;/h4&gt;
&lt;pre&gt;
set output &quot;debian_relation_paquets_temps.png&quot;

set xlabel 'Nombre de paquets'
set ylabel 'Délai de publication (en jours)'

g(x)=a*sqrt(x*b)+c
fit g(x) 'debstat1.dat' using 1:2 via a,b,c

h(x)=d*x+e
fit h(x) 'debstat2.dat' using 1:2 via d,e

plot &quot;debstat1.dat&quot; using 1:2 notitle, g(x) notitle, &quot;debstat2.dat&quot; using 1:2 notitle, h(x) notitle&lt;/pre&gt;
&lt;p&gt;Si certains sont intéressés par des informations supplémentaires sur les résultats de gnuplot (on ne sait jamais, il y a des malades partout) :&lt;/p&gt;
&lt;p&gt;Pour la première fonction :&lt;br /&gt;
degrees of freedom    (FIT_NDF)                        : 4&lt;br /&gt;
rms of residuals      (FIT_STDFIT) = sqrt(WSSR/ndf)    : 135.908&lt;br /&gt;
variance of residuals (reduced chisquare) = WSSR/ndf   : 18470.9&lt;/p&gt;
&lt;p&gt;Final set of parameters            Asymptotic Standard Error&lt;br /&gt;
=======================            ==========================&lt;/p&gt;
&lt;p&gt;a               = 19.294           +/- 1.858e+13    (9.629e+13%)&lt;br /&gt;
b               = 0.453438         +/- 8.735e+11    (1.926e+14%)&lt;br /&gt;
c               = -113.345         +/- 184.2        (162.5%)&lt;/p&gt;
&lt;p&gt;Pour la seconde fonction :&lt;br /&gt;
final sum of squares of residuals : 7.61151&lt;br /&gt;
rel. change during last iteration : -2.9989e-14&lt;/p&gt;
&lt;p&gt;degrees of freedom    (FIT_NDF)                        : 1&lt;br /&gt;
rms of residuals      (FIT_STDFIT) = sqrt(WSSR/ndf)    : 2.7589&lt;br /&gt;
variance of residuals (reduced chisquare) = WSSR/ndf   : 7.61151&lt;/p&gt;
&lt;p&gt;Final set of parameters            Asymptotic Standard Error&lt;br /&gt;
=======================            ==========================&lt;/p&gt;
&lt;p&gt;d               = 0.00393525       +/- 0.0002866    (7.283%)&lt;br /&gt;
e               = 610.317          +/- 6.041        (0.9899%)&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/ascendances.wordpress.com/583/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ascendances.wordpress.com/583/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ascendances.wordpress.com&amp;blog=24442983&amp;post=583&amp;subd=ascendances&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;ascendancesRelation entre le nombre de  paquets et le délai entre deux publications</content:encoded>
	<dc:date>2012-04-05T10:44:04+00:00</dc:date>
</item>
<item rdf:about="http://ascendances.wordpress.com/?p=452">
	<title>Stéphane Blondon: Comparatif grep, ack et grin</title>
	<link>http://ascendances.wordpress.com/2012/02/17/comparatif-grep-ack-et-grin/</link>
	<content:encoded>&lt;p&gt;Sur le ring, &lt;code&gt;grep&lt;/code&gt; dominait et le public l&amp;#8217;acclamait.  Mais deux petits nouveaux, &lt;code&gt;ack&lt;/code&gt; et &lt;code&gt;grin&lt;/code&gt;, avaient enfilé leurs plus belles tenues de super-stars du catch pour lui ravir sa ceinture de champion et le cœur des développeurs. Vont-ils y arriver ? C&amp;#8217;est ce que vous saurez en lisant cet article ! &lt;/p&gt;
&lt;p&gt;Parfois, un programmeur veut connaître l&amp;#8217;ensemble des occurrences d&amp;#8217;un symbole dans un programme (une variable, une classe, etc.). La solution la plus évidente est d&amp;#8217;utiliser &lt;code&gt;grep&lt;/code&gt; mais, pour peu qu&amp;#8217;il y ait d&amp;#8217;autres fichiers dans le répertoire du projet, de nombreux faux positifs vont apparaître, rendant le travail d&amp;#8217;analyse fastidieux. Par exemple, s&amp;#8217;il existe des copies créées automatiquement par un éditeur de texte, les fichiers des dépôts (&lt;code&gt;.svn&lt;/code&gt;, &lt;code&gt;.hg&lt;/code&gt;, fichier binaire, etc.). À &lt;a href=&quot;http://www.yaal.fr&quot; title=&quot;Yaal : développement logiciel&quot;&gt;Yaal&lt;/a&gt;, nous utilisons Python. Avec virtualenv, les fichiers de dépôt, les fichiers .pyc produits automatiquement, la documentation, etc. les résultats de &lt;code&gt;grep&lt;/code&gt; sont plus ou moins truffés de faux positifs.&lt;/p&gt;
&lt;p&gt;Il est bien évidemment possible d&amp;#8217;exclure ce genre de fichier en multipliant les commandes (&lt;code&gt;| grep -v a_exclure&lt;/code&gt;). Mais l&amp;#8217;augmentation des lignes à éliminer rend la commande toujours moins pratique. Pour contourner cela, la suite logique est de transformer la commande en un script shell. Cependant, d&amp;#8217;autres programmes comme &lt;code&gt;ack&lt;/code&gt; et &lt;code&gt;grin&lt;/code&gt; visent déjà à résoudre ce problème. L&amp;#8217;objectif de cet article est de montrer quelques spécificités de chaque outil.&lt;/p&gt;
&lt;h3&gt;Les différents outils&lt;/h3&gt;
&lt;p&gt;Voici une présentation succincte des trois adversaires :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;grep&lt;/code&gt; : l&amp;#8217;outil Unix classique qui servira de référence ;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ack&lt;/code&gt; : outil écrit en Perl visant à faire des recherches, orienté pour des développeurs. Ce logiciel est disponible dans Debian et dérivées par l&amp;#8217;intermédiaire du paquet &lt;code&gt;ack-grep&lt;/code&gt;. La commande est aussi &lt;code&gt;ack-grep&lt;/code&gt;. Le changement de nom est dû au fait qu&amp;#8217;il existait déjà un paquet du nom de &lt;code&gt;ack&lt;/code&gt;. Dans la suite de l&amp;#8217;article, on mentionnera simplement &lt;code&gt;ack&lt;/code&gt; ;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;grin&lt;/code&gt; : outil écrit en Python ayant le même but que &lt;code&gt;ack&lt;/code&gt;. Il n&amp;#8217;est pas disponible dans Debian. Étant donné qu&amp;#8217;il est disponible dans Pypi (les dépôts de paquets Python, équivalant au CPAN de Perl), grin peut être installé avec &lt;code&gt;pip install grin&lt;/code&gt;. Le paquet python-pip doit être préalablement installé. Puisqu&amp;#8217;il n&amp;#8217;y a pas de page de manuel, la documentation à utiliser est celle de &lt;code&gt;grin --help&lt;/code&gt; et la &lt;a href=&quot;http://pypi.python.org/pypi/grin&quot; title=&quot;dépôt Python pour grin&quot;&gt;page de documentation sur le dépôt Python&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Que le match commence !&lt;/p&gt;
&lt;h3&gt;Usage&lt;/h3&gt;
&lt;h4&gt;Recherche dans un fichier&lt;/h4&gt;
&lt;pre&gt;grep MOTIF FICHIER
ack-grep MOTIF FICHIER
grin MOTIF FICHIER&lt;/pre&gt;
&lt;p&gt;Dans chaque cas, MOTIF peut être une expression rationnelle (par exemple &lt;code&gt;[fF]év&lt;/code&gt; vaut &lt;code&gt;fév&lt;/code&gt; ou &lt;code&gt;Fév&lt;/code&gt;). &lt;/p&gt;
&lt;p&gt;Voici un exemple de résultats que l&amp;#8217;on peut obtenir :&lt;/p&gt;
&lt;pre&gt;stephane@foehn:~/src/strdatetime$ grep [Ff]év translation.py
u&quot;janv&quot;, u&quot;févr&quot;, u&quot;mars&quot;,
u&quot;janvier&quot;, u&quot;février&quot;, u&quot;mars&quot;,
u&quot;Janvier&quot;, u&quot;Février&quot;, u&quot;Mars&quot;,
stephane@foehn:~/src/strdatetime$ ack-grep [Ff]év translation.py
u&quot;janv&quot;, u&quot;févr&quot;, u&quot;mars&quot;,
u&quot;janvier&quot;, u&quot;février&quot;, u&quot;mars&quot;,
u&quot;Janvier&quot;, u&quot;Février&quot;, u&quot;Mars&quot;,
stephane@foehn:~/src/strdatetime$ grin [Ff]év translation.py
translation.py:
   19 : u&quot;janv&quot;, u&quot;févr&quot;, u&quot;mars&quot;,
   26 : u&quot;janvier&quot;, u&quot;février&quot;, u&quot;mars&quot;,
   30 : u&quot;Janvier&quot;, u&quot;Février&quot;, u&quot;Mars&quot;,&lt;/pre&gt;
&lt;p&gt;La sortie de &lt;code&gt;grep&lt;/code&gt; et d&amp;#8217;&lt;code&gt;ack&lt;/code&gt; sont identiques, alors que &lt;code&gt;grin&lt;/code&gt; fournit le nom du fichier et le numéro de lignes. &lt;/p&gt;
&lt;h4&gt;Recherche récursive&lt;/h4&gt;
&lt;p&gt;La plupart du temps, l&amp;#8217;objectif est de chercher dans tout une arborescence de répertoire. C&amp;#8217;est le fonctionnement par défaut pour &lt;code&gt;ack&lt;/code&gt; et &lt;code&gt;grin&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;grep -r MOTIF . #ou rgrep
ack-grep MOTIF
grin MOTIF&lt;/pre&gt;
&lt;p&gt;La sortie produite par &lt;code&gt;grep&lt;/code&gt; et &lt;code&gt;ack&lt;/code&gt; évolue pour ajouter le nom du fichier et les lignes. &lt;code&gt;grep&lt;/code&gt; met tout sur une ligne alors qu&amp;#8217;&lt;code&gt;ack&lt;/code&gt; a une sortie identique à celle de &lt;code&gt;grin&lt;/code&gt;. &lt;code&gt;grin&lt;/code&gt; produit une sortie toujours structurée de la même manière (cf. l&amp;#8217;exemple du paragraphe précédent).&lt;/p&gt;
&lt;p&gt;Alors que la différence de vitesse lors de l&amp;#8217;analyse d&amp;#8217;un seul fichier ne se sent pas, elle devient sensible lors d&amp;#8217;une recherche récursive. Quelques tests rapides (et sans prétention d&amp;#8217;exhaustivité ou de représentativité) donnent des résultats bien plus lents pour &lt;code&gt;ack&lt;/code&gt; et &lt;code&gt;grin&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;grep : 0,3 s&lt;br /&gt;
ack-grep : 1,7 s&lt;br /&gt;
grin : 2,8 s&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Cependant, ajouter des tubes pour exclure des résultats obtenus avec &lt;code&gt;grep&lt;/code&gt; dans le but d&amp;#8217;éliminer des résultats (et donc arriver à un résultat comparable avec ce qui est obtenu avec &lt;code&gt;ack&lt;/code&gt; ou &lt;code&gt;grin&lt;/code&gt;) augmentera le temps passé et donc réduira l&amp;#8217;écart avec les deux autres outils.&lt;/p&gt;
&lt;h4&gt;Recherche insensible à la casse&lt;/h4&gt;
&lt;pre&gt;grep -i MOTIF FICHIER
ack-grep -i MOTIF FICHIER
grin -i MOTIF FICHIER&lt;/pre&gt;
&lt;p&gt;Même syntaxe que dans les cas précédents, juste l&amp;#8217;option &lt;code&gt;-i&lt;/code&gt; en plus. Aucune surprise ici. Pas la peine d&amp;#8217;en rajouter. Passez au paragraphe suivant. Faut-il vraiment que j&amp;#8217;arrête d&amp;#8217;écrire ce paragraphe pour vous arrêtiez de le lire ?!&lt;/p&gt;
&lt;h4&gt;Recherche en ignorant certains types de fichiers&lt;/h4&gt;
&lt;p&gt;Cette fonctionnalité est très utile pour ne pas chercher dans des fichiers sans intérêt :&lt;/p&gt;
&lt;pre&gt;grep -r --exclude=*.sh  --exclude=*.h &quot;interpreted as &quot; .
ack-grep --type=nohh --type=noshell  &quot;interpreted as &quot;
grin --skip-exts .h,.sh  &quot;interpreted as &quot;&lt;/pre&gt;
&lt;p&gt;Ici, on exclut les fichiers d&amp;#8217;en-tête de code C (&lt;code&gt;*.h&lt;/code&gt;) et les scripts shell (&lt;code&gt;*.sh&lt;/code&gt;). &lt;code&gt;grep&lt;/code&gt; et &lt;code&gt;grin&lt;/code&gt; recherchent directement une correspondance de motif alors qu&amp;#8217;&lt;code&gt;ack&lt;/code&gt; permet des exclusions de types ou d&amp;#8217;extension. Les types sont basés sur les noms d&amp;#8217;extension de fichiers (avec la correspondance de motif). Par exemple, le type &lt;code&gt;shell&lt;/code&gt; correspond à &lt;code&gt;.sh&lt;/code&gt;, &lt;code&gt;.bash&lt;/code&gt;, &lt;code&gt;.csh&lt;/code&gt;, &lt;code&gt;.tcsh&lt;/code&gt;, &lt;code&gt;.ksh&lt;/code&gt; et &lt;code&gt;.zsh&lt;/code&gt;. La définition d&amp;#8217;un type de fichier est conçu pour être facilement extensible.&lt;/p&gt;
&lt;p&gt;Par défaut, &lt;code&gt;ack&lt;/code&gt; et &lt;code&gt;grin&lt;/code&gt; exclut les répertoires et les fichiers sans intérêt. L&amp;#8217;option d&amp;#8217;exclusion permet d&amp;#8217;en ajouter de nouveaux. La liste des fichiers exclus par défaut n&amp;#8217;est pas identique entre &lt;code&gt;ack&lt;/code&gt; et &lt;code&gt;grin&lt;/code&gt; donc les résultats peuvent différer un peu. Par exemple, c&amp;#8217;est le cas des fichiers &lt;code&gt;.texi&lt;/code&gt;, exclus par &lt;code&gt;ack&lt;/code&gt;, mais pas par &lt;code&gt;grin&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;Recherche en ignorant certains répertoires&lt;/h4&gt;
&lt;pre&gt;grep -r --exclude-dir DIR1 --exclude-dir DIR2 MOTIF .
ack-grep --ignore-dir DIR1 --ignore-dir DIR2  MOTIF
grin --skip-dirs DIR1,DIR2 MOTIF&lt;/pre&gt;
&lt;p&gt;Ces commandes permettent d&amp;#8217;exclure DIR1 et DIR2 de la recherche. &lt;code&gt;grin&lt;/code&gt; ajoute les répertoires enlevés à la liste des répertoires qu&amp;#8217;il exclut automatiquement.&lt;/p&gt;
&lt;h4&gt;Ajout des lignes de contexte&lt;/h4&gt;
&lt;p&gt;Les options sont toutes identiques et ont le même comportement.&lt;/p&gt;
&lt;pre&gt;-A, --after-context 
-B, --before-context
-C, --context  #avant et après&lt;/pre&gt;
&lt;p&gt;Comme à chaque fois, &lt;code&gt;grin&lt;/code&gt; affichage systématiquement le numéro des lignes.&lt;/p&gt;
&lt;h4&gt;Affichage limité aux fichiers correspondants&lt;/h4&gt;
&lt;pre&gt;grep -r -l MOTIF.
ack-grep -l MOTIF
grin -l MOTIF&lt;/pre&gt;
&lt;p&gt;C&amp;#8217;est donc l&amp;#8217;option &lt;code&gt;-l&lt;/code&gt; ou &lt;code&gt;--files-with-matches&lt;/code&gt; à chaque fois.&lt;/p&gt;
&lt;h4&gt;Affichage limité aux fichiers non correspondants&lt;/h4&gt;
&lt;pre&gt;grep -r -L MOTIF .
ack-grep -L MOTIF  # = -l -v
#rien pour grin !&lt;/pre&gt;
&lt;p&gt;L&amp;#8217;option &lt;code&gt;-L&lt;/code&gt; (ou &lt;code&gt;--files-without-matches&lt;/code&gt;) permet de n&amp;#8217;afficher que les fichiers sans l&amp;#8217;occurence MOTIF pour &lt;code&gt;grep&lt;/code&gt; et &lt;code&gt;ack&lt;/code&gt;. &lt;code&gt;grin&lt;/code&gt; a bien une option de ce nom mais son comportement est complètement différent. L&amp;#8217;aide de la commmande signale que ce paramètre permet d&amp;#8217;afficher le nom du fichier avec la correspondance. Ce qui est le comportement par défaut. Je ne comprend pas l&amp;#8217;intérêt de cette option, trompeuse de surcroît.&lt;/p&gt;
&lt;h4&gt;Inversion de la sélection&lt;/h4&gt;
&lt;pre&gt;grep -v MOTIF FICHIER
ack-grep -v  MOTIF FICHIER
#rien pour grin !&lt;/pre&gt;
&lt;p&gt;Pas d&amp;#8217;option équivalente à &lt;code&gt;-v&lt;/code&gt; pour &lt;code&gt;grin&lt;/code&gt;. Rien ! Nada ! Zéro ! Que dalle ! ∅ !&lt;/p&gt;
&lt;h3&gt;Intégration avec un éditeur&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;ack&lt;/code&gt; dispose d&amp;#8217;un paramètre &lt;code&gt;--column&lt;/code&gt; pour qu&amp;#8217;un éditeur de texte se place directement sur la première occurence.&lt;/p&gt;
&lt;p&gt;La documentation d&amp;#8217;&lt;code&gt;ack&lt;/code&gt; précise que l&amp;#8217;outil est intégrable avec Vim, Emacs et TextMate. Je n&amp;#8217;ai testé aucune de ces possibilités.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;grin&lt;/code&gt; dispose d&amp;#8217;un paramètre &lt;code&gt;--emacs&lt;/code&gt; qui affiche le nom du fichier, le numéro de la ligne et son contenu sur la même ligne pour faciliter l&amp;#8217;analyse « par exemple avec emacs » :&lt;/p&gt;
&lt;pre&gt;stephane@foehn:~/src/strdatetime$ grin Fév
./tests.py:
  122 :         d_fr = strdatetime.strdatetime(u&quot;Févr&quot;, &quot;%b&quot;, lang=&quot;fr&quot;)
  136 :         d_fr = strdatetime.strdate(u&quot;Févr&quot;, &quot;%b&quot;, lang=&quot;fr&quot;)
./translation.py:
   30 : u&quot;Janvier&quot;, u&quot;Février&quot;, u&quot;Mars&quot;,
stephane@foehn:~/src/strdatetime$ grin --emacs Fév
./tests.py:122:         d_fr = strdatetime.strdatetime(u&quot;Févr&quot;, &quot;%b&quot;, lang=&quot;fr&quot;)
./tests.py:136:         d_fr = strdatetime.strdate(u&quot;Févr&quot;, &quot;%b&quot;, lang=&quot;fr&quot;)
./translation.py:30: u&quot;Janvier&quot;, u&quot;Février&quot;, u&quot;Mars&quot;,&lt;/pre&gt;
&lt;p&gt;Je suis très dubitatif sur le choix de nommage des options dans grin mais cette option me semble vraiment intéressante.&lt;/p&gt;
&lt;h3&gt;Configuration&lt;/h3&gt;
&lt;p&gt;Il est possible d&amp;#8217;enregistrer des préférences pour qu&amp;#8217;elles soient utilisées à chaque fois.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;grep&lt;/code&gt; est le plus limité. Si l&amp;#8217;utilisateur enregistre un fichier FICHIER avec tous les motifs de noms de fichier (possibilité d&amp;#8217;utiliser les caractères jokers de l&amp;#8217;interprète de commande) qu&amp;#8217;il veut exclure, il peut les faire prendre en compte en utilisant &lt;code&gt;--exclude-from=FICHIER&lt;/code&gt;. C&amp;#8217;est limité mais cette fonctionnalité reste probablement sous-exploitée.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ack&lt;/code&gt; prend en compte un fichier de configuration &lt;code&gt;.ackrc&lt;/code&gt; dans lequel on peut ajouter les options à lancer systématiquement. Simple et efficace. Certains paramètres sont aussi accessibles grâce à des variables d&amp;#8217;environnement.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;grin&lt;/code&gt; utilise une variable d&amp;#8217;environnement &lt;code&gt;$GRIN_ARGS&lt;/code&gt;. Elle doit valoir une chaîne de caractère qui inclut les paramètres à ajouter par défaut. Fonctionnel mais moins élégant que le fichier de configuration d&amp;#8217;&lt;code&gt;ack&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Pour une utilisation dans le cadre de développement logiciel, &lt;code&gt;ack&lt;/code&gt; me semble le plus adapté. Par contre, le fait qu&amp;#8217;il n&amp;#8217;affiche pas toutes les informations sur la même ligne empêche sa sortie d&amp;#8217;être réutilisable facilement. &lt;code&gt;grin&lt;/code&gt; me semble moins bon mais évite cet écueil (avec &lt;code&gt;--emacs&lt;/code&gt;) et affiche toujours les lignes, ce qui peut s&amp;#8217;avérer assez pratique.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;grep&lt;/code&gt; est plus généraliste et possède plus d&amp;#8217;options. Il reste donc indispensable et a l&amp;#8217;avantage d&amp;#8217;être toujours disponible sur le système, ce qui n&amp;#8217;est pas le cas des deux autres.&lt;/p&gt;
&lt;p&gt;Je n&amp;#8217;ai fait qu&amp;#8217;aborder les fonctionnalités qui me semblaient les plus courantes, chacun en possède d&amp;#8217;autres et sont à portée de &lt;code&gt;man&lt;/code&gt;. Explorez-les !&lt;/p&gt;
&lt;p&gt;Versions utilisées :&lt;br /&gt;
grep (GNU grep) 2.10&lt;br /&gt;
ack-grep 1.92&lt;br /&gt;
grin 1.2.1&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/ascendances.wordpress.com/452/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ascendances.wordpress.com/452/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ascendances.wordpress.com&amp;blog=24442983&amp;post=452&amp;subd=ascendances&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;ascendances</content:encoded>
	<dc:date>2012-02-17T14:55:57+00:00</dc:date>
</item>
<item rdf:about="urn:md5:b13a43e421e85b78f8d4e87f9307641d">
	<title>Bruno Voisin: Piwik un analyseur web libre</title>
	<link>http://blog.hikoweb.net/index.php?post/2012/02/12/Piwik-un-analyseur-web-libre</link>
	<content:encoded>&lt;p&gt;&lt;a title=&quot;Piwik - Web analytics - Open source&quot; hreflang=&quot;fr&quot; href=&quot;http://fr.piwik.org/&quot;&gt;Piwik&lt;/a&gt; est une alternative libre à Google Analytics en PHP/MySQL qui s'installe sur votre espace web. Je l'ai installé il y a une semaine et je le trouve très simple d'utilisation et complet. Constatez le par vous-même avec cette &lt;a title=&quot;Démo en ligne de Piwik&quot; hreflang=&quot;fr&quot; href=&quot;http://demo.piwik.org/&quot;&gt;démonstration en ligne&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.hikoweb.net/public/Screens/piwik.png&quot; title=&quot;Piwik du BlogHiko&quot;&gt;&lt;img src=&quot;http://blog.hikoweb.net/public/Screens/.piwik_m.jpg&quot; alt=&quot;Piwik du BlogHiko&quot; title=&quot;Piwik du BlogHiko, fév. 2012&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Rendez-vous sur le &lt;a title=&quot;Piwik - Web analytics - Open source&quot; hreflang=&quot;fr&quot; href=&quot;http://fr.piwik.org/&quot;&gt;site officiel de Piwik&lt;/a&gt; pour lire une description du logiciel et pour le télécharger. Pour l'installer, rien de plus simple, uploadez le par FTP, accédez y via votre navigateur et laissez vous guider.&lt;/p&gt;
&lt;p&gt;Il ne reste plus qu'à ajouter un bout de code qui recueillera sur votre site toutes les informations. Ce code vous est fournis à l'ajout de votre site sur Piwik. Il existe &lt;a title=&quot;Plugins - Piwik&quot; hreflang=&quot;en&quot; href=&quot;http://piwik.org/faq/plugins/#faq_20&quot;&gt;des &lt;em&gt;plugins&lt;/em&gt; pour de nombreux CMS et des &lt;em&gt;frameworks&lt;/em&gt; dans quelques langages&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Contrairement à Google Analytics, vous être sûr que vos données sont utilisées que par vous même.&lt;/p&gt;</content:encoded>
	<dc:date>2012-02-12T18:30:00+00:00</dc:date>
</item>
<item rdf:about="urn:md5:74c4244354c3d6027358e7fc6acf0c31">
	<title>Bruno Voisin: Colorer du code source dans un rapport LaTeX avec Minted</title>
	<link>http://blog.hikoweb.net/index.php?post/2012/02/04/Colorer-du-code-source-dans-un-rapport-LaTeX-avec-Minted</link>
	<content:encoded>&lt;p&gt;Suite à  &lt;a href=&quot;http://blog.hikoweb.net/index.php?post/2011/11/06/Exemple-de-rapport-en-LaTeX&quot; title=&quot;Exemple de rapport en LaTeX&quot;&gt;mon exemple de rapport LaTeX&lt;/a&gt;, je vous présente &lt;a title=&quot;minted – highlighted source code for LaTeX&quot; hreflang=&quot;en&quot; href=&quot;https://code.google.com/p/minted/&quot;&gt;Minted&lt;/a&gt; qui permet de colorer du code source dans vos rapports LaTeX. Il supporte de nombreux langages.&lt;/p&gt;
&lt;h3&gt;Installation&lt;/h3&gt;
&lt;p&gt;Pour pouvoir utiliser Minted il vous faut quelques prés-requis. Suivez les instructions suivantes pour les installer sous Ubuntu dans un terminal.&lt;/p&gt;
&lt;p&gt;Il vous faut le paquet LaTeX &lt;em&gt;ifplatform&lt;/em&gt; disponible dans le paquet Ubuntu (ou plutôt Debian) &lt;a title=&quot;Installer le parquet texlive-latex-extra&quot; href=&quot;apt://texlive-latex-extra&quot;&gt;&lt;em&gt;texlive-latex-extra&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;pre&gt;sudo apt-get install texlive-latex-extra&lt;/pre&gt;&lt;p&gt;Vous avez besoin également de &lt;em&gt;Pygments&lt;/em&gt; qui est une bibliothèque de coloration syntaxique de code source et écrite en Python. Pour l'installer utilisez &lt;em&gt;easy_install&lt;/em&gt; disponible dans le paquet &lt;a title=&quot;Installer le paquet python-setuptools&quot; href=&quot;apt://python-setuptools&quot;&gt;&lt;em&gt;python-setuptools&lt;/em&gt;&lt;/a&gt;. &lt;/p&gt;
&lt;pre&gt;&lt;span class=&quot;pln&quot;&gt;sudo apt&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt; install python&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;setuptools&lt;/span&gt;&lt;br /&gt;sudo easy_install Pygments&lt;/pre&gt;&lt;p&gt;Il ne reste plus qu'à&amp;nbsp; télécharger le fichier &lt;em&gt;minted.sty&lt;/em&gt; sur &lt;a title=&quot;Downloads - minted - Highlighted source code for LaTeX &quot; hreflang=&quot;en&quot; href=&quot;https://code.google.com/p/minted/downloads/list&quot;&gt;cette page&lt;/a&gt; et le placer dans le répertoire où se situ le code LaTeX de votre rapport.&lt;/p&gt;
&lt;h3&gt;Utilisation&lt;/h3&gt;
&lt;p&gt;Dans vos source LaTeX, importez le package Minted.&lt;/p&gt;
&lt;pre&gt;\usepackage{minted}&lt;/pre&gt;&lt;p&gt;Ensuite insérez votre code source de la manière suivante.&lt;/p&gt;
&lt;pre&gt;\begin{minted}[linenos=true,fontsize=\scriptsize]{java}&lt;br /&gt;&amp;nbsp; votre code source ici&lt;br /&gt;\end{minted}&lt;/pre&gt;&lt;p&gt;Ici le langage coloré est Java mais vous pouvez le remplacer par la valeur de votre choix (html, php, python, etc).&lt;/p&gt;
&lt;p&gt;La compilation LaTeX doit se faire avec l'option &lt;em&gt;-shell-escape&lt;/em&gt;.&lt;/p&gt;
&lt;pre&gt;pdflatex -shell-escape mydocument.tex&lt;/pre&gt;&lt;h3&gt;Exemples&lt;/h3&gt;
&lt;p&gt;Vous pouvez &lt;a title=&quot;Télécharger les sources d'un rapport LaTeX contenant des exemples d'utilisation de Minted&quot; href=&quot;http://blog.hikoweb.net/public/doc/minted_example.tgz&quot;&gt;télécharger un exemple&lt;/a&gt; que j'ai créé à partir &lt;a href=&quot;http://blog.hikoweb.net/index.php?post/2011/11/06/Exemple-de-rapport-en-LaTeX&quot; title=&quot;Exemple de rapport en LaTeX&quot;&gt;de celui de mon billet précédant&lt;/a&gt;. Voici en image respectivement le rendu d'un code Python (extrait de Pygments) et d'un code Java (extrait de JUnit).&lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;Rendu LaTeX d'un code Python avec Minted, fév. 2012&quot; alt=&quot;Rendu LaTeX d'un code Python avec Minted&quot; src=&quot;http://blog.hikoweb.net/public/Screens/minted_python.png&quot; /&gt; &lt;img title=&quot;Rendu LaTeX d'un code Java avec Minted, fév. 2012&quot; alt=&quot;Rendu LaTeX d'un code Java avec Minted&quot; src=&quot;http://blog.hikoweb.net/public/Screens/minted_java.png&quot; /&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2012-02-05T13:57:00+00:00</dc:date>
</item>
<item rdf:about="http://ascendances.wordpress.com/?p=415">
	<title>Stéphane Blondon: Carte heuristique de commandes unix</title>
	<link>http://ascendances.wordpress.com/2012/01/17/carte-heuristique-de-commandes-unix/</link>
	<content:encoded>&lt;p&gt;Voici une &lt;a href=&quot;http://fr.wikipedia.org/wiki/Carte_heuristique&quot; title=&quot;page wikipedia francophone sur les cartes heuristiques&quot;&gt;carte heuristique&lt;/a&gt; (&lt;em&gt;mind map&lt;/em&gt; en anglais) de commandes unix. &lt;/p&gt;
&lt;p&gt;Évidemment, la carte est loin d&amp;#8217;être exhaustive (il n&amp;#8217;existe pas d&amp;#8217;écran assez grand pour toutes les afficher en même temps). Il s&amp;#8217;agit plutôt d&amp;#8217;une tentative pour représenter les outils disponibles en partant du besoin de l&amp;#8217;utilisateur plutôt que des outils eux-mêmes : il est facile de consulter une page de manuel si l&amp;#8217;on sait quelle page consulter. La commande &lt;code&gt;apropos&lt;/code&gt; et le web permettent en général de trouver quelle commande utiliser mais cela reste parfois difficile lorsque l&amp;#8217;on ne sait pas définir exactement son problème.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://ascendances.files.wordpress.com/2012/01/mindmap_commandes_unix.png&quot;&gt;&lt;img src=&quot;http://ascendances.files.wordpress.com/2012/01/mindmap_commandes_unix.png?w=300&amp;h=218&quot; alt=&quot;&quot; title=&quot;Carte heuristique de commandes Unix&quot; width=&quot;300&quot; height=&quot;218&quot; class=&quot;aligncenter size-medium wp-image-414&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Lorsqu&amp;#8217;il y a plusieurs commandes sur le même noeud, cela signifie qu&amp;#8217;elles peuvent être utilisées dans le même but mais selon les préférences, les habitudes ou leur disponibilité (si elles sont installées ou non sur le système), on pourra préférer l&amp;#8217;une ou l&amp;#8217;autre d&amp;#8217;entre elles. Par exemple, à titre personnel, j&amp;#8217;apprécie &lt;code&gt;most&lt;/code&gt; comme lecteur de fichier, entre autres pour la coloration des pages de manuel, mais le paquet n&amp;#8217;est pas installé par défaut sous Debian et dérivées. Dans ce cas-là, &lt;code&gt;less&lt;/code&gt; est la solution. Je ne cite pas &lt;code&gt;more&lt;/code&gt;, réservé aux fans de masochisme hardcore. Autant utiliser &lt;code&gt;cat&lt;/code&gt;, il y a un caractère de moins à taper.&lt;/p&gt;
&lt;p&gt;Parfois des paramètres sont ajoutées à la commande car ils sont nécessaires pour l&amp;#8217;obtention du résultat attendu. Pour autant, l&amp;#8217;utilisateur ne devrait pas faire l&amp;#8217;économie de regarder les autres options s&amp;#8217;il désire un résultat un peu différent.&lt;/p&gt;
&lt;p&gt;La plupart des outils cités sont très connus. À part peut-être &lt;a href=&quot;http://screenshots.debian.net/package/bsdmainutils&quot;&gt;cal&lt;/a&gt; (inclus dans le paquet bsdmainutils dans Debian), &lt;a href=&quot;http://screenshots.debian.net/package/concalc&quot;&gt;concalc&lt;/a&gt; (paquet concalc), &lt;a href=&quot;http://screenshots.debian.net/screenshots/c/coreutils/8306_large.png&quot;&gt;fold&lt;/a&gt; (inclus dans le paquet coreutils) ou &lt;a href=&quot;http://screenshots.debian.net/package/tree&quot;&gt;tree&lt;/a&gt; (paquet tree) ?&lt;/p&gt;
&lt;p&gt;Rappelons que la puissance du shell ne se résume à des outils mais bien dans leur combinaison. Si elle ne suffit pas, rien n&amp;#8217;empêche d&amp;#8217;utiliser un langage de script de plus haut niveau (Perl, Python, Ruby, etc.).&lt;/p&gt;
&lt;h3&gt;Sources&lt;/h3&gt;
&lt;p&gt;Carte réalisée avec &lt;a href=&quot;http://freeplane.sourceforge.net/wiki/index.php/Main_Page&quot; title=&quot;site web de Freepane&quot;&gt;Freeplane&lt;/a&gt; v.1.1.3.&lt;br /&gt;
D&amp;#8217;autres logiciels existent :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Freemind, Vym (directement dans Debian) ;&lt;/li&gt;
&lt;li&gt;xmind, labyrinth, etc. (non packagés).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le fichier source  .mm est disponible &lt;a href=&quot;http://stephane.yaal.fr/img/mindmap_commandes_unix.mm&quot; title=&quot;fichier source mindmap mm&quot;&gt;ici&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;D&amp;#8217;autres personnes ont déjà réalisés des cartes heuristiques comme &lt;a href=&quot;http://mind-map-you.blogspot.com/2006/12/unix-command-in-mind-map.html&quot;&gt;ici&lt;/a&gt; ou &lt;a href=&quot;http://www.dsimb.inserm.fr/~gelly/old/files/CommandesUnix.pdf&quot;&gt;là&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://screenshots.debian.net&quot; title=&quot;Site regroupant des captures d'écran des logiciels dans Debian&quot;&gt;http://screenshots.debian.net&lt;/a&gt; est un site regroupant des captures d&amp;#8217;écran de logiciels en actions qui sont disponibles comme paquet dans Debian. L&amp;#8217;envoi de captures d&amp;#8217;écran de paquets pour compléter le site est ouvert à tous. Les captures sont aussi réutilisées ailleurs, par exemple dans &lt;a href=&quot;http://www.nongnu.org/synaptic/&quot; title=&quot;site web de Synaptic&quot;&gt;&lt;/a&gt;synaptic.&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/ascendances.wordpress.com/415/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ascendances.wordpress.com/415/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/ascendances.wordpress.com/415/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/ascendances.wordpress.com/415/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gofacebook/ascendances.wordpress.com/415/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/ascendances.wordpress.com/415/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gotwitter/ascendances.wordpress.com/415/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/ascendances.wordpress.com/415/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/ascendances.wordpress.com/415/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/ascendances.wordpress.com/415/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/ascendances.wordpress.com/415/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/ascendances.wordpress.com/415/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/ascendances.wordpress.com/415/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/ascendances.wordpress.com/415/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ascendances.wordpress.com&amp;blog=24442983&amp;post=415&amp;subd=ascendances&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;ascendancesCarte heuristique de commandes Unix</content:encoded>
	<dc:date>2012-01-16T23:06:24+00:00</dc:date>
</item>
<item rdf:about="http://ascendances.wordpress.com/?p=331">
	<title>Stéphane Blondon: Supprimer des lignes identiques réparties dans un fichier</title>
	<link>http://ascendances.wordpress.com/2011/12/21/supprimer-des-lignes-identiques-reparties-dans-un-fichier/</link>
	<content:encoded>&lt;p&gt;Jules et Vincent doivent fournir un fichier texte en supprimant les lignes qui sont plusieurs fois dans le fichier, mais réparties de manière quelconque dans le fichier (par exemple un fichier journal ou une liste de nombres aléatoires). Alors qu&amp;#8217;ils descendent de la voiture pour aller sur le lieu de leur mission, ils en discutent nonchalamment :&lt;br /&gt;
 &amp;#8211; Il nous faudrait des outils Unix pour ces affaires-là.&lt;br /&gt;
 &amp;#8211; Y&amp;#8217;a combien de lignes ?&lt;br /&gt;
 &amp;#8211; 1.200&lt;br /&gt;
 &amp;#8211; En comptant les doublons ?&lt;br /&gt;
 &amp;#8211; Oui.&lt;br /&gt;
 &amp;#8211; Faudrait des outils Unix&amp;#8230;&lt;/p&gt;
&lt;p&gt;Après un moment de réflexion plus ou moins court (selon votre taux de caféine), comme eux, vous vous dites que cela ne devrait vous prendre que quelques secondes, le temps de dégainer un terminal et de taper une commande Unix adéquate&amp;#8230;&lt;/p&gt;
&lt;h3&gt;Solutions basées sur le shell&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;uniq&lt;/code&gt; est un outil shell permettant de supprimer des lignes répétées. Voilà qui semble parfait pour ce genre d&amp;#8217;affaire. Malheureusement, en lisant un peu plus la page de man, on apprend qu&amp;#8217;&lt;code&gt;uniq&lt;/code&gt; filtre « les  lignes  successives identiques ». La page de man propose un contournement en utilisant &lt;code&gt;sort&lt;/code&gt;. Avec un fichier de log, cela peut être plus ou moins utilisable en triant d&amp;#8217;abord par la chaîne de log puis par la date. En revanche, cela ne peut pas vraiment résoudre le problème de valeurs aléatoires. En revanche, il est possible de combiner plusieurs outils Unix en utilisant un compteur de ligne, qui sera supprimé ensuite. &lt;/p&gt;
&lt;p&gt;Soit un fichier nommé &lt;code&gt;pulp.txt&lt;/code&gt; et contenant les données suivantes :&lt;/p&gt;
&lt;pre&gt;1994-10-26
cheese
1994-10-26
1994-10-26
tarte
myrtille
1994-10-26
chalumeau
1994-10-26
1994-10-26
verset
massage&lt;/pre&gt;
&lt;p&gt;Commençons par ajouter un compteur de ligne :&lt;/p&gt;
&lt;pre&gt;$ nl pulp.txt
     1	1994-10-26
     2	cheese
     3	1994-10-26
     4	1994-10-26
     5	tarte
     6	myrtille
     7	1994-10-26
     8	chalumeau
     9	1994-10-26
    10	1994-10-26
    11	verset&lt;/pre&gt;
&lt;p&gt;Puis on trie en fonction des données préalablement fournies, tout en éliminant des chaînes en doubles en même temps :&lt;/p&gt;
&lt;pre&gt;$ nl pulp.txt | sort --key 2 --unique 
     1	1994-10-26
     8	chalumeau
     2	cheese
     6	myrtille
     5	tarte
    11	verset&lt;/pre&gt;
&lt;p&gt;On réordonne selon l&amp;#8217;ordre précédent :&lt;/p&gt;
&lt;pre&gt;$ nl pulp.txt | sort --key 2 --unique | sort --key 1 --numeric-sort
     1	1994-10-26
     2	cheese
     5	tarte
     6	myrtille
     8	chalumeau
    11	verset&lt;/pre&gt;
&lt;p&gt;Pour finir, on supprime la numérotation :&lt;/p&gt;
&lt;pre&gt;$ nl pulp.txt | sort --key 2 --unique | sort --key 1 --numeric-sort | cut --fields 2
1994-10-26
cheese
tarte
myrtille
chalumeau
verset&lt;/pre&gt;
&lt;p&gt;Le problème est alors résolu, mais et la mise au point aura probablement pris plus de temps que prévu (selon votre taux d&amp;#8217;alcoolémie) :&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;nl pulp.txt | sort &amp;#8211;key 2 &amp;#8211;unique | sort &amp;#8211;key 1 &amp;#8211;numeric-sort | cut &amp;#8211;fields 2&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Cependant cette succession de commande ne sera directement réutilisable dès que la structure des chaînes variera (même un tout petit peu). &lt;/p&gt;
&lt;p&gt;Il est regrettable qu&amp;#8217;il y ait pas une option permettant de filtrer l&amp;#8217;ensemble des lignes par &lt;code&gt;uniq&lt;/code&gt;. Si jamais vous êtes en train de faire une overdose de shell, demandez à votre voisin de vous faire une piqûre d&amp;#8217;adrénaline. (Attention, &lt;a href=&quot;http://www.mirror.co.uk/celebs/news/2009/06/28/jacko-was-injected-in-the-heart-to-try-to-revive-him-115875-21476864/&quot; title=&quot;piqûre d'adrenaline sur Mickaël Jackson&quot;&gt;ça ne fonctionne pas&lt;/a&gt; à chaque fois.) Le mainteneur d&amp;#8217;uniq refuse l&amp;#8217;ajout d&amp;#8217;une telle fonctionalité à cause de l&amp;#8217;&lt;a href=&quot;http://lists.gnu.org/archive/html/coreutils/2011-11/msg00018.html&quot; title=&quot;réponse sur la complexité d'uniq&quot;&gt;augmentation de la complexité&lt;/a&gt; que cela provoquerait. Par contre, des solutions bien plus compactes de contournement ont été proposées sur la liste de diffusion de coreutils.&lt;/p&gt;
&lt;h3&gt;One-liners&lt;/h3&gt;
&lt;p&gt;On se repoudre le nez et on y retourne !&lt;/p&gt;
&lt;p&gt;Les premières solutions ont été à base de Perl :&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;perl -lne &amp;#8216;print $_ if ! defined $a{$_}; $a{$_}=$_;&amp;#8217;&lt;/p&gt;
&lt;p&gt;perl -MDigest::MD5=md5 -lne &amp;#8216;$m=md5($_); print $_ if ! defined $a{$m}; $a{$m}=1&amp;#8242;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;$_&lt;/code&gt; représente la ligne en cours de traitement ; elle est affichée si ce n&amp;#8217;est pas une clef d&amp;#8217;un tableau associatif puis on ajoute la chaîne comme clef. La seconde version reprend ce même principe en utilisant une signature md5. Perl est vraiment adapté à l&amp;#8217;écriture de code d&amp;#8217;une ligne : c&amp;#8217;est compact et illisible. Ce qui est tout de même un grand principe de Perl : « &lt;a href=&quot;http://jargonf.org/wiki/TIMTOWTDI&quot; title=&quot;définition de TIMTOWTDI&quot;&gt;il y a plus d&amp;#8217;une façon de le faire&lt;/a&gt; », mais on choisira toujours la plus incompréhensible. &lt;img src=&quot;http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif&quot; alt=&quot;;)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;Puis une solution en &lt;a href=&quot;http://fr.wikipedia.org/wiki/Awk&quot; title=&quot;page wikipedia francophone sur awk&quot;&gt;awk&lt;/a&gt; a été proposée :&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;awk &amp;#8216;!a[$0]++&amp;#8217;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;La ligne traitée est &lt;code&gt;$0&lt;/code&gt; ; la valeur d&amp;#8217;un tableau &lt;code&gt;a&lt;/code&gt; ayant pour clé la ligne en cours de traitement est incrémentée. Si c&amp;#8217;est la deuxième fois qu&amp;#8217;elle est rencontrée, la valeur sera non nulle. Le &lt;code&gt;!&lt;/code&gt; inverse le résultat qui sera donc évalué à faux (la chaîne est déjà présente). &lt;/p&gt;
&lt;p&gt;Ces solutions résolvent le problème, de manière plus souple que la suite de commandes précédentes. Par contre, elles ne résolvent pas le problème de complexité. Comme cela est réalisé par un interpréteur plutôt que du code C compilé (pour uniq), il est quasi-certain que la consommation mémoire est plus importante et que la vitesse d&amp;#8217;exécution est plus lente&amp;#8230; Je ne pense pas que ce soit un problème mais la réponse est pire que le contre-argument de ne pas le réaliser via uniq.&lt;br /&gt;
Pour autant, cela ne m&amp;#8217;a pas apparu nécessaire de tenter de convaincre à nouveau le mainteneur. C&amp;#8217;est comme masser les pieds de la femme du parrain de la pègre locale. Vous le feriez, vous ? Moi non plus.&lt;/p&gt;
&lt;h3&gt;Mise en place d&amp;#8217;un alias&lt;/h3&gt;
&lt;p&gt;Pour garder le filtre à disposition, il est possible d&amp;#8217;en faire un alias. Pour cela, il suffit de copier la ligne suivante in &lt;code&gt;~/.bash_aliases&lt;/code&gt; (si ce fichier est activé dans &lt;code&gt;~/.bashrc&lt;/code&gt;) :&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;alias uniqall=&amp;#8217;awk &amp;#8216;&amp;#8221;&amp;#8216;&amp;#8221;&amp;#8216;! a[$0]++&amp;#8217;&amp;#8221;&amp;#8216;&amp;#8221;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Alors qu&amp;#8217;ils sont sur la route du retour, Vincent a les mains sur le clavier et un cahot de son fauteuil à roulette fait partir d&amp;#8217;un coup une série de caractères supplémentaires !&lt;br /&gt;
Vincent : Oh putain le con j&amp;#8217;ai ajouté plein d&amp;#8217;apostrophes et de guillemets !&lt;br /&gt;
Jules : Mais pourquoi t&amp;#8217;as fait ça putain ?&lt;br /&gt;
Vincent : Mais parce qu&amp;#8217;il le fallait, c&amp;#8217;est pas un accident !&lt;/p&gt;
&lt;p&gt;En effet, Vincent était obligé : la commande awk ou perl fonctionne très bien seule mais elle ne peut pas être insérée directement comme alias. En effet, il faut transformer la commande en chaîne de caractère pour l&amp;#8217;insérer dans le fichier .bash_aliases, donc mettre des apostrophes autour de la commande. Or, il y a déjà des apostrophes à l&amp;#8217;intérieur de la commande (&lt;code&gt;interpréteur 'code'&lt;/code&gt;). On aurait donc des apostrophes incluses entre d&amp;#8217;autres apostrophes et le shell interprèterait la seconde apostrophe comme la fin de la première chaîne. Quelques solutions semblent évidentes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Protéger les apostrophes intérieures avec un antislash (&lt;code&gt;\'&lt;/code&gt;) ;&lt;/li&gt;
&lt;li&gt;Remplacer les apostrophes intérieures par des guillemets ;&lt;/li&gt;
&lt;li&gt;Remplacer les apostrophes extérieures par des guillemets.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ces différentes stratégies vont d&amp;#8217;un fonctionnement incorrect (il ne retourne que la première ligne du flux) à une erreur lors de l&amp;#8217;ajout de l&amp;#8217;alias.&lt;/p&gt;
&lt;h4&gt;Explication du &amp;#8216;&amp;#8221;&amp;#8216;&amp;#8221;&amp;#8216;&lt;/h4&gt;
&lt;p&gt;La ruse est de découper la commande en plusieurs sous-chaînes qui seront concaténées automatiquement par le shell.&lt;br /&gt;
&lt;a href=&quot;http://ascendances.files.wordpress.com/2011/12/concatenation_guillemets_apostrophes1.gif&quot;&gt;&lt;img src=&quot;http://ascendances.files.wordpress.com/2011/12/concatenation_guillemets_apostrophes1.gif?w=497&quot; alt=&quot;&quot; title=&quot;Concaténation de chaînes avec des guillemets et des apostrophes&quot; class=&quot;aligncenter size-full wp-image-377&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Il est tout à fait possible de mettre des espaces à l&amp;#8217;intérieur des chaînes mais pas entre elles. Sinon le shell les interprétera comme des mots différents et ne les concatènera pas.&lt;/p&gt;
&lt;h3&gt;Générique de fin&lt;/h3&gt;
&lt;p&gt;Merci aux participants de liste de diffusion bug-coreutils qui ont été très réactifs : Pádraig Brady, Jim Meyering et Bob Proulx (le &lt;a href=&quot;http://lists.gnu.org/archive/html/bug-coreutils/2011-12/msg00047.html&quot; title=&quot;archive e-mail du rapport de bug sur uniq&quot;&gt;rapport de bug&lt;/a&gt;, début de la discussion).&lt;/p&gt;
&lt;p&gt;Merci à Arthur et &lt;a href=&quot;http://colingarrigasalaun.blogspot.com/&quot; title=&quot;Blog de Colin Garriga Salaün&quot;&gt;&lt;/a&gt;Colin qui m&amp;#8217;ont suggéré d&amp;#8217;en faire un article. (Ils ne pensaient pas que j&amp;#8217;allais vous faire subir un article de plus de 50 tweets de longueur&amp;#8230;)&lt;/p&gt;
&lt;p&gt;Les discussions de Vincent et de Jules sont des références à &lt;a href=&quot;http://fr.wikipedia.org/wiki/Pulp_Fiction&quot; title=&quot;page wikipedia francophone sur Pulp Fiction&quot;&gt;Pulp&lt;/a&gt; &lt;a href=&quot;http://www.replikultes.net/films/fiches/91/pulp_fiction/repliks/&quot; title=&quot;répliques de Pulp Fiction&quot;&gt;Fiction&lt;/a&gt;. (liste non exhaustive)&lt;/p&gt;
&lt;p&gt;Le shell utilisé est bash, version 4.2.20. L&amp;#8217;interpréteur Awk est mawk, version 1.3.3.&lt;/p&gt;
&lt;p&gt;Aucun compilateur n&amp;#8217;a été maltraité durant l&amp;#8217;écriture de cet article, ni lors de la mise au point de l&amp;#8217;alias final.&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/ascendances.wordpress.com/331/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ascendances.wordpress.com/331/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/ascendances.wordpress.com/331/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/ascendances.wordpress.com/331/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gofacebook/ascendances.wordpress.com/331/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/ascendances.wordpress.com/331/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gotwitter/ascendances.wordpress.com/331/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/ascendances.wordpress.com/331/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/ascendances.wordpress.com/331/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/ascendances.wordpress.com/331/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/ascendances.wordpress.com/331/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/ascendances.wordpress.com/331/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/ascendances.wordpress.com/331/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/ascendances.wordpress.com/331/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ascendances.wordpress.com&amp;blog=24442983&amp;post=331&amp;subd=ascendances&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;ascendancesConcaténation de chaînes avec des guillemets et des apostrophes</content:encoded>
	<dc:date>2011-12-20T23:11:06+00:00</dc:date>
</item>
<item rdf:about="urn:md5:ba5bfe80fcf597627a15fdc5250d6961">
	<title>Bruno Voisin: Exemple de rapport en LaTeX</title>
	<link>http://blog.hikoweb.net/index.php?post/2011/11/06/Exemple-de-rapport-en-LaTeX</link>
	<content:encoded>&lt;!-- &lt;img src=&quot;http://blog.hikoweb.net/public/Autres/rapport-latex-3d.png&quot; alt=&quot;Illustration : Exemple de rapport LaTeX&quot; /&gt; --&gt;
&lt;p&gt;&lt;img src=&quot;http://blog.hikoweb.net/public/logos/LaTeX_logo.png&quot; alt=&quot;Logo de LaTeX&quot; /&gt;
Il y a presque deux mois j'ai rédigé mon rapport de stage en LaTeX. Si vous ne connaissez pas LaTeX, direction &lt;a hreflang=&quot;fr&quot; href=&quot;http://fr.wikipedia.org/wiki/LaTeX&quot; title=&quot;LaTeX - Wikipédia&quot;&gt;Wikipédia&lt;/a&gt;. Je propose dans ce billet uniquement un modèle de rapport qui pourras servir à des étudiants d'informatique (ou autres).&lt;/p&gt;    &lt;p&gt;Avant tout, je partage un tutoriel qui m'a bien servi : &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.ukonline.be/programmation/latex/tutoriel/index.php&quot; title=&quot;http://www.ukonline.be&quot;&gt;Tutoriel LaTeX&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Pour pouvoir compiler des fichiers LaTeX sur Ubuntu, il faut d'abord &lt;a href=&quot;apt://texlive,texlive-lang-french&quot; title=&quot;Cliquez ici pour installer texlive et texlive-lang-french&quot;&gt;installer les paquets texlive et texlive-lang-french&lt;/a&gt;.&lt;/p&gt;
&lt;pre&gt;sudo apt-get install texlive texlive-lang-french&lt;/pre&gt;
&lt;p&gt;Il existe certainement un plugin LaTeX pour votre éditeur de texte préféré. Pour &lt;em&gt;gedit&lt;/em&gt; installez &lt;a href=&quot;apt://gedit-latex-plugin&quot; title=&quot;Cliquez ici pour installer gedit-latex-plugin&quot;&gt;gedit-latex-plugin&lt;/a&gt;, pour &lt;em&gt;vim&lt;/em&gt; installez &lt;a href=&quot;apt://vim-latexsuite&quot; title=&quot;Cliquez ici pour installer vim-latexsuite&quot;&gt;vim-latexsuite&lt;/a&gt; et pour &lt;em&gt;emacs&lt;/em&gt; installez &lt;a href=&quot;apt://auctex&quot; title=&quot;Cliquez ici pour installer auctex&quot;&gt;auctex&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Voici ci dessous le rendu au format PDF du rapport exemple et les fichiers sources LaTeX.&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://blog.hikoweb.net/public/doc/exemple_rapport_latex.pdf&quot; title=&quot;Télécharger le rapport exemple au format PDF&quot;&gt;&lt;img src=&quot;http://blog.hikoweb.net/public/Autres/rapport.pdf.png&quot; alt=&quot;Exemple de rapport au format PDF&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://blog.hikoweb.net/public/doc/sample_report.zip&quot; title=&quot;Télécharger les sources LaTeX du rapport exemple&quot;&gt;&lt;img src=&quot;http://blog.hikoweb.net/public/Autres/rapport.tex.png&quot; alt=&quot;Sources LaTeX de l'exemple de rapport&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;La page titre est très fortement inspiré de celle décrite sur &lt;a hreflang=&quot;en&quot; href=&quot;http://en.wikibooks.org/wiki/LaTeX/Title_Creation&quot; title=&quot;LaTeX/Title Creation&quot;&gt;WikiBooks&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Décompressez les sources et vous y trouverez des fichiers textes dont l’extension est &lt;code&gt;.tex&lt;/code&gt;. Ce sont ses fichiers qu'il faut éditer. Il faut donner les droits d'exécution aux exécutables.&lt;/p&gt;
&lt;pre&gt;unzip sample_report.zip
cd sample_report/
chmod +x make.sh clean.sh  # si besoin&lt;/pre&gt;
&lt;p&gt;Ensuite, vous pouvez compiler et supprimer les fichiers temporaires très simplement.&lt;/p&gt;
&lt;pre&gt;./make.sh            # générer le fichier PDF
evince rapport.pdf &amp;amp; # ouvrir le fichier PDF
./clean.sh           # nettoyer&lt;/pre&gt;
&lt;p&gt;Si vous voulez insérer du code source dans votre rapport, lisez &lt;a title=&quot;Colorer du code source dans un rapport LaTeX avec Minted&quot; href=&quot;http://blog.hikoweb.net/index.php?post/2012/02/04/Colorer-du-code-source-dans-un-rapport-LaTeX-avec-Minted&quot;&gt;mon billet suivant&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2011-11-20T15:44:00+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-4753053491191074994.post-7693831787145199855">
	<title>Colin Garriga-Salaün: Le vivant post-génomique ou Qu'est-ce que l'auto-organisation ?</title>
	<link>http://colingarrigasalaun.blogspot.com/2011/03/le-vivant-post-genomique-ou-quest-ce.html</link>
	<content:encoded>&lt;a href=&quot;http://www.franceculture.com/oeuvre-le-vivant-post-genomique-ou-qu-est-ce-que-l-auto-organisation-de-henri-atlan.html&quot;&gt;Le journal des Nouveaux Chemins de la Connaissance d'aujourd'hui&lt;/a&gt; sur France Culture donne la parole à Henri Atlan, auteur d'un livre à mi-chemin entre sciences et philosophie à propos de l'autoorganisation&lt;sup&gt;1&lt;/sup&gt;.&lt;br /&gt;&lt;br /&gt;Il revient sur une expérience de neurologie qui montre le caractère illusoire des prises de décisions à court terme et non planifiées. Ce sera sans doute ma prochaine lecture. Il me donne du courage pour poursuivre mon &lt;a href=&quot;http://colingarrigasalaun.blogspot.com/2011/03/quest-ce-quune-decision-de-groupe.html&quot;&gt;exploration de la question de l'autoorganisation telle que je l'avais commencée&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Vous pouvez l'entendre à partir de la 51&lt;sup&gt;e&lt;/sup&gt; minute du &lt;a href=&quot;http://www.dkpod.com/sources/affiche_podcast.php?id_sou=6514&amp;id_rub=505&quot;&gt;podcast de l'émission&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Henri Atlan, &lt;i&gt;Le vivant post-génomique ou Qu'est-ce que l'auto-organisation ?&lt;/i&gt;, Odile Jacob, 2011&lt;/li&gt;&lt;/ol&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4753053491191074994-7693831787145199855?l=colingarrigasalaun.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2011-10-11T11:02:36+00:00</dc:date>
	<dc:creator>Colin Garriga-Salaün</dc:creator>
</item>
<item rdf:about="urn:md5:bb88653515d82bc01e2f843d12831cbb">
	<title>Bruno Voisin: Script d'installation de vos applications</title>
	<link>http://blog.hikoweb.net/index.php?post/2011/04/20/Script-d-installation-de-vos-applications</link>
	<content:encoded>&lt;!-- &lt;img src=&quot;http://blog.hikoweb.net/public/Screens/postinstall.sh.png&quot; alt=&quot;Début du script postinstall.sh&quot; /&gt;--&gt;
&lt;p&gt;&lt;img title=&quot;Text x script (Tango! project), avr. 2011&quot; alt=&quot;Text x script (Tango! project)&quot; src=&quot;http://blog.hikoweb.net/public/logos/Text-x-script.png&quot; /&gt;La sortie d'une nouvelle version d'Ubuntu approche. Après la réinstallation de votre système vous aimerez retrouver facilement les applications que vous utilisez régulièrement. C'est simple, il suffit de se faire un petit script shell qui installe tout ce dont vous avez besoin. On tape une commande, on va faire un tour dehors parce qu'il fait beau et quand on rentre c'est fini.&lt;/p&gt;
&lt;p&gt;J'entends déjà certains me dire qu'il y a aussi la mise à niveau qui permet de tout conserver. Mais étant un bidouilleur, j'aime bien retrouver un système propre de temps en temps. C'est comme un nettoyage de printemps qui arrive deux fois pas an.&lt;/p&gt;    &lt;p&gt;Attention, une mauvaise utilisation de scripts ou de commandes avec les droits administrateur (&lt;code&gt;sudo&lt;/code&gt;) peut endommager la stabilité du système. Soyez sûr de ce que vous faites. De plus, le script suivant installe des dépôts de logiciels non officiels, ce qui est également potentiellement dangereux.&lt;/p&gt;
&lt;p&gt;Après les avertissements, assurez vous d'avoir les quelques connaissances techniques nécessaires. Vous devez savoir ce qu'est un &lt;a hreflang=&quot;fr&quot; href=&quot;http://doc.ubuntu-fr.org/terminal&quot; title=&quot;terminal - Documentation Ubuntu Francophone&quot;&gt;terminal&lt;/a&gt; puisque le script sera lancé dans ce dernier. Vous devez avoir bien compris la commande &lt;a hreflang=&quot;fr&quot; href=&quot;http://doc.ubuntu-fr.org/apt-get&quot; title=&quot;apt-get - Documentation Ubuntu Francophone&quot;&gt;apt-get&lt;/a&gt; et &lt;a hreflang=&quot;fr&quot; href=&quot;http://doc.ubuntu-fr.org/sudo&quot; title=&quot;sudo - Documentation Ubuntu Francophone&quot;&gt;sudo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Vous pouvez &lt;a href=&quot;http://blog.hikoweb.net/public/Scripts/postinstall.sh&quot; title=&quot;Mon script d'installation de paquets (version 2)&quot;&gt;télécharger mon script en cliquant ici&lt;/a&gt;. C'est une nouvelle version de &lt;a href=&quot;http://blog.hikoweb.net/index.php?post/2009/11/17/Insaller-toutes-vos-applications-avec-un-seul-script&quot; hreflang=&quot;fr&quot; title=&quot;Installez toutes vos applications avec un seul script&quot;&gt;mon dernier script publié&lt;/a&gt;. Vous êtes libre de l'adapter à vos besoins.&lt;/p&gt;
&lt;p&gt;Avant de l'exécuter, lisez le et modifiez le à votre convenance. Les lignes commençant par le caractère dièse (#) sont ignorées. Il faut rendre le script exécutable avec la commande &lt;code&gt;chmod&lt;/code&gt; comme ci-dessous ou graphiquement avec un clic droit sur le fichier &amp;gt; &lt;em&gt;Propriétés&lt;/em&gt; &amp;gt; &lt;em&gt;Permission&lt;/em&gt;s &amp;gt; cochez &lt;em&gt;Exécution&lt;/em&gt; (mais c'est plus long...).&lt;/p&gt;
&lt;pre&gt;cd repertoire/ou-se-trouve/le-script
chmod u+x postinstall.sh&lt;/pre&gt;
&lt;p&gt;Maintenant vous pouvez l'exécuter avec les droits administrateur après l'installation du système comme ceci&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;sudo ./postinstall.sh&lt;/pre&gt;
&lt;p&gt;Votre mot de passe vous sera demandé. Le script vérifie s'il possède les droits nécessaires. Une confirmation est demandée avant de lancer l'installation des paquets.&lt;/p&gt;
&lt;p&gt;Vous pouvez également faciliter l'&lt;a href=&quot;http://blog.hikoweb.net/index.php?post/2009/09/06/Ubuntu-sur-votre-cl%C3%A9-USB-en-quelques-clics&quot; hreflang=&quot;fr&quot; title=&quot;Ubuntu sur votre clé USB en quelques clics&quot;&gt;installation d'Ubuntu en utilisant une clé USB&lt;/a&gt; et conserver vos données et paramètres utilisateur en &lt;a href=&quot;http://blog.hikoweb.net/index.php?post/2009/10/28/Partitionnement&quot; hreflang=&quot;fr&quot; title=&quot;Partitionnement&quot;&gt;partitionnant votre disque dur&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mise à jour du 29/04/2011 :&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;J'ai remplacé la version 3.2 de VirtualBox par la 4.0.&lt;/li&gt;
&lt;li&gt;J'ai ajouté une version anglaise de ce script.&lt;br /&gt;
&lt;a href=&quot;http://blog.hikoweb.net/public/Scripts/postinstall-en.sh&quot; hreflang=&quot;en&quot; title=&quot;My script installation package (version 2)&quot;&gt;Download this script installation package in English&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Mise à jour du 11/05/2011 :&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Correction du script après expérimentation.&lt;/li&gt;
&lt;/ul&gt;</content:encoded>
	<dc:date>2011-04-24T11:11:00+00:00</dc:date>
</item>

</rdf:RDF>
