<?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>Per aspera ad astra &#187; Frugalware</title>
	<atom:link href="http://elentir.toile-libre.org/?feed=rss2&#038;cat=4" rel="self" type="application/rss+xml" />
	<link>http://elentir.toile-libre.org</link>
	<description></description>
	<lastBuildDate>Sun, 04 Apr 2010 15:11:48 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Script d&#8217;extinction pour gestionnaire de fenêtre léger</title>
		<link>http://elentir.toile-libre.org/?p=225</link>
		<comments>http://elentir.toile-libre.org/?p=225#comments</comments>
		<pubDate>Sun, 04 Apr 2010 15:11:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Frugalware]]></category>
		<category><![CDATA[Informatique]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[dbus]]></category>
		<category><![CDATA[Openbox]]></category>

		<guid isPermaLink="false">http://elentir.toile-libre.org/?p=225</guid>
		<description><![CDATA[L'un des principaux problèmes (qualité?) des gestionnaires de fenêtre léger du type Openbox, Fluxbox et consoeurs est qu'ils demandent un peu plus de travail pour certaines opérations. Il en est de l'extinction de l'ordinateur. Alors que des monstres comme KDE ou encore Gnome font ça tout seul, cela demande un peu plus de travail pour les autres. Je présente ici le script que j'utilise sous Openbox.]]></description>
			<content:encoded><![CDATA[<p>L&#8217;un des principaux problèmes (qualité?) des gestionnaires de fenêtre léger du type Openbox, Fluxbox et consoeurs est qu&#8217;ils demandent un peu plus de travail pour certaines opérations. Il en est de l&#8217;extinction de l&#8217;ordinateur. Alors que des monstres comme KDE ou encore Gnome font ça tout seul, cela demande un peu plus de travail pour les autres. Je présente ici le script que j&#8217;utilise sous Openbox.</p>
<p>Ce sujet à été largement traité notamment <a href="http://pizux.unblog.fr/2009/02/01/eteindre-son-ordinateur-depuis-openboxfluxboxpekwmwindowmaker-etc/">ici</a>. Néanmoins le script proposé ne me satisfaisais pas, d&#8217;une part car il nécessitait de configurer le fichier /etc/sudoers pour pouvoir appeler les fichiers /sbin/reboot, &#8230; via <em>sudo</em> sans mot de passe et d&#8217;autre part car il n&#8217;était pas joli à voir =).</p>
<p>Le premier problème peut se résoudre en passant par DBus. En effet l&#8217;interface DBus </p>
<pre class="brush:bash">
/org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement
</pre>
<p>de Hal nous fournit les commandes de gestion de l&#8217;alimentation. Elle permet notamment de pouvoir redémarrer, éteindre ou encore mettre en veille son ordinateur. Il suffit pour cela d&#8217;appeler la fonction DBus correspondante. On peut par exemple le faire via la commande :</p>
<pre class="brush:bash">
dbus-send --system --print-reply --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Reboot
</pre>
<p>pour redémarrer la machine.</p>
<p>En cherchant sur internet, j&#8217;ai trouvé ce <a href="http://www.ad-comp.be/public/projets/My_Exit/openbox_logout.tar.bz2">script</a> que j&#8217;ai complètement réécris. Il est écrit en Python et utilise PyGTK uniquement. Je lui ai ajouté le support de DBus. En effet Python fournit un binding pour DBus extrèmement puissant! Je l&#8217;ai rendu un peu plus joli lorsque l&#8217;on passe la souris sur les boutons même si il reste un peu à faire au niveau de l&#8217;effet qui n&#8217;est pas assez visible à mon goût.<br />
Je l&#8217;ai aussi rendu assez configurable via un fichier de configuration pour le rendre indépendant du gestionnaire de login et du gestionnaire de fenêtre et assez facilement personalisable (police de caractère des titres, images des boutons, exécution des commandes personalisés, nombre de bouton par ligne et emplacement des lignes, taille des espacements entre boutons, etc.). Une dernière chose est qu&#8217;il marche assez correctement (il manque juste les titres des boutons pour le moment) sans fond d&#8217;écran.</p>
<p>Et voici le résultat :</p>
<p><a href="http://elentir.toile-libre.org/upload/exitit/exitit3.jpg"><img alt="" src="http://elentir.toile-libre.org/upload/exitit/exitit3.jpg" title="ExitIt avec fond d'écran" class="aligncenter" width="553" height="440" /></a><br />
et sans fond d&#8217;écran :</p>
<p><a href="http://elentir.toile-libre.org/upload/exitit/exitit2.jpg"><img alt="" src="http://elentir.toile-libre.org/upload/exitit/exitit2.jpg" title="ExitIt sans fond d'écran" class="aligncenter" width="553" height="440" /></a></p>
<p>Le fichier de configuration est assez simple. La description d&#8217;un bouton est de cette forme :</p>
<pre class="brush:bash">
[monbouton]
title=Titre de mon bouton
exec=Commande à éxécuter
tooltip=Le tooltip en cas de lancement sans fond d'écran ça peut être utile
image=chemin/vers/image
</pre>
<p>Je renvoi à l&#8217;exemple de fichier de configuration donné par défaut dans l&#8217;archive du script qui est largement commenté. Les boutons &laquo;&nbsp;hibernate&nbsp;&raquo;, &laquo;&nbsp;reboot&nbsp;&raquo; ou &laquo;&nbsp;shutdown&nbsp;&raquo; sont déjà préconfigurés pour utiliser DBus. Ils ne demandent que la configuration d&#8217;une image et d&#8217;un titre. A noter aussi que les boutons préconfigurés &laquo;&nbsp;hibernate&nbsp;&raquo; et &laquo;&nbsp;suspend&nbsp;&raquo; n&#8217;apparaissent que si l&#8217;ordinateur le supporte.<br />
Le script utilise l&#8217;ordre des d&#8217;appartition dans le fichier de configuration comme ordre pour les boutons affichés à l&#8217;écran.</p>
<p>Pour finir le lien vers ce <a href="http://elentir.toile-libre.org/upload/exitit/exitit-0.1.tar.gz">script</a>.<br />
Il suffit de s&#8217;assurer que le fichier de configuration est dans le même répertoire que le fichier &laquo;&nbsp;exitit&nbsp;&raquo; et de lancer ce fichier &laquo;&nbsp;exitit&nbsp;&raquo; pour démarrer le script.</p>
]]></content:encoded>
			<wfw:commentRss>http://elentir.toile-libre.org/?feed=rss2&amp;p=225</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Fwife 0.6 dans les bacs</title>
		<link>http://elentir.toile-libre.org/?p=87</link>
		<comments>http://elentir.toile-libre.org/?p=87#comments</comments>
		<pubDate>Sun, 24 Jan 2010 22:30:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Frugalware]]></category>
		<category><![CDATA[Informatique]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Fwife]]></category>

		<guid isPermaLink="false">http://elentir.toile-libre.org/?p=87</guid>
		<description><![CDATA[Voilà, c'est fait, après de nombreux retards (voilà ce qui arrive à faire trop de maths :p), j'ai enfin sorti la version 0.6 de <em>Fwife</em>. Cette version est accompagné d'une nouvelle version des cd d'installations disponible sur le site de votre serviteur ;)]]></description>
			<content:encoded><![CDATA[<p>Voilà, c&#8217;est fait, après de nombreux retards (voilà ce qui arrive à faire trop de maths :p), j&#8217;ai enfin sorti la version 0.6 de <a href="http://elentir.toile-libre.org/?page_id=102"><em>Fwife</em></a>. Cette version est accompagné d&#8217;une nouvelle version des <a href="http://elentir.toile-libre.org/?page_id=115">cd d&#8217;installations</a> disponible sur le site de votre serviteur <img src='http://elentir.toile-libre.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Je vais présenter les principaux changements :<br />
&#8211; j&#8217;ai ajouté une fonction permettant de scanner les points d&#8217;accès WiFi :</p>
<p><img alt="" src="http://elentir.toile-libre.org/fwife/captures/selectap.jpg" title="Selection des points d'accès" class="aligncenter" width="443" height="280" /><br />
Si l&#8217;ESSID n&#8217;est pas caché, c&#8217;est souvent plus rapide que de le retrouver pour l&#8217;écrire à la main.<br />
&#8211; affichage du status des mirroirs comme ceci :</p>
<p><img alt="" src="http://elentir.toile-libre.org/fwife/captures/selectmirror.jpg" title="Status des mirroirs" class="aligncenter" width="500" height="400" /></p>
<p>Cela permet d&#8217;éviter de sélectionner les mirroirs qui ne fonctionnent pas (par défaut lorsqu&#8217;un mirroir ne fonctionne pas, <em>pacman-g2</em> prend le suivant sur sa liste, et d&#8217;après l&#8217;un des corollaires de la <a href="http://fr.wikipedia.org/wiki/Loi_de_Murphy">loi de Murphy</a>, c&#8217;est toujours le plus lent!). A noter que pour l&#8217;instant, la fonction est très manichéenne, les mirroirs trop long à répondre seront affichés avec un point rouge. La prochaine version de fwife devrait les considérer différemment (par exemple avec un point orange <img src='http://elentir.toile-libre.org/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ). Cette modification devrait être assez triviale.</p>
<p>Coté modifications &laquo;&nbsp;moins visuelles&nbsp;&raquo;, j&#8217;ai réorganisé le plugin de configuration réseau en essayant de tenir compte des <a href="http://cyrille-borne.com/forum/showthread.php?tid=5&#038;page=5">remarques</a> qui m&#8217;ont été faite sur le forum de Cyrille Borne. Je crois que ce plugin est le seul à avoir subi tant de changements et réecritures successives au cours des différentes versions. Je n&#8217;arrive pas à trouver par quel bout le prendre. Pour cette fois j&#8217;ai laissé tombé la recherche dhcp sur le réseau que j&#8217;avais introduite dans la version précédente; trop dépendante de la version de <em>dhcpcd</em> utilisée, et très lent si le réseau n&#8217;utilise pas dhcp. De plus, la cascade de boîtes de dialogues au lancement de ce plugin était assez confuse. J&#8217;ai finalement implémenté une fonction permettant de détecter les configurations actives sachant que dhcpcd laisse toujours une trace permettant de trouver sur quelles interfaces réseaux il est lancé. L&#8217;idée étant, pour le CD, de lancer <em>dhcpcd</em> au démarrage et <em>Fwife</em> s&#8217;occupera ensuite de trouver si dhcpcd a réussi à se lancer sur une des interfaces réseaux.<br />
Autre modification importante, <em>Fwife</em> supporte enfin correctement la branche &laquo;&nbsp;<em>stable</em>&nbsp;&raquo; de Frugalware, ce qui n&#8217;étais pas le cas de la version précédente. Je sortirai des CD installant la version &laquo;&nbsp;<em>stable</em>&nbsp;&raquo; de Frugalware juste avant la sortie de la de la version 1.2 Locris, c&#8217;est à dire au <a href="http://www.frugalware.org/roadmap">mois de mars</a>.</p>
<p>Pour cette version j&#8217;ai réecrit une grande quantité du code : plus propre, plus simple (parfois on se complique la vie alors que la solution simple est sous notre nez) et plus rapide pour certaines fonctions (lecture de la base de donnée de paquets par exemple). Le revers de la médaille est que des régréssions ont pu être ajoutées par rapport à la version précédente. Néanmoins j&#8217;espère en avoir corrigés plus que ce que j&#8217;en ai ajoutés.</p>
<p>Petit aperçu du futur maintenant :<br />
Une version 0.6.1 devrait sortir lorsque suffisamments de bugs de cette version auront été corrigés. Elle ne devrait pas inclure de nouvelles fonctionnalités majeures. Pour la prochaine version (0.7), je pense que je vais pousser la gestion des différents environnements de bureaux (<em>Gnome</em>, <em>KDE</em>, &#8230;). D&#8217;abord ajouter les environnements de bureaux moins utilisés du type <em>Openbox</em> (mon préféré =) ) dans une section du type &laquo;&nbsp;Autres environnements de bureaux&nbsp;&raquo; ou quelque chose comme ça. Peut-être inclure une configuration automatique du gestionnaire de login (par exemple pour <em>Slim</em>, il faut toucher au fichier <em>/etc/slim.conf</em>) suivant l&#8217;environnement de bureau choisi et aussi ajouter le petit nouveau : <a href="http://git.frugalware.org/gitweb/gitweb.cgi?p=frugalware-current.git;a=commit;h=e10620a8510086a0cc1ff32624f96d4b31676386">lxdm</a>.<br />
Autre élément important, le CD est prêt à être supporté <a href="http://frugalware.org/pipermail/frugalware-devel/2009-October/007556.html">officiellement</a> dans Frugalware depuis octobre dernier. La dernière étape avant de l&#8217;intégrer est le merge du dépôt <em>xorgtesting</em> (Xorg 7.5) qui est bloqué depuis plusieurs mois à cause du driver propriétaire (fglrx) d&#8217;ATI qui ne supporte pas Xorg 7.5 (et ils n&#8217;ont pas l&#8217;air d&#8217;être trop pressés!).<br />
En espérant que la situation se débloque rapidement! (peut-être avec les prochain mesa?)</p>
<p>Enfin, j&#8217;aimerai signaler un bug important du CD (déjà <img src='http://elentir.toile-libre.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ), lié au point ci-dessus : la configuration du serveur X (tout à la fin de l&#8217;installation) à tendance à freezer sur certaines configurations (notamment avec <em>VirtualBox</em>). Cela semble due à la différence de version de Xorg entre la version utilisée par le CD (Xorg 7.5 donc) et celle installé par l&#8217;installateur (qui installe la branche &laquo;&nbsp;<em>current</em>&nbsp;&raquo; de frugalware donc une ancienne version de Xorg). Ce problème <em>devrait</em> être lui aussi résolu lors du merge de xorgtesting.</p>
]]></content:encoded>
			<wfw:commentRss>http://elentir.toile-libre.org/?feed=rss2&amp;p=87</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Optimisation de pacman-g2 : Mettre l&#8217;oiseau en cage</title>
		<link>http://elentir.toile-libre.org/?p=35</link>
		<comments>http://elentir.toile-libre.org/?p=35#comments</comments>
		<pubDate>Wed, 30 Dec 2009 11:22:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Frugalware]]></category>
		<category><![CDATA[Informatique]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[pacman-g2]]></category>

		<guid isPermaLink="false">http://elentir.toile-libre.org/?p=35</guid>
		<description><![CDATA[Voici l'adaptation du script "pacman-cage" d'Arch Linux <a href="http://wiki.archlinux.fr/arch/pacman-optimize">(Lien)</a> pour pacman-g2, qui permet d'éviter une trop grande fragmentation des fichiers et un ralentissement notamment lors des recherches (pacman -Ss).]]></description>
			<content:encoded><![CDATA[<p>Voici l&#8217;adaptation (que j&#8217;utilise depuis déjà un moment <img src='http://elentir.toile-libre.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) du script &laquo;&nbsp;pacman-cage&nbsp;&raquo; d&#8217;Arch Linux <a href="http://wiki.archlinux.fr/arch/pacman-optimize">(Lien)</a> pour pacman-g2, qui permet d&#8217;éviter une trop grande fragmentation des fichiers de la base de donnée et un ralentissement notamment lors des recherches (&laquo;&nbsp;pacman -Ss&nbsp;&raquo;). Le système de fichier utilisé par le script est ext2, j&#8217;en ai donc profité pour ajouter le support du sytème de fichier reiserfs, connu pour ses performances dans la gestion d&#8217;un grand nombre de petits fichiers. Je voulais voir si il existait une différence de performances entre les deux dans le cas de la base de donnée de pacman-g2.</p>
<p>Attention peux casser la base de donnée de pacman-g2 : utilisez à vos risques et périls.</p>
<p>L&#8217;utilisation du script est très simple, lancer avec les droits roots :</p>
<pre class="brush:bash">
pacman-g2-cage
</pre>
<p>pour cager le pacman-g2 (par défaut le système de fichier utilisé est reiserfs) ou</p>
<pre class="brush:bash">
pacman-g2-cage ext2
</pre>
<p>pour utiliser ext2.<br />
Si vous voulez revenir en arrière utilisez :</p>
<pre class="brush:bash">
pacman-g2-uncage
</pre>
<p>Voici deux résultats représentatifs (dans le sens de la médiane sur les résultats obtenus) :<br />
Configuration : Athlon64 1800+, 1Go DDR.</p>
<pre class="brush:bash">
time pacman -Ss titi  ( normal )
real	1m6.462s
user	0m0.712s
sys	0m1.287s

time pacman -Ss titi  ( ext2 )
real	0m5.129s
user	0m0.539s
sys	0m0.333s

time pacman -Ss titi ( reiserfs )
real	0m4.673s
user	0m0.507s
sys	0m0.456s
</pre>
<p>Et voici un autre :</p>
<pre class="brush:bash">
time pacman -Ss tint2  ( ext2 )
real	0m5.028s
user	0m0.535s
sys	0m0.356s

time pacman -Ss tint2  ( reiserfs )
real	0m4.716s
user	0m0.534s
sys	0m0.455s
</pre>
<p>Attention n&#8217;oubliez pas de vider les caches lors des tests :</p>
<pre escaped= "true">echo 3 &gt; /proc/sys/vm/drop_caches
</pre>
<p>
On note ainsi un léger avantage pour reiserfs de l&#8217;ordre en moyenne du tiers de seconde, ce qui n&#8217;est que peu significatif. Sur mon laptop (Core 2 Duo 2 Ghz, 3Go DDR2), les résultats obtenus sont globalement équivalents, l&#8217;avantage de reiserfs tombe à moins de deux dixièmes de secondes.<br />
Notons que l&#8217;écart se creuse à mesure que le nombre d&#8217;éléments dans la base de donnée augmente. A noter aussi que le script d&#8217;autocomplétion présenté dans l&#8217;article précédent est aussi bien plus rapide <img src='http://elentir.toile-libre.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Lien vers le script <a href="http://elentir.toile-libre.org/upload/pacman-g2-cage">pacman-g2-cage</a><br />
Lien vers le script <a href="http://elentir.toile-libre.org/upload/pacman-g2-uncage">pacman-g2-uncage</a></p>
]]></content:encoded>
			<wfw:commentRss>http://elentir.toile-libre.org/?feed=rss2&amp;p=35</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Autocomplétion pacman-g2 en bash</title>
		<link>http://elentir.toile-libre.org/?p=22</link>
		<comments>http://elentir.toile-libre.org/?p=22#comments</comments>
		<pubDate>Tue, 22 Dec 2009 15:38:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Frugalware]]></category>
		<category><![CDATA[Informatique]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[pacman-g2]]></category>

		<guid isPermaLink="false">http://elentir.toile-libre.org/?p=22</guid>
		<description><![CDATA[Voici le lien vers un petit script à placer dans "etc/bash_completion.d" pour avoit l'autocomplétion des paquets pour pacman-g2 :]]></description>
			<content:encoded><![CDATA[<p>Ainsi que certains ont pu le remarquer, il n’existe pas d’autocomplétion pour la commande <em>pacman-g2</em>. Cette fonctionnalité est pourtant bien pratique! Nous allons voir dans cet article comment fonctionne l’autocomplétion avec <em>bash</em> (pas de <em>zsh</em> et autres pour l’instant <em>pacman-g2</em>. Nous resterons pour l’instant dans un cadre simple : compléter le nom des paquets.<br />
L’autocomplétion n’est pas une fonctionnalité par défaut de bash. Dans le cas de <a href="http://frugalware.org/">Frugalware</a>, vous devez installer, si ce n’est déjà fait, le paquet <em>bash-completion</em> :</p>
<pre class="brush:bash">
pacman-g2</b> -S bash-completion
</pre>
<p>Le fonctionnement de l’autocomplétion est assez simple : on associe<br />
à une commande quelconque, une «fonction de complétion»<br />
prenant en entrée la liste des paramètres déjà tapés, et en sortie une<br />
liste contenant les complétions possibles.<br />
Ces &laquo;&nbsp;scripts&nbsp;&raquo; sont situés dans le répertoire &laquo;&nbsp;/etc/bash_completion.d/&nbsp;&raquo;.<br />
Dans le cas de <em>pacman-g2</em>, voici le script en question :</p>
<pre class="brush:bash">
# Programmable bash completion for Pacman-g2.
#
# Copyright 2009 Albar Boris "elentir ^ frugalware.org"
#
# Distributed under the terms of the GNU General Public License v2.
#

_pacman-g2 ()
{
	local cur prev first cmd repos

	repos=$(grep '\[' /etc/pacman-g2.conf | grep -v -e 'options' -e '^#' | tr -d '[]' )

	# follows the inclusions
	Includes=$(cat /etc/pacman-g2.conf | grep "^Include[' ']*=" | sed "s/Include[' ']*=[' ']*//")
	for i in $Includes; do
		repos+=" $(grep '\[' $i | grep -v -e 'options' -e '^#' | tr -d '[]' )"
	done

	COMPREPLY=()
	cur=${COMP_WORDS[COMP_CWORD]}
	prev=${COMP_WORDS[COMP_CWORD-1]}
	first=${COMP_WORDS[1]}

	cmd=""
	case "$first" in
	-*S*|-*R*) # we expect at least one package now
		for i in $repos; do
			if [[ "$cur" == " " ]]; then
				fileSync=$(ls /var/lib/pacman-g2/$i)
			else
				fileSync=$(ls /var/lib/pacman-g2/$i | grep ^$cur)
			fi
			for j in $fileSync; do
				cmd+=$(echo "${j%-*-*} ")
			done
		done
		;;
	-Qo)
		;;
	-*Q*)
		if [[ "$cur" == " " ]]; then
			fileSync=$(ls /var/lib/pacman-g2/local/$i)
		else
			fileSync=$(ls /var/lib/pacman-g2/local/$i | grep ^$cur)
		fi
		for i in $fileSync; do
			cmd+=$(echo ${i%-*-*})
			cmd+=' '
		done
		;;
	-*A*)
		cmd=$(ls | grep .fpm$)
		;;
	*)
		;;
	esac

	COMPREPLY=( $( compgen -W "$cmd"  -- $cur ) )
	return 0
}
complete -F _pacman-g2 -o default pacman-g2
complete -F _pacman-g2 -o default pacman
</pre>
<p>Voyons dans un premier temps les variables qui entrent en jeu :</p>
<p>- <strong>COMP_WORDS</strong> est un tableau contenant les divers paramètres déjà entrés, par exemple si on a tapé :</p>
<pre class="brush:bash">
pacman-g2 -Si alsa
</pre>
<p>le tableau contiendra alors les éléments <em>&laquo;&nbsp;-Si&nbsp;&raquo;</em> et <em>&laquo;&nbsp;alsa&nbsp;&raquo;</em>.</p>
<p>-<strong> COMP_CWORDS</strong> indique l’index du dernier élément du tableau précédent (dans le cas de l’exemple ci-dessus : 2)</p>
<p>De ces deux variables, on en déduit l’élément à compléter (le dernier) que l’on appelle <em>&laquo;&nbsp;cur&nbsp;&raquo;</em> et qui est définit par :</p>
<pre class="brush:bash">
cur=${COMP_WORDS[COMP_CWORD]}
</pre>
<p>- <strong>COMPREPLY</strong> qui comme son nom<br />
l’indique contient la liste des possibilité de complétion. On peut<br />
considérer cette variable comme la &laquo;&nbsp;valeur de retour&nbsp;&raquo; de la<br />
fonction.</p>
<p>Toute la difficulté désormais consiste à renvoyer la bonne liste de possibilités en fonctions des commandes entrées.<br />
Nous allons nous limiter aux fonctions les plus couramment utilisés de <em>pacman-g2</em> sans nous préoccuper des cas particuliers. Nous considèrerons pour cela qu’une commande de <em>pacman-g2</em> est toujours de la forme :</p>
<pre class="brush:bash">
pacman-g2 -Opération paquet1 paquet2 ...
</pre>
<p>sauf pour la commande</p>
<pre class="brush:bash">
pacman -Qo
</pre>
<p>qui prend en paramètre un fichier et non un nom de paquet.</p>
<p>Un petit rappel sur le fonctionnement de <em>pacman-g2</em> nous indique que la base de donnée de paquets est situé dans le répertoire <em>&laquo;&nbsp;/var/lib/pacman-g2&#8243;</em>. Chaque paquet est identifié par un dossier unique de la forme :</p>
<pre class="brush:bash">
"nom du dépôt"/"nom du paquet"-"version"-"pkgrel"
</pre>
<p>chaque dossier contenant les informations propres au paquet considéré.<br />
Les paquets déjà installés sur la machine, quant à eux, sont listés dans le dépôt <em>/var/lib/pacman-g2/local&nbsp;&raquo;</em>. On utilise uniquement ce dépôt pour les commandes du type <em>pacman-g2 -Q *&nbsp;&raquo;</em> puisque ces commandes s’adressent spécifiquement à ces paquets.</p>
<p>La suite n’est que du bash, on récupère le nom des dépôts dans le fichier <em>&laquo;&nbsp;/etc/pacman-g2.conf&nbsp;&raquo;</em> :</p>
<pre class="brush:bash">
repos=$(grep ‘\[' /etc/pacman-g2.conf | grep -v -e 'options' -e '^#' | tr -d '[]‘ )
</pre>
<p>Puis on cherche le nom des dossiers commençant par $cur (càd le mot à compléter) dans chaque dépôt avec :</p>
<pre class="brush:bash">ls | grep ^$cur"
</pre>
<p>On supprime ensuite le numéro de version et le pkgrel du nom des dossiers avec un commande avec un <em>&laquo;&nbsp;echo&nbsp;&raquo;</em> approprié :</p>
<pre class="brush:bash">
echo ${i%-*-*}
</pre>
<p>Les différentes commandes de pacman ( &laquo;&nbsp;-S&nbsp;&raquo;, &laquo;&nbsp;-Q&nbsp;&raquo; ou autres ) sont traités les différents cas dans une<br />
simple commande <em>&laquo;&nbsp;case&nbsp;&raquo;</em>.</p>
<p>A partir de cette liste, on utilise la commande <em>compgen</em> qui génère la liste que l’on met dans la variable <strong>COMPREPLY.</strong></p>
<p>Enfin les deux dernières commandes du script permettent d’associer aux commandes <em>pacman</em> et <em>pacman-g2</em> (sous frugalware pacman est un lien vers <em>pacman-g2</em>), la fonction de complétion que l’on a définit ci-dessus.</p>
<p>Voilà, nous avons vu un script qui reste très basique, mais rien<br />
n’empèche maintenant de l’améliorer en rajoutant la complétion de<br />
toutes les options de <em>pacman-g2</em> et en tenant compte de toutes les possibilités d’options.</p>
<p>A priori la couleur n’est pas supporté dans la complétion bash, il<br />
serait intéressant de voir si on ne peut pas ajouter un support des<br />
couleurs dans bash-completion.<br />
Peut-être le sujet d’un prochain article…</p>
<p>Lien vers le <a href="http://elentir.toile-libre.org/upload/pacman-g2">script</a></p>
]]></content:encoded>
			<wfw:commentRss>http://elentir.toile-libre.org/?feed=rss2&amp;p=22</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Voyage au pays des groupes</title>
		<link>http://elentir.toile-libre.org/?p=10</link>
		<comments>http://elentir.toile-libre.org/?p=10#comments</comments>
		<pubDate>Sat, 06 Jun 2009 22:54:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Frugalware]]></category>
		<category><![CDATA[Informatique]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mathématiques]]></category>

		<guid isPermaLink="false">http://elentir.toile-libre.org/?p=10</guid>
		<description><![CDATA[Hier soir,  j’ai poussé Gap sur le dépôt current de Frugalware. C’est un logiciel permettant de faire des calculs en algèbre notamment en théorie des groupes et théorie des corps.  C’est une belle occasion, pour ce premier article, d’approcher un peu ses fonctionnalités, et un beau prétexte pour faire un petit détour par la théorie [...]]]></description>
			<content:encoded><![CDATA[<p>Hier soir,  j’ai poussé <a href="http://www.gap-system.org/">Gap</a> sur le dépôt current de <a href="http://www.frugalware.org/">Frugalware</a>. C’est un logiciel permettant de faire des calculs en algèbre notamment en théorie des groupes et théorie des corps.  C’est une belle occasion, pour ce premier article, d’approcher un peu ses fonctionnalités, et un beau prétexte pour faire un petit détour par la théorie des groupes.<br />
Pour cette introduction à <a href="http://www.gap-system.org/">Gap</a>, nous allons prendre un problème classique : Définir le groupe le groupe alterné <img src='http://s.wordpress.com/latex.php?latex=A_5&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='A_5' title='A_5' class='latex' />, et vérifier qu’il est simple et non résoluble.</p>
<p>Le groupe <img src='http://s.wordpress.com/latex.php?latex=A_5&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='A_5' title='A_5' class='latex' /> peut se définir à partir du groupe symétrique <img src='http://s.wordpress.com/latex.php?latex=S_5&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='S_5' title='S_5' class='latex' /> :</p>
<p>Définissons donc <img src='http://s.wordpress.com/latex.php?latex=S_5&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='S_5' title='S_5' class='latex' /> :</p>
<pre class="brush:bash">
S5 := SymmetricGroup(5);
Sym( [ 1 .. 5 ] )</blockquote>
</pre>
<p>comme le groupe symétrique d’indice 5; C’est le groupe des permutations d’un ensemble de 5 éléments. Il est d’ordre <img src='http://s.wordpress.com/latex.php?latex=5%21%3D120&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='5!=120' title='5!=120' class='latex' /> comme on peut le voir avec :</p>
<pre class="brush:bash">
Order(S5);
120
</pre>
<p>On peut visualiser ses éléments avec la commande :</p>
<pre class="brush:bash">
Elements(S5)
</pre>
<p>On peut alors définir le groupe alterné <img src='http://s.wordpress.com/latex.php?latex=A_5&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='A_5' title='A_5' class='latex' /> de plusieurs manières :</p>
<p>- soit comme l’ensemble des permutations d’ordre pair (c’est à dire décomposable en un nombre pair de transpositions);<br />
- soit comme le noyau du morphisme signature;<br />
- soit dériver le groupe <img src='http://s.wordpress.com/latex.php?latex=S_5&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='S_5' title='S_5' class='latex' />;</p>
<p>On va utiliser la dernière manière :</p>
<pre class="brush:bash">
A5:=DerivedSubgroup(S5);
Group([ (1,3,2), (2,4,3), (2,3)(4,5) ])
</pre>
<p>On vérifie rapidement qu’il s’agit bien de <img src='http://s.wordpress.com/latex.php?latex=A_5&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='A_5' title='A_5' class='latex' /> :</p>
<p>C’est d’abord bien un sous-groupe distingué de <img src='http://s.wordpress.com/latex.php?latex=S_5&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='S_5' title='S_5' class='latex' /> :</p>
<pre class="brush:bash">
IsSubgroup(S5,A5);
true
IsNormal(S5,A5);
true
</pre>
<p>De plus il est composé de permutations paires et d’ordre <img src='http://s.wordpress.com/latex.php?latex=%5Cfrac%7B%285%21%29%7D%7B2%7D%3D60&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\frac{(5!)}{2}=60' title='\frac{(5!)}{2}=60' class='latex' /> :</p>
<pre class="brush:bash">
List(Elements(A5),x -> SignPerm(x));
[ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
Order(A5);
60
</pre>
<p>Une autre manière plus rapide aurait-été de définir directement :</p>
<pre class="brush:bash">
A5 := AlternatingGroup(5);
Alt( [ 1 .. 5 ] )
</pre>
<p>Voyons maintenant les propriétés interessantes qu’il a :</p>
<pre class="brush:bash">
IsSimple(A5);
true
IsCyclic(A5);
false
IsSolvable(A5);
false
</pre>
<p>Il est donc simple, non cyclique et non résoluble ! Une conséquence importante de ce résultat est qu’il existe des équations de degré 5 qui ne sont pas résoluble par radicaux. Considérons en effet le groupe de Galois du polynôme <img src="http://s.wordpress.com/latex.php?latex=P%3D1%2Bx%2B%5Cfrac%7Bx%5E2%7D%7B2%7D%2B%5Cfrac%7Bx%5E3%7D%7B3%21%7D%2B%5Cfrac%7Bx%5E4%7D%7B4%21%7D%2B%5Cfrac%7Bx%5E5%7D%7B5%21%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0" alt="" /> qui n’est autre que <img src='http://s.wordpress.com/latex.php?latex=S_5&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='S_5' title='S_5' class='latex' /> qui n’est pas résoluble puisque <img src='http://s.wordpress.com/latex.php?latex=A_5&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='A_5' title='A_5' class='latex' /> ne l’est pas.</p>
]]></content:encoded>
			<wfw:commentRss>http://elentir.toile-libre.org/?feed=rss2&amp;p=10</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
