<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>ascendances &#187; Debian</title>
	<atom:link href="http://ascendances.wordpress.com/category/debian/feed/" rel="self" type="application/rss+xml" />
	<link>http://ascendances.wordpress.com</link>
	<description></description>
	<lastBuildDate>Sat, 11 May 2013 15:02:01 +0000</lastBuildDate>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='ascendances.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>ascendances &#187; Debian</title>
		<link>http://ascendances.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://ascendances.wordpress.com/osd.xml" title="ascendances" />
	<atom:link rel='hub' href='http://ascendances.wordpress.com/?pushpress=hub'/>
		<item>
		<title>É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>
		<comments>http://ascendances.wordpress.com/2013/05/02/evolution-du-nombre-de-messages-sur-debian-l10n-fr-et-debian-users-fr-avec-pychart/#comments</comments>
		<pubDate>Thu, 02 May 2013 08:34:34 +0000</pubDate>
		<dc:creator>ascendances</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[okiwi]]></category>
		<category><![CDATA[yaal]]></category>

		<guid isPermaLink="false">http://ascendances.wordpress.com/?p=1111</guid>
		<description><![CDATA[Pychart 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). Debian utilise massivement des listes de diffusion pour la collaboration de ses membres. Parmi les nombreuses listes existantes, trois sont francophones : debian-users-fr, dédiée aux questions des utilisateurs ; debian-l10n-fr, [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ascendances.wordpress.com&#038;blog=24442983&#038;post=1111&#038;subd=ascendances&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://home.gna.org/pychart/" title="Site web de pychart">Pychart</a> 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).</p>
<p>Debian utilise massivement des listes de diffusion pour la collaboration de ses membres. Parmi les nombreuses listes existantes, trois sont francophones :</p>
<ul>
<li>debian-users-fr, dédiée aux questions des utilisateurs ;</li>
<li>debian-l10n-fr, dédiée aux traductions en français ;</li>
<li>debian-news-french, dédiée aux communiqués officiels. Elle est exclue du graphique car elle ne représente pas vraiment l&rsquo;activité des listes de diffusion.</li>
</ul>
<p>Pychart est utilisé pour créer un graphique montrant l&rsquo;évolution du volume de messages postés sur ces deux listes pendant une année glissante (soit d&rsquo;avril 2012 à avril 2013).</p>
<h3>Le graphique</h3>
<p>Le graphique représente le nombre de messages électroniques envoyés sur les deux listes par jour.</p>
<p><a href="http://ascendances.files.wordpress.com/2013/05/volume1.png"><img src="http://ascendances.files.wordpress.com/2013/05/volume1.png?w=300&#038;h=159" alt="Volume des messages sur les listes de diffusion Debian francophones" width="300" height="159" class="aligncenter size-medium wp-image-1147" /></a></p>
<p>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.</p>
<h3>Réalisation</h3>
<p>Le code Python est fourni à la fin de l&rsquo;article. Pychart s&rsquo;appuie sur de nombreuses inventions anciennes mais solidement éprouvées :</p>
<h4>Invention de la poubelle (1884)</h4>
<p>Toute la <a href="http://home.gna.org/pychart/doc/index.html" title="documentation de Pychart">documentation</a> fait des imports globaux (<code>from pychart import *</code>), comme beaucoup d&rsquo;exemples disponibles sur le web. Pour éviter de polluer l&rsquo;espace de nom, il suffit d&rsquo;importer les différents sous-modules de manière classique (<code>import pychart.sousmodule</code>). Je n&rsquo;ai pas eu besoin d&rsquo;importer certains sous-modules bien qu&rsquo;ils soient utilisés dans le script.</p>
<h4>Création de postscript (1982)</h4>
<p>Plusieurs formats de sortie sont disponibles (ps, pdf, png et svg). Par défaut, le fichier sera en PostScript.<br />
Pour le changer vers le format png :</p>
<pre class="brush: python; title: ; notranslate">
pychart.theme.output_format = &quot;png&quot;
</pre>
<p>Pour avoir une sortie en png, ghostscript doit être installé sur le système. PIL n&rsquo;est pas nécessaire.</p>
<h4>Invention de la télévision couleur (1938)</h4>
<p>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 :</p>
<pre class="brush: python; title: ; notranslate">
pychart.theme.use_color = True
</pre>
<h4>Invention de l&rsquo;écriture de travers (-3400)</h4>
<p>Il est possible d&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&rsquo;angle d&rsquo;orientation (« /a » pour définir que l&rsquo;on modifie l&rsquo;angle, « -20 » pour baisser de 20 degrés par rapport à l&rsquo;horizontale dans l&rsquo;exemple ci-dessous) :</p>
<pre class="brush: python; title: ; notranslate">
pychart.axis.X(label=&quot;Date&quot;, format=&quot;/a-20/hL%s&quot;)
</pre>
<p>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&rsquo;on souhaite l&rsquo;afficher (pour une date par exemple).</p>
<h4>Invention du dessin (Paléolithique)</h4>
<pre class="brush: python; title: ; notranslate">
pychart.line_plot.T(label=u&quot;debian-user-french&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
                    )
</pre>
<h4>Invention du papier (IIième siècle avant JC)</h4>
<p>La méthode draw() permet d&rsquo;afficher les données sur la sortie standard. Il suffit simplement de la rediriger vers un fichier grâce au shell :</p>
<pre class="brush: bash; title: ; notranslate">
$ python volume.py  &gt; volume.png
</pre>
<h3>Code source et références</h3>
<p>Le code qui a permis de créer le graphique :</p>
<pre class="brush: python; title: ; notranslate">
# -*- coding: utf-8 -*-

import pychart.area
import pychart.line_plot
import pychart.theme


pychart.theme.output_format = &quot;png&quot;
pychart.theme.use_color = True
pychart.theme.default_font_size = 14
pychart.theme.title = &quot;14&quot;


stats = ((&quot;04//2012&quot;, 12.27, 14.43),
        (&quot;05//2012&quot;, 10.71, 14.42),
        (&quot;06//2012&quot;, 11.77, 13.10),
        (&quot;07//2012&quot;, 10.19, 8.55),
        (&quot;08//2012&quot;, 11.65, 14.68),
        (&quot;09//2012&quot;, 13.00, 18.33),
        (&quot;10//2012&quot;, 10.32, 15.06),
        (&quot;11//2012&quot;, 6.87, 14.90),
        (&quot;12//2012&quot;, 5.48, 10.48),
        (&quot;01//2013&quot;, 5.29, 20.58),
        (&quot;02//2013&quot;, 10.25, 22.39),
        (&quot;03//2013&quot;, 9.74, 24.00),
        (&quot;04//2013&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=&quot;Date&quot;, format=&quot;/a-20/hL%s&quot;),
            y_axis=pychart.axis.Y(label=&quot;Nombre de messages par jour&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&quot;debian-l10n-french&quot;, data=stats, line_style=_red_line)
_user_plot = pychart.line_plot.T(label=u&quot;debian-user-french&quot;, data=stats, ycol=2, line_style=_blue_line)
_area.add_plot(_l10n_plot, _user_plot)

_area.draw()
</pre>
<p>Les moyennes journalières ont été calculées préalablement. Elles sont exclues du code source pour ne pas l&rsquo;alourdir inutilement. Voici les données brutes qui ont servi aux calculs des moyennes :<br />
<code>date	debian-l10n-french	debian-user-french	nbre_jours<br />
2012/04	368	433	30<br />
2012/05	332	447	31<br />
2012/06	353	393	30<br />
2012/07	316	265	31<br />
2012/08	361	455	31<br />
2012/09	390	550	30<br />
2012/10	320	467	31<br />
2012/11	206	447	30<br />
2012/12	170	325	31<br />
2013/01	164	638	31<br />
2013/02	287	627	28<br />
2013/03	302	744	31<br />
2013/04	190	594	30</code></p>
<p>Les données ont été récupérées à partir des versions publiques des archives des listes de traductions.</p>
<ul>
<li><a href="http://lists.debian.org/debian-l10n-french/" rel="nofollow">http://lists.debian.org/debian-l10n-french/</a></li>
<li><a href="http://lists.debian.org/debian-user-french/" rel="nofollow">http://lists.debian.org/debian-user-french/</a></li>
</ul>
<p>La documentation de pychart est disponible à <a href="http://home.gna.org/pychart/doc/pychart.html" title="documentation de Pychart">http://home.gna.org/pychart/doc/pychart.html</a> ou dans le paquet python-pychart-doc.</p>
<p>Enfin, <a href="http://matplotlib.org/" title="Site web de matplotlib">Matplotlib</a> répond au même besoin et semble être un projet plus vivant.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ascendances.wordpress.com/1111/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ascendances.wordpress.com/1111/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ascendances.wordpress.com&#038;blog=24442983&#038;post=1111&#038;subd=ascendances&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ascendances.wordpress.com/2013/05/02/evolution-du-nombre-de-messages-sur-debian-l10n-fr-et-debian-users-fr-avec-pychart/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/bcc6840b48d2ee3ea608e58356fa7d47?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ascendances</media:title>
		</media:content>

		<media:content url="http://ascendances.files.wordpress.com/2013/05/volume1.png?w=300" medium="image">
			<media:title type="html">Volume des messages sur les listes de diffusion Debian francophones</media:title>
		</media:content>
	</item>
		<item>
		<title>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>
		<comments>http://ascendances.wordpress.com/2013/01/12/determiner-quelle-est-la-meilleure-distribution-grace-a-python-et-pil/#comments</comments>
		<pubDate>Sat, 12 Jan 2013 09:39:02 +0000</pubDate>
		<dc:creator>ascendances</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[yaal]]></category>

		<guid isPermaLink="false">http://ascendances.wordpress.com/?p=930</guid>
		<description><![CDATA[N&#8217;avez-vous jamais discuté des mérites de telle ou telle distribution Linux (ou BSD) avec d&#8217;autres personnes (chacun essayant de démontrer que celle qu&#8217;il utilise au quotidien est la meilleure) ? Grâce à cet article, vous n&#8217;aurez toujours pas La réponse mais vous aurez une réponse indiscutable : il s&#8217;agit de la jouer aux cartes. Les cartes sont [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ascendances.wordpress.com&#038;blog=24442983&#038;post=930&#038;subd=ascendances&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>N&rsquo;avez-vous jamais discuté des mérites de telle ou telle distribution Linux (ou BSD) avec d&rsquo;autres personnes (chacun essayant de démontrer que celle qu&rsquo;il utilise au quotidien est la meilleure) ? Grâce à cet article, vous n&rsquo;aurez toujours pas La réponse mais vous aurez une réponse indiscutable : il s&rsquo;agit de la jouer aux cartes. Les cartes sont créées avec <code>Python Imaging Library</code>, une bibliothèque Python de manipulation d&rsquo;image. L&rsquo;article explique la façon de les réaliser.</p>
<p><img src="http://ascendances.files.wordpress.com/2013/01/debian.png?w=497" alt="Carte de jeu pour Debian"   class="aligncenter size-full wp-image-937" /></p>
<p>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 (<a href="http://en.wikipedia.org/wiki/Ace_Trumps" title="Page wikipedia anglophone sur le jeu historique">Ace_Trumps</a>, Super Top Ass). L&rsquo;ensemble des 26 cartes créées est visible <a href="http://stephane.yaal.fr/cards/" title="Voir les cartes">ici</a>.</p>
<p>L&rsquo;objectif de l&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&rsquo;est pourquoi, par exemple, les calculs de dimensionnement ne seront pas expliqués.</p>
<h3>Prérequis : installer PIL (ou Pillow)</h3>
<p>Deux possibilités :</p>
<ul>
<li>utiliser le système de paquet de votre distribution (python-imaging pour Debian) ;</li>
<li>utiliser Pypi : PIL n&rsquo;est pas disponible, il faut installer <a href="http://pypi.python.org/pypi/Pillow" title="documentation de Pillow sur PyPi">Pillow</a>. Cela ne change pas la façon d&rsquo;utiliser la bibliothèque :
<pre class="brush: python; title: ; notranslate">
from PIL import Image, ImageDraw, ImageFont
</pre>
</li>
</ul>
<p><code>Image</code> sert à instancier une image, <code>ImageDraw</code> à la modifier, <code>ImageFont</code> à choisir une police de caractère.</p>
<h3>Créer une carte</h3>
<p>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 :</p>
<pre class="brush: python; title: ; notranslate">
def draw_card(distrib):
    img = Image.open(BACKGROUND_PATH)
    #ajout des textes, images, etc.
    img.save(distrib[&quot;img_name&quot;] + &quot;.png&quot;)
</pre>
<p>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.<br />
Parmi les éléments remarquables :</p>
<h4>Textes dans un cartouche</h4>
<p>Le titre et les caractéristiques des distributions sont faits de la même manière. Il n&rsquo;existe pas d&rsquo;effet avec PIL pour dessiner automatiquement une bordure. Elle est réalisée en plaçant deux rectangles l&rsquo;un sur l&rsquo;autre, celui de dessous étant plus large et haut. </p>
<p><img src="http://ascendances.files.wordpress.com/2013/01/carte_montage_titre.png?w=497" alt="Montage du titre"  class="aligncenter size-full wp-image-953" /></p>
<pre class="brush: python; title: ; notranslate">
def draw_title(img, title):
    &quot;&quot;&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 (&quot;Distribution&quot;)
    &quot;&quot;&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):
    &quot;&quot;&quot;pour dessiner les deux rectangles&quot;&quot;&quot;
    draw.rectangle(((MARGIN_LEFT, upper_height), (CARD_WIDTH - MARGIN_RIGHT, lower_height)),
                   fill=&quot;#8e6f32&quot;)
    BORDER = 5
    draw.rectangle(((MARGIN_LEFT + BORDER, upper_height + BORDER), (CARD_WIDTH - MARGIN_RIGHT - BORDER, lower_height - BORDER)),
                   fill=&quot;#e9b654&quot;)
</pre>
<p><code>draw.textsize()</code> 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 <code>center()</code>, omise dans l&rsquo;extrait ci-dessus) pour centrer le texte.</p>
<h4>Le logo de la distribution</h4>
<p><img src="http://ascendances.files.wordpress.com/2013/01/carte_montage_image.png?w=497" alt="Montage du logo"  class="aligncenter size-full wp-image-954" /></p>
<p>L&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&rsquo;image (<code>y</code>) car les deux images n&rsquo;ont pas la même taille.</p>
<pre class="brush: python; title: ; notranslate">
def draw_logo(img, filename):
    &quot;&quot;&quot;on colle supernova
       puis le fichier correspondant au parametre filename&quot;&quot;&quot;
    image_path = SRC_IMGS_DIR + &quot;supernova.png&quot;
    nova = Image.open(image_path)
    nova_width, nova_height = nova.size
    x = center(nova_width)
    y = 60
    img.paste(nova.convert(&quot;RGBA&quot;),
              (x, y, x + nova_width, y + nova_height),
              mask=nova.convert('RGBA'))
    image_path = SRC_IMGS_DIR + filename + &quot;.png&quot;
    distro = Image.open(image_path)
    distro_width, distro_height = distro.size
    x = center(distro_width)
    y = 90
    img.paste(distro.convert(&quot;RGBA&quot;),
              (x, y, x + distro_width, y + distro_height),
              mask=distro.convert('RGBA'))
</pre>
<p>L&rsquo;exercice de factorisation de cette fonction est laissé aux lecteurs qui s&rsquo;ennuient et qui ne sont pas partis faire autre chose (ce que je ne comprend pas d&rsquo;ailleurs).</p>
<h4>Le numéro de la carte</h4>
<p>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&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&rsquo;image finale de la même manière que précédemment :</p>
<pre class="brush: python; title: ; notranslate">
def draw_card_index(img, number):
    &quot;&quot;&quot;pour dessiner 'number' de biais&quot;&quot;&quot;
    HEIGHT = WIDTH = 19
    num_img = Image.new(&quot;RGBA&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=&quot;brown&quot;)
    n = num_img.rotate(-45)
    X, Y = 7, 378
    img.paste(n, (X, Y, X + WIDTH, Y + HEIGHT), mask=n)
</pre>
<p>À 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 <code>expand</code> peut être ajouté à <code>rotate()</code> pour éviter la perte, mais l&rsquo;image est automatiquement agrandie.</p>
<h3>Code source et ressources</h3>
<p>La <a href="http://www.pythonware.com/library/pil/handbook/index.htm" title="Documentation de PIL sur le site de son éditeur">documentation de PIL</a> est précieuse.<br />
Un <a href="http://nadiana.com/pil-tutorial-basic-advanced-drawing" title="un des nombreux tutoriels PIL existant sur le web (en anglais)">tutoriel</a> dont certains effets ont été réutilisés pour les cartes.</p>
<p>Les données sur les cartes proviennent principalement de <a href="http://distrowatch.com/" title="Put the fun back into computing. Use Linux, BSD.">Distrowatch</a>. 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&rsquo;elle n&rsquo;est basée sur aucune autre distribution. Si elle est suivie d&rsquo;une étoile, cela signifie qu&rsquo;elle est maintenant indépendante mais a été basée sur une autre distribution par le passé.</p>
<p>Le fond de carte et l&rsquo;effet supernova ont été réalisés avec The Gimp.</p>
<p>L&rsquo;archive contenant le code source du script au cas où quelqu&rsquo;un voudrait le réutiliser, ainsi que les logos et les cartes générées est <a href="http://stephane.yaal.fr/cards/cards.tar.xz" title="Archive cards.tar.xz">fournie</a> au format .tar.xz. Le code a été écrit dans un but de démo. Il est bien perfectible&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ascendances.wordpress.com/930/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ascendances.wordpress.com/930/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ascendances.wordpress.com&#038;blog=24442983&#038;post=930&#038;subd=ascendances&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ascendances.wordpress.com/2013/01/12/determiner-quelle-est-la-meilleure-distribution-grace-a-python-et-pil/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/bcc6840b48d2ee3ea608e58356fa7d47?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ascendances</media:title>
		</media:content>

		<media:content url="http://ascendances.files.wordpress.com/2013/01/debian.png" medium="image">
			<media:title type="html">Carte de jeu pour Debian</media:title>
		</media:content>

		<media:content url="http://ascendances.files.wordpress.com/2013/01/carte_montage_titre.png" medium="image">
			<media:title type="html">Montage du titre</media:title>
		</media:content>

		<media:content url="http://ascendances.files.wordpress.com/2013/01/carte_montage_image.png" medium="image">
			<media:title type="html">Montage du logo</media:title>
		</media:content>
	</item>
		<item>
		<title>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>
		<comments>http://ascendances.wordpress.com/2012/10/25/processus-de-traduction-au-sein-de-debian-l10n-fr/#comments</comments>
		<pubDate>Thu, 25 Oct 2012 20:56:52 +0000</pubDate>
		<dc:creator>ascendances</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[okiwi]]></category>
		<category><![CDATA[yaal]]></category>

		<guid isPermaLink="false">http://ascendances.wordpress.com/?p=861</guid>
		<description><![CDATA[L&#8217;équipe debian-l0n-fr est l&#8217;équipe de francisation des fichiers spécifiques à Debian. Il en existe pour de nombreuses autres langues (de l&#8217;afrikaan au zoulou en passant par le népalais), certaines étant bien plus complètes que d&#8217;autres. Les équipes de traduction Debian ne s&#8217;occupent pas des projets qui ont déjà leur propre équipe de traduction comme GNOME, [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ascendances.wordpress.com&#038;blog=24442983&#038;post=861&#038;subd=ascendances&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>L&rsquo;équipe <a href="http://www.debian.org/international/french/" title="Projet de traduction francophone Debian">debian-l0n-fr</a> est l&rsquo;équipe de francisation des fichiers spécifiques à Debian. Il en existe pour de <a href="http://www.debian.org/international/l10n/po/" title="Langues utilisées dans les fichiers PO dans Debian">nombreuses autres langues</a> (de l&rsquo;afrikaan au zoulou en passant par le népalais), certaines étant bien plus complètes que d&rsquo;autres.</p>
<p>Les équipes de traduction Debian ne s&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 (<code>apt-get</code>, <code>aptitude</code>, etc.), la documentation de ces outils, le site web, <a href="http://www.debian.org/News/weekly/" title="Nouvelles du projet Debian">les nouvelles du projet</a>, …</p>
<p>Chacune d&rsquo;entre elle est libre de s&rsquo;organiser en interne comme elle l&rsquo;entend. Pour l&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&rsquo;objectif est de chasser les dernières erreurs typographiques, d&rsquo;alléger les constructions de phrase, d&rsquo;éliminer les contre-sens et faux-amis. En réalité, il n&rsquo;y a souvent pas grand chose à modifier mais cela permet d&rsquo;obtenir un résultat mieux fini.</p>
<h3>Les étapes de traduction et relecture</h3>
<p>La succession d&rsquo;étapes est représentable par un graphe orienté non cyclique :</p>
<p><a href="http://ascendances.files.wordpress.com/2012/10/process_debian_l10n_fr1.png"><img src="http://ascendances.files.wordpress.com/2012/10/process_debian_l10n_fr1.png?w=497" alt="" title="Étapes d&#039;une traduction"   class="aligncenter size-full wp-image-881" /></a></p>
<p>Les nœuds d&rsquo;entrée sont le signalement d&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&rsquo;état terminal choisi est fonction du type de fichier traduit.</p>
<p>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&rsquo;éviter des retours en arrière (par exemple si le passage de rfr à lcfc s&rsquo;est fait trop vite). C&rsquo;est cette stratégie qui permet d&rsquo;éviter l&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&rsquo;est moins crucial).</p>
<h3>Article [done]</h3>
<p>Le graphe a été réalisé avec l&rsquo;outil <code>dot</code>, disponible dans le paquet graphviz (version 2.26.3).</p>
<p>La commande utilisée :</p>
<pre class="brush: plain; title: ; notranslate">$ dot -Tpng process_debian_l10n_fr.gv -o process_debian_l10n_fr.png</pre>
<p>Le script <code>process_debian_l10n_fr.gv</code> :</p>
<pre class="brush: plain; title: ; notranslate">
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];
        &quot;rfr…&quot; [color=antiquewhite, style=filled];
        &quot;lcfc2&quot; [color=antiquewhite, style=filled];
        &quot;lcfc…&quot; [color=antiquewhite, style=filled];

        taf -&gt; itt;
        maj -&gt; itt;
        itt -&gt; rfr;
        rfr -&gt; lcfc;
        rfr -&gt; rfr2;
        rfr2 -&gt; &quot;rfr…&quot;;
        rfr2 -&gt; lcfc;
        &quot;rfr…&quot; -&gt; lcfc;
        lcfc -&gt; done;
        lcfc -&gt; lcfc2;
        lcfc2 -&gt; bts;
        lcfc2 -&gt; done;
        lcfc2 -&gt; &quot;lcfc…&quot;;
        &quot;lcfc…&quot; -&gt; done;
        lcfc -&gt; bts;
        &quot;lcfc…&quot; -&gt; bts;
}
</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ascendances.wordpress.com/861/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ascendances.wordpress.com/861/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ascendances.wordpress.com&#038;blog=24442983&#038;post=861&#038;subd=ascendances&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ascendances.wordpress.com/2012/10/25/processus-de-traduction-au-sein-de-debian-l10n-fr/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/bcc6840b48d2ee3ea608e58356fa7d47?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ascendances</media:title>
		</media:content>

		<media:content url="http://ascendances.files.wordpress.com/2012/10/process_debian_l10n_fr1.png" medium="image">
			<media:title type="html">Étapes d&#039;une traduction</media:title>
		</media:content>
	</item>
		<item>
		<title>États des paquets Debian chez les utilisateurs (selon PopCon) &#8211; 2</title>
		<link>http://ascendances.wordpress.com/2012/08/07/etats-des-paquets-debian-chez-les-utilisateurs-selon-popcon-2/</link>
		<comments>http://ascendances.wordpress.com/2012/08/07/etats-des-paquets-debian-chez-les-utilisateurs-selon-popcon-2/#comments</comments>
		<pubDate>Tue, 07 Aug 2012 12:20:44 +0000</pubDate>
		<dc:creator>ascendances</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[okiwi]]></category>
		<category><![CDATA[yaal]]></category>

		<guid isPermaLink="false">http://ascendances.wordpress.com/?p=777</guid>
		<description><![CDATA[Lors du précédent article, nous avions conclu que les paquets étaient surtout dans la catégorie « pas utilisé récemment ». Cependant, l&#8217;analyse ne prenait pas en compte deux cas : les paquets non Debian les bibliothèques Éliminer ces incertitudes va-t-il changer quelque chose au résultat ? C&#8217;est ce que vous saurez à la fin de cet article dont les [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ascendances.wordpress.com&#038;blog=24442983&#038;post=777&#038;subd=ascendances&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Lors du <a href="http://ascendances.wordpress.com/2012/07/09/etats-des-paquets-debian-chez-les-utilisateurs-selon-popcon/" title="premier article à propos des statistiques d'utilisation des paquets avec PopCon">précédent article</a>, nous avions conclu que les paquets étaient surtout dans la catégorie « pas utilisé récemment ». Cependant, l&rsquo;analyse ne prenait pas en compte deux cas :</p>
<ul>
<li>les paquets non Debian</li>
<li>les bibliothèques</li>
</ul>
<p>Éliminer ces incertitudes va-t-il changer quelque chose au résultat ? C&rsquo;est ce que vous saurez à la fin de cet article dont les rebondissements rendraient jaloux un kangourou sous amphétamines ! (Ou pas.)</p>
<h3>Sans paquet non officiel</h3>
<p>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&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&rsquo;il y a plein de câbles, ça impressionne toujours.</p>
<p>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&rsquo;ils n&rsquo;existent pas dans les dépôts Debian (<code>main</code>, <code>contrib</code>, <code>non-free</code>). Les statistiques incluent donc les paquets que les utilisateurs ont installés ou développés pour leur propre usage. L&rsquo;idée sous-jacente est que cela sert aussi d&rsquo;indice pour inclure de nouveaux paquets qui seraient nécessaires au plus grand nombre. Ce n&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° <a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=681721" title="rapport de bogue popcon">681721</a>). </p>
<p>Si l&rsquo;on filtre de nouveau les données pour se cantonner uniquement aux paquets officiels, on obtient un résultat globalement équivalent :<br />
<a href="http://ascendances.files.wordpress.com/2012/08/popcon_pkgs_deb_main_only1.png"><img src="http://ascendances.files.wordpress.com/2012/08/popcon_pkgs_deb_main_only1.png?w=497&#038;h=426" alt="" title="Statistiques des paquets Debian selon PopCon pour testing/main" width="497" height="426" class="aligncenter size-full wp-image-795" /></a><br />
Le nuage de points a la même forme, la moyenne reste comparable bien qu&rsquo;il y ait un transvasement de l&rsquo;état « peu utilisé » vers l&rsquo;état « récemment installé » de 5 points.</p>
<p>La liste des paquets sélectionnés est celle fournie dans l&rsquo;archive des binaires pour l&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).</p>
<h3>Sans les bibliothèques</h3>
<p>PopCon détermine la date d&rsquo;utilisation du logiciel avec la date d&rsquo;accès sur le disque (l&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 <code>lib32bz2-dev</code> ou <code>libc6</code>), nous obtenons un nouveau graphique :<br />
<a href="http://ascendances.files.wordpress.com/2012/08/popcon_pkgs_deb_main_only_without_libs1.png"><img src="http://ascendances.files.wordpress.com/2012/08/popcon_pkgs_deb_main_only_without_libs1.png?w=497&#038;h=426" alt="" title="Statistiques des paquets Debian selon PopCon pour testing/main" width="497" height="426" class="aligncenter size-full wp-image-808" /></a></p>
<p>La suppression des bibliothèque ne change rien en comparaison avec le filtre précédent. C&rsquo;est à se demander pourquoi je pers mon temps à écrire cet article et pourquoi vous perdez votre temps à le lire !</p>
<p>En moyenne, seulement 20 % des paquets sont donc considérés comme utilisé fréquemment. </p>
<h3>Sources</h3>
<p>La moulinette qui filtre les données a été écrite en Python :</p>
<pre class="brush: python; title: ; notranslate">
#! /usr/bin/env python

POPCON_FILE = &quot;filtered_popcon.csv&quot;
MAIN_PACKAGES_FILE = &quot;Packages&quot;
POPCON_FOR_MAIN_PACKAGES_FILE = &quot;filtered_popcon_for_main_without_libs.csv&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(&quot;Package: &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(&quot;,&quot;)[0]
    return package_name in main_packages

def is_lib(line):
    return line.startswith(&quot;lib&quot;)

def write_filtered_popcon(stats):
    with open(POPCON_FOR_MAIN_PACKAGES_FILE, &quot;w&quot;) as f:
        for stat in stats:
            f.write(stat)

main_packages = get_main_packages()
write_filtered_popcon(get_popcon_stats())
</pre>
<p>Le code produisant les graphiques est le même que dans l&rsquo;article précédent, sauf pour les noms de fichier et la chaîne de caractère &quot;Peu utilisé (« old »)&quot; qui est suffixé par des espaces supplémentaires pour éviter de chevaucher la moyenne. L&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&rsquo;incluant pas.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ascendances.wordpress.com/777/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ascendances.wordpress.com/777/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ascendances.wordpress.com&#038;blog=24442983&#038;post=777&#038;subd=ascendances&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ascendances.wordpress.com/2012/08/07/etats-des-paquets-debian-chez-les-utilisateurs-selon-popcon-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/bcc6840b48d2ee3ea608e58356fa7d47?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ascendances</media:title>
		</media:content>

		<media:content url="http://ascendances.files.wordpress.com/2012/08/popcon_pkgs_deb_main_only1.png" medium="image">
			<media:title type="html">Statistiques des paquets Debian selon PopCon pour testing/main</media:title>
		</media:content>

		<media:content url="http://ascendances.files.wordpress.com/2012/08/popcon_pkgs_deb_main_only_without_libs1.png" medium="image">
			<media:title type="html">Statistiques des paquets Debian selon PopCon pour testing/main</media:title>
		</media:content>
	</item>
		<item>
		<title>É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>
		<comments>http://ascendances.wordpress.com/2012/07/09/etats-des-paquets-debian-chez-les-utilisateurs-selon-popcon/#comments</comments>
		<pubDate>Mon, 09 Jul 2012 12:16:11 +0000</pubDate>
		<dc:creator>ascendances</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[okiwi]]></category>
		<category><![CDATA[yaal]]></category>

		<guid isPermaLink="false">http://ascendances.wordpress.com/?p=689</guid>
		<description><![CDATA[PopCon (pour Popularity contest) permet d&#8217;obtenir des statistiques d&#8217;utilisation de paquets Debian. La soumission des statistiques est facultative. Si le participant accepte l&#8217;envoi des statistiques, chaque semaine, une notification anonyme sera automatiquement envoyée vers Debian contenant les statistiques d&#8217;utilisation des paquets. L&#8217;état agrégé est visible sur popcon.debian.org et mis à jour quotidiennement. L&#8217;évolution globale de [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ascendances.wordpress.com&#038;blog=24442983&#038;post=689&#038;subd=ascendances&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>PopCon (pour <em>Popularity contest</em>) permet d&rsquo;obtenir des statistiques d&rsquo;utilisation de paquets Debian. La soumission des statistiques est facultative. Si le participant accepte l&rsquo;envoi des statistiques, chaque semaine, une notification anonyme sera automatiquement envoyée vers Debian contenant les statistiques d&rsquo;utilisation des paquets. L&rsquo;état agrégé est visible sur <a href="http://popcon.debian.org/" title="sous-domaine debian.org pour popcon">popcon.debian.org</a> et mis à jour quotidiennement.</p>
<p>L&rsquo;évolution globale de l&rsquo;utilisation des paquets est visible sur une page dédiée (par exemple, <a href="http://qa.debian.org/popcon.php?package=flobopuyo" title="page PopCon de Flobopuyo">la page de Flobopuyo</a>).</p>
<p>Si un paquet est installé sur une machine, alors il sera considéré dans l&rsquo;un des quatre états suivants :</p>
<ol>
<li>« Vote » : paquet récemment utilisé</li>
<li>« Old » : paquet qui n&rsquo;a pas été utilisé depuis longtemps</li>
<li>« Recent » : paquet récemment mis à jour</li>
<li>« No Files » : informations insuffisantes pour statuer sur son utilisation</li>
</ol>
<p>La somme des 4 états envoyés par les participants fournit le nombre de machines sur lequel ce paquet est installé. S&rsquo;il n&rsquo;est pas installé, il n&rsquo;est pas comptabilisé.<br />
Sur l&rsquo;échantillon des paquets que j&rsquo;ai consulté, les trois premiers états sont largement représentés. Le quatrième est peu courant, probablement car c&rsquo;est quasiment un cas pathologique (les dates d&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&rsquo;un paquet pour l&rsquo;ensemble des participants avec un graphique triangulaire.</p>
<h3>Résultat sur un échantillon (15 paquets)</h3>
<p>Les paquets affichés dans le graphique :</p>
<ul>
<li>plusieurs logiciels couramment installés et utilisés (directement ou à l&rsquo;insu de l&rsquo;utilisateur) : <code>bash</code>, <code>dash</code>, <code>initramfs-tools</code> et <code>anacron</code> ;</li>
<li>des navigateurs web  : <code>iceweasel</code> (un renommage de Firefox), <code>chromium-browser</code> (la version libre de Google Chrome) et <code>epiphany</code> (le navigateur fourni par Gnome) ;</li>
<li>des serveurs web : <code>aolserver4</code> (les statistiques montrent qu&rsquo;il est installé sur au moins 47 machines !), <code>apache2</code>, <code>lighttpd</code> et <code>nginx</code> ;</li>
<li>deux logiciels de bureautique : <code>libre-office</code> et <code>koffice</code> ;</li>
<li>deux jeux équivalents : <code>amoebax</code> (<a href="http://screenshots.debian.net/package/amoebax" title="Capture d'écran d'Amoebax">capture d&rsquo;écran</a>) et <code>flobopuyo</code> (<a href="http://screenshots.debian.net/package/flobopuyo" title="Capture d'écran de Flobopuyo">capture d&rsquo;écran</a>). À titre indicatif, Amoebax est plus installé qu&rsquo;Aolserver…</li>
</ul>
<p><a href="http://ascendances.files.wordpress.com/2012/07/popcon_pkgs_deb.png"><img src="http://ascendances.files.wordpress.com/2012/07/popcon_pkgs_deb.png?w=497&#038;h=426" alt="" title="Quelques paquets selon PopCon" width="497" height="426" class="aligncenter size-full wp-image-698" /></a></p>
<h3>Limites</h3>
<h4>Ignorer l&rsquo;état <em>No Files</em></h4>
<p>Le fait de négliger le quatrième état n&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 : <code>libreoffice-common</code> et  <code>nginx</code>.</p>
<h5>Proportion de l&rsquo;état <em>No Files</em></h5>
<ul>
<li>0 % pour <code>amoebax</code>, <code>flobopuyo</code> et <code>aolserver4-daemon</code></li>
<li>0,025 % pour <code>iceweasel</code></li>
<li>0,026 % pour <code>initramfr-tools</code></li>
<li>0,027 % pour <code>anacron</code> et <code>bash</code></li>
<li>0,031 % pour <code>dash</code></li>
<li>0,037 % pour <code>apache2.2-bin</code></li>
<li>0,043 % pour <code>lighttpd</code></li>
<li>0,126 % pour <code>koffice-libs</code></li>
<li>0,149 % pour <code>epiphany</code></li>
<li>0,696 % pour <code>chromium-browser</code></li>
<li>4,90 % pour <code>libreoffice-common</code></li>
<li>38,25 % pour <code>nginx</code></li>
</ul>
<p>Vu l&rsquo;écart, je me demande s&rsquo;il n&rsquo;y a pas un problème avec les fichiers surveillés par PopCon pour nginx.</p>
<h4>Cas des logiciels séparés en plusieurs paquets</h4>
<p>Pour faciliter la maintenance, certains logiciels sont découpés en plusieurs paquets. Dans ce cas, le fait de choisir l&rsquo;un ou l&rsquo;autre de ces paquets pour le représenter modifie le résultat : par exemple <code>apache2.2-common</code> (absent du graphique) se situe au même endroit que <code>bash</code> et <code>anacron</code> alors qu&rsquo;<code>apache2.2-bin</code> est plus près d&rsquo;<code>anacron</code>. De même pour <code>nginx-common</code> (absent du graphique) qui est placé à côté d&rsquo;<code>iceweasel</code> alors <code>nginx</code> est situé en dessous d&rsquo;<code>initramfs-tools</code>.</p>
<p>Il est étonnant que l&rsquo;ensemble des paquets choisis se situent tous dans la partie basse du graphique. Cependant, l&rsquo;échantillon est-il vraiment représentatif ?</p>
<h3>Résultat sur l&rsquo;ensemble des paquets</h3>
<p>Debian fournit une archive avec les statistiques de l&rsquo;ensemble des paquets. Après son téléchargement, reformatage et suppression des lignes malformées, voici le graphique que l&rsquo;on peut obtenir :</p>
<a href="http://ascendances.files.wordpress.com/2012/07/all_popcon_pkgs_deb1.png"><img src="http://ascendances.files.wordpress.com/2012/07/all_popcon_pkgs_deb1.png?w=497&#038;h=426" alt="" title="Tous les paquets selon PopCon" width="497" height="426" class="size-full wp-image-733" /></a>
<p>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&rsquo;influence moyenne des trois facteurs considérés est ajouté.</p>
<p>L&rsquo;état « Recent » ne représente que 10 % des paquets. À mon avis, c&rsquo;est dû au fait que c&rsquo;est un état transitoire, les paquets étant considérés par la suite comme utilisé ou pas. La majorité d&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 ?</p>
<p>Dans mon cas personnel, en regardant la liste de ces paquets (visible grâce à <code>popularity-contest | grep '&lt;OLD&gt;'</code> en tant que superutilisateur), je constate la présence de logiciels (et de bibliothèques) : </p>
<ul>
<li>que je n&rsquo;utilise plus et dont j&rsquo;avais oublié l&rsquo;existence (<code>fontmatrix</code>) ;</li>
<li>que j&rsquo;utilise rarement mais que je ne veux pas désinstaller car ils peuvent me servir à l&rsquo;avenir (<code>gftp</code>, <code>traceroute</code>, …) ;</li>
<li>qui viennent automatiquement avec des meta-paquets mais que je n&rsquo;utilise pas (<code>gnome-power-manager</code>, <code>xserver-xorg-video-pleindepucesquinexistentpassurmacartemere</code>, …).</li>
</ul>
<h3>Sources</h3>
<p>Les informations concernant le fonctionnement de PopCon proviennent principalement du <a href="http://popcon.debian.org/README" title="le README de PopCon">README</a> et la <a href="http://popcon.debian.org/FAQ" title="la FAQ de PopCon">FAQ</a> fournie par les pages web de popcon elle-même (ou dans le répertoire <code>/usr/share/doc/popularity-contest/</code> si vous n&rsquo;avez pas d&rsquo;accès web actuellement).</p>
<p>Les graphiques ont été réalisés en <a href="http://www.r-project.org/" title="Site web du language R">R</a> (version 2.15.1 (2012-06-22) &#8212; &quot;Roasted Marshmallows&quot;, disponible dans le paquet r-base), grâce à une bibliothèque externe à R, nommée <code>ade4</code>.<br />
Il est nécessaire d&rsquo;installer cette bibliothèque sur le système car elle est absente avec les paquets R de base). Le mode d&rsquo;installation de la bibliothèque ressemble à celui de <code>pip</code> pour Python.<br />
La commande est <code>install.packages("ade4", dep=TRUE)</code>.</p>
<p>Voici les données utilisées pour le premier graphique :</p>
<p>Fichier <code>pkgs_deb.csv</code> :</p>
<blockquote><p>name,vote,old,recent,no_files<br />
epiphany,58,563,47,1<br />
iceweasel,32573,14605,12272,15<br />
chromium-browser,6188,3212,876,72<br />
anacron,52840,2723,4104,16<br />
bash,110628,6120,5826,33<br />
dash,92687,2388,3751,31<br />
initramfs-tools,52369,56181,12319,31<br />
amoebax,11,43,0,0<br />
flobopuyo,26,201,12,0<br />
aolserver4-daemon,30,15,2,0<br />
apache2.2-bin,53491,6032,7339,25<br />
lighttpd,1304,857,173,1<br />
nginx,814,809,109,1073<br />
koffice-libs,431,1122,36,2<br />
libreoffice-common,14696,740,4718,1039</p></blockquote>
<p>Commandes <code>R</code> :</p>
<blockquote><p>library(ade4)<br />
pkgs &lt;- read.csv(&quot;popcon_pkgs_deb.csv&quot;, header=TRUE)<br />
quantites &lt;- data.frame(pkgs$vote, pkgs$old, pkgs$recent)<br />
colnames(quantites) &lt;- c(&quot;Utilisé (« vote »)&quot;, &quot;Peu utilisé (« old »)&quot;, &quot;Mis à jour (« recent »)&quot;)<br />
png(file = &quot;popcon_pkgs_deb.png&quot;, width = 700, height = 600)<br />
triangle.plot(quantites, label=pkgs$name, clab=0.6, show.position=FALSE)<br />
dev.off()</p></blockquote>
<p>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 !)</p>
<blockquote><p>wget <a href="http://popcon.debian.org/all-popcon-results.txt.gz" rel="nofollow">http://popcon.debian.org/all-popcon-results.txt.gz</a><br />
tar xzvf all-popcon-results.txt.gz<br />
grep &quot;^Package: &quot; all-popcon-results.txt | sed -e &quot;s/ \+ /,/g&quot; | cut -d&quot; &quot; -f2  | grep -v &quot;,0,0,0,&quot; | grep &quot;.*,.*,.*,.*,.*&quot;  &gt;filtered_popcon.csv</p></blockquote>
<p>Commandes <code>R</code> :</p>
<blockquote><p>popcon &lt;- read.csv(&quot;filtered_popcon.csv&quot;, header=FALSE)<br />
quantites &lt;- data.frame(popcon$V2, popcon$V3, popcon$V4)<br />
colnames(quantites) &lt;- c(&quot;Utilisé (« vote »)&quot;, &quot;Peu utilisé (« old »)        &quot;, &quot;Mis à jour (« recent »)&quot;)<br />
png(file = &quot;all_popcon_pkgs_deb.png&quot;, width = 700, height = 600)<br />
triangle.plot(quantites, show.position=FALSE, addmean=TRUE, cpoint=0.1)<br />
dev.off()</p></blockquote>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ascendances.wordpress.com/689/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ascendances.wordpress.com/689/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ascendances.wordpress.com&#038;blog=24442983&#038;post=689&#038;subd=ascendances&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ascendances.wordpress.com/2012/07/09/etats-des-paquets-debian-chez-les-utilisateurs-selon-popcon/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/bcc6840b48d2ee3ea608e58356fa7d47?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ascendances</media:title>
		</media:content>

		<media:content url="http://ascendances.files.wordpress.com/2012/07/popcon_pkgs_deb.png" medium="image">
			<media:title type="html">Quelques paquets selon PopCon</media:title>
		</media:content>

		<media:content url="http://ascendances.files.wordpress.com/2012/07/all_popcon_pkgs_deb1.png" medium="image">
			<media:title type="html">Tous les paquets selon PopCon</media:title>
		</media:content>
	</item>
	</channel>
</rss>