<?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>Chimrod</title>
	<atom:link href="http://blog.chimrod.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.chimrod.com</link>
	<description></description>
	<lastBuildDate>Fri, 11 Jun 2010 20:14:05 +0000</lastBuildDate>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Présentation de Vala</title>
		<link>http://blog.chimrod.com/?p=178</link>
		<comments>http://blog.chimrod.com/?p=178#comments</comments>
		<pubDate>Fri, 11 Jun 2010 20:14:05 +0000</pubDate>
		<dc:creator>Chimrod</dc:creator>
				<category><![CDATA[Libre]]></category>

		<guid isPermaLink="false">http://blog.chimrod.com/?p=178</guid>
		<description><![CDATA[J&#8217;ai découvert une présentation du langage dans GLMF n°127 qui l&#8217;utilisait pour se brancher sur le pare-feu. Cela ayant aiguisé ma curiosité, j&#8217;ai cherché à en savoir davantage sur le langage. Le langage C m&#8217;a toujours paru difficile à aborder. Non pas au niveau de sa syntaxe, mais au sujet de l&#8217;accès à sa documentation [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai découvert une présentation du langage dans GLMF n°127 qui l&#8217;utilisait pour se brancher sur le pare-feu. Cela ayant aiguisé ma curiosité, j&#8217;ai cherché à en savoir davantage sur le langage.</p>
<p>Le langage C m&#8217;a toujours paru difficile à aborder. Non pas au niveau de sa syntaxe, mais au sujet de l&#8217;accès à sa documentation et aux librairies disponibles. Pour moi qui suis habitué à Java ou à Python, j&#8217;ai regardé Vala comme un moyen de mettre un pied dans le C. Je vais essayé de présenter ma manière de le voir, après avoir fait une petite plongée dedans…</p>
<h3>Présentation</h3>
<p>Le langage Vala à été créé par les développeurs de Gnome pour qu&#8217;ils puissent disposer d&#8217;un langage de haut niveau. Gnome ayant eu pendant quelques temps un pied ( dansant ) dans mono, Vala en est très inspiré. ( Je ne connais pas mono et ne peux donc pas lancer de comparatif, je vous renvoie donc à celui présenté par Gnome <a href="http://live.gnome.org/Vala/QuickIntroForCSharpProgrammers">par rapport à C#</a>, et pour <a href="http://live.gnome.org/Vala/ValaForJavaProgrammers">Java</a> ). Le langage est ensuite compilé en C, et GCC est utilisé pour la compilation d&#8217;un exécutable.</p>
<p>On est donc dans un langage intermédiaire, qui reste très proche du C comme nous allons le voir par la suite.</p>
<h3>Analyse</h3>
<p>Langage objet haut niveau</p>
<p>Vala est tout d&#8217;abord un langage haut niveau : on y retrouve des <em>interface</em> ( pour pouvoir moduler le code facilement ), des <em>delegate</em> ( qui permettent de de définir un type de fonction pour un callback ), une gestion <em>événementielle</em> ( gérer le déclenchement de plusieurs méthodes dans le code par un appel unique ) … On dispose donc d&#8217;un langage objet assez riche pour éviter d&#8217;avoir passer du temps sur des détails et se concentrer sur le programme et son déroulement. Il est pensé objet et l&#8217;on retrouve vite ses marques, tout comme l&#8217;on sent qu&#8217;il est assez facile d&#8217;« abstraire » le code pour faire une application qui n&#8217;en reste pas un simple script…</p>
<p>Je n&#8217;ai pas envie de détailler la syntaxe du langage et tout ce qu&#8217;il intègre car vous pourrez trouver tout cela en ligne. Je vous renvoie au <a href="http://live.gnome.org/Vala/Tutorial">tutoriel</a> qui explique la structure du langage en détail, qui présentent des exemples détaillés.</p>
<p>La GLib</p>
<p>Le langage est basé sur la GLib, la librairie standard utilisé dans les applications GTK. La plupart des types primitifs ( int… ) sont donc en réalités des types issus de cette librairie ( gint…). On accède ainsi à l&#8217;ensemble des méthodes de la GLib, diffusées sous formes de classes objets et bien documentées ( la <a href="http://valadoc.org/index.html">valadoc</a> ). Cela rejoint l&#8217;histoire de Vala puisque La GLib est tout utilisée par les développeurs Gnome ( on constate d&#8217;ailleurs que la plupart des composants Gnome ont une entrée dans cette Valadoc ).</p>
<p>Il ne faut  cependant pas croire que l&#8217;on dispose avec cette bibliothèque standard d&#8217;un ensemble de routines aussi  riche que dans le package standard d&#8217;un Java ou d&#8217;un Python : la GLib est avant tout destinée à des développeurs C, et beaucoup des méthodes standard du C n&#8217;y sont pas disponibles. Pour parer cela, Vala propose une classe POSIX[LIEN] proposant les méthodes standard du C, mais celle-ci n&#8217;est pas exhaustive et il nous arrive souvent de tomber sur une fonction qui ne nous est pas accessible via le langage haut niveau qu&#8217;est Vala.</p>
<p>Les Bindings</p>
<p>Pour répondre à cela, propose la possibilité de mettre en place un binding vers une libraire C de manière native. ( Normal me direz vous, le code en sortie de Vala est du C ! ) On peut donc très facilement utiliser n&#8217;importe quelle libraire existante. Vala étant un langage objet, il devient donc possible d&#8217;utiliser les librairies standard au sein d&#8217;un code objet de haut niveau. Cela ne demande que quelques lignes, demandant au minimum le fichier dans lequel se trouve la définition de la méthode, et sa signature.</p>
<p>Exemple du binding définissant la méthode execl ( issue du fichier /usr/share/vala/vapi/posix.vapi ) :</p>
<pre>[CCode (cheader_filename = "unistd.h")]
public int execl (string path, params string[] arg);
</pre>
<p>et voici la signature de la méthode C correspondante :</p>
<pre>extern int execl (__const char *__path, __const char *__arg, ...) __THROW __nonnull ((1));
</pre>
<p>Les types primitifs de la GLib étant basés sur les types primitifs C correspondant, il n&#8217;y a pas de problème de cast dans la plupart de cas. Toutefois, Vala utilise des char* pour définir ses string : il est parfois nécessaire de mettre en place faire un cast quand une méthode nous un char[] : même dans le code haut niveau, le C n&#8217;est jamais loin…</p>
<p>C&#8217;est souvent frustrant de devoir mettre en place un binding pour une fonction disponible en standard dans la libc. Je pense qu&#8217;il manque la possibilité d&#8217;inclure directement du code C dans le code vala, tout comme il est possible directement de l&#8217;assembleur dans du C. Cela permettrait un confort dans l&#8217;utilisation qui n&#8217;est pas disponible actuellement.</p>
<p>À noter qu&#8217;un outil permet de mettre en place ces bindings pour les composants basés sur GObjet ( Gnome toujours… ). De plus de nombreux bindings sont disponibles pour les composants Gnome. Attention, cela n&#8217;empêchera pas d&#8217;avoir à installer les headers C correspondants !</p>
<p>Les profils</p>
<p>Il est possible d&#8217;utiliser des profils de compilation. Cette option encore expérimentale a été mise en place pour répondre à des réclamations de la part des utilisateurs qui voulaient programmer en Vala sans avoir de dépendances envers la GLib. Ainsi, il est possible d&#8217;appeler le compilateur avec la syntaxe suivante :</p>
<pre>valac --profile posix</pre>
<p>ce qui a pour conséquence de réduire le jeu de bibliothèque par défaut à celles disponibles dans la classe POSIX. Cela permet de limiter les dépendances du programmes, mais beaucoup de types standard de Vala deviennent de ce fait indisponible; on sent bien que le langage n&#8217;a pas été pensé pour ça.</p>
<h3>Conclusion</h3>
<p>Pour résumer, je dirais que Vala correspond à ce qu&#8217;il annonce : un langage haut niveau pour faciliter la création d&#8217;applications Gnome. Dès que l&#8217;on cherche à sortir de ce cadre, on se retrouve confronté à des limitations ( qui ne sont bien sûr pas insurmontable ) :</p>
<ul>
<li>Pour ceux qui ne cherche pas à travailler sur du code Gnome, embarquement de bibliothèques qui ne nous intéressent pas forcement. ( Bien que sur ce point, la GLib est plutôt standard sur les PCs ayant X d&#8217;installés )</li>
<li>Pour ceux qui cherchent un langage de haut niveau, le C est encore trop présent entre les lignes pour pouvoir l&#8217;oublier complètement. D&#8217;un autre côté, l&#8217;intégration du code C n&#8217;est pas toujours évidente puisqu&#8217;elle oblige à déclarer des bindings pour des fonctions standards.</li>
<li>Mais surtout, le fait que l&#8217;ensemble des fonctions de la libc ne soient pas encore disponibles oblige à mettre le doigt dans les bindings régulièrement.</li>
</ul>
<p>Le langage est bien sûr encore amené à évoluer, et les points que je cite ici ne sont pas pour autant rédhibitoires. D&#8217;un point de vue totalement subjectif Je trouve le langage simple mais sans trop de saveur. Ça reste un langage objet qui n&#8217;est bien sûr pas révolutionnaire; on sent qu&#8217;il ne fait que reprendre les concepts des langages qui l&#8217;ont inspiré, mais le produit est cohérent, et d&#8217;après les benchs génère un code plutôt optimisé ( en rapport avec le temps que l&#8217;on pourrait passer à produire le même code en C  ). Après, je ne prend pas le même plaisir à programmer en Vala qu&#8217;en python ( j&#8217;avais bien dit que j&#8217;étais subjectif ^^ ).</p>
<p>Cela dit, pour moi, qui ne suis pas un développeur Gnome, je suis plus intéressé par la possibilité d&#8217;avoir un langage haut niveau qui reste très proche du C, avec les performances qui vont avec; si le prix pour cela est une dépendance vers la GLib, ça reste un coût sommes toutes assez faible.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chimrod.com/?feed=rss2&amp;p=178</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Un menu pour awesome</title>
		<link>http://blog.chimrod.com/?p=168</link>
		<comments>http://blog.chimrod.com/?p=168#comments</comments>
		<pubDate>Sun, 06 Jun 2010 18:48:13 +0000</pubDate>
		<dc:creator>Chimrod</dc:creator>
				<category><![CDATA[Non classé]]></category>

		<guid isPermaLink="false">http://blog.chimrod.com/?p=168</guid>
		<description><![CDATA[Awesome est un window manager (wm) en mode pavement ( les fenêtres se disposent de manière à ne jamais se chevaucher ). Cela permet de ne pas avoir à se soucier de la manière dont il faut gérer l&#8217;affichage des applications. Une des particularité est que sa configuration se fait par un fichier de script [...]]]></description>
			<content:encoded><![CDATA[<p>Awesome est un window manager (wm) en mode pavement ( les fenêtres se disposent de manière à ne jamais se chevaucher ). Cela permet de ne pas avoir à se soucier de la manière dont il faut gérer l&#8217;affichage des applications.</p>
<p><a href="http://awesome.naquadah.org/" target="_blank"><img src="http://awesome.naquadah.org/index/320x240-screen.png" alt="Awesome" width="320" height="240" /></a></p>
<p>Une des particularité est que sa configuration se fait par un fichier de script exécuté au lancement du bureau. Cela permet de paramétrer comme on le souhaite le bureau sans être limité par le WM. La contrepartie est que cela est plus difficile à prendre en main, et une erreur de code entraîne un écran gris au lieu du bureau que l&#8217;on souhaite obtenir&#8230; Le langage utilisé ( Lua ) est un langage connu pour sa légèreté.  Pour l&#8217;instant, le projet étant encore assez jeune, il n&#8217;existe pas encore beaucoup de modules standardisés pour configurer le système, mais je pense que ceux-ci ne tarderont pas à venir&#8230;</p>
<p>Pour l&#8217;instant la configuration n&#8217;est pas encore stabilisée, certains composants changent au cours d&#8217;une version à une autre, ce qui casse parfois la mise à jour et oblige à retravailler les scripts de mise de configuration. Je pense cependant que tout cela suit la bonne direction et que ces soucis finiront par disparaître avec le temps et les versions suivantes</p>
<p>La plupart des actions peuvent être associées à un raccourci clavier, et si il est possible d&#8217;affiche une barre d&#8217;outil à chaque applications (« titlebar »), on prend vite l&#8217;habitude de s&#8217;en passer et de tout contrôler au clavier. On est d&#8217;autant plus aidé par cela par <a href="http://awesome.naquadah.org/wiki/Shifty">shifty</a> une extension qui permet de « programmer » la manière dont on veut que les fenêtres s&#8217;affichent : sur quel écran, avec quels paramètres etc. Cela permet par exemple d&#8217;avoir une configuration pour des applications utilisant plusieurs fenêtres ( je pense par exemple à Gimp ) paramétrée comme on le souhaite…</p>
<p>On prend vite l&#8217;habitude également d&#8217;utiliser plusieurs « tags » ( l&#8217;équivalent de bureaux virtuels mais un peu plus étendus ) : ceux-ci peuvent être paramétrés pour afficher des applications sépicifiques ( j&#8217;ai par exemple adapté ma configuration pour que <em>web</em> affiche firefox, ou que <em>news</em> affiche le couple elinks/newsbeuter pour lire mes flux RSS…</p>
<p>Bien sûr le temps de paramétrage au début est un peu long, mais maintenant que l&#8217;API est stable, il n&#8217;est plus nécessaire de tout reprendre à chaque fois que l&#8217;on met à jour awesome.</p>
<p>Je trouvais qu&#8217;il manquait à Awesome un menu avec les actions disponibles sur les fenêtres : la faire passer au premier plan, la minimiser… Tout ceci est disponible avec des raccourcis claviers, mais il n&#8217;y a pas d&#8217;option centralisée pour les retrouver. J&#8217;ai donc décidé de me plonger un petit peu dans lua pour produire le menu que voilà :</p>
<p><img class="size-full wp-image-169 alignleft" title="menu" src="http://blog.chimrod.com/wp-content/uploads/2010/04/menu.png" alt="Menu pour awesome" width="223" height="150" /></p>
<p>Le menu permet les actions suivantes :</p>
<ul>
<li>On top : Pour mettre le client sélectionné au premier plan et le rendre flottant</li>
<li>Sticky : Faire apparaître le client sur tous les tags</li>
<li>Minimize : Réduire le client</li>
<li>Close : Fermer le client</li>
<li>Move To : Déplacer le client vers un autre tag</li>
</ul>
<p>Le script fonctionne avec awesome 3.4.5, les versions antérieures ne sont pas forcement compatibles suite à un changement dans l&#8217;ABI du menu. J&#8217;essaierai également de le mettre à jour pour les versions suivantes ( du moins tant que je m&#8217;en servirai…)</p>
<p>Pour le faire fonctionner, il faut télécharger le script et le placer dans son répertoire ${HOME}/.config/awesome . Ensuite, éditer le fichier rc.lua et y ajouter la ligne suivante en en-tête :</p>
<pre>require("mymenu")</pre>
<p>et dans la partie Key Binding :</p>
<pre>clientkeys = awful.util.table.join(
[…]
    awful.key({ modkey,           }, "Down",    function(c) menu_instance = newAppMenu(c)    end),</pre>
<p>Le menu apparaîtra sur le raccourci Mod4 + Flèche du bas</p>
<p>Le fichier :<br />
<a href="http://chimrod.com/downloads/mymenu.lua">mymenu.lua</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chimrod.com/?feed=rss2&amp;p=168</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mettre en place un environnement sftp chrooté</title>
		<link>http://blog.chimrod.com/?p=115</link>
		<comments>http://blog.chimrod.com/?p=115#comments</comments>
		<pubDate>Thu, 08 Apr 2010 12:12:43 +0000</pubDate>
		<dc:creator>Chimrod</dc:creator>
				<category><![CDATA[Libre]]></category>

		<guid isPermaLink="false">http://blog.chimrod.com/?p=115</guid>
		<description><![CDATA[La demande Ma copine m&#8217;a demandé de trouver une solution simple pour échanger des fichier avec sa sœur, msn posant des problèmes… J&#8217;ai pensé à mon serveur ssh et mettre en place une connexion sftp pour ça. Sur le principe cela a été adopté avec une petite présentation de filezilla (je ne sais pas s&#8217;il [...]]]></description>
			<content:encoded><![CDATA[<h3>La demande</h3>
<p>Ma copine m&#8217;a demandé de trouver une solution simple pour échanger des fichier avec sa sœur, msn posant des problèmes… J&#8217;ai pensé à mon serveur ssh et mettre en place une connexion sftp pour ça. Sur le principe cela a été adopté avec une petite présentation de filezilla (je ne sais pas s&#8217;il existe des clients sftp intégrés sous windows ?), j&#8217;ai donc commencé à mettre en place le système.</p>
<p>De mon côté, la condition principale est de n&#8217;autoriser les connexions que par clef publique ( pas de mot de passe ),  ma copine a tenu à ce que sa sœur ne puisse pas accéder aux documents présents dans son home, et du mien à ce que l&#8217;on ne puisse pas pour autant se promener dans l&#8217;arborescence du serveur : il va donc falloir chrooter l&#8217;environnement.</p>
<p>Il existe pas mal de documentation la dessus sur internet, mais je me suis souvent retrouvé face à des exemples incorrects ou incompatible avec le fait de passer par une clef publique, je vais donc détailler les problèmes rencontrés.</p>
<h3>Le compte + clef publique</h3>
<p>La première étape est de créer le compte, cela se fait assez simplement :</p>
<pre># adduser ${user}</pre>
<p><img class="size-medium wp-image-121 alignright" title="puttygen" src="http://blog.chimrod.com/wp-content/uploads/2010/04/puttygen-300x276.jpg" alt="Création de la clef ssh avec puttygen" width="300" height="276" /><br />
et en répondant aux questions par défaut… Vient ensuite la clef publique : filezilla gère les clefs privés au format ppk ( putty ) et je n&#8217;ai pas trouvé d&#8217;outil pour les générer sous windows. Je suis donc passé par wine + puttygen pour créer la clef. Une fois celle-ci crée, on enregistre la partie publique et la partie privée de la clef.</p>
<p>La clef publique va être enregistrée dans le fichier ${user}/.ssh/know_host sur le serveur pour autoriser le client à s&#8217;y connecter. La clef privée sera enregistrée de son côté au format ppk pour être utilisée par filezilla (il est possible à partir de ce fichier de générer une clef privée de type openssh ).</p>
<div class="wp-caption alignleft" style="width: 310px"><a href="http://blog.chimrod.com/wp-content/uploads/2010/04/filezilla.jpg"><img title="filezilla" src="http://blog.chimrod.com/wp-content/uploads/2010/04/filezilla-300x140.jpg" alt="" width="300" height="140" /></a><p class="wp-caption-text">Intégrer la clef privée dans FileZilla</p></div>
<p>Il faut ensuite intégrer la clef privée dans filezilla en passant par les paramètres : elle sera automatiquement lue à la connexion ( il faut choisir «interactive» dans le type d&#8217;authentification ). ( Attention : sous windows j&#8217;ai rencontré des problèmes avec un répertoire contenant des accents, la clef semblait être lue, mais la connexion ne se faisait pas pour autant. )</p>
<h3>Chrooter l&#8217;environnement</h3>
<p>Aujourd&#8217;hui il est possible de chrooter nativement un environnement sftp avec openssh. Il faut pour cela mettre en place une condition sur l&#8217;utilisateur ( ou le groupe ) pour faire le chroot :</p>
<pre>Match user ${user}
   ChrootDirectory /var/chroot/
   X11Forwarding no
   AllowTcpForwarding no
   ForceCommand internal-sftp</pre>
<p>Dans cet exemple le chemin /var/chroot sera utilisé comme racine lors des connexions sftp. Ce répertoire doit être détenu par root:root et avoir les droits 755. Cela veut dire que si notre utilisateur à pour répertoire home /home/${user}, il se retrouvera dans /var/chroot/home/${user} lors des connexions sftp. Il est nécessaire de conserver le répertoire home de l&#8217;utilisateur pour que ssh accepte une connexion par clef. En effet, lorsque l&#8217;utilisateur va se connecter, ssh va lire dans son répertoire personnel pour lire le fichier .ssh/know_host et autoriser ou non la clef qui se présente. Ce qui signifie que si l&#8217;on modifie le répertoire personnel, il faut aussi déplacer cette arborescence ( hors de question dans ce cas de mettre / comme racine de l&#8217;utilisateur ).</p>
<p>À noter : j&#8217;ai préféré faire le match sur le nom de l&#8217;utilisateur plutôt que sur son groupe ( le groupe sera utilisé par ailleurs ). Dans le cas où nous avons plusieurs utilisateurs, il est possible de les mettre à la suite ( séparés par des virgules ).</p>
<p>J&#8217;ai vu de nombreux tutoriaux qui indiquent comme répertoire de chroot « /home/%u » ( le répertoire de l&#8217;utilisateur standard ), et qui demandent de changer le répertoire de login de l&#8217;utilisateur par « / ». Je pense que c&#8217;est une très mauvaise idée : d&#8217;une part parce que cela oblige à déposer les clefs à la racine du serveur, mais aussi à cause de la contrainte d&#8217;openssh demandant à ce que le répertoire root soit détenu par root : cela veut dire que l&#8217;utilisateur n&#8217;a pas le droit de déposer de fichiers ou de créer de répertoires dans son propre home !</p>
<p>Le plus simple est donc de prendre un autre répertoire pour l&#8217;échange, et laisser le home de l&#8217;utilisateur pour la configuration. ( Cela permet aussi d&#8217;être sûr que le répertoire .ssh ne sera pas effacé par erreur par l&#8217;utilisateur… ) J&#8217;ai donc mis un lien symbolique pour lier le /home de l&#8217;utilisateur avec son répertoire d&#8217;échange :</p>
<pre># mkdir /home/${user}/echanges
# ln -s /var/chroot/home/${user} /home/${user}/echanges</pre>
<p>On retrouvera ainsi la possibilité de voir les fichiers déposés en passant par le /home de l&#8217;utilisateur ( même si ce dernier ne pourra pas y aller… )</p>
<h3>Isoler l&#8217;environnement</h3>
<p>Maintenant que nous avons empêché l&#8217;utilisateur de se balader sur l&#8217;ordinateur, nous allons l&#8217;empêcher de se balader dans les autres répertoires des utilisateurs : cela se fait en une ligne de commande (pour chacun des répertoires que nous allons ouvrir en sftp : )</p>
<pre># for fichier in /var/chroot/home/*; do chmod o-r ${fichier}; done</pre>
<p>Et voilà ! Les utilisateurs peuvent voir qu&#8217;il existe d&#8217;autres comptes que le leur, mais ne peuvent pas y accéder.</p>
<h3>Autoriser le partage</h3>
<p>Maintenant que nous avons fermé les droits de manière générale il nous reste à autoriser le partage des fichiers ( après tout c&#8217;était le but de la demande !) de manière plus fine. Cela implique pour moi deux choses :</p>
<ol>
<li>permettre à un autre utilisateur d&#8217;accéder aux données présentes</li>
<li>permettre à un autre utilisateur de déposer ( ou de supprimer des donnée )</li>
</ol>
<p>Pour le premier point, c&#8217;est facile il suffit d&#8217;ajouter l&#8217;utilisateur A au groupe de l&#8217;utilisateur B :</p>
<pre># usermod -a -G ${user} ${un_autre_utilisateur}</pre>
<p>Et l&#8217;utilsateur un_autre_utilisateur pourra donc accéder à l&#8217;ensemble des fichier pour les lire ( et éventuellement les rapatrier chez lui).</p>
<p>Pour le second point ( possibilité d&#8217;écrire et modifier ) c&#8217;est un peu plus compliqué; en gros nous voulons que les fichiers déposés par sftp dans le répertoire de l&#8217;utilisateur ait comme groupe d&#8217;appartenance celui du propriétaire du répertoire ( quel que soit l&#8217;utilisateur qui dépose ) et qu&#8217;ils soient modifiable par le groupe ( g+w ) du propriétaire.</p>
<p>Par exemple : l&#8217;utilisateur A dépose un fichier dans le répertoire d&#8217;échange de l&#8217;utilisateur B. Il faut que les droits de ce fichier se présentent ainsi une fois le transfert terminé :</p>
<pre>$ ls -l fichier
-rw-rw----  1 utilisateurA utilisateurB</pre>
<p>( ainsi l&#8217;un et l&#8217;autre pourront supprimer le fichier ).</p>
<p>Pour cela nous allons utiliser une « bidouille » de l&#8217;os : le sgid bit. Derrière ce nom barbare se trouve un marqueur qui permet de fixer le droit de tous les fichiers qui seront créés dans le répertoire ( plus d&#8217;info <a title="wikipédia en setuid" href="http://en.wikipedia.org/wiki/Setuid">ici</a> ). Pour le déterminer on passe par chmod :</p>
<pre># chmod g+s /var/chroot/${user}</pre>
<p>Cela détermine bien quel est le groupe qui sera propriétaire du fichier, mais cela ne donne pas à ce groupe le droit de le modifier pour autant ! Sous linux, c&#8217;est la commande umask qui permet de déterminer les droits des fichiers. Le problème est qu&#8217;il s&#8217;agit d&#8217;une commande lié à l&#8217;environnement de l&#8217;utilisateur, et non pas aux répertoires sur lesquels nous travaillons ( à moins de passer par les ACLs mais cela est déjà assez compliqué comme ça… ). Ici, nous sommes dans un environnement sftp, sans shell de login, donc sans possibilité d&#8217;exécuter la commande directement, il faut que ce soit le serveur sftp qui le configure. J&#8217;ai trouvé énormément de documentations ( la plupart des bidouillages ) pour contourner le problème, mais la solution la plus simple vient de la dernière version d&#8217;OpenSSH (5.4 ) sortie le 8 mars dernier.</p>
<div id="attachment_163" class="wp-caption alignleft" style="width: 310px"><a href="http://blog.chimrod.com/wp-content/uploads/2010/04/conf.jpg"><img class="size-medium wp-image-163" title="Configuration de sshd" src="http://blog.chimrod.com/wp-content/uploads/2010/04/conf-300x175.jpg" alt="" width="300" height="175" /></a><p class="wp-caption-text">Exemple de configuration</p></div>
<p>Une nouvelle option sur le serveur sftp permet d&#8217;indiquer quel est l&#8217;umask qui sera appliqué ( dans notre cas 002) : dans le fichier/etc/ssh/sshd_config nous allons configurer les paramètres par défaut du serveur sftp :</p>
<p>Remplacer :</p>
<pre>Subsystem sftp /usr/lib/openssh/sftp-server.sh</pre>
<p>par :</p>
<pre>Subsystem sftp /usr/lib/openssh/sftp-server -u 002</pre>
<p>Pour définir les droits umask qui seront appliqués par défaut pour toutes les connexions sftp par défaut. Ce paramétrage est à redéfinir pour les paramétrages personnalisés ( bloc Match ) :</p>
<pre>ForceCommand internal-sftp -u 002</pre>
<h3>Conclusion</h3>
<p>Nous avons un environnement bien hermétique, pouvant gérer l&#8217;augmentation du nombre de compte ( il suffit de refaire les chmod dans notre environnement chrooté  à la création du compte ), et hermétique. Le paramétrage côté serveur est effectivement assez lourd au début,  mais je pense que la mise à jour ne demande pas trop de travail, et on gère les droits de manière assez fine ( en passant par les groupes ce qui me semble être dans la mentalité unix ).</p>
<p>Pour le client, il n&#8217;y a pas grand chose à paramétrer ( récupérer la clef et l&#8217;intégrer ), et il n&#8217;y a aucun risque que celui-ci vienne casser son paramétrage. On peut même sauvegarder sa clef privée dans son home (le vrai ), au cas où il perdrait le fichier.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chimrod.com/?feed=rss2&amp;p=115</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Les utilisateurs invisibles de Linux</title>
		<link>http://blog.chimrod.com/?p=98</link>
		<comments>http://blog.chimrod.com/?p=98#comments</comments>
		<pubDate>Wed, 17 Feb 2010 11:28:40 +0000</pubDate>
		<dc:creator>Chimrod</dc:creator>
				<category><![CDATA[Libre]]></category>

		<guid isPermaLink="false">http://blog.chimrod.com/?p=98</guid>
		<description><![CDATA[Bonjour à tous, pour mon premier article sur le planet-libre, je voudrais faire part d&#8217;une réflexion qui m&#8217;interpelle depuis un moment concernant l&#8217;univers Linux : le fait que les utilisateurs non administrateurs soient exclus de toute la documentation/prise en main que l&#8217;on peut trouver sur le système. Je ne donne ici que quelques aspects de [...]]]></description>
			<content:encoded><![CDATA[<p>Bonjour à tous, pour mon premier article sur le planet-libre, je voudrais faire part d&#8217;une réflexion qui m&#8217;interpelle depuis un moment concernant l&#8217;univers Linux : le fait que les utilisateurs non administrateurs soient exclus de toute la documentation/prise en main que l&#8217;on peut trouver sur le système. Je ne donne ici que quelques aspects de cette réflexion mais je pense qu&#8217;elle touche l&#8217;ensemble des participants au monde du libre.</p>
<p>
La plupart des articles que l&#8217;on peut voir sur le net qui concernent l&#8217;utilisation du PC sous Linux restent limités à un point : souvent ils oublient le fait que plusieurs utilisateurs puissent être enregistrés sur le PC, et que tous ne soient pas forcément des administrateurs ( ceux qui peuvent avoir des droits root sur la machine ).<br />
Pourquoi donc ? Est-ce que cela signifie que la plupart des linuxiens sont les seuls à utiliser le PC ? C&#8217;est possible, mais là n&#8217;est pas mon sujet. Je pense que le problème est que les utilisateurs sont pour l&#8217;instant invisible de la littérature sur Linux que l&#8217;on peut trouver sur le net. À la fois invisible du côté des distributions, et invisible du côté des communautés.</p>
<p>
Le problème se retrouve présent dans deux aspects : d&#8217;une part dans la documentation s&#8217;adressant aux administrateurs, et d&#8217;autre part dans la documentaiton s&#8217;adressant aux utilisateurs.</p>
<p>
Si l&#8217;on suit les manipulations que l&#8217;on peut trouver un peu partout sur le net, on trouve souvent des modifications qui ont pour conséquences de modifier la configuration générale du système, et l&#8217;on trouve plus souvent des modifications dans /etc/ que dans ~/.config/</p>
<h3>Suivre les besoins des utilisateurs</h3>
<p>
Tous les utilisateurs n&#8217;utilisent pas forcément l&#8217;ordinateur de la même manière et il faut prévoir quels sont leurs besoin avant de se lancer dans une opération générale.<br />
Par exemple, il n&#8217;y a pas longtemps était paru sur le planet-libre un article sur privoxy qui se terminait par une manière élégante d&#8217;utiliser privoxy sans configuration supplémentaire[1]. Or privoxy est lent pour traiter les sites puisant des ressources un peu partout — par exemple google news ou planet-libre (!) et se transformer en inconfort pour l&#8217;utilisateur.</p>
<h3>Les mises à jour</h3>
<p>
Faire une mise à jour est toujours quelque chose de périlleux, et l&#8217;on ne sait pas forcément comment le système va réagir; entre le logiciel qui ne fonctionne plus car sa configuration a changé ou celui qui ne fonctionne plus car un bug a été introduit dans la nouvelle version, les risques sont possibles ( je n&#8217;ai par exemple pu plus lire de dvd lors de la mise à jour du noyau 2.6.30[2]… )<br />
Je ne veux pas relancer le débat sur le packaging des distributions ( rolling release contre version fixes) mais le problème doit être posé : comment être sûr en faisant une mise à jour que l&#8217;on ne va pas casser tel composant ?</p>
<p>
En plus des modifications générales sur la configuration que peuvent introduire les modifications, on peut se retrouver dans la situation inverse : l&#8217;utilisateur n&#8217;a pas le droit de visualiser les fichiers de logs, d&#8217;installer un paquet ou de modifier un fichier de configuration et ne pourra donc pas suivre la documentation qu&#8217;il peut trouver ici et là sur le net.</p>
<h3>Pouvoir utiliser ses propres applications ?</h3>
<p>
Les distributions n&#8217;ont pour l&#8217;instant pas de solutions pour gérer l&#8217;installation de paquets par un utilisateur normal ( qui irait s&#8217;installer dans /opt// par exemple ), pouvant être installés sans droit root, et ne pouvant être exécutés que par l&#8217;utilisateur ayant fait son installation.</p>
<h3>Utiliser des commandes non root</h3>
<p>
En fait, ce système que l&#8217;on nous décrit ouvert ne l&#8217;est réellement que si l&#8217;on est admin dessus. Pour les autres, la manipulation se limite à bash, python…<br />
Dans la documentation, on trouve même des exemples demandant à l&#8217;utilisateur d&#8217;être root alors qu&#8217;une commande équivalente peut être lancée par un utilisateur normal ( par exemple $netstat -ie au lieu de #ifconfig )<br/><br />
Ce problème de l&#8217;utilisateur non root est pour l&#8217;instant contourné ( par exemple en configurant sudo dès l&#8217;installation ), mais il reste posé, et n&#8217;est jamais attaqué de front.</p>
<p>
Le fait que cette situation ne soit jamais évoquée est pour moi significative de l&#8217;utilisation faite de linux aujourd&#8217;hui : bien loin du grand public. Nous sommes tous ici des utilisateurs bidouilleurs, et ne voyons pas forcément une utilisation quotidienne d&#8217;un utilisateur standard. Je ne veux pas en faire une généralisation sur l&#8217;avenir de Linux et une remise en cause nécessaire. Je pose juste ici un constat sur une situation qui est pour moi, encore trop souvent invisible.</p>
<p>[2] <a href="http://artisan.karma-lab.net/node/1204">Artisan Numérique » Se prémunir des &laquo;&nbsp;SpyWebs&nbsp;&raquo; avec Privoxy</a><br />
[1] <a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=557340">http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=557340</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chimrod.com/?feed=rss2&amp;p=98</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Un système de backup automatique</title>
		<link>http://blog.chimrod.com/?p=58</link>
		<comments>http://blog.chimrod.com/?p=58#comments</comments>
		<pubDate>Sun, 18 Oct 2009 19:27:41 +0000</pubDate>
		<dc:creator>Chimrod</dc:creator>
				<category><![CDATA[Libre]]></category>

		<guid isPermaLink="false">http://blog.chimrod.com/?p=58</guid>
		<description><![CDATA[On le sait tous, il faut faire des sauvegardes de manière régulière. On le sais également, pour que celles-ci se fasse sur le long terme, il faut que celles-ci se fassent de manière automatique, et sur un autre support que le PC que l&#8217;on souhaite sauvegarder. Le problème qui se pose est le suivant : [...]]]></description>
			<content:encoded><![CDATA[<p>On le sait tous, il faut faire des sauvegardes de manière régulière. On le sais également, pour que celles-ci se fasse sur le long terme, il faut que celles-ci se fassent de manière automatique, et sur un autre support que le PC que l&#8217;on souhaite sauvegarder.  Le problème qui se pose est le suivant : comment concilier ces deux conditions sur un PC de bureau ( ne disposant donc pas d&#8217;une série de serveur allumés en permanences et prêt à recevoir nos sauvegardes en continue… ) ?</p>
<p>Pour répondre à tout cela, nous allons mettre en place un système de backup sur disque dur externe, qui se lancera à chaque fois que notre disque sera monté. À chaque fois que le disque dur sera allumé, la sauvegarde s&#8217;enclenchera. Cela ne garantie pas, bien sûr que les sauvegardes se feront à un intervalle régulier, mais cela garantie au moins que nous n&#8217;aurons pas à nous en soucier.  Pour cela nous allons utiliser les outils qui sont disponibles sous un environnement Linux : rsync et hal.  Cet article nous présente une base pour faire notre sauvegarde <a title="Une sauvegarde améliorée avec rsync" href="http://informatique-et-liberte.tuxfamily.org/2009/05/10/une-sauvegarde-amelioree-avec-rsync/">Une sauvegarde améliorée avec rsync</a>. Nous allons juste devoir le modifier un petit peu pour répondre à un problème qui arrive souvent avec les périphériques USB : selon que d&#8217;autres périphériques sont déjà montés ou non, nous ne savons pas dans quel répertoire nous allons nous trouve. Il va donc falloir mettre en place une ligne pour récupérer le répertoire dans lequel nous sommes.  Il ne nous reste plus qu&#8217;à trouver le moyen de l&#8217;éxécuter automatiquement pour cela nous allons utiliser halevt. Le script est disponible <a title="ici" href="http://chimrod.com/downloads/backup.sh">ici</a></p>
<p>Comme son nom l&#8217;indique, halevt est un gestionnaire d&#8217;évènements pour hal. Hal est un gestionnaire d&#8217;évènement matériel sous Linux; il envoie des informations à chaque fois que des informations sont envoyées depuis les composants. Cela permet de détecter le branchement d&#8217;un périphérique USB et de le monter sur le bureau ( et qui nous simplifie grandement la vie aujourd&#8217;hui !!!). Halevt est un démon à l&#8217;écoute des informations qui nous sont envoyées par hal, et d&#8217;activer des actions en conséquence : par exemple pour lancer l&#8217;antivirus sur la clef usb, reconfigurer le mappage du clavier en fonction de la marque que l&#8217;on branche etc. Pour notre part, nous allons nous contenter de lancer un script (celui du backup mentionné plus haut ).</p>
<p>Pour commencer nous allons devoir identifier le lecteur à mettre sous surveillance : inutile de se baser sur les noms de montage habituels ( /dev/sda par exemple ) en effet en fonction des périphériques déjà branchés nous n&#8217;allons pas obtenir la même configuration. Nous allons utiliser les point de montage défini dans ﻿/dev/disk/by-uuid qui permet d&#8217;obtenir l&#8217;identifiant de notre disque (et qui sera repris par la suite dans la configuration de hal ). Une fois que nous avons relevé quel est le disque concerné, il faut mettre en place une entrée pour notre évènement dans la configuration de halevt :</p>
<pre>&lt;halevt:Device match="hal.block.device &amp;amp; hal.block.is_volume = true &amp;amp; hal.volume.uuid = fd20536f-7b80-4a80-8c3d-b5bebe8fb484"&gt;
&lt;halevt:Property name="hal.volume.is_mounted"&gt;
&lt;halevt:Action value="true" exec="bash $hal.volume.mount_point$/chemin/script/backup-ssh.sh"/&gt;
&lt;/halevt:Property&gt;
&lt;/halevt:Device&gt;</pre>
<p>Cela si halevt est exécuté avec les droits de l&#8217;utilisateur lançant le backup. Si on le fait tourner en démon, il faut trouver une autre solution ( sur mon poste j&#8217;ai utilisé sudo, mais on peut très bien se baser sur le sticky bit pour donner les droits au script ). De même, dans la configuration mise en place, le script se trouve sur le disque de stockage ( de manière à pouvoir le lancer à la main si le démon n&#8217;est pas disponible ), cela peut être adapté en fonction de chacun…</p>
<p>Dans le cas d&#8217;une configuration multi-utilisateur, je pense qu&#8217;il est nécessaire de passer par un script qui lance les différentes sauvegardes sous le bon groupe de l&#8217;utilisateur à chaque fois. ( Ce qui en plus permet d&#8217;éviter le problème du sudo ) mais je n&#8217;ai pas eu besoin d&#8217;aller jusque là pour l&#8217;instant ! À vous d&#8217;adapter ce que je vous propose en fonction de votre configuration !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chimrod.com/?feed=rss2&amp;p=58</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Controling the wiimote (I)</title>
		<link>http://blog.chimrod.com/?p=15</link>
		<comments>http://blog.chimrod.com/?p=15#comments</comments>
		<pubDate>Wed, 11 Mar 2009 21:34:49 +0000</pubDate>
		<dc:creator>Chimrod</dc:creator>
				<category><![CDATA[wiimote]]></category>

		<guid isPermaLink="false">http://blog.chimrod.com/?p=15</guid>
		<description><![CDATA[Creating the plugin for wminput There are a lot of tutorials about how to configure cwiid. I let you follow them for getting a functionnal system for your wiimote. You can read the links at the end of this article. Be sure your system works well before continuing. Thiis is a code that we&#8217;ll use [...]]]></description>
			<content:encoded><![CDATA[<h2>Creating the plugin for wminput</h2>
<p>
There are a lot of tutorials about how to configure cwiid. I let you follow them for getting a functionnal system for your wiimote. You can read the links at the end of this article. Be sure your system works well before continuing.</p>
<p>
Thiis is a code that we&#8217;ll use as template for the creation of our driver. Used as main, it use pygame for displaying the infrared sources the wiimote can detect, but it is also compatible as plugin for wminput ( even if it does anything for now ).<br/><br />
You can get it here : <a href="http://www.chimrod.com/downloads/wiimote/ir_control_0.py">wm_control.py</a> ( This code is licenced under GPL 3+ )<br/><br />
About the code :<br/></p>
<pre>    import wmplugin
</pre>
<p>This import does not exist, but is created by wminput when executed. It provide the connexion with the wminput core. Just put ( or link ) the script in the wminput plugin path ( on my debian this is the /usr/lib/cwiid/plugins/ )</p>
<pre>def wmplugin_init(id, wiimote_arg):
    wmplugin.set_rpt_mode(id, cwiid.RPT_IR | cwiid.RPT_BTN)
    return

def wmplugin_info():
    return [], \
      [("X", wmplugin.REL | wmplugin.ABS, 1024, 0, 0, 0), \
       ("Y", wmplugin.REL | wmplugin.ABS, 768, 0, 0, 0)], \
    []
</pre>
<p>We instanciate the wiimote object here and configure it in the IR mode. The name is choosen by wminput if we want to use it as plugin. We define that the plugin return the coordonates X and Y in a relative system ( you can get the signification of all the parameters here : <a href="http://abstrakraft.org/cwiid/browser/trunk/wminput/action_enum.txt">actions list</a>)<br/><br />
If we want to define new butons, we just have to name them in the first list, the&#8217;ll be accessible in the configuration file as plugin.[buton_name] = ACTION<br />
<br/></p>
<pre>def wmplugin_exec(messages):
    '''Wiimote callback managing method
    Recieves a message list, each element is different, see the libcwiid docs'''
    x = y = 0

    for msg in messages:
        if msg[0] == cwiid.MESG_IR:
            x, y = ir_sensor.get_movement(msg)
    return [], (x, y)
</pre>
<p>Here is the core of our driver. The name is choosen by wminput too, as the format value we return. We have in parameter the list of the messages the wiimote has sent.<br/><br />
If we have defined buton we need to return their state here. It is a boolean saying if the buton is pressed ( True ) or not ( False ).<br/><br />
This method doesn&#8217;t send any others parameters, and this is a problem when we need to store data between two calls ( ie for saving the cursor position ). One way for passing throught is to use global variables. But it is unelegant and can cause problems if we want to use our code in imports. So we&#8217;ill use a list as default parameter and let python save it as you can see here :</p>
<pre>
>>> def meth(a=[]):
...     a.append(1)
...     print a
...
>>> meth()
[1]
>>> meth()
[1, 1]
>>> meth()
[1, 1, 1]
</pre>
<p>
So the ir_sensor.get_movement method is defined with each parameter we want to save as an optional list</p>
<pre>
def get_movement(msg, _old_points=[], _old_position = [0, 0]):
    return 0, 0
</pre>
<p>The get_movement method need to return the difference between the old position of the cursor and the  new one in tuple : (0, 0) mean that the cursor didn&#8217;t move, (-10, 0) mean a deplacement to the left.
</p>
<p>
For now, the plugin doesn&#8217;t move the cursor, and doesn&#8217;t read what the wiimote has sent. But you know everything for creating your own plugin for controlling your wiimote.<br />
You can use all the cwiid method for setting the led, activating the differents modes of your wiimote ( IR, Acc, rumble &#8230; ), and define here your own actions.<br />
I&#8217;ll explain the core of the movement analysis in IR mode in the next article.</p>
<p>
Links :<br />
<a href="http://abstrakraft.org/cwiid/">The cwiid project</a></p>
<p><a href="https://help.ubuntu.com/community/CWiiD">Install Cwiid ( Ubuntu Documentation )</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chimrod.com/?feed=rss2&amp;p=15</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Le net en france</title>
		<link>http://blog.chimrod.com/?p=11</link>
		<comments>http://blog.chimrod.com/?p=11#comments</comments>
		<pubDate>Wed, 25 Feb 2009 19:41:58 +0000</pubDate>
		<dc:creator>Chimrod</dc:creator>
				<category><![CDATA[Perso]]></category>

		<guid isPermaLink="false">http://blog.chimrod.com/?p=11</guid>
		<description><![CDATA[La quadrature du net lance un appel à la mobilisation contre le projet de loi Hadopi qui vise à réguler le &#171;&#160;piratage&#160;&#187; sur le net. non seulement en mettant en place la riposte graduée ( qui conduit à couper l&#8217;accès à internet ), mais en autorisant l&#8217;enregistrement et l&#8217;analyse des différentes communications qui transitent sur [...]]]></description>
			<content:encoded><![CDATA[<p><a title="HADOPI - Le Net en France : black-out" href="http://www.laquadrature.net/HADOPI"><img src="http://media.laquadrature.net/Quadrature_black-out_HADOPI_468x60px.gif" border="0" alt="HADOPI - Le Net en France : black-out" /></a></p>
<p>La quadrature du net lance un appel à la mobilisation contre le projet de loi Hadopi qui vise à réguler le &laquo;&nbsp;piratage&nbsp;&raquo; sur le net. non seulement en mettant en place la riposte graduée ( qui conduit à couper l&#8217;accès à internet ), mais en autorisant l&#8217;enregistrement et l&#8217;analyse des différentes communications qui transitent sur le réseau. A la base instaurée pour répondre à la demande des artistes pour lutter contre le piratage, cette loi va plus loin et permet des dérives qui font peur : à l&#8217;heure ou nos communication par téléphone, ou notre courrier ou nos sources d&#8217;informations passent par internet, il est important de protéger notre espace et de le défendre.</p>
<p>Malheureusement, j&#8217;ai l&#8217;impression que personne ne chercher à protéger sa liberté sur le net. Les campagnes d&#8217;information sur les données personnelles n&#8217;empêchent pas les individus de continuer à s&#8217;inscrire massivement sur facebook ou d&#8217;utiliser msn pour communiquer, par commodité et par pratique, mais en oubliant que derrière tout ces services, il y a un prix à payer : celui de notre anonymat et de notre liberté.</p>
<p>A l&#8217;heure il il devient anormal de chercher à protéger sa vie privée même &laquo;&nbsp;si l&#8217;on n&#8217;a rien à se reprocher&nbsp;&raquo;, je pense qu&#8217;il faut rappeler à tous, que cet espace qui peut sembler si loin, si distant de notre vie, est en fait incrusté dans nos domicilies, nos consoles de jeux ou nos téléphones, et mettre en place des mesures de contrôles sur le net permettent de réduire très facilement les libertés de l&#8217;individu</p>
<p>Facilement car :</p>
<ul>
<li>Ce contrôle se fait en silence : il est fait de manière automatique sans que l&#8217;individu ne s&#8217;en rende compte. La dérive étant que l&#8217;on ne sait plus très bien quelle est la limite entre ce qui est contrôlé et ce qui ne l&#8217;est pas.</li>
<li>Ce contrôle est global : avec la puissance des machines, il devient possible de surveiller l&#8217;ensemble des connexions des internautes, et de voir tout ce qui transite sur les réseaux.</li>
<li>Ce contrôle est permanent : pour les même raisons.</li>
</ul>
<p>Avant qu&#8217;il ne soit interdit d&#8217;utiliser un logiciel non conforme, essayons de préserver notre liberté et d&#8217;affirmer ce que nous défendons.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chimrod.com/?feed=rss2&amp;p=11</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Un pilote wiimote sous Linux en python</title>
		<link>http://blog.chimrod.com/?p=7</link>
		<comments>http://blog.chimrod.com/?p=7#comments</comments>
		<pubDate>Thu, 19 Feb 2009 14:26:03 +0000</pubDate>
		<dc:creator>Chimrod</dc:creator>
				<category><![CDATA[Libre]]></category>
		<category><![CDATA[wiimote]]></category>

		<guid isPermaLink="false">http://blog.chimrod.com/?p=7</guid>
		<description><![CDATA[La wiimote est la manette de contrôle de la console wii de Nintendo, un outil merveilleux dont voici un petit résumé de ses fonctionnalités : Accéléromètres Caméra infrarouge Émetteur/Récepteur Bluetooth 11 boutons ( voir le détail sur la page de wikipédia ) En disposant d&#8217;un récepteur bluetooth, il est possible de se connecter à la [...]]]></description>
			<content:encoded><![CDATA[<p>
La wiimote est la manette de contrôle de la console wii de Nintendo, un outil merveilleux dont voici un petit résumé de ses fonctionnalités :</p>
<ul>
<li>Accéléromètres</li>
<li>Caméra infrarouge</li>
<li>Émetteur/Récepteur Bluetooth</li>
<li>11 boutons</li>
</ul>
<p>( voir le détail sur la page de <a href="http://fr.wikipedia.org/wiki/Wiimote">wikipédia</a> )</p>
<p>
En disposant d&#8217;un récepteur bluetooth, il est possible de se connecter à la télécommande et de récupérer ses informations, mieux, avec le projet <a href="http://abstrakraft.org/cwiid/">cwiid</a>, on peut transformer la wiimote en souris !</p>
<p>Ainsi selon le mode dans lequel se trouve la télécommande, on contrôle notre curseur en inclinant la télécommande, ou en la pointant vers une source infrarouge</p>
<blockquote><p>La source infrarouge pouvant être la sensor bar fournie avec la console, ou  une source externe, bougie lampe ou tout ce dont pouvez disposer diffusant de la chaleur à partir d&#8217;un point unique</p></blockquote>
<p>Le pilote fourni avec cwiid fonctionne mais n&#8217;est pas optimisé. Il arrive que la souris parte dans une direction incontrôlée, ou de ne pas pouvoir accéder à certaines parties de l&#8217;écran.</p>
<p>
La faute est due au pilote intégré qui se contente juste de placer le pointeur sur la source infrarouge, avec quelques petites optimisations.<br />
En effet, le capteur de la wiimote nous indique quelle est la position de toutes les sources infrarouges perçues ( et nous fourni également des informations sur leur intensité ), mais la conversion en pointeur est laissée au pilote :<br />
Quelle source choisir comme référence ?<br />
Comment gérer les cas où une source est sortie du champ de vision ?<br />
Comment réagir quand cette source revient dans le champ de vision ?</p>
<p>Tout ceci doit être pris en compte pour pouvoir offrir une ergonomie au curseur et faciliter le contrôle.</p>
<p>
Heureusement pour nous  le pilote nous donne la possibilité de réécrire nos propres moteurs, et donc de gérer nous même la manière dont on veut que la souris réagisse. Nous avons même le choix dans le langage ! En effet, nous pouvons choisir entre offrir un plugin compilé ( le pilote est écrit en C ), ou l&#8217;écrire en python. C&#8217;est cette deuxième option que je vais présenter dans les articles qui suivront.</p>
<p>Suite : <a href="http://blog.chimrod.com/?p=15">mise en pace du plugin (EN)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chimrod.com/?feed=rss2&amp;p=7</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Malinowski Apéritif</title>
		<link>http://blog.chimrod.com/?p=6</link>
		<comments>http://blog.chimrod.com/?p=6#comments</comments>
		<pubDate>Sat, 29 Nov 2008 14:52:55 +0000</pubDate>
		<dc:creator>Chimrod</dc:creator>
				<category><![CDATA[socio]]></category>

		<guid isPermaLink="false">http://blog.chimrod.com/?p=6</guid>
		<description><![CDATA[Il y aurait beaucoup à dire dans l&#8217;anthropologie des fêtes et réceptions organisées entre amis. Dans ce domaine, un point qui me parait amusant est celui de l&#8217;actualisation de la question du Don dans nos sociétés contemporaines. En effet, alors que je participe à des soirées où ce sont les invités qui sont chargés d&#8217;apporter [...]]]></description>
			<content:encoded><![CDATA[<p>
Il y aurait beaucoup à dire dans l&#8217;anthropologie des fêtes et réceptions organisées entre amis. Dans ce domaine, un point qui me parait amusant est celui de l&#8217;actualisation de la question du Don dans nos sociétés contemporaines. En effet, alors que je participe à des soirées où ce sont les invités qui sont chargés d&#8217;apporter les biscuits apéritifs et les boissons, je constate qu&#8217;il y a une circulation des biens, un échange sans cesse renouvelé, mettant en jeu la logique du don, de la consommation et de l&#8217;échange.</p>
<p>
La question des réceptions répond à une fonction sociale depuis longtemps, et marque un point structurant la socialité, étant associées à des moments de fête et de relations entres individus. Il n&#8217;est pas surprenant que ces fêtes soient organisées de manières différentes selon les catégories sociales qui y participent et qu&#8217;elles suivent des normes différentes. Ce dont je vais parler ici touche les fêtes organisées par des populations proches du milieu étudiant, jeunes et dans une situation qui n&#8217;est pas financièrement stable. Elles ont pour point commun de demander aux invités de se charger d&#8217;apporter ce qui concerne l&#8217;apéritif et les boissons, et de laisser l&#8217;hôte préparer le repas.</p>
<h2>Le don</h2>
<p>
M. Mauss nous à présenté la logique du don et les règles qui y sont associées. Pour que cette logique fonctionne, il y a en effet des règles à respecter qui permettent d&#8217;en assurer la cohésion au fil du temps. Il est ainsi nécessaire de :</p>
<ul>
<li>Ne pas refuser le don qui nous est fait</li>
<li>Rendre un objet de nature équivalente à celui qui nous à été donné</li>
<li>Différer dans le temps ce <em>contre-don</em></li>
<li>etc.</li>
</ul>
<p>Le don ne doit pas forcément être d&#8217;une grande valeur, mais doit entrer dans cette logique de l&#8217;échange. Dans notre cas des soirées organisées, on conçoit mal quelqu&#8217;un souhaitant repartir avec la bouteille qu&#8217;il a apporté pour le repas. De même, cela serait remarqué que l&#8217;on ramène à un ami les biscuits qu&#8217;il nous avait apporté lors de la soirée qu&#8217;il organise quelque temps après nous. Par contre la circulation n&#8217;interdit pas de les apporter à une autre personne lorsque l&#8217;on se fait inviter par des personnes qui ne participaient pas à l&#8217;échange qui avait précédemment eu lieu&#8230;</p>
<p>
Cette circulation <em>oblige</em> le participant à jouer le jeu, selon le principe des règles sociales, ou il peut être mal vu qu&#8217;une personne répète trop souvent un manquement dans cette circulation; la règle est transgressée mais celle-ci ne reposant que sur la bonne fois des participants, rien ne peut être reproché à quiconque&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chimrod.com/?feed=rss2&amp;p=6</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Automne</title>
		<link>http://blog.chimrod.com/?p=5</link>
		<comments>http://blog.chimrod.com/?p=5#comments</comments>
		<pubDate>Thu, 20 Nov 2008 21:36:27 +0000</pubDate>
		<dc:creator>Chimrod</dc:creator>
				<category><![CDATA[Perso]]></category>

		<guid isPermaLink="false">http://blog.chimrod.com/?p=5</guid>
		<description><![CDATA[Un vrai mois de novembre, il commence à faire frais, et les jours raccourcissent. C&#8217;est agréable de profiter des lumières de la ville, de voir toutes ces couleurs et de profiter du froid&#8230; Ça donne envie de prendre son temps et de d&#8217;aller boire des chocolats chauds dans les cafés&#8230;! En fait pour moi, c&#8217;est [...]]]></description>
			<content:encoded><![CDATA[<p>
Un vrai mois de novembre, il commence à faire frais, et les jours raccourcissent. C&#8217;est agréable de profiter des lumières de la ville, de voir toutes ces couleurs et de profiter du froid&#8230; Ça donne envie de prendre son temps et de d&#8217;aller boire des chocolats chauds dans les cafés&#8230;!</p>
<p>
En fait pour moi, c&#8217;est plutôt boulot dans la journée et transport entre chien et loup, mais il n&#8217;empêche, ça me plaît. J&#8217;ai juste envie de dire que je suis bien. J&#8217;aimerai que le temps s&#8217;écoule plus lentement, avoir davantage le temps de me poser, profiter et ne rien faire.</p>
<p>
Il n&#8217;empêche, c&#8217;est l&#8217;automne, le temps ralenti, tout tourne plus lentement, et j&#8217;ai envie d&#8217;en profiter.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chimrod.com/?feed=rss2&amp;p=5</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
