<?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/"
	>

<channel>
	<title>Le libriste virulent</title>
	<atom:link href="http://blog.etenil.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.etenil.net</link>
	<description></description>
	<lastBuildDate>Sat, 14 Apr 2012 01:40:45 +0000</lastBuildDate>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Options d&#8217;extinctions dans Fedora 17</title>
		<link>http://blog.etenil.net/options-dextinctions-dans-fedora-17/</link>
		<comments>http://blog.etenil.net/options-dextinctions-dans-fedora-17/#comments</comments>
		<pubDate>Sat, 14 Apr 2012 01:40:45 +0000</pubDate>
		<dc:creator>etenil</dc:creator>
				<category><![CDATA[Libre]]></category>
		<category><![CDATA[fedora]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[tuto]]></category>

		<guid isPermaLink="false">http://blog.etenil.net/?p=224</guid>
		<description><![CDATA[Pour les plus curieux d&#8217;entre vous qui essayeront Fedora 17, sachez que les options d&#8217;extinctions dans XFCE seront grisées, et qu&#8217;elles ne feront rien dans GDM non plus. Ceci est dû à une dépendance manquante et peut facilement se corriger &#8230; <a href="http://blog.etenil.net/options-dextinctions-dans-fedora-17/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Pour les plus curieux d&#8217;entre vous qui essayeront Fedora 17, sachez que les options d&#8217;extinctions dans XFCE seront grisées, et qu&#8217;elles ne feront rien dans GDM non plus.</p>
<p>Ceci est dû à une dépendance manquante et peut facilement se corriger à la main. Pour cela, installez le paquet <em>ConsoleKit</em> avec la commande suivante:</p>
<pre>
# yum install ConsoleKit
</pre>
<p>Et le problème sera réglé!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.etenil.net/options-dextinctions-dans-fedora-17/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Un prompt pour bash avec Bazaar</title>
		<link>http://blog.etenil.net/un-prompt-pour-bash-avec-bazaar/</link>
		<comments>http://blog.etenil.net/un-prompt-pour-bash-avec-bazaar/#comments</comments>
		<pubDate>Sun, 08 Apr 2012 10:28:52 +0000</pubDate>
		<dc:creator>etenil</dc:creator>
				<category><![CDATA[Bazaar]]></category>
		<category><![CDATA[Libre]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[bazaar]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://blog.etenil.net/?p=217</guid>
		<description><![CDATA[J&#8217;ai vu de nombreux articles indiquant comment afficher les informations de git au sein de son prompt Bash, d&#8217;habitude en utilisant la fonction bash qui vient avec git: __git_ps1. Comme j&#8217;utilise un système de contrôle des versions au quotidien (Bazaar, &#8230; <a href="http://blog.etenil.net/un-prompt-pour-bash-avec-bazaar/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai vu de nombreux articles indiquant comment afficher les informations de git au sein de son prompt Bash, d&#8217;habitude en utilisant la fonction bash qui vient avec git: <em>__git_ps1</em>.</p>
<p>Comme j&#8217;utilise un système de contrôle des versions au quotidien (<a title="Bazaar" href="http://bazaar.canonical.com" target="_blank">Bazaar</a>, si vous ne connaissez pas, allez donc jeter un oeil), j&#8217;ai vite vu l&#8217;intérêt de la chose. Malheureusement, je n&#8217;ai pas trouvé d&#8217;équivalent de <em>__git_ps1</em> pour Bazaar, j&#8217;ai donc écrit ma propre fonction Bash. Elle n&#8217;est pas aussi généraliste, mais rend bien service tout de même.</p>
<p>Voici le bout de code pour la fonction elle-même:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="bash"><pre class="de1">bzr_info<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span class="re2">status</span>=<span class="sy0">`</span>bzr status <span class="nu0">2</span><span class="sy0">&gt;</span> <span class="sy0">/</span>dev<span class="sy0">/</span>null<span class="sy0">`</span>
    <span class="re2">revno</span>=<span class="sy0">`</span>bzr revno <span class="nu0">2</span><span class="sy0">&gt;</span> <span class="sy0">/</span>dev<span class="sy0">/</span>null<span class="sy0">`</span>
    <span class="re2">parent</span>=<span class="st0">&quot;&quot;</span>
    <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="st0">&quot;$1&quot;</span> == <span class="st0">&quot;showparent&quot;</span> <span class="br0">&#93;</span>
    <span class="kw1">then</span>
        <span class="re2">parent</span>=<span class="sy0">`</span>bzr info <span class="sy0">|</span> <span class="kw2">awk</span> <span class="st_h">'/parent/ {print $3}'</span><span class="sy0">`</span>
    <span class="kw1">fi</span>
    <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="st0">&quot;<span class="es2">$revno</span>&quot;</span> <span class="sy0">!</span>= <span class="st0">&quot;&quot;</span> <span class="br0">&#93;</span>
    <span class="kw1">then</span>
        <span class="kw3">echo</span> <span class="re5">-n</span> <span class="st0">&quot;(&quot;</span>
&nbsp;
        <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="st0">&quot;<span class="es2">$status</span>&quot;</span> <span class="sy0">!</span>= <span class="st0">&quot;&quot;</span> <span class="br0">&#93;</span>
        <span class="kw1">then</span>
            <span class="kw3">echo</span> <span class="re5">-n</span> <span class="st0">&quot;*&quot;</span>
        <span class="kw1">fi</span>
&nbsp;
        <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="st0">&quot;<span class="es2">$parent</span>&quot;</span> <span class="sy0">!</span>= <span class="st0">&quot;&quot;</span> <span class="br0">&#93;</span>
        <span class="kw1">then</span>
            <span class="kw3">echo</span> <span class="re5">-n</span> <span class="st0">&quot;<span class="es2">$parent</span>:&quot;</span>
        <span class="kw1">else</span>
            <span class="kw3">echo</span> <span class="re5">-n</span> <span class="st0">&quot;bzr:&quot;</span>
        <span class="kw1">fi</span>
&nbsp;
        <span class="kw3">echo</span> <span class="re5">-n</span> <span class="re1">$revno</span>
        <span class="kw3">echo</span> <span class="re5">-n</span> <span class="st0">&quot;)&quot;</span>
    <span class="kw1">fi</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p>Pour s&#8217;en servir, il suffit d&#8217;ajouter ce morceau de code dans votre prompt: <em>\$(bzr_info)</em>, comme ceci:</p>
<pre>
PS1="[\u@\h \w\$(bzr_info) \$]"
</pre>
<p>Ce qui affichera ce genre de prompts:</p>
<pre>
[etenil@cray1 ~/Projects/test(bzr:121) $]
[etenil@cray1 ~/Projects/modified(*bzr:18) $]
</pre>
<p>Notez que si la branche a subi une modification non commitée, une étoile apparaît devant <em>bzr</em>. Vous pouvez aussi afficher la branche d&#8217;origine en passant l&#8217;argument <em>showparent</em>, comme ceci:</p>
<pre>
PS1="[\u@\h \w\$(bzr_info showparent) \$]"
</pre>
<p>Et qui affichera ce genre de lignes:</p>
<pre>
[etenil@cray1 ~/Projects/test(http://bzr.ath.cx/test/trunk:121) $]
[etenil@cray1 ~/Projects/test(*http://bzr.ath.cx/test/trunk:121) $]
</pre>
<p>Néanmoins, afficher l&#8217;origine est un peu plus lent et peut prendre beaucoup de place sur le prompt. A vous de voir!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.etenil.net/un-prompt-pour-bash-avec-bazaar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>960 grid system</title>
		<link>http://blog.etenil.net/960-grid-system/</link>
		<comments>http://blog.etenil.net/960-grid-system/#comments</comments>
		<pubDate>Sun, 01 Apr 2012 09:56:58 +0000</pubDate>
		<dc:creator>etenil</dc:creator>
				<category><![CDATA[Libre]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://blog.etenil.net/?p=214</guid>
		<description><![CDATA[Une connaissance a récemment attiré mon attention sur ce projet libre. Je dois bien avouer qu&#8217;au départ je n&#8217;y ai rien compris, la doc semblant pratiquement inexistante, et le site officiel assume qu&#8217;on sait déjà ce qu&#8217;est le projet (ce &#8230; <a href="http://blog.etenil.net/960-grid-system/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Une connaissance a récemment attiré mon attention sur <a href="http://960.gs">ce projet libre</a>. Je dois bien avouer qu&#8217;au départ je n&#8217;y ai rien compris, la doc semblant pratiquement inexistante, et le site officiel assume qu&#8217;on sait déjà ce qu&#8217;est le projet (ce qui est assez fort).</p>
<p>Je vous passe le pourquoi du comment d&#8217;un tel système, n&#8217;étant pas designer pour un sou ; il suffira de dire que le CSS pré-défini rend le prototypage et la création de designs vite faits beaucoup plus rapide.</p>
<p>Le concept est simple. Il repose sur l&#8217;utilisation d&#8217;une grille en 960px à 12 ou 16 colonnes. Les éléments du site seront alors alignés dans cette grille pour un rendu du meilleur effet.</p>
<p>Le projet propose un package avec une suite de classes CSS pour faciliter la mise en oeuvre, et des templates pour Gimp et d&#8217;autres logiciels moins libres pour aider les designers purs et durs.</p>
<p>Au niveau du template CSS, il est assez simple de s&#8217;en servir. On définira un conteneur dans la page (ou plusieurs) avec comme classe <em>container_12</em> (pour un 12 colonnes) ou <em>container_16</em> et les éléments à l&#8217;intérieur seront quant à eux de classe <em>grid_1</em>, <em>grid_2</em> ou <em>grid_n</em>, où <em>n</em> est la largeur désirée (en colonnes bien sûr).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.etenil.net/960-grid-system/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Automatiquement créer des accesseurs pour PHP</title>
		<link>http://blog.etenil.net/automatiquement-creer-des-accesseurs-pour-php/</link>
		<comments>http://blog.etenil.net/automatiquement-creer-des-accesseurs-pour-php/#comments</comments>
		<pubDate>Sat, 25 Feb 2012 10:41:30 +0000</pubDate>
		<dc:creator>etenil</dc:creator>
				<category><![CDATA[Libre]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[planet-libre]]></category>

		<guid isPermaLink="false">http://blog.etenil.net/?p=193</guid>
		<description><![CDATA[Voici une paire de fonctions pour Emacs qui permettent de créer des accesseurs vite fait bien fait pour PHP. &#40;defun php-make-accessors &#40;variable-name&#41;   &#34;Insert a couple of accessors for the given member variable.&#34;   &#40;interactive &#34;MVariable name (without $_): &#34;&#41; &#8230; <a href="http://blog.etenil.net/automatiquement-creer-des-accesseurs-pour-php/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Voici une paire de fonctions pour Emacs qui permettent de créer des accesseurs vite fait bien fait pour PHP.</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="lisp"><pre class="de1"><span class="br0">&#40;</span><span class="kw1">defun</span> php-make-accessors <span class="br0">&#40;</span>variable-<span class="kw1">name</span><span class="br0">&#41;</span>
  <span class="st0">&quot;Insert a couple of accessors for the given member variable.&quot;</span>
  <span class="br0">&#40;</span>interactive <span class="st0">&quot;MVariable name (without $_): &quot;</span><span class="br0">&#41;</span>
  <span class="br0">&#40;</span><span class="kw1">let</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>beg <span class="br0">&#40;</span>point<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
    <span class="br0">&#40;</span>insert <span class="br0">&#40;</span>format <span class="br0">&#40;</span>concat <span class="st0">&quot;public function set%s($value)<span class="es0">\n</span>&quot;</span>
                <span class="st0">&quot;{<span class="es0">\n</span>$this-&amp;gt;_%s = $value;<span class="es0">\n</span>&quot;</span>
                <span class="st0">&quot;return $this;<span class="es0">\n</span>}<span class="es0">\n</span><span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>
            <span class="br0">&#40;</span>capitalize variable-<span class="kw1">name</span><span class="br0">&#41;</span> variable-<span class="kw1">name</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
    <span class="br0">&#40;</span>insert <span class="br0">&#40;</span>format <span class="br0">&#40;</span>concat <span class="st0">&quot;public function get%s()<span class="es0">\n</span>&quot;</span>
                <span class="st0">&quot;{<span class="es0">\n</span>return $this-&amp;gt;_%s;<span class="es0">\n</span>}<span class="es0">\n</span><span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>
            <span class="br0">&#40;</span>capitalize variable-<span class="kw1">name</span><span class="br0">&#41;</span> variable-<span class="kw1">name</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
    <span class="br0">&#40;</span>indent-region beg <span class="br0">&#40;</span>point<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></pre></div></div></div></div></div></div></div>


<p>Il y a quelques limitations, notamment le fait que les propriétés doivent s&#8217;appeler <em>$_xxx</em>. Pour l&#8217;utiliser, copiez la dans votre <em>~/.emacs</em> puis invoquez la fonction dans le corps de votre classe à l&#8217;aide de <em>M-x php-make-accessors</em>.</p>
<p>Voici une autre fonction qui emploie la première afin de générer une série d&#8217;accesseurs:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="lisp"><pre class="de1"><span class="br0">&#40;</span><span class="kw1">defun</span> php-make-accessors-<span class="kw1">list</span> <span class="br0">&#40;</span>vars<span class="br0">&#41;</span>
  <span class="st0">&quot;Inserts accessors for each variables provided. Variables must be a
comma-separated string, e.g. <span class="es0">\&quot;</span>a,b,c<span class="es0">\&quot;</span>.&quot;</span>
  <span class="br0">&#40;</span>interactive <span class="st0">&quot;MVariables list (comma-separated, without $_): &quot;</span><span class="br0">&#41;</span>
  <span class="br0">&#40;</span><span class="kw1">let</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>variables <span class="br0">&#40;</span>split-string vars <span class="st0">&quot;,&quot;</span> t<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
    <span class="br0">&#40;</span><span class="kw1">mapcar</span> 'php-make-accessors variables<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></pre></div></div></div></div></div></div></div>


<p>Pour employer celle-ci, faites <em>M-x php-make-accessors-list</em>, puis entrez les noms des variables pour lesquelles vous souhaitez générer des accesseurs, comme ceci: <em>a,b,c </em>pour accéder à <em>$_a</em>, <em>$_b</em> et <em>$_c</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.etenil.net/automatiquement-creer-des-accesseurs-pour-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Petite astuce pour améliorer le rendu des polices de Microsoft</title>
		<link>http://blog.etenil.net/petite-astuce-pour-ameliorer-le-rendu-des-polices-de-microsoft/</link>
		<comments>http://blog.etenil.net/petite-astuce-pour-ameliorer-le-rendu-des-polices-de-microsoft/#comments</comments>
		<pubDate>Thu, 23 Feb 2012 13:35:50 +0000</pubDate>
		<dc:creator>etenil</dc:creator>
				<category><![CDATA[Libre]]></category>
		<category><![CDATA[planet-libre]]></category>

		<guid isPermaLink="false">http://blog.etenil.net/?p=184</guid>
		<description><![CDATA[Il y a des sites web qui utilisent par défaut les polices de microsoft. Le rendu par défaut sur GNU/Linux est plutôt mauvais (voire même carrément illisible). Cela est dû à plusieurs facteurs, mais on peut régler le lisseur de &#8230; <a href="http://blog.etenil.net/petite-astuce-pour-ameliorer-le-rendu-des-polices-de-microsoft/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Il y a <a href="http://www.codinghorror.com/blog/2009/03/procrastination-and-the-bikeshed-effect.html">des sites web</a> qui utilisent par défaut les polices de microsoft. Le rendu par défaut sur GNU/Linux est plutôt mauvais (voire même carrément illisible). Cela est dû à plusieurs facteurs, mais on peut régler le lisseur de polices (xft je pense) pour les afficher bien mieux tout simplement.</p>
<p>Créez ou éditez le fichier <em>~/.fonts.conf </em>et insérez le code suivant:</p>
<pre>&lt;match target="font" &gt;
 &lt;edit name="embeddedbitmap" mode="assign"&gt;
  &lt;bool&gt;false&lt;/bool&gt;
 &lt;/edit&gt;
&lt;/match&gt;</pre>
<p>Et le rendu sera alors beaucoup moins agressif.</p>
<h3>Edit</h3>
<p>À la demande générale, voici deux screenshots de la bidouille:</p>
<p>Avant: <a href="http://blog.etenil.net/wp-content/uploads/2012/02/Before.png"><img class="alignnone size-medium wp-image-190" title="Before" src="http://blog.etenil.net/wp-content/uploads/2012/02/Before-300x155.png" alt="" width="300" height="155" /></a></p>
<p>Après: <a href="http://blog.etenil.net/wp-content/uploads/2012/02/after.png"><img class="alignnone size-medium wp-image-191" title="after" src="http://blog.etenil.net/wp-content/uploads/2012/02/after-300x155.png" alt="" width="300" height="155" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.etenil.net/petite-astuce-pour-ameliorer-le-rendu-des-polices-de-microsoft/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Anvil</title>
		<link>http://blog.etenil.net/anvil/</link>
		<comments>http://blog.etenil.net/anvil/#comments</comments>
		<pubDate>Sun, 19 Feb 2012 17:18:42 +0000</pubDate>
		<dc:creator>etenil</dc:creator>
				<category><![CDATA[Libre]]></category>
		<category><![CDATA[anvil]]></category>
		<category><![CDATA[bazaar]]></category>
		<category><![CDATA[planet-libre]]></category>

		<guid isPermaLink="false">http://blog.etenil.net/?p=176</guid>
		<description><![CDATA[Si je n&#8217;ai pas été actif ces derniers temps, ce n&#8217;est pas par fainéantise (encore que&#8230;), mais parce que j&#8217;ai été fort occupé par mon dernier projet. Vous connaissez sûrement GitHub ou Bitbucket, forges non-libres &#171;&#160;sociales&#160;&#187; qui facilitent l&#8217;emploi de &#8230; <a href="http://blog.etenil.net/anvil/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" title="Forge" src="http://bzr.ath.cx/static/img/forge.jpg" alt="une forge" width="242" height="375" />Si je n&#8217;ai pas été actif ces derniers temps, ce n&#8217;est pas par fainéantise (encore que&#8230;), mais parce que j&#8217;ai été fort occupé par mon dernier projet.</p>
<p>Vous connaissez sûrement GitHub ou Bitbucket, forges non-libres &laquo;&nbsp;sociales&nbsp;&raquo; qui facilitent l&#8217;emploi de git et mercurial, respectivement. Et de ce fait promeuvent donc ces deux outils.</p>
<p>Bazaar, qui est mon gestionnaire de versions favori, n&#8217;a lui que Launchpad comme forge dédiée et un tant soi peu &laquo;&nbsp;sociale&nbsp;&raquo;. Mais Launchpad n&#8217;a rien d&#8217;hype et il n&#8217;est pas vraiment simple à utiliser non plus. Du coup, je me suis dit qu&#8217;il fallait que je fasse le mien pour combler ce manque.</p>
<p>Je vous annonce donc la sortie d&#8217;<a href="http://bzr.ath.cx">Anvil</a> 0.01 (enclume en anglais). Son but est de proposer un environnement collaboratif simple et une interface attrayante à Bazaar. Il est écrit en <a href="https://fr.wikipedia.org/wiki/Python_%28langage%29">Python</a> avec le framework libre <a href="http://webpy.org/">web.py</a> et la base de données <a title="Définition Wikipédia" href="http://fr.wikipedia.org/wiki/MySQL">MySQL</a>. Anvil est disponible sous <a title="Définition Wikipédia" href="http://fr.wikipedia.org/wiki/GPLv3">GPLv3</a>.</p>
<h2 id="toc_1">Fonctionnalités</h2>
<h3 id="toc_2">Accès au code</h3>
<p>Point important pour une forge, Anvil propose un accès en HTTP pour les <em>pull</em> (accès public), et un accès via SSH pour les opérations de <em>push</em>.</p>
<p>Les dépôts gérés par la forge sont dans une arborescence du dossier de l&#8217;utilisateur <strong>bzr</strong>, lequel est dédié au logiciel. La partie SSH s&#8217;appuie quant à elle sur le fichier <em>authorized_keys</em>, qui permet de lancer un greffon pour Bazaar lors des connexions entrantes qui vérifie les droits d&#8217;accès et ré-écrit les chemins dynamiquement.</p>
<h3 id="toc_3">Messagerie interne</h3>
<p>Anvil se veut <em>social</em>, même s&#8217;il n&#8217;a pas beaucoup de fonctionalités en ce sens pour l&#8217;instant. Il est toutefois déjà possible de contacter d&#8217;autres utilisateurs directement sur le logiciel plutôt que par email.</p>
<p>Le système de messagerie interne n&#8217;est pour le moment pas géré en AJAX et n&#8217;est donc mis à jour que lorsque la page est rafraichie. Ce système sera amené à évoluer dans les prochaines version pour plus d&#8217;utilité.</p>
<h3 id="toc_4">Branches Bazaar</h3>
<p>Envoyer une branche sur Anvil est très simple puisqu&#8217;il suffit d&#8217;en pousser une qui n&#8217;existe pas encore. Bazaar crée alors dynamiquement la branche. Anvil apporte toutefois une possibilité que n&#8217;offre pas Bazaar directement, à savoir la suppression d&#8217;une branche (il suffit en fait de supprimer le dossier de la branche).</p>
<p>L&#8217;interface web permet de naviguer dans l&#8217;arborescence de la branche et de voir les fichiers avec coloration syntaxique.</p>
<h3 id="toc_5">Gestion de projet</h3>
<p>Outre ses branches personnelles, les projets ont eux aussi leurs propres branches. L&#8217;intérêt réside dans le fait qu&#8217;on puisse y ajouter d&#8217;autres utilisateurs qui ont alors aussi le droit de modifier les branches du projet.</p>
<h3 id="toc_6">Gestion de bugs</h3>
<p>Le <a href="http://bzr.ath.cx/anvil-forge/bugs">système de gestion d&#8217;incidents d&#8217;Anvil</a> se veut simpliste et ouvert. On peut par exemple y reporter des bugs sans pour autant être enregistré sur la forge.</p>
<h3 id="toc_7">Gestion documentaire</h3>
<p>Anvil permet une gestion documentaire très simple et permet d&#8217;écrire des documents en <a title="Définition Wikipédia" href="http://fr.wikipedia.org/wiki/Markdown">Markdown</a> attachés au projet. Il ne gère pour le moment pas les versions des documents.</p>
<h3 id="toc_8">Ubiquité de Markdown</h3>
<p>Markdown est un format pratique, et Anvil l&#8217;utilise un peu partout, aussi bien dans les profils utilisateurs que les descriptions de projet ou la documentation. Le but est de permettre aux développeurs d&#8217;offrir facilement un contenu riche.</p>
<h2 id="toc_9">État des lieux</h2>
<p>Cette version est la première à être utilisable, mais présente bien des défauts.</p>
<p>Le code est plutôt mal organisé, manque de commentaires et les bugs sont probablement légion. L&#8217;interface est en Anglais et pour le moment rien n&#8217;a été prévu pour les traductions.</p>
<p>Installer Anvil est assez simple mais réclame tout de même une petite expérience d&#8217;administration système. J&#8217;ai écrit un <em>readme</em> qui décrit l&#8217;installation pas à pas de la forge avec Apache2 et mod_fcgid.</p>
<h2 id="toc_10">Futur</h2>
<p>Les buts pour la version 0.02 n&#8217;ont pas encore été définis formellement, mais l&#8217;accent sera mis sur la correction des bugs et le nettoyage du code, ainsi que l&#8217;amélioration du thème par défaut.</p>
<h1>Liens</h1>
<ul>
<li><a href="http://linuxfr.org/redirect/75363">Télécharger Anvil</a></li>
<li><a href="http://linuxfr.org/redirect/75362">Accéder au code source</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.etenil.net/anvil/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Hacker bazaar</title>
		<link>http://blog.etenil.net/hacker-bazaar/</link>
		<comments>http://blog.etenil.net/hacker-bazaar/#comments</comments>
		<pubDate>Tue, 14 Feb 2012 12:01:21 +0000</pubDate>
		<dc:creator>etenil</dc:creator>
				<category><![CDATA[Libre]]></category>
		<category><![CDATA[Tuto]]></category>
		<category><![CDATA[bazaar]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[libre]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.etenil.net/?p=168</guid>
		<description><![CDATA[Salut à tous. Je n&#8217;ai pas été actif sur ce blog ces derniers jours (grippe, tout ça), mais je n&#8217;ai pas pour autant été fainéant. J&#8217;ai en effet quelques tutos dans les cartons, et en particulier concernant Bazaar (le dvcs &#8230; <a href="http://blog.etenil.net/hacker-bazaar/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Salut à tous.</p>
<p>Je n&#8217;ai pas été actif sur ce blog ces derniers jours (grippe, tout ça), mais je n&#8217;ai pas pour autant été fainéant. J&#8217;ai en effet quelques tutos dans les cartons, et en particulier concernant <a href="http://bazaar.canonical.com">Bazaar</a> (le dvcs qui est mieux que git).</p>
<p>J&#8217;ai dernièrement dû hacker Bazaar pour un autre projet que j&#8217;annoncerai bientôt. Ça m&#8217;a donc permis de me familiariser avec les tripes de la bête et en particulier <a href="http://wiki.bazaar.canonical.com/BzrLib">bzrlib</a>. Car si bazaar est un bon dvcs, sa force reste le fait qu&#8217;on peut programmatiquement tout faire grâce à sa bibliothèque.</p>
<p>Voici donc un petit tuto pour lister les fichiers d&#8217;une branche de bazaar (et même d&#8217;une branche d&#8217;un repo sans arbre):</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="python"><pre class="de1"><span class="kw1">from</span> bzrlib.<span class="me1">branch</span> <span class="kw1">import</span> Branch
b <span class="sy0">=</span> Branch.<span class="kw2">open</span><span class="br0">&#40;</span><span class="st0">&quot;/emplacement/de/ma/branche/&quot;</span><span class="br0">&#41;</span>
t <span class="sy0">=</span> b.<span class="me1">basis_tree</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
b.<span class="me1">lock_read</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
files <span class="sy0">=</span> t.<span class="me1">iter_entries_by_dir</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="kw1">for</span> f <span class="kw1">in</span> files:
    <span class="kw1">print</span> f<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>
b.<span class="me1">unlock</span><span class="br0">&#40;</span><span class="br0">&#41;</span></pre></div></div></div></div></div></div></div>


<p>Ce qui pourra donner ceci:</p>
<pre>index.php
movicon
run-tests.php
apps/movicon
apps/tests
apps/movicon/app.ini
apps/movicon/controllers
...</pre>
<p>Chaque élément de l&#8217;itérateur renvoyé par <em>iter_entries_by_dir()</em> est un tuple dans la forme <em>(fichier, objet)</em>. L&#8217;<em>objet</em> en second membre contient les informations nécessaires pour connaitre la taille du fichier, son hash sha1, et sa référence unique pour pouvoir l&#8217;obtenir (ce qui nous intéresse davantage).</p>
<p>On peut donc obtenir un fichier directement et le manipuler à notre guise (le tout sans tree, c&#8217;est classe).</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="python"><pre class="de1">... <span class="co1"># Voir plus haut</span>
<span class="kw1">for</span> f <span class="kw1">in</span> files:
    <span class="kw1">if</span> f<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>.__class__ <span class="sy0">==</span> bzrlib.<span class="me1">inventory</span>.<span class="me1">InventoryFile</span>:
        <span class="kw1">print</span> t.<span class="me1">get_file_text</span><span class="br0">&#40;</span>f<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>.<span class="me1">file_id</span><span class="br0">&#41;</span>
        <span class="kw1">break</span>
b.<span class="me1">unlock</span><span class="br0">&#40;</span><span class="br0">&#41;</span></pre></div></div></div></div></div></div></div>


<p>Ici on itère dans les fichiers encore, et on teste le type du second membre du tuple. On peut soit avoir le type <strong>CHKInventoryDirectory</strong> (pour un dossier) ou bien <strong>InventoryFile</strong> (pour un fichier). Lorsqu&#8217;il s&#8217;agit d&#8217;un fichier, on attrape son contenu et on l&#8217;affiche dans <em>stdout</em>. ensuite je break pour éviter de flooder la sortie (c&#8217;est juste un test).</p>
<p>Évidemment on peut faire une ribambelle d&#8217;autre choses avec bzrlib, mais autant commencer par les choses simples.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.etenil.net/hacker-bazaar/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Pourquoi git me hérisse le poil</title>
		<link>http://blog.etenil.net/pourquoi-git-me-herisse-le-poil/</link>
		<comments>http://blog.etenil.net/pourquoi-git-me-herisse-le-poil/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 21:43:49 +0000</pubDate>
		<dc:creator>etenil</dc:creator>
				<category><![CDATA[Libre]]></category>
		<category><![CDATA[Pleurnicheries]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[troll]]></category>

		<guid isPermaLink="false">http://blog.etenil.net/?p=161</guid>
		<description><![CDATA[Voici un article trollesque en perpective. En fait j&#8217;aimerais bien, parce qu&#8217;au-delà de doper mes statistiques, ça voudrait dire que git est efficace et que je suis un menteur, donc que je n&#8217;ai jamais fait l&#8217;expérience que je vais vous &#8230; <a href="http://blog.etenil.net/pourquoi-git-me-herisse-le-poil/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.etenil.net/wp-content/uploads/2012/02/view_git-logo.png"><img class="alignleft size-full wp-image-162" title="view_git-logo" src="http://blog.etenil.net/wp-content/uploads/2012/02/view_git-logo.png" alt="" width="200" height="200" /></a>Voici un article trollesque en perpective. En fait j&#8217;aimerais bien, parce qu&#8217;au-delà de doper mes statistiques, ça voudrait dire que git est efficace et que je suis un menteur, donc que je n&#8217;ai jamais fait l&#8217;expérience que je vais vous relater.</p>
<p>Commençons par une petite définition. Programmer est une activité délicate qui demande beaucoup de concentration, et toute la partie logistique de la programmation, bien que passionnante, doit se faire aussi transparente que possible. Pousser son code quelque part ou ajouter le code de son voisin au sien doit être une étape simple, avec des commandes simples (si on doit regarder la page de man c&#8217;est foutu).</p>
<p>Vous n&#8217;êtes pas sans savoir que je me suis retrouvé impliqué dans le projet <a href="http://movim.eu">Movim</a>, un réseau social libre basé sur XMPP, lequel utilisait git à l&#8217;époque. Il n&#8217;y avait qu&#8217;un seul dévelopeur, donc le workflow était très simple et n&#8217;importe quel VCS aurait fait l&#8217;affaire.</p>
<p>Suite à mon arrivée dans le projet, nous avons mit en place un workflow similaire à celui employé dans le noyau linux pour le projet, c&#8217;est à dire que chacun travaille sur une feature dans son coin et on merge dans le master (sorte de branche commune au projet) quand c&#8217;est mûr. Jusque là rien de compliqué.</p>
<p>Sauf que git ne l&#8217;entendait apparemment pas de cette oreille. Ainsi nous perdions environ une heure à chaque merge à essayer de comprendre pourquoi diable git ne voulait pas fusionner nos changements. C&#8217;est ainsi que lors d&#8217;un merge, les messages d&#8217;erreurs de l&#8217;outil étaient trop cryptiques pour moi, et donc comme d&#8217;habitude quand je suis dépassé, je demande de l&#8217;aide. Je me suis pointé sur le salon IRC de git, et quelques bonnes âmes expérimentées ont essayé de m&#8217;aider. Sans succès. Au final j&#8217;ai décidé de fusionner les deux codes à la main (enfin avec emacs et <em>emerge</em>) puis commiter, très sale mais au bout de 2h face à un mur, on n&#8217;est plus à ça près.</p>
<p>Après deux ou trois sorties de Movim à faire face à ce problème sans que la situation s&#8217;améliore (oui on pensait que c&#8217;était notre faute), nous avons finalement décidé d&#8217;arrêter les frais et de tenter le coup avec un autre VCS; n&#8217;importe lequel. On nous a chaudement conseillé Mercurial, et Bazaar un peu moins. Mais Mercurial ressemblait un peu à git et chat échaudé craint l&#8217;eau froide. Qui plus est j&#8217;avais déjà eu l&#8217;occasion d&#8217;utiliser Bazaar dans un workflow centralisé (comme subversion), et donc connaissais sa versatilité.</p>
<p>Nous avons donc décidé de faire la sortie suivante sur bazaar en synchronisant sur git (au cas où). Et nous avons été ébahi lorsque bazaar ne s&#8217;est pas une seule fois plaint, que les conflits étaient très explicitement indiqués et finalement nous sommes passés d&#8217;1h par merge à 5 minutes.</p>
<p>Depuis il m&#8217;arrive de voir des articles qui vantent les mérites de git contre d&#8217;autres, et c&#8217;est sûrement vrai qu&#8217;il est techniquement très efficace, voire supérieur, mais ce n&#8217;est pas un outil fait pour aider le programmeur.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.etenil.net/pourquoi-git-me-herisse-le-poil/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>Sommes-nous formattés par nos distributions?</title>
		<link>http://blog.etenil.net/sommes-nous-formattes-par-nos-distributions/</link>
		<comments>http://blog.etenil.net/sommes-nous-formattes-par-nos-distributions/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 20:17:43 +0000</pubDate>
		<dc:creator>etenil</dc:creator>
				<category><![CDATA[Pleurnicheries]]></category>
		<category><![CDATA[gnu-linux]]></category>
		<category><![CDATA[planet-libre]]></category>

		<guid isPermaLink="false">http://blog.etenil.net/?p=156</guid>
		<description><![CDATA[Dans le dernier GNU World Order podcast, le podcasteur parle d&#8217;une chose que les distributions GNU/Linux ont réussi à nous imposer. Il s&#8217;agit des dossiers &#171;&#160;standards&#160;&#187; dans les dossiers utilisateur. Effectivement, il y a quelques années, on se retrouvait avec &#8230; <a href="http://blog.etenil.net/sommes-nous-formattes-par-nos-distributions/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.etenil.net/wp-content/uploads/2012/02/tape_drive.jpg"><img class="alignleft size-full wp-image-157" title="tape_drive" src="http://blog.etenil.net/wp-content/uploads/2012/02/tape_drive.jpg" alt="" width="200" height="155" /></a>Dans le dernier <a href="http://www.gnuworldorder.info/">GNU World Order</a> podcast, le podcasteur parle d&#8217;une chose que les distributions GNU/Linux ont réussi à nous imposer. Il s&#8217;agit des dossiers &laquo;&nbsp;standards&nbsp;&raquo; dans les dossiers utilisateur.</p>
<p>Effectivement, il y a quelques années, on se retrouvait avec un dossier HOME tout nu (pas de blague hein!). Puis tout doucement les différentes distributions on commencé à créer les dossiers des utilisateurs avec une structure de base (du genre <em>Musique, Photos, Videos, Documents</em>). Et je me suis aperçu que j&#8217;utilisais au départ une structure de dossiers à moi, puis je suis passé sur cette structure par défaut.</p>
<p>Mais en réalité cette structure par défaut n&#8217;a pas beaucoup de sens et ajoute en fait à la confusion dans mon dossier personnel. Par exemple je range naturellement tous mes fichiers audio dans <em>Musique</em>, hors beaucoup d&#8217;entre eux sont des podcasts ou des enregistrements de conférence. Encore pire pour <em>Documents</em>, qui contient indistinctivement des factures, ebooks et autres pages web sauvegardées.</p>
<p>Un cauchemard pour les back-ups. Donc ne vous laissez pas avoir par votre distro! Rangez vos fichiers dans un ordre logique.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.etenil.net/sommes-nous-formattes-par-nos-distributions/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Petite remarque sur EMACS24</title>
		<link>http://blog.etenil.net/petite-remarque-sur-emacs24/</link>
		<comments>http://blog.etenil.net/petite-remarque-sur-emacs24/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 12:43:46 +0000</pubDate>
		<dc:creator>etenil</dc:creator>
				<category><![CDATA[Libre]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[libre]]></category>
		<category><![CDATA[planet-libre]]></category>

		<guid isPermaLink="false">http://blog.etenil.net/?p=119</guid>
		<description><![CDATA[Après vous avoir révélé les nouveautés de la version 24 d&#8217;EMACS, j&#8217;ai donc installé emacs-snapshot histoire d&#8217;en avoir un avant goût. Je n&#8217;ai pas encore beaucoup testé la chose, mais je peux déjà dire qu&#8217;il est très très rapide. En &#8230; <a href="http://blog.etenil.net/petite-remarque-sur-emacs24/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Après vous avoir révélé les nouveautés de la version 24 d&#8217;EMACS, j&#8217;ai donc installé <em>emacs-snapshot</em> histoire d&#8217;en avoir un avant goût.</p>
<p>Je n&#8217;ai pas encore beaucoup testé la chose, mais je peux déjà dire qu&#8217;il est très très rapide. En effet EMACS23 prenait environ 4s ou 5s pour lire toute ma configuration et être utilisable, alors que le nouvel EMACS est prêt en 1s ou moins. Je ne sais pas comment ils ont fait, en tout cas j&#8217;en suis très satisfait <img src='http://blog.etenil.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Si vous voulez aussi tester <em>emacs-snapshot</em>, vous pouvez le faire <a href="http://emacs.naquadah.org/">facilement sur debian</a>, je pense qu&#8217;il y a un ppa aussi pour ubuntu, mais je vous laisse le chercher.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.etenil.net/petite-remarque-sur-emacs24/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

