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

<channel>
	<title>GNU Squad &#187; Planet Libre</title>
	<atom:link href="http://blog.gnusquad.org/tag/planet-libre/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.gnusquad.org</link>
	<description>Freedom computers</description>
	<pubDate>Thu, 25 Jun 2009 11:32:11 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Gérer ses templates pour Vim sans fichiers externes</title>
		<link>http://blog.gnusquad.org/2009/06/</link>
		<comments>http://blog.gnusquad.org/2009/06/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 10:50:45 +0000</pubDate>
		<dc:creator>Sylvain</dc:creator>
		
		<category><![CDATA[Logiciels divers]]></category>

		<category><![CDATA[Vim]]></category>

		<category><![CDATA[Planet Libre]]></category>

		<guid isPermaLink="false">http://blog.gnusquad.org/?p=210</guid>
		<description><![CDATA[Suite à un billet posté sur le site Informatique et liberté évoquant une solution originale pour gérer ses templates avec Vim, j&#8217;ai décidé d&#8217;améliorer un peu la technique en utilisant la puissance de ce superbe éditeur combinée à celle de sed.
Habituellement, pour chaque template, nous créons un fichier externe placé dans notre dossier personnel ~/.vim. [...]]]></description>
			<content:encoded><![CDATA[<p>Suite à un billet posté sur le site <a href="http://informatique-et-liberte.tuxfamily.org/2009/06/23/vim-et-son-vimrc-la-gestion-des-templates/trackback/">Informatique et liberté</a> évoquant une solution originale pour gérer ses templates avec <em>Vim</em>, j&#8217;ai décidé d&#8217;améliorer un peu la technique en utilisant la puissance de ce superbe éditeur combinée à celle de <em>sed</em>.</p>
<p>Habituellement, pour chaque template, nous créons un fichier externe placé dans notre dossier personnel <em>~/.vim</em>. Prenons l&#8217;exemple d&#8217;un template HTML dans <em>~/.vim/templates/html</em> que l&#8217;on appellerait de cette manière dans notre fichier de configuration <em>~/.vimrc</em> :</p>
<pre>autocmd BufNewFile *.html 0r ~/.vim/templates/html</pre>
<p>Logiciels utilisés :</p>
<ul>
<li>Vim 7.2</li>
<li>GNU Sed 4.2</li>
</ul>
<p>Le but du jeu est de centraliser toute notre configuration dans notre <em>~/.vimrc</em> et donc d&#8217;y inclure nos templates. Le seul moyen, à ma connaissance, est de mettre ceux-ci en commentaires afin qu&#8217;ils n&#8217;interfèrent pas avec le reste de la configuration, il ne restera plus alors qu&#8217;à trouver le template adéquat, pour cela on passera par des marqueurs de début et de fin de template, voici donc ma solution :</p>
<pre>" BEGIN HTML
" &lt;html&gt;
"     &lt;head&gt;
"         &lt;title&gt;Hello gnusquad !&lt;/title&gt;
"     &lt;/head&gt;
" &lt;/html&gt;
" END HTML

autocmd BufNewFile *.html call Template('HTML')

function! Template(type)
    exe "0r !sed -n '/^\"\\s*BEGIN " . a:type . "$/,/^\"\\s*END " . a:type . "$/ {s///;/^$/d;s/^\" //;p}' $MYVIMRC"
    echo '--> INFO : Template ' . a:type . ' charge < --'
endfunction</pre>
<p>Nous retrouvons donc en première partie le template mis en commentaire et délimité par les marqueurs « <strong>BEGIN HTML</strong> » et « <strong>END HTML</strong> », la deuxième partie appelle la fonction « <strong>Template</strong> » avec en paramètre « <strong>HTML</strong> » lorsque l&#8217;on crée un nouveau fichier ayant son nom correspondant au motif « <strong>*.html</strong> », la troisième et dernière partie contient la fonction « <strong>Template</strong> » proprement dite qui prend donc un paramètre servant à délimiter le template, on y trouve une jolie ligne de <em>sed</em> qui paraît obscure à première vue mais qui est très simple : on localise et ne traite que la partie contenue entre « <strong>BEGIN xxx</strong> » et « <strong>END xxx </strong> », on supprime ces deux lignes puis les lignes vides puis on décommente le template, le tout étant inséré dans le buffer courant. <img src='http://blog.gnusquad.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Vous aurez donc compris qu&#8217;il est très simple d&#8217;ajouter de nouveaux templates : il suffit juste que le paramètre passé à la fonction « <em>Template</em> » corresponde à la partie présente après « <em>BEGIN</em> » et « <em>END</em> » de votre template. <img src='http://blog.gnusquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><span id="more-210"></span></pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.gnusquad.org/2009/06/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Visualisez la hiérarchie de vos inclusions PHP avec « Inclued »</title>
		<link>http://blog.gnusquad.org/2009/03/</link>
		<comments>http://blog.gnusquad.org/2009/03/#comments</comments>
		<pubDate>Fri, 06 Mar 2009 19:58:14 +0000</pubDate>
		<dc:creator>Sylvain</dc:creator>
		
		<category><![CDATA[Debian GNU/Linux]]></category>

		<category><![CDATA[Développement]]></category>

		<category><![CDATA[Langages]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Système]]></category>

		<category><![CDATA[Planet Libre]]></category>

		<guid isPermaLink="false">http://blog.gnusquad.org/?p=152</guid>
		<description><![CDATA[L&#8217;extension PECL « Inclued » permet de tracer et d&#8217;enregistrer sous forme hiérarchique, l&#8217;ensemble des inclusions de fichiers durant l&#8217;exécution d&#8217;un script PHP.
Prenons pour exemple le monstrueux WordPress, voici ce que l&#8217;on peut obtenir :

Mis à part le fait que ce genre de graphe est toujours sympa à voir, il permet de se faire une [...]]]></description>
			<content:encoded><![CDATA[<p>L&#8217;extension <abbr title="PHP Extension Community Library">PECL</abbr> « <em>Inclued</em> » permet de tracer et d&#8217;enregistrer sous forme hiérarchique, l&#8217;ensemble des inclusions de fichiers durant l&#8217;exécution d&#8217;un script PHP.</p>
<p>Prenons pour exemple le monstrueux WordPress, voici ce que l&#8217;on peut obtenir :</p>
<p><a href="http://img527.imageshack.us/img527/4869/inclued185541.png"><img src="http://blog.gnusquad.org/wp-content/uploads/2009/03/wordpress-inclued-tiny1.png" alt="WordPress Inclued" title="WordPress Inclued" width="218" height="160" class="alignnone size-full wp-image-177" /></a></p>
<p>Mis à part le fait que ce genre de graphe est toujours sympa à voir, il permet de se faire une idée sur la qualité d&#8217;un code :</p>
<ul>
<li>Pourquoi ce fichier est inclut alors qu&#8217;il n&#8217;est pas utilisé ?</li>
<li>Pourquoi ce fichier est inclut ici plutôt que là ?</li>
<li>Pourquoi ce fichier n&#8217;est pas inclus en utilisant les primitives *_once ?</li>
<li>Pourquoi les inclusions proviennent uniquement de ce fichier ?</li>
<li>etc.</li>
</ul>
<p>Passons au vif du sujet ! Pour commencer nous allons installer les paquets nécessaires pour la suite des opérations :</p>
<ul>
<li><em>php5-dev</em> et <em>make</em> pour la compilation de l&#8217;extension</li>
<li><em>php5-cli</em> et <em>graphviz</em> pour la génération des images</li>
</ul>
<pre>
<strong>root@gnusquad</strong>:~# aptitude install php5-dev php5-cli make graphviz
</pre>
<p>Une fois ces paquets installés, téléchargeons l&#8217;extension « <em>Inclued</em> » et décompressons la d&#8217;un trait :</p>
<pre>
<strong>root@gnusquad</strong>:~# wget -q -O - http://pecl.php.net/get/inclued | tar zx
</pre>
<p>Compilons cette dernière :</p>
<pre>
<strong>root@gnusquad</strong>:~# cd inclued-0.1.0
<strong>root@gnusquad</strong>:~/inclued-0.1.0# phpize
<strong>root@gnusquad</strong>:~/inclued-0.1.0# ./configure
<strong>root@gnusquad</strong>:~/inclued-0.1.0# make
</pre>
<p>L&#8217;étape qui suit consiste à indiquer à PHP de charger cette nouvelle extension :</p>
<pre>
<strong>root@gnusquad</strong>:~/inclued-0.1.0# cp modules/inclued.so /usr/lib/php5/20060613+lfs
<strong>root@gnusquad</strong>:~/inclued-0.1.0# vi /etc/php5/conf.d/inclued.ini

extension=inclued.so
inclued.enabled=on
inclued.dumpdir=/tmp
</pre>
<p>On peut dès lors redémarrer le serveur web, <em>Apache</em> en l&#8217;occurence, sachant que désormais, chaque accès à un fichier PHP (via le web ou en CLI) générera un fichier dans le répertoire <em>/tmp</em> donc méfiance !</p>
<pre>
<strong>root@gnusquad</strong>:~/inclued-0.1.0# /etc/init.d/apache2 restart
</pre>
<p>Sachez qu&#8217;il est également possible d&#8217;activer l&#8217;extension au niveau du serveur web en utilisant les directives <em>php_admin_flag</em> et <em>php_admin_value</em> ce qui permet de limiter l&#8217;extension à un vhost par exemple. Malheureusement, et contrairement à ce qui est indiqué sur le site PHP, il n&#8217;est pas possible d&#8217;utiliser ces directives dans un fichier <em>.htaccess</em>.</p>
<p>Les fichiers générés n&#8217;étant pas directement des images, il faut les convertir à l&#8217;aide d&#8217;un script fourni avec l&#8217;extension que nous enroberons de notre propre script afin de nous faciliter la vie :</p>
<pre>
<strong>root@gnusquad</strong>:~/inclued-0.1.0# cp gengraph.php /usr/local/bin
<strong>root@gnusquad</strong>:~/inclued-0.1.0# cd $_
<strong>root@gnusquad</strong>:/usr/local/bin# vi gengraph

#!/bin/bash
echo "Generating file $1.png"
exec >/dev/null
php -d "inclued.enabled=Off" $(dirname $0)/gengraph.php -i $1 -o $1.dot
dot -Tpng -o $1.png $1.dot
rm $1
rm $1.dot

<strong>root@gnusquad</strong>:/usr/local/bin# chmod +x $_
</pre>
<p>Voilà, le plus dur est fait, il ne vous reste plus qu&#8217;à aller sur une page web PHP et à générer l&#8217;image :</p>
<pre>
<strong>root@gnusquad</strong>:/usr/local/bin# cd /tmp
<strong>root@gnusquad</strong>:/tmp# ls
inclued.00688.1
<strong>root@gnusquad</strong>:/tmp# gengraph inclued.00688.1
<strong>root@gnusquad</strong>:/tmp# ls
inclued.00688.1.png
</pre>
<p>À lire :</p>
<ul>
<li><a href="http://fr.php.net/manual/en/book.inclued.php">Documentation PHP sur Inclued</a></li>
<li><a href="http://pecl.php.net/package/inclued">Package Inclued sur la PECL</a></li>
</ul>
<p>Mise à jour du 05 mai 2009 : pour effectuer la compilation encore plus simplement, il suffit de taper « <em>pecl install channel://pecl.php.net/inclued-0.1.0</em> » et le tour est joué ! <img src='http://blog.gnusquad.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<span id="more-152"></span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gnusquad.org/2009/03/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Modifier le « User-Agent » sous Firefox &amp; Thunderbird</title>
		<link>http://blog.gnusquad.org/2009/02/</link>
		<comments>http://blog.gnusquad.org/2009/02/#comments</comments>
		<pubDate>Wed, 25 Feb 2009 11:54:56 +0000</pubDate>
		<dc:creator>Sylvain</dc:creator>
		
		<category><![CDATA[Firefox]]></category>

		<category><![CDATA[Logiciels divers]]></category>

		<category><![CDATA[Planet Libre]]></category>

		<guid isPermaLink="false">http://blog.gnusquad.org/?p=140</guid>
		<description><![CDATA[Rien de plus simple, il suffit d&#8217;aller dans l&#8217;éditeur de configuration des ces outils :

Sous Firefox, il faut taper « about:config » dans la barre de navigation
Sous Thunderbird, il faut aller dans le menu « Édition -> Préférences », sélectionner l&#8217;onglet « Avancé » puis « Général » et cliquer sur « Éditeur de configuration» [...]]]></description>
			<content:encoded><![CDATA[<p>Rien de plus simple, il suffit d&#8217;aller dans l&#8217;éditeur de configuration des ces outils :</p>
<ul>
<li>Sous Firefox, il faut taper « <em>about:config</em> » dans la barre de navigation</li>
<li>Sous Thunderbird, il faut aller dans le menu « Édition -> Préférences », sélectionner l&#8217;onglet « Avancé » puis « Général » et cliquer sur « Éditeur de configuration» </li>
</ul>
<p>Ensuite, il faut ajouter (ou modifier si elle existe déjà) une chaîne de caractères que vous nommerez « <em>general.useragent.override</em> », la valeur que vous rentrerez par la suite sera utilisée par Firefox ou Thunderbird pour spécifier l&#8217;« <em>User-Agent</em> ».</p>
<p>À lire :</p>
<ul>
<li><a href="http://fr.wikipedia.org/wiki/User_agent">Wikipédia : User-Agent</a></li>
</ul>
<p><span id="more-140"></span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gnusquad.org/2009/02/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Problème d&#8217;accès à l&#8217;IP publique d&#8217;une Freebox à travers le NAT</title>
		<link>http://blog.gnusquad.org/2009/02/</link>
		<comments>http://blog.gnusquad.org/2009/02/#comments</comments>
		<pubDate>Mon, 23 Feb 2009 06:20:24 +0000</pubDate>
		<dc:creator>Sylvain</dc:creator>
		
		<category><![CDATA[Debian GNU/Linux]]></category>

		<category><![CDATA[Système]]></category>

		<category><![CDATA[Planet Libre]]></category>

		<guid isPermaLink="false">http://blog.gnusquad.org/?p=97</guid>
		<description><![CDATA[Voici un état des lieux : je dispose d&#8217;une Freebox v4, j&#8217;ai activé le NAT et le DHCP (adresses IP fixées par adresse MAC) pour mes PC. Il y en a un qui est entièrement accessible depuis internet grâce à l&#8217;option « IP DMZ » présente dans la console d&#8217;administration de la Freebox qui redirige [...]]]></description>
			<content:encoded><![CDATA[<p>Voici un état des lieux : je dispose d&#8217;une Freebox v4, j&#8217;ai activé le NAT et le DHCP (adresses IP fixées par adresse MAC) pour mes PC. Il y en a un qui est entièrement accessible depuis internet grâce à l&#8217;option « IP DMZ » présente dans la console d&#8217;administration de la Freebox qui redirige toutes les connexions entrantes non encore établies en provenance d&#8217;internet vers l&#8217;adresse IP désignée, dans mon cas 192.168.0.1. Mon adresse IP publique est associée au domaine <em>gnusquad.org</em> donc tout le traffic à destination de ce domaine part sur le PC ayant l&#8217;IP 192.168.0.1.</p>
<p>Voici un schéma afin d&#8217;être plus clair :<br />
<img src="http://blog.gnusquad.org/wp-content/uploads/2009/02/graph1.png" alt="Graphique Freebox" title="Graphique Freebox" width="469" height="296" class="alignnone size-full wp-image-130" /></p>
<p>Le problème est qu&#8217;il est impossible depuis le PC ayant l&#8217;IP 192.168.0.2 d&#8217;accéder, par exemple, à mon blog (<a href="blog.gnusquad.org">http://blog.gnusquad.org</a>), la résolution DNS renvoyant mon adresse IP publique et la Freebox ne redirigeant le traffic « IP DMZ » que depuis le WAN et non le LAN !</p>
<p>Ma solution initiale était d&#8217;ajouter sur le PC ayant l&#8217;IP 192.168.0.2, une entrée dans le fichier « <em>/etc/hosts</em> » qui pour rappel, permet de fixer une adresse IP pour une liste de domaines et de sous-domaines :</p>
<pre><strong>root@gnusquad</strong>:~# vi /etc/hosts

192.168.0.1 gnusquad.org www.gnusquad.org blog.gnusquad.org man.gnusquad.org
...</pre>
<p>Cette solution a le mérite d&#8217;être simple et rapide à mettre en œuvre mais a comme désavantage le fait de devoir tenir à jour cette entrée par rapport à la liste grandissante des sous-domaines hébergés sur la même machine.</p>
<p>Il était donc temps de trouver une solution plus confortable, c&#8217;est pourquoi j&#8217;ai décidé d&#8217;installer un proxy DNS, en l&#8217;occurence <em>pdnsd</em> qui me permettrait de modifier les enregistrements DNS à ma guise.</p>
<pre><strong>root@gnusquad</strong>:~# aptitude install pdnsd</pre>
<p>L&#8217;installation vous demandera si vous préférez utiliser les DNS fournis par le programme <em>resolvconf</em>, les DNS des serveurs racines ou bien encore si vous préférez les indiquer manuellement.<br />
Utilisant <em>resolvconf</em>, ce que je vous conseille au passage, j&#8217;ai choisi cette option ce qui aura pour conséquence, au lancement de <em>pdnsd</em> de mettre l&#8217;IP 127.0.0.1 dans le fichier <em>/etc/resolv.conf</em> à la place des DNS de votre FAI, ces derniers étant utilisés par le proxy pour la résolution de noms.</p>
<p>Il faut ensuite, désactiver la génération automatique du fichier de configuration du proxy en commentant la ligne <em>AUTO_MODE</em> du fichier <em>/etc/default/pdnsd.conf</em> . Vous pouvez également spécifiez des options de démarrage via la variable <em>START_OPTIONS</em> ce qui peut être utile pour activer le mode debug (option<em> &#8211;debug</em>). Voici ce que ça donne une fois le fichier modifié :</p>
<pre><strong>root@gnusquad</strong>:~# cat /etc/default/pdnsd.conf

# do we start pdnsd ?
START_DAEMON=yes
# auto-mode, overrides /etc/pdsnd.conf if set [see /usr/share/pdnsd/]
#AUTO_MODE=resolvconf
# optional CLI options to pass to pdnsd(8)
START_OPTIONS="--debug"</pre>
<p>Maintenant il ne reste plus qu&#8217;à configurer le proxy DNS pour renvoyer l&#8217;IP 192.168.0.2 pour toutes demandes de résolution de noms portant sur le domaine <em>gnusquad.org</em> ce qui se fait aisément une fois après avoir lu la man page du fichier <em>pdnsd.conf</em> :</p>
<pre><strong>root@gnusquad</strong>:~# vi /etc/pdnsd.conf

...
rr {
    name=gnusquad.org;
    ns=localhost;
    reverse=on;
    a=192.168.0.1;
}
rr {
    name=*.gnusquad.org;
    a=192.168.0.1;
}
...</pre>
<p>Il ne reste plus qu&#8217;à redémarrer le proxy DNS pour que les changements soient pris en compte :</p>
<pre><strong>root@gnusquad</strong>:~# /etc/init.d/pdnsd restart
Stopping pdnsd.
Starting pdnsd.
</pre>
<p>Pour terminer, sachez que <em>pdnsd</em> fait également office de cache DNS pour accélérer les résolutions de noms, ce cache se trouve dans le fichier <em>/var/cache/pdnsd/pdnsd.cache</em> que vous pouvez supprimer sans souci si vous rencontrez quelques problèmes durant vos tests. Quant aux logs, ceux-ci se trouvent dans le fichier <em>/var/cache/pdnsd/pdnsd.debug</em>.</p>
<p>À lire :</p>
<ul>
<li><a href="http://fr.wikipedia.org/wiki/R%C3%A9solution_de_noms">Résolution de noms</a></li>
<li><a href="http://man.gnusquad.org/pdnsd/section-8/en/">Man pdnsd</a></li>
<li><a href="http://man.gnusquad.org/pdnsd.conf/section-5/en/">Man pdnsd.conf</a></li>
<li><a href="http://man.gnusquad.org/resolvconf/section-8/en/">Man resolvconf<br />
</a></li>
</ul>
<p><span id="more-97"></span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gnusquad.org/2009/02/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mettre en surbrillance un élément dans un Shell</title>
		<link>http://blog.gnusquad.org/2009/02/</link>
		<comments>http://blog.gnusquad.org/2009/02/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 22:41:59 +0000</pubDate>
		<dc:creator>Sylvain</dc:creator>
		
		<category><![CDATA[Debian GNU/Linux]]></category>

		<category><![CDATA[Système]]></category>

		<category><![CDATA[Planet Libre]]></category>

		<guid isPermaLink="false">http://blog.gnusquad.org/?p=70</guid>
		<description><![CDATA[Ne vous est-il jamais arrivé d&#8217;avoir eu besoin de mettre en surbrillance un élément dans un shell suite à un « cat », un « tail », etc tout en conservant le contexte ?
Si la réponse est « oui », voici deux solutions du même acabit permettant de parvenir à vos fins :
1ère solution utilisant [...]]]></description>
			<content:encoded><![CDATA[<p>Ne vous est-il jamais arrivé d&#8217;avoir eu besoin de mettre en surbrillance un élément dans un shell suite à un « <em>cat</em> », un « <em>tail</em> », etc tout en conservant le contexte ?</p>
<p>Si la réponse est « oui », voici deux solutions du même acabit permettant de parvenir à vos fins :</p>
<h3>1ère solution utilisant Perl</h3>
<p>Nous allons définir une fonction <em>bash</em> nommée « <em>hl</em> » (pour highlight) prenant en paramètre une expression rationnelle compatible <em>Perl</em> (une « <em>PCRE</em> ») capturant l&#8217;élément à mettre en surbrillance :</p>
<pre>
<em>user@gnusquad</em>:~$ function hl(){ perl -pe "s/($1)/\e[1;42m\$1\e[0m/g" ; }
</pre>
<p>Voici quelques exemples d'utilisation :</p>
<pre>
<em>user@gnusquad</em>:~$ echo "GNU Squad" | hl GNU
<em>GNU</em> Squad

<em>user@gnusquad</em>:~$ echo "GNU Squad" | hl S.+d
GNU <em>Squad</em>

<strong>root@gnusquad</strong>:~# tail -f /var/log/apache2/access.log | hl 192.168.[0-9]+.[0-9]+
<em>192.168.0.3</em> - - [06/Feb/2009:22:51:18 +0100] "GET / HTTP/1.1" 304 - "http://blog.gnusquad.org/" ""
</pre>
<p>Je vous invite à lire le billet « <a href="http://blog.gnusquad.org/2008/11/22/mettez-de-la-couleur-dans-votre-prompt/">Mettez de la couleur dans votre prompt</a> » si vous souhaitez changer la couleur de surbrillance.</p>
<h3>2ème solution utilisant grep</h3>
<p>Même principe que précédemment : nous allons définir une fonction <em>bash</em> nommée « <em>hl</em> » prenant en paramètre une expression rationnelle compatible <em>POSIX</em> capturant l&#8217;élément à mettre en surbrillance :</p>
<pre>
<em>user@gnusquad</em>:~$ function hl(){ grep --color -C1000000 -E $1 ; }
</pre>
<p>Le résultat étant le même que la solution précédente, pas besoin de nouveaux exemples.</p>
<p>Notez cependant que cette solution est moins propre que la première à cause de l&#8217;option <em>-C</em> qui utilise un nombre magique (en fait celui-ci correspond au nombre de lignes à afficher avant et après le motif trouvé) mais est en contrepartie plus facile à lire&hellip;</p>
<p>Il ne vous reste plus qu&#8217;à mettre cette fonction dans votre fichier <em>~/.bashrc</em> et le tour est joué ! <img src='http://blog.gnusquad.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>À lire :</p>
<ul>
<li><a href="http://man.gnusquad.org/perl/section-1/en/">Man page de Perl</a></li>
<li><a href="http://man.gnusquad.org/grep/section-1/fr/">Man page de grep</a></li>
</ul>
<p><span id="more-70"></span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gnusquad.org/2009/02/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Faites taire votre PC Speaker !</title>
		<link>http://blog.gnusquad.org/2009/02/</link>
		<comments>http://blog.gnusquad.org/2009/02/#comments</comments>
		<pubDate>Thu, 05 Feb 2009 13:20:57 +0000</pubDate>
		<dc:creator>Sylvain</dc:creator>
		
		<category><![CDATA[Debian GNU/Linux]]></category>

		<category><![CDATA[Système]]></category>

		<category><![CDATA[X Window System]]></category>

		<category><![CDATA[Planet Libre]]></category>

		<guid isPermaLink="false">http://blog.gnusquad.org/?p=42</guid>
		<description><![CDATA[Quoi de plus énervant que de se faire agresser par le PC Speaker lors d&#8217;une erreur, d&#8217;une completion automatique dans bash ou que sais-je encore ? Je vais vous présenter plusieurs solutions pour le faire taire à jamais :

Empêcher le module noyau dédié au PC Speaker de se charger :


root@gnusquad:~# echo "install pcspkr /bin/true" > [...]]]></description>
			<content:encoded><![CDATA[<p>Quoi de plus énervant que de se faire agresser par le PC Speaker lors d&#8217;une erreur, d&#8217;une completion automatique dans bash ou que sais-je encore ? Je vais vous présenter plusieurs solutions pour le faire taire à jamais :</p>
<ul>
<li>Empêcher le module noyau dédié au PC Speaker de se charger :</li>
</ul>
<pre>
<strong>root@gnusquad</strong>:~# echo "install pcspkr /bin/true" > /etc/modprobe.d/pcspkr
</pre>
<p>Il est également possible d&#8217;ignorer le chargement du module mais la première méthode est la méthode conseillée en cas de module récalcitrant : </p>
<pre>
<strong>root@gnusquad</strong>:~# echo "blacklist pcspkr" > /etc/modprobe.d/pcspkr
</pre>
<p>Il se peut que le module à désactiver ne soit pas « <em>pcspkr</em> » mais « <em>snd_pcsp</em> », à vous de tester avec « <em>rmmod xxx</em> » qui déchargera le module en live. </p>
<ul>
<li>Désactiver les beeps sous X11 :</li>
</ul>
<pre>
<em>user@gnusquad</em>:~$ xset b off
</pre>
<p>Vous pouvez également ajouter cette commande dans votre fichier « <em>~/.xinitrc</em> » pour qu&#8217;elle soit lancée automatiquement au démarrage de X11. </p>
<ul>
<li>Désactiver les beeps sous une console tty</li>
</ul>
<pre>
<em>user@gnusquad</em>:~$ setterm -blength 0
</pre>
<p>Vous pouvez également ajouter cette commande dans votre fichier « <em>~/.bashrc</em> » pour qu&#8217;elle soit lancée automatiquement lorsque vous vous authentifiez. </p>
<ul>
<li>Désactiver les beeps pour les programmes utilisant la bibliothèque « <em>readline</em> » :</li>
</ul>
<pre>
<em>user@gnusquad</em>:~$ echo "set bell-style none" >> ~/.inputrc
</pre>
<p>À lire :</p>
<ul>
<li><a href="http://man.gnusquad.org/modprobe.conf/section-5/en/">Man page de modprobe.conf</a></li>
<li><a href="http://man.gnusquad.org/xset/section-1/en/">Man page de xset</a></li>
<li><a href="http://man.gnusquad.org/setterm/section-1/fr/">Man page de setterm</a></li>
<li><a href="http://man.gnusquad.org/readline/section-3/en/">Man page de readline</a></li>
</ul>
<p><span id="more-42"></span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gnusquad.org/2009/02/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Forcer la vérification des partitions au démarrage</title>
		<link>http://blog.gnusquad.org/2008/12/</link>
		<comments>http://blog.gnusquad.org/2008/12/#comments</comments>
		<pubDate>Fri, 19 Dec 2008 11:27:59 +0000</pubDate>
		<dc:creator>Sylvain</dc:creator>
		
		<category><![CDATA[Debian GNU/Linux]]></category>

		<category><![CDATA[Système]]></category>

		<category><![CDATA[Planet Libre]]></category>

		<guid isPermaLink="false">http://blog.gnusquad.org/?p=39</guid>
		<description><![CDATA[Si vous souhaitez forcer la vérification des partitions (le fameux « fsck »)  au prochain démarrage de votre Debian, rien de plus simple, il suffit de créer le fichier « forcefsck » à la racine :
root@gnusquad:~# &#62; /forcefsck
Celui-ci sera automatiquement supprimé une fois la vérification effectuée.
L&#8217;inverse est également possible en créant le fichier « [...]]]></description>
			<content:encoded><![CDATA[<p>Si vous souhaitez forcer la vérification des partitions (le fameux « <em>fsck</em> »)  au prochain démarrage de votre Debian, rien de plus simple, il suffit de créer le fichier « <em>forcefsck</em> » à la racine :</p>
<pre><strong>root@gnusquad</strong>:~# &gt; /forcefsck</pre>
<p>Celui-ci sera automatiquement supprimé une fois la vérification effectuée.</p>
<p>L&#8217;inverse est également possible en créant le fichier « <em>fastboot</em> » à la racine :</p>
<pre><strong>root@gnusquad</strong>:~# &gt; /fastboot</pre>
<p>Notez au passage, que la commande « <em>shutdown</em> » peut également faire ce travail en lui passant les paramètres « <em>-F</em> » pour forcer la vérification au démarrage et « <em>-f</em> » pour avoir un démarrage rapide, sans « <em>fsck</em> ».</p>
<p>À lire :</p>
<ul>
<li><a href="http://man.gnusquad.org/shutdown/section-8/en/">Man page de shutdown</a></li>
<li><a href="http://man.gnusquad.org/?q=fsck">Man pages des *fsck</a></li>
</ul>
<p><span id="more-39"></span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gnusquad.org/2008/12/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Limiter le temps d&#8217;exécution d&#8217;une requête MySQL</title>
		<link>http://blog.gnusquad.org/2008/11/</link>
		<comments>http://blog.gnusquad.org/2008/11/#comments</comments>
		<pubDate>Thu, 27 Nov 2008 12:03:54 +0000</pubDate>
		<dc:creator>Sylvain</dc:creator>
		
		<category><![CDATA[Base de données]]></category>

		<category><![CDATA[Debian GNU/Linux]]></category>

		<category><![CDATA[Gestionnaires de versions]]></category>

		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[Système]]></category>

		<category><![CDATA[Planet Libre]]></category>

		<guid isPermaLink="false">http://blog.gnusquad.org/?p=38</guid>
		<description><![CDATA[Vous est-il déjà arrivé de voir un de vos serveurs de base de données MySQL mis à genous par la faute de développeurs incompétents qui effectuent des requêtes sur des tables sans index composées de dizaines de millions de tuples ?
Si la réponse est oui, voici ma solution « one line » pour les calmer [...]]]></description>
			<content:encoded><![CDATA[<p>Vous est-il déjà arrivé de voir un de vos serveurs de base de données MySQL mis à genous par la faute de développeurs incompétents qui effectuent des requêtes sur des tables sans index composées de dizaines de millions de tuples ?<br />
Si la réponse est oui, voici ma solution « <em>one line</em> » pour les calmer un peu ! <img src='http://blog.gnusquad.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Logiciels utilisés :</p>
<ul>
<li>GNU Awk 3.1.5</li>
<li>MySQL Client 5.0.51a</li>
</ul>
<pre>
<strong>root@gnusquad</strong>:~# mysql -e 'SHOW PROCESSLIST' | awk 'BEGIN { MAX_TIME = 60 ; USERS = "boulet1|boulet2" } $6 &gt; MAX_TIME &amp;&amp; $5 == "Query" &amp;&amp; $2 ~ USERS {print "KILL " $1 ";"}' | mysql
</pre>
<p>Petites explications sur le code « awk » :</p>
<ul>
<li>$1 contient l&#8217;ID de la requête SQL</li>
<li>$2 contient le nom de l&#8217;utilisateur</li>
<li>$5 contient le type de commande (Query, Sleep, …)</li>
<li>$6 contient le temps d&#8217;exécution de la requête SQL en secondes</li>
<li>MAX_TIME contient le temps en secondes à partir duquel une requête doit être tuée</li>
<li>USERS contient une expression rationnelle indiquant les utilisateurs concernés par cette sanction</li>
</ul>
<p>Il ne vous reste plus qu&#8217;à mettre ce script dans le « <em>crontab</em> » en pensant à vous connecter avec un utilisateur MySQL ayant le droit « <em>SUPER</em> » pour pouvoir tuer les connexions si besoin est. <img src='http://blog.gnusquad.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>À lire :</p>
<ul>
<li><a href="http://man.gnusquad.org/gawk/section-1/en/">Man page de gawk</a></li>
</ul>
<p><span id="more-38"></span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gnusquad.org/2008/11/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mettez de la couleur dans votre « prompt » !</title>
		<link>http://blog.gnusquad.org/2008/11/</link>
		<comments>http://blog.gnusquad.org/2008/11/#comments</comments>
		<pubDate>Sat, 22 Nov 2008 16:26:01 +0000</pubDate>
		<dc:creator>Sylvain</dc:creator>
		
		<category><![CDATA[Debian GNU/Linux]]></category>

		<category><![CDATA[Système]]></category>

		<category><![CDATA[Planet Libre]]></category>

		<guid isPermaLink="false">http://blog.gnusquad.org/?p=37</guid>
		<description><![CDATA[Le « prompt », que l&#8217;on désigne par « invite de commande » en français est une chaîne de caractères indiquant que l&#8217;ordinateur est prêt à recevoir une saisie au clavier.
Les informations qui suivent concernent le shell livré par défaut avec la plupart des distributions, le bien nommé « Bash ».
Le « prompt » est [...]]]></description>
			<content:encoded><![CDATA[<p>Le « prompt », que l&#8217;on désigne par « invite de commande » en français est une chaîne de caractères indiquant que l&#8217;ordinateur est prêt à recevoir une saisie au clavier.</p>
<p>Les informations qui suivent concernent le shell livré par défaut avec la plupart des distributions, le bien nommé « Bash ».</p>
<p>Le « prompt » est défini dans une variable d&#8217;environnement nommée « PS1 », celle-ci peut contenir des données statiques mais également des « séquences d&#8217;échappement » spéciales permettant d&#8217;afficher des données dynamiques comme le nom d&#8217;utilisateur courant, le répertoire courant, etc. Il est également possible de mettre de la couleur afin d&#8217;égayer un peu votre terminal et surtout de vous retrouvez dans vos différents comptes utilisateurs ou dans vos différentes machines.</p>
<p>Voici la liste des séquences d&#8217;échappement intéressantes :</p>
<pre>\h : le nom de la machine (hostname) jusqu'au premier point
\H : le nom de la machine complet
\j : le nombre de processus fils lancés en arrière plan
\e : caractère d'échappement (utile pour les couleurs)
\n : nouvelle ligne
\r : retour chariot
\u : le nom d'utilisateur courant
\w : le chemin complet du répertoire de travail courant
\W : le répertoire de travail courant
\$ : affiche un # si l'utilisateur est root sinon affiche un $
\[ : début d'une séquence de caractères non imprimables
\] : fin d'une séquence de caractères non imprimables
\D{format} : la date selon le format passé en paramètre (cf. la syntaxe de « strftime »)</pre>
<p>Les couleurs quant à elles sont des « séquences d&#8217;échappement ANSI » entourées d&#8217;un début et d&#8217;une fin de séquence de caractères non imprimables. Ces séquences ont un format bien déterminé : celui-ci commence par « <em>ESC[</em> » et se termine par « <em>m</em> ». Entre ces deux parties, il faut indiquer un code de mise en forme (gras, souligné, clignotement, etc) ainsi qu'un code pour la couleur désirée, les deux champs étant séparés par un point-virgule.</p>
<p>Voici la liste des mises en forme les plus courantes :</p>
<pre> 0 : normal
 1 : gras
 4 : souligné
 5 : clignotement
 7 : négatif
22 : désactivation du gras
24 : désactivation du souligné
25 : désactivation du clignotement</pre>
<p>Et la liste des couleurs :</p>
<pre>0 : noir
1 : rouge
2 : vert
3 : jaune
4 : bleu
5 : magenta
6 : cyan
7 : blanc</pre>
<p>À ces dernières doit être additionné un nombre afin de définir si l'on veut modifier la couleur du fond ou du texte tout en réglant l'intensité :</p>
<pre> 30 : couleur du texte, intensité normale
 40 : couleur du fond, intensité normale
 90 : couleur du texte, intensité élevée
100 : couleur du fond, intensité élevée</pre>
<p>Pour voir votre PS1 actuel, tapez simplement dans un shell :</p>
<pre><em>user@gnusquad</em>:~$ echo $PS1
\[\e[1;42m\]\u@\H\[\e[0;40m\]:\w\$</pre>
<p>Décortiquons cette ligne :</p>
<pre>\[   : début d'une séquence de caractères non imprimables (pour la couleur)
\e[  : début d'une séquence ANSI
1;42 : mise en forme grasse avec une couleur de fond verte intensité normale
m    : fin d'une séquence ANSI
\]   : fin d’une séquence de caractères non imprimables
\u   : nom d'utilisateur courant
@    : signe @
\H   : nom de la machine complète
\[   : début d'une séquence de caractères non imprimables
\e[  : début d'une séquence ANSI
0;40 : mise en forme normale avec une couleur de fond noir intensité normale
m    : fin d'une séquence ANSI
\]   : fin d’une séquence de caractères non imprimables
:    : signe :
\w   : chemin complet du répertoire de travail courant
\$   : caractère # si l'utilisateur est root sinon caractère $</pre>
<p>Pour tester vos créations (ici un fond rouge qui peut être pratique pour l&#8217;utilisateur « root »), il vous suffira de taper dans un shell :</p>
<pre><em>user@gnusquad</em>:~$ PS1='\[\e[1;41m\]\u@\H\[\e[0;40m\]:\w\$'
<strong>user@gnusquad</strong>:~$</pre>
<p>Une fois satisfait de votre « PS1 », vous n&#8217;aurez plus qu&#8217;à le mettre dans le fichier « <em>/etc/bash.bashrc</em> » (pour tous les utilisateurs) ou dans votre fichier «<em> ~/.bashrc</em> » (pour vous uniquement).</p>
<p>Notez au passage qu&#8217;il existe aussi trois autres variables d&#8217;environnement « PS2 », « PS3 » et « PS4 » que je vous laisse découvrir dans le man de bash ! <img src='http://blog.gnusquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>N&#8217;hésitez pas à proposer vos « prompt » en commentaires ! <img src='http://blog.gnusquad.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>À lire :</p>
<ul>
<li><a href="http://man.gnusquad.org/bash/section-1/en/">Man page de Bash</a></li>
<li><a href="http://en.wikipedia.org/wiki/Escape_sequence">Séquence d&#8217;échappement</a></li>
<li><a href="http://man.gnusquad.org/strftime/section-3/en/">Man page de la fonction strftime</a></li>
<li><a href="http://en.wikipedia.org/wiki/ANSI_escape_code">Séquences d&#8217;échappement ANSI</a></li>
</ul>
<p><span id="more-37"></span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gnusquad.org/2008/11/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Captures d&#8217;écrans des applications disponibles dans Debian</title>
		<link>http://blog.gnusquad.org/2008/11/</link>
		<comments>http://blog.gnusquad.org/2008/11/#comments</comments>
		<pubDate>Thu, 20 Nov 2008 18:45:56 +0000</pubDate>
		<dc:creator>Sylvain</dc:creator>
		
		<category><![CDATA[Actualités]]></category>

		<category><![CDATA[Debian GNU/Linux]]></category>

		<category><![CDATA[Planet Libre]]></category>

		<guid isPermaLink="false">http://blog.gnusquad.org/?p=35</guid>
		<description><![CDATA[Le projet Debian vient de lancer un nouveau service destiné à recueillir les captures d&#8217;écrans d&#8217;un maximum d&#8217;applications  faisant parti de la dite distribution. Ces captures pourront ensuite être utilisées dans diverses applications, notamment les gestionnaires de paquets graphiques. Actuellement, seul Synaptic sait tirer parti de ces captures d&#8217;écrans mais nul doute que ses [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.gnusquad.org/wp-content/uploads/2008/11/screenshot_debian.png"><img class="alignleft size-medium wp-image-36" style="float:left; margin-right: 1em" title="http://screenshots.debian.net" src="http://blog.gnusquad.org/wp-content/uploads/2008/11/screenshot_debian-300x181.png" alt="" width="300" height="181" /></a>Le projet Debian vient de lancer un nouveau service destiné à recueillir les captures d&#8217;écrans d&#8217;un maximum d&#8217;applications  faisant parti de la dite distribution. Ces captures pourront ensuite être utilisées dans diverses applications, notamment les gestionnaires de paquets graphiques. Actuellement, seul Synaptic sait tirer parti de ces captures d&#8217;écrans mais nul doute que ses concurrents le supporteront d&#8217;ici peu.</p>
<p>Concernant le site en lui même, celui-ci est plutôt bien fichu : il est « classe » (admirez, entre autre, l&#8217;effet de zoom lors d&#8217;un clic sur une miniature <img src='http://blog.gnusquad.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ) , sans fioritures, dispose d&#8217;un moteur de recherche, bref, c&#8217;est que du bonheur ! Rien de tel également pour découvrir de nouvelles applications intéressantes sans se fouler ! <img src='http://blog.gnusquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Les captures d&#8217;écrans sont envoyées par les utilisateurs en respectant certaines règles, celles-ci sont alors soumises à vérification et sont automatiquement publiées sous les mêmes termes de licence que le paquet Debian du logiciel.</p>
<p>À lire :</p>
<ul>
<li><a href="http://screenshots.debian.net/">Debian Screenshots<br />
</a></li>
<li><a href="http://screenshots.debian.net/guidelines">Règles à respecter pour l&#8217;envoi de captures d&#8217;écrans</a></li>
</ul>
<p><span id="more-35"></span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gnusquad.org/2008/11/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
