<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://www.finiderire.com/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>Vim est ton ami.</title>
  <link>http://www.finiderire.com/</link>
  <description>Pour les codeurs qui ne perdent pas leur temps avec les IDE.</description>
  <language>fr</language>
  <pubDate>Sun, 31 Aug 2008 20:56:24 +0200</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Flash pour nous, les 64 bits.</title>
    <link>http://www.finiderire.com/post/2008/08/31/Flash-pour-nous-les-64-bits</link>
    <guid isPermaLink="false">urn:md5:c1524fbc70aea2bc28a175d956bc9c61</guid>
    <pubDate>Sun, 31 Aug 2008 21:31:00 +0200</pubDate>
    <dc:creator>Jean-Seb</dc:creator>
        <category>Linuxeries</category>
            
    <description>&lt;p&gt;&lt;br /&gt;
&lt;em&gt;Dans le monde merveilleux de Macromedia (c)(tm)(r), il n'y a place que pour
les binaires.&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Dans le monde merveilleux des binaires de Macromedia (c)(tm)(r), il n'y a
place que pour le 32 bits.&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Il va donc falloir pallier aux déficiences des hydrocéphales du département
&lt;q&gt;Architectes Logiciels&lt;/q&gt; de Macomerdia (c)(etc).&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Merci à &lt;strong&gt;Frédéric Jolliton&lt;/strong&gt; qui a relu et pallié à mes
propres déficiences (ahem)&lt;/em&gt;&lt;br /&gt;&lt;/p&gt;    &lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Comme d'habitude&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;C'est pour Gentoo, 64 bits pour l'occasion.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;nspluginwrapper&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;C'est le petit nom du logiciel qui permets de lancer les plugins 32 bits
dans un firefox 64 bits.&lt;/li&gt;
&lt;li&gt;Je suppose que tout le monde s'en doute:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;emerge -va nspluginwrapper&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;A l'installation, &lt;em&gt;nspluginwrapper&lt;/em&gt; va configurer automatiquement
tous les plugins déja installés.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Installation de flash avec emerge&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;emerge -vp netscape-flash&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Bon et si par hasard une version plus récente sortait, pas présente dans
&lt;em&gt;portage&lt;/em&gt;, on peut se l'installer facilement à la main.
&lt;ul&gt;
&lt;li&gt;Je dis ça car j'ai commencé par l'installer à la main, sans vérifier dans
&lt;em&gt;portage&lt;/em&gt; (vieux réflexe hérité de la Slackware, où il fallait tout
faire soi-même) (ok, j'arrête de me chercher des excuses).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Installation de flash à la main&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Downloadez sur le site de macromedia(tm)(c)(grunt) le tgz.&lt;/li&gt;
&lt;li&gt;Il y a un script d'installation, mais laissez tomber, il est buggé au
possible.&lt;/li&gt;
&lt;li&gt;Le plus simple est de dépacker le tgz, et d'installer la bibliothèque flash
directement dans les plugins.
&lt;ul&gt;
&lt;li&gt;recopiez libflashplayer.so dans /opt/firefox/plugins&lt;/li&gt;
&lt;li&gt;si &lt;em&gt;plugins&lt;/em&gt; est un lien symbolique cassé, effacez le et créez le
répertoire &lt;em&gt;plugins&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Let's go&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Si le plugin flash n'a pas été installé avant &lt;em&gt;nspluginwrapper&lt;/em&gt;, il
faut le déclarer à celui-ci.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Déclarer le plugin flash avec &lt;code&gt;nspluginwrapper -i
&lt;em&gt;emplacement/du/plugin&lt;/em&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Attention, il faut donner le chemin complet. Si vous vous placez dans le
répertoire et donnez uniquement le nom de la bibliothèque dynamique, vous aurez
cette erreur&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
localhost plugins # nspluginwrapper -i libflashplayer.so 
*** NSPlugin Viewer  *** ERROR: libflashplayer.so: cannot open shared object file: No such file or directory
nspluginwrapper: no appropriate viewer found for libflashplayer.so
&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Ceci fonctionnera mieux
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;# nspluginwrapper -i
/opt/firefox/plugins/libflashplayer.so&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Fermez Firefox et redémarrez le.
&lt;ul&gt;
&lt;li&gt;Alleluia Gloria Hosanna au plus haut des cieux!&lt;/li&gt;
&lt;li&gt;Et j'ai même le son.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;A vous youtube&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Et à vous les studios.&lt;/li&gt;
&lt;/ul&gt;</description>
    
    
    
          <comments>http://www.finiderire.com/post/2008/08/31/Flash-pour-nous-les-64-bits#comment-form</comments>
      <wfw:comment>http://www.finiderire.com/post/2008/08/31/Flash-pour-nous-les-64-bits#comment-form</wfw:comment>
      <wfw:commentRss>http://www.finiderire.com/feed/rss2/comments/272661</wfw:commentRss>
      </item>
    
  <item>
    <title>Salut à toi, le bot</title>
    <link>http://www.finiderire.com/post/2008/07/12/Salut-a-toi-le-bot</link>
    <guid isPermaLink="false">urn:md5:047983a3515ae702c9f77e3b68ef1a40</guid>
    <pubDate>Thu, 31 Jul 2008 19:55:00 +0200</pubDate>
    <dc:creator>Jean-Seb</dc:creator>
        <category>Et je tenais à vous dire (blablabla)</category>
            
    <description>&lt;p&gt;&lt;em&gt;Salut à toi le visiteur&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Salut à toi le leecheur&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Salut à toi bot maraudeur&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;(sur l'air de Bérurier Noir.)&lt;/em&gt;&lt;br /&gt;&lt;/p&gt;    &lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Invasion de bots et d'araignées.&lt;/h3&gt;
&lt;p&gt;Un an d'ouverture pour ce blog. J'ai renouvelé le domaine.&lt;/p&gt;
&lt;p&gt;Des visiteurs ? Il y en a ... un peu plus. Le trafic mensuel moyen
augmente régulièrement.&lt;/p&gt;
&lt;p&gt;30 visiteurs sur mon premier mois complet, presque 200 ce mois-ci.&lt;/p&gt;
&lt;p&gt;Surement des bots spammeurs et des araignées indexeuses qui se sont donnés
le mot (&lt;q&gt;Dis Sam, &lt;em&gt;indexeuse&lt;/em&gt;, c'est un vrai mot ?&lt;/q&gt;).&lt;/p&gt;
&lt;p&gt;En tout cas, je suis bien référencé sur Google, ce qui me dispense de
rentrer des mots clés ici &lt;img src=&quot;/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Pas de pub, ni d'échange de liens. Comme je l'ai dit il y a un an, ceci est
un blog technique, et sa vocation première est de me servir d'
aide-mémoire.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Google is watching you&lt;/h3&gt;
&lt;p&gt;20% des visiteurs arrivent par Google. Les statistiques n'incluants pas de
score de satisfaction, je ne pourrais dire si ils repartent satisfaits.&lt;/p&gt;
&lt;p&gt;En majorité, ils ont des problèmes avec l'encodage des caractères de
Doxygen, avec la conception des Makefile, et avec Vim.&lt;/p&gt;
&lt;p&gt;Ce blog apporte donc une information importante: il y a des gens qui ont des
problèmes avec Vim. C'est étonnant.&lt;/p&gt;
&lt;p&gt;Il y a aussi quelques personnes sous Slackware. Hé les mecs, envisagez quand
même le passage sous Gentoo un de ces jours.&lt;/p&gt;
&lt;p&gt;Les visiteurs les moins représentés sont les utilisateurs Ubuntu. Par
rapport à la proportion Ubuntu chez les utilisateurs Linux, c'est un peu
étonnant. Peut être parce qu'ils incluent systématiquement &lt;q&gt;ubuntu&lt;/q&gt; dans
leurs requêtes Google.. Et vu que &lt;q&gt;Ubuntu&lt;/q&gt; n'est pas un mot clé fréquent
sur ce blog, il est guère étonnant de ne pas rencontrer de représentants Ubuntu
de cette communauté (Ubuntu) sans cesse grandissante. Ouf!&lt;/p&gt;
&lt;p&gt;Il y a des gens qui arrivent aussi depuis des sites répliquants les whois.
Je dis &lt;q&gt;des gens&lt;/q&gt;, plutôt devrais-je dire &lt;q&gt;les vilains bots spammeurs
qui cherchent de la chair fraiche&lt;/q&gt;.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Salut le bot!&lt;/h3&gt;
&lt;p&gt;Prochain billet &lt;q&gt;blabla&lt;/q&gt; : l'année prochaine, si tout va bien.&lt;/p&gt;
&lt;p&gt;Et vu que rien ne se passe jamais comme prévu...&lt;br /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.finiderire.com/post/2008/07/12/Salut-a-toi-le-bot#comment-form</comments>
      <wfw:comment>http://www.finiderire.com/post/2008/07/12/Salut-a-toi-le-bot#comment-form</wfw:comment>
      <wfw:commentRss>http://www.finiderire.com/feed/rss2/comments/260038</wfw:commentRss>
      </item>
    
  <item>
    <title>xset , le fidèle droogie de X</title>
    <link>http://www.finiderire.com/post/2008/07/25/xset-le-fidele-droogie-de-X</link>
    <guid isPermaLink="false">urn:md5:827bb89ed7a315b983f4700dd11971c4</guid>
    <pubDate>Mon, 28 Jul 2008 19:49:00 +0200</pubDate>
    <dc:creator>Jean-Seb</dc:creator>
        <category>Tools</category>
            
    <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;xset&lt;/strong&gt; est une commande permettant de configurer
X.&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Cette commande ressemble à un vaste fourre-tout, mais la négliger serait
une erreur.&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Voici une démonstration de ses possibilités au quotidien.&lt;/em&gt;&lt;br /&gt;&lt;/p&gt;    &lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;30 degrés à l'ombre.&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Ne cherchez pas trop de sérieux dans ce billet.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Il fait trop chaud pour faire des choses sérieuses.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Maintenant que vous êtes là, pourquoi ne pas le lire ?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Tiens, je n'ai pas &lt;strong&gt;xset&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Facile (pour Gentoo, comme d'habitude) :
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;emerge -va xset&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Pour certaines distribs, il faudra peut être vous remonter un X complet. Si
je me souviens bien, pour Slackware, c'était également un paquet séparé.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Vitesse de la souris&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Souris trop rapide ? Trop lente ?
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;xset m acceleration max/facteur d'acceleration seuil&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Version &lt;q&gt;le lièvre et la tortue&lt;/q&gt; : &lt;code&gt;xset m
100/30&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Version &lt;q&gt;rêglage trouvé après de longues recherches&lt;/q&gt; : &lt;code&gt;xset
m 5/4&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Bip d'erreur&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Il faut compiler le support du haut-parleur dans le noyau
&lt;ul&gt;
&lt;li&gt;comme c'est pas évident à trouver, voici l'emplacement:&lt;/li&gt;
&lt;li&gt;Device drivers -&amp;gt; Input device support -&amp;gt; Miscellaneous devices -&amp;gt;
PC Speaker support.&lt;/li&gt;
&lt;li&gt;Franchement, pour mettre le haut parleur dans &amp;quot;Input device&amp;quot;, il faut avoir
envie que personne ne le trouve.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;xset b volume pitch durée&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;plus le &lt;em&gt;pitch&lt;/em&gt; augmente, et plus le son est aigü.&lt;/li&gt;
&lt;li&gt;Version &lt;q&gt;il est tard, me stressez pas&lt;/q&gt; : &lt;code&gt;xset b 100 250
10&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Version anti-jeune: &lt;code&gt;xset b 100 15000 1000&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Bip clavier&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;xset c on
&lt;ul&gt;
&lt;li&gt;Ne fonctionne pas chez moi, et c'est bien dommage.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Mise en veille de l'écran&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Pour vérifier le support DPMI ou forcer une mise en veille immédiate
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;xset dpms force off&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Si l'écran s'éteint complètement (y compris la backlight pour les écrans
LCD), c'est bon.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Pendant que j'y pense, quelques infos intéressantes sur l'extinction ici:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://gentoo-wiki.com/HOWTO_Automatically_turn_off_your_monitor&quot;&gt;Eteindre le
moniteur avec Gentoo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Soirée disco&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Impressionnez vos invités avec l'option &lt;em&gt;led&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;xset led &lt;em&gt;n&lt;/em&gt;&lt;/code&gt; : allume sur le clavier la led
&lt;em&gt;n&lt;/em&gt; (1 à 32)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;xset -led &lt;em&gt;n&lt;/em&gt;&lt;/code&gt; : éteint la led &lt;em&gt;n&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Script &lt;q&gt;you've got mail&lt;/q&gt; (effet garanti pendant vos diners aux
chandelles)
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;(for &lt;img src=&quot;http://www.finiderire.com/post/2008/07/25/i=1;%20i%3C10;%20i++&quot; alt=&quot;&quot; /&gt;; do xset led 3; sleep
0.2; xset -led 3; sleep 0.2; done) &amp;amp;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Pour le reste&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;man xset&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Et allez voir, car il y a plein d'options beaucoup plus utiles que celles
que je vous ai présenté ici.
&lt;ul&gt;
&lt;li&gt;Gestion du cache de fontes.&lt;/li&gt;
&lt;li&gt;Vitesse de répétition automatique du clavier.&lt;/li&gt;
&lt;li&gt;Controler le screensaver... allez, je vous donne celui pour lui couper la
chique pendant un divx: &lt;code&gt;xset s off&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    
    
    
          <comments>http://www.finiderire.com/post/2008/07/25/xset-le-fidele-droogie-de-X#comment-form</comments>
      <wfw:comment>http://www.finiderire.com/post/2008/07/25/xset-le-fidele-droogie-de-X#comment-form</wfw:comment>
      <wfw:commentRss>http://www.finiderire.com/feed/rss2/comments/263372</wfw:commentRss>
      </item>
    
  <item>
    <title>SFML : tout voir et rien installer</title>
    <link>http://www.finiderire.com/post/2008/07/14/SFML-%3A-tout-voir-et-rien-installer</link>
    <guid isPermaLink="false">urn:md5:cc5da6b1e8bff1658988000c94045452</guid>
    <pubDate>Mon, 14 Jul 2008 16:12:00 +0200</pubDate>
    <dc:creator>Jean-Seb</dc:creator>
        <category>Tools</category>
            
    <description>&lt;p&gt;&lt;em&gt;SFML se veut un remplaçant de la SDL&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Pour l'instant, ça semble bien parti pour un projet récent (août
2007)&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;C'est un projet Français, ce qui fait toujours plaisir.&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Ce n'est pas du chauvinisme, mais pour le 14 juillet, je ne pouvais pas
faire autrement.&lt;/em&gt;&lt;br /&gt;&lt;/p&gt;    &lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;SFML : WTF ?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.sfml-dev.org/features.php&quot;&gt;Les caractéristiques
alléchantes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;La version 1.3 est sortie il y a peu de temps, mais SFML n'est toujours pas
intégré dans l'arbre Portage de la Gentoo
&lt;ul&gt;
&lt;li&gt;ne partez pas, ce billet peut également servir aux personnes qui n'ont pas
le port disponible pour leur distribution.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Un ebuild pour la version 1.2 est disponible pour la Gentoo.
&lt;ul&gt;
&lt;li&gt;Ce n'est pas que je n'ai pas confiance, mais je préfère compiler cette
bibliothèque à part.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Compilation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Récupérez les &lt;a href=&quot;http://www.sfml-dev.org/download.php&quot;&gt;sources&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Vérifiez que vous avez les dépendances:
&lt;ul&gt;
&lt;li&gt;OpenAL&lt;/li&gt;
&lt;li&gt;libsndfile&lt;/li&gt;
&lt;li&gt;freetype&lt;/li&gt;
&lt;li&gt;et une carte graphique supportant OpenGL en hard (sinon ça va se
trainer)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Décompactez l'archive SFML dans votre répertoire de sources.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;make&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Voila, c'est prêt. Simple et de bon goût, un bon point pour SFML.
&lt;ul&gt;
&lt;li&gt;Ne faites &lt;strong&gt;surtout pas&lt;/strong&gt; un &lt;del&gt;&lt;code&gt;make
install&lt;/code&gt;&lt;/del&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Compiler les samples&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;SFML est certe compilé, mais les libs et les includes ne sont pas
disponibles directement.
&lt;ul&gt;
&lt;li&gt;Nous allons voir comment utiliser SFML sans pourrir notre &lt;em&gt;/usr/lib&lt;/em&gt;
et notre &lt;em&gt;/usr/include&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Vivement que ce soit intégré dans Portage, quand même.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Allez dans le répertoire &lt;em&gt;lib&lt;/em&gt; de SFML et créez des liens
symboliques sur les bibliothèques, sans le numéro de version.
&lt;ul&gt;
&lt;li&gt;Si vous ne faites pas ceci, le linker ne va rien trouver (il cherche les
libs sans les numéros de versions).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;strace -f -e open&lt;/code&gt; avant la commande de link si vous voulez
voir ce que le linker recherche.&lt;/li&gt;
&lt;li&gt;Fred qui connait bien le shell vous file son batch:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;for a in *.so.1; do ln -sf $a ${a%%.1}; done&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Allez dans le répertoire &lt;em&gt;samples/sound&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;Modifiez le Makefile, qui va devenir ceci :&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
EXEC = sound.elf
EXECPATH = ../bin
OBJ  = Sound.o
CFLAGS=-I../../include
LDFLAGS=-L../../lib

all: $(EXEC)

$(EXEC): $(OBJ)
        $(CC) $(LDFLAGS) -o $(EXECPATH)/$@ $(OBJ) -lsfml-audio -lsfml-system -Wl,-rpath=../../lib

%.o: %.cpp
        $(CC) -o $@ -c $&amp;lt; $(CFLAGS)

.PHONY: clean mrproper

clean:
        @rm -rf *.o

mrproper: clean
        @rm -rf $(EXECPATH)/$(EXEC)
&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Explications pour les variables:
&lt;ul&gt;
&lt;li&gt;les variables &lt;strong&gt;CFLAGS&lt;/strong&gt; et le &lt;strong&gt;LDFLAGS&lt;/strong&gt;
indiquent au compilateur où trouver les includes et les libraries.&lt;/li&gt;
&lt;li&gt;la variable &lt;strong&gt;EXEC&lt;/strong&gt; prend le nom de &lt;em&gt;sound.elf&lt;/em&gt;:
&lt;strong&gt;.elf&lt;/strong&gt; est mon extension d'exécutables Linux, ignorée lors de
mes archivages.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Explications pour le &lt;strong&gt;-Wl&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;-Wl&lt;/strong&gt; permet de passer des options au linker&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;-Wl,-rpath=../../lib&lt;/strong&gt; indique au linker de hardcoder
l'emplacement des bibliothèques chargées dynamiquement.&lt;/li&gt;
&lt;li&gt;Ceci évite d'avoir à préciser avant l'exécution l'emplacement non-standard
de nos bibliothèques avec l'export de LD_LIBRARY_PATH (ce qui fonctionnerait
également)&lt;/li&gt;
&lt;li&gt;Bien entendu, les exécutables générés de cette façon ne sont plus
distribuables, à moins de dupliquer la hiérarchie du filesystem. Ce n'est de
toutes façons pas souhaitable, et juste une façon de gagner du temps pour nos
essais.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;J'ai ajouté la variable $(EXECPATH) qui pointe sur le répertoire
&lt;em&gt;samples/bin&lt;/em&gt;.
&lt;ul&gt;
&lt;li&gt;Ce répertoire contient les données utilisées par les programmes
d'exemples.&lt;/li&gt;
&lt;li&gt;Sinon, vous pouvez toujours déplacer les exécutables après compilation,
mais c'est une perte de temps.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;J'ai également modifié la cible de $(OBJ), c'est un détail.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lancement du test &lt;em&gt;sound.elf&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;Allez dans le répertoire &lt;em&gt;samples/bin&lt;/em&gt; et lancez
&lt;strong&gt;sound.elf&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Attention, &lt;em&gt;sound&lt;/em&gt; sera peut être présent, mais il a été compilé
lors de la compilation des sources, et ne trouvera pas les libraries. Il faut
donc bien lancer &lt;em&gt;sound.elf&lt;/em&gt; (faire le ménage dans &lt;em&gt;/samples/bin&lt;/em&gt;
ne serait pas une mauvaise idée).&lt;/li&gt;
&lt;li&gt;Lisez le paragraphe suivant si vous avez un message d'erreur de ce type (le
segfault est offert par la maison) :&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
open /dev/[sound/]dsp: No such file or directory
Failed to open the audio device
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;OSS 117 : délire à Alsa City&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Donc le son ne sort pas de vos haut-parleurs. How bad.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Pour ma part, j'ai vérifié, OpenAL est bien compilé avec le support
Alsa.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;strace -f -e open ./sound.elf&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
open(&amp;quot;/dev/sound/dsp&amp;quot;, O_WRONLY|O_NONBLOCK) = -1 ENOENT (No such file or directory)
open(&amp;quot;/dev/dsp&amp;quot;, O_WRONLY|O_NONBLOCK)   = -1 ENOENT (No such file or directory)
open /dev/[sound/]dsp: No such file or directory
Failed to open the audio device
&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;OpenAL (ou SFML via OpenAL) semble insister pour utiliser OSS à la place de
Alsa.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Mon noyau a été compilé sans OSS (support direct ou émulation), avec
uniquement Alsa.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;J'ai deux solutions
&lt;ul&gt;
&lt;li&gt;recompiler un noyau avec un support OSS (émulé ou pas).&lt;/li&gt;
&lt;li&gt;installer &lt;strong&gt;alsa-oss&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Je ne recompilerai pas pour si peu. Mais qu'est-ce que
&lt;strong&gt;alsa-oss&lt;/strong&gt; ?
&lt;ul&gt;
&lt;li&gt;Définition extraite du &lt;a href=&quot;http://gentoo-wiki.com/Aoss&quot;&gt;wiki
Gentoo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
aoss is an OSS to ALSA redirector. You can use it to run OSS-Applications with an ALSA Sound system so you can use multiple programs with audio-output at a time. 
&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Merci à Frédéric Jolliton pour le tuyau sur &lt;strong&gt;alsa-oss&lt;/strong&gt; dont
je ne connaissais pas l'existence.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Le programme de test &lt;em&gt;sound.elf&lt;/em&gt; fonctionne avec alsa-oss, mais ça
crachouille pas mal.
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aoss ./sound.elf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Jai fait un essai avec un support direct de OSS sur une autre machine, et
ça fonctionne mieux (mais il y a des cliquetis dans le flux sonore).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;La doc de SFML conseille d'installer une autre version de OpenAL :
&lt;strong&gt;OpenAL-Soft&lt;/strong&gt;.
&lt;ul&gt;
&lt;li&gt;OpenAL-Soft a l'air d'être compatible au niveau binaire, mais de poser
d'autres problèmes si on en croit les forums de SFML.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Pas de solution miracle pour l'instant, donc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Un successeur de SDL ?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;La SDL est en trait plat à l'EEG depuis 3 ans (dernière version stable:
1.2.13).
&lt;ul&gt;
&lt;li&gt;Sur la mailing-liste SDL, il a été annoncé officiellement que la version
2.0 ne verrait jamais le jour.&lt;/li&gt;
&lt;li&gt;Des doutes planent également sur la version 1.3. Mais, sait-on
jamais...&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;SFML propose d'ores et déja des bindings intéressants: C, C++, Python, D
(si si).&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Les performances 2D sont plus que correctes, grâce à l'utilisation de
OpenGL. SDL utilise pour sa part une écriture &lt;q&gt;à l'ancienne&lt;/q&gt; dans le
buffer video.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Reste à savoir si cette librairie sera maintenue, ou si il vaut mieux miser
sur des librairies plus simples telles que GLFW.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Je continue à tester et je mettrai éventuellement à jour ce blog avec mes
nouvelles découvertes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.finiderire.com/post/2008/07/14/SFML-%3A-tout-voir-et-rien-installer#comment-form</comments>
      <wfw:comment>http://www.finiderire.com/post/2008/07/14/SFML-%3A-tout-voir-et-rien-installer#comment-form</wfw:comment>
      <wfw:commentRss>http://www.finiderire.com/feed/rss2/comments/260394</wfw:commentRss>
      </item>
    
  <item>
    <title>MPD : Musique Par le Daemon</title>
    <link>http://www.finiderire.com/post/2008/07/09/MPD-%3A-Musique-Par-le-Daemon</link>
    <guid isPermaLink="false">urn:md5:aa5f739117aebbb4547085ca56d1c67c</guid>
    <pubDate>Fri, 11 Jul 2008 19:39:00 +0200</pubDate>
    <dc:creator>Jean-Seb</dc:creator>
        <category>Linuxeries</category>
            
    <description>&lt;p&gt;&lt;em&gt;Audacious est lourd, lent et pénible à controler.&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Tout ce qu'on veut, c'est jouer de la musique simplement.&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Mais comment faire, depuis que xmms est tricard de nos distribs
?&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Une réponse en trois lettres : MPD&lt;/em&gt;&lt;br /&gt;&lt;/p&gt;    &lt;h3&gt;Caisse donc ? Est-ce clair ?&lt;/h3&gt;
&lt;p&gt;MPD est un daemon que l'on peut controler à loisir pour jouer nos morceaux
de musique préférés.&lt;/p&gt;
&lt;p&gt;Il fonctionne en mode client/serveur, et assure la partie serveur. Il a donc
besoin d'un client pour s'interfacer avec l'appareil auditif de
destination.&lt;/p&gt;
&lt;p&gt;Comme d'habitude, les manipulations liées à mes élucubrations se feront sous
Gentoo, et non pas sous Daubian, voire pire.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Installation du serveur&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;emerge -va mpd&lt;/code&gt; avec les options adéquates (mikmod, mp3, ogg,
vorbis et Jean Passe).&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Vous pouvez ignorer le message d'installation concernant la nécessité de
s'assurer que l'item &lt;q&gt;pid_file&lt;/q&gt; de MPD est mis à
&lt;em&gt;/var/run/mpd/mpd.pid&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Configuration minimale (&lt;em&gt;/etc/mpd.conf&lt;/em&gt;)
&lt;ul&gt;
&lt;li&gt;Commencez par copier le fichier de configuration dans votre home (on peut
le mettre ici: &lt;em&gt;~/.mpd/mpd.conf&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Voici le strict minimum pour la configuration (merci à Frédéric pour son
fichier de configuration)&lt;/li&gt;
&lt;li&gt;A adapter à votre home, bien entendu.&lt;/li&gt;
&lt;li&gt;Si vous ne modifiez pas les chemins par défaut, tout part dans
&lt;em&gt;/var/lib&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
music_directory           &amp;quot;/home/jseb/.mpd/music&amp;quot;
playlist_directory         &amp;quot;/home/jseb/.mpd/playlists&amp;quot;
db_file                         &amp;quot;/home/jseb/.mpd/database&amp;quot;
log_file                        &amp;quot;/home/jseb/.mpd/mpd.log&amp;quot;
error_file                    &amp;quot;/home/jseb/.mpd/mpd.error.log&amp;quot;
pid_file                        &amp;quot;/home/jseb/.mpd/mpd.pid&amp;quot;
state_file                      &amp;quot;/home/jseb/.mpd/state&amp;quot;

bind_to_address           &amp;quot;localhost&amp;quot;
audio_output {
        type                    &amp;quot;alsa&amp;quot;
        name                    &amp;quot;My ALSA Device&amp;quot;
        #device                  &amp;quot;hw:0,0&amp;quot;     # optional
        #format                  &amp;quot;44100:16:2&amp;quot; # optional
}
mixer_type                      &amp;quot;alsa&amp;quot;
mixer_device                    &amp;quot;default&amp;quot;
mixer_control                   &amp;quot;PCM&amp;quot;
filesystem_charset &amp;quot;UTF-8&amp;quot;
&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Pour les autres paramètres, &lt;code&gt;man mpd.conf&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;Jetez quand même un coup d'oeil au fichier de config original
(&lt;em&gt;/etc/mpd.conf&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Le premier lancement se fait de cette façon
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mpd --create-db /home/jseb/.mpd/mpd.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;n'oubliez pas de créer les répertoire &lt;em&gt;music&lt;/em&gt; et &lt;em&gt;playlists&lt;/em&gt;
avant de lancer cette commande.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Pour les lancements suivants, il y a un script d'initialisation :
&lt;em&gt;/etc/init.d/mpd&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;Vous ne pouvez le lancer qu'en root.&lt;/li&gt;
&lt;li&gt;Vous pouvez faire la même chose que lui ainsi: &lt;code&gt;/usr/bin/mpd
--no-create-db &amp;quot;$HOME&amp;quot;/.mpd/mpd.conf&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Si vous voulez quand même modifier &lt;em&gt;/etc/init.d/mpd&lt;/em&gt;, utilisez
&lt;em&gt;rc-update&lt;/em&gt; pour le lancer au démarrage.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Installation d'un client&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.musicpd.org/clients.shtml&quot;&gt;On a l'embarras du
choix&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Bien sûr, nous allons prendre le plus texte des clients, à savoir
&lt;strong&gt;ncmpc&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Autrement, autant rester avec Audacious, n'est-ce pas ?&lt;/li&gt;
&lt;li&gt;&lt;code&gt;emerge -va ncmpc&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Pour voir le contenu de votre répertoire &lt;q&gt;music&lt;/q&gt;, faites un
&lt;strong&gt;ctrl+u&lt;/strong&gt; après toute modification&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Yes! Il y a un plugin gkrellm2 !
&lt;ul&gt;
&lt;li&gt;A noter le petit piège dans l'orthographe du plugin.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
* media-plugins/gkrellmpc
     Available versions:  ~0.1_beta9
     Homepage:            http://mpd.wikicities.com/wiki/Client:GKrellMPC
     Description:         A gkrellm plugin to control the MPD (Music Player Daemon)
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Kaboum kaboum&lt;/h3&gt;
&lt;p&gt;Pour le reste: use the man , Luke !&lt;/p&gt;
&lt;p&gt;Et bientôt sur ce blog... le mapping de vos touches &lt;q&gt;multimedia&lt;/q&gt; pour
controler MPD ! Stay tuned &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.finiderire.com/post/2008/07/09/MPD-%3A-Musique-Par-le-Daemon#comment-form</comments>
      <wfw:comment>http://www.finiderire.com/post/2008/07/09/MPD-%3A-Musique-Par-le-Daemon#comment-form</wfw:comment>
      <wfw:commentRss>http://www.finiderire.com/feed/rss2/comments/258704</wfw:commentRss>
      </item>
    
  <item>
    <title>A bloque B qui bloque A</title>
    <link>http://www.finiderire.com/post/2008/07/07/A-bloque-B-qui-bloque-A</link>
    <guid isPermaLink="false">urn:md5:615235937eddfd29d71b30cf7800574d</guid>
    <pubDate>Mon, 07 Jul 2008 19:27:00 +0200</pubDate>
    <dc:creator>Jean-Seb</dc:creator>
        <category>Linuxeries</category>
            
    <description>&lt;p&gt;&lt;em&gt;Les paquets bloqués dans Gentoo peuvent se révéler un vrai
casse-tête.&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Débloquons dans la joie notre distribution préférée.&lt;/em&gt;&lt;br /&gt;
&lt;strong&gt;Mise à jour&lt;/strong&gt; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;8 juillet 2008. &lt;em&gt;(du bon usage de revdep-rebuild)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;8 juillet 2008. &lt;em&gt;(installer un ebuild plus récent que celui
bloquant)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;9 juillet 2008. &lt;em&gt;(retrouver une dépendance enfouie)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;    &lt;h3&gt;Note préliminaire: du bon usage de &lt;em&gt;revdep-rebuild&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;revdep-rebuild&lt;/em&gt; est un utilitaire bien pratique: il retrouve dans
les binaires les bibliothèques dynamiques (&lt;q&gt;.so&lt;/q&gt;) référencées comme
inexistantes.&lt;/p&gt;
&lt;p&gt;Il propose ensuite de reconstruire les paquets contenants les binaires
concernés.&lt;/p&gt;
&lt;p&gt;C'est une bonne idée, mais le seul inconvénient est que
&lt;em&gt;revdep-rebuild&lt;/em&gt; va reconstruire un ou plusieurs paquets en se fondant
sur le numéro de version trouvé dans le binaire. La plupart du temps, il vaut
mieux arrêter &lt;em&gt;revdep-rebuild&lt;/em&gt; dès qu'il a fini sa liste de paquets à
reconstruire, et faire le &lt;em&gt;emerge&lt;/em&gt; à la main.&lt;/p&gt;
&lt;p&gt;Ceci vous garantira les dernières bibliothèques, ce qui est mieux (la
plupart du temps) que de conserver un système à moitié à jour.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Les symptômes d'une Gentoo bancale&lt;/h3&gt;
&lt;p&gt;Ils sont apparus lors d'une mise à jour de &lt;em&gt;portage&lt;/em&gt;.&lt;/p&gt;
&lt;pre&gt;

jseb ~ # emerge -va portage

These are the packages that would be merged, in order:

Calculating dependencies... done!

[ebuild     U ] sys-apps/sandbox-1.2.18.1-r2 [1.2.17] 232 kB
[ebuild     U ] dev-python/pycrypto-2.0.1-r6 [2.0.1-r5] USE=&amp;quot;-bindist -gmp -test&amp;quot; 151 kB
[ebuild     U ] sys-apps/portage-2.1.4.4 [2.1.2.2] USE=&amp;quot;-build -doc -epydoc (-selinux)&amp;quot; LINGUAS=&amp;quot;-pl&amp;quot; 368 kB
*** Portage will stop merging at this point and reload itself,
    then resume the merge.
[ebuild     U ] app-shells/bash-3.2_p33 [3.1_p17] USE=&amp;quot;nls -afs -bashlogger -plugins% -vanilla&amp;quot; 2,564 kB
[blocks B     ] &amp;lt;sys-apps/portage-2.1.4_rc1 (is blocking app-shells/bash-3.2_p33)

Total: 4 packages (4 upgrades, 1 block), Size of downloads: 3,313 kB

!!! Error: The above package list contains packages which cannot be installed
!!!        at the same time on the same system.

For more information about Blocked Packages, please refer to the following
section of the Gentoo Linux x86 Handbook (architecture is irrelevant):

http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?full=1#blocked

&lt;/pre&gt;
&lt;p&gt;La ligne importante est celle-ci:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[blocks B ] &amp;lt;sys-apps/portage-2.1.4_rc1 (is blocking
app-shells/bash-3.2_p33)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
Ce qui signifie que la mise à jour de Portage est bloquée par la version de
Bash que l'on devrait installer (ou qui est déja installée). Et si on tente de
mettre à jour Bash, on obtient ceci:&lt;/p&gt;
&lt;pre&gt;
[ebuild     U ] app-shells/bash-3.2_p33 [3.1_p17] USE=&amp;quot;nls -afs -bashlogger -plugins% -vanilla&amp;quot; 2,564 kB
[blocks B     ] &amp;lt;sys-apps/portage-2.1.4_rc1 (is blocking app-shells/bash-3.2_p33)
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;
Nous sommes bien dans le cas de A qui bloque B qui bloque A.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Ce qu'il ne faut &lt;strong&gt;surtout&lt;/strong&gt; pas faire&lt;/h3&gt;
&lt;p&gt;Il ne faut &lt;strong&gt;pas&lt;/strong&gt; tenter de désinstaller Bash avec &lt;em&gt;emerge
-C&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Vous risquez de perdre votre unique shell, ce qui pourrait avoir de grave
conséquences (dans un cas comme celui-ci, seule possibilité: compiler un paquet
binaire Gentoo sur un autre système, et installer celui-ci sur votre système.
Ensuite, emerger Bash depuis votre système immédiatement).&lt;br /&gt;
Bien entendu, si vous avez plusieurs shells (zsh, tcsh..), ce que j'ai écrit au
dessus ne s'applique pas, mais ce n'est pas une raison pour le faire. Dans le
pire des cas, vous aurez toujours &lt;strong&gt;bb&lt;/strong&gt; (BusyBox) en guise de
shell &lt;q&gt;de secours&lt;/q&gt;, mais il n'est pas suffisant pour lancer
&lt;em&gt;emerge&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Résolution&lt;/h3&gt;
&lt;p&gt;Il faut tenter de faire une mise à jour progressive.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;emerge -va '&amp;lt;bash-2.3_p33'&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;va installer la version précédente de Bash.&lt;/p&gt;
&lt;p&gt;Ensuite, il faut installer la version actuelle de Portage (celle qui
bloquait précédemment).&lt;/p&gt;
&lt;p&gt;&lt;code&gt;emerge -va portage&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Une fois Portage mis à jour, il ne reste qu'à installer le dernier ebuild de
Bash&lt;/p&gt;
&lt;p&gt;&lt;code&gt;emerge -va bash&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Et le système est à nouveau à niveau (pour cette partie du moins).&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Alors ça y est, ça marche ?&lt;/h3&gt;
&lt;p&gt;D'autres cas peuvent nécessiter une mise à jour progressive du système, pour
isoler les paquets qui posent problème dans leurs dépendances circulaires.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;emerge -vau system&lt;/code&gt; renvoie ceci:&lt;/p&gt;
&lt;pre&gt;
[blocks B     ] sys-apps/mktemp (is blocking sys-apps/coreutils-6.10-r2)
[blocks B     ] &amp;gt;=sys-apps/coreutils-6.10 (is blocking sys-apps/mktemp-1.5)
&lt;/pre&gt;
&lt;p&gt;Nous ne sommes pas dans le même cas que précédemment, car &lt;em&gt;mktemp&lt;/em&gt;
n'est disponible que dans une seule version. La montée de version progressive
n'est donc pas possible dans ce cas.&lt;/p&gt;
&lt;pre&gt;

jseb | # eix mktemp
[I] sys-apps/mktemp
     Available versions:  1.5
     Installed versions:  1.5(02:51:44 20.04.2007)
     Homepage:            http://www.mktemp.org/
     Description:         allow safe temporary file creation from shell scripts.

&lt;/pre&gt;
&lt;p&gt;Par contre, le descriptif nous informe qu'enlever &lt;em&gt;mktemp&lt;/em&gt; le temps
d'upgrader les &lt;em&gt;coreutils&lt;/em&gt; ne devrait pas poser de stabilité du
système.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attention&lt;/strong&gt; faire l'inverse (enlever les &lt;em&gt;coreutils&lt;/em&gt;)
serait une &lt;strong&gt;très mauvaise&lt;/strong&gt; idée.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
Nous allons donc enlever &lt;em&gt;mktemp&lt;/em&gt; : &lt;code&gt;emerge -C
mktemp&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Puis tenter d'installer les coreutils. Enfer !&lt;/p&gt;
&lt;pre&gt;
 
jseb ~ # emerge -va coreutils

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N    ] dev-perl/Locale-gettext-1.05  8 kB
[ebuild  N    ] app-arch/lzma-utils-4.32.6  USE=&amp;quot;-nocxx&amp;quot; 468 kB
[ebuild  N    ] sys-apps/help2man-1.36.4  USE=&amp;quot;nls&amp;quot; 84 kB
[ebuild     U ] sys-devel/automake-1.10.1 [1.10] 897 kB
[ebuild     U ] sys-apps/coreutils-6.10-r2 [6.4] USE=&amp;quot;acl nls (-selinux) -static -vanilla% -xattr%&amp;quot; 3,692 kB
[blocks B     ] &amp;lt;sys-apps/util-linux-2.13 (is blocking sys-apps/coreutils-6.10-r2)
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;
Ce n'est pas grave. Commençons par emerger la dernière version des
&lt;em&gt;util-linux&lt;/em&gt; : &lt;code&gt;emerge -va util-linux&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Ensuite, on peut enfin emerger les &lt;em&gt;coreutils&lt;/em&gt; : &lt;code&gt;emerge
-va coreutils&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;On ne peut toujours pas réemerger &lt;em&gt;mktemp&lt;/em&gt;. Pas d'inquiétude, c'est
parce qu'il a été intégré dans un autre paquet, qui se trouve être ...
&lt;em&gt;coreutils&lt;/em&gt;, justement.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;epm -qf `which mktemp`&lt;/code&gt; donne : coreutils-6.10-r2&lt;/p&gt;
&lt;p&gt;ou encore (commande équivalente)&lt;/p&gt;
&lt;p&gt;&lt;code&gt;equery b mktemp&lt;/code&gt; : donne le nom des packages contenants le
fichier &lt;q&gt;mktemp&lt;/q&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Installer un ebuild plus récent que celui bloquant&lt;/h3&gt;
&lt;p&gt;Cette fois, le problème est résolu en montant de version directement.&lt;/p&gt;
&lt;pre&gt;
jseb ~ # emerge -vp wxGTK

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N    ] app-admin/eselect-wxwidgets-0.8  0 kB 
[ebuild  NS   ] x11-libs/wxGTK-2.8.7.1-r1  USE=&amp;quot;X opengl -debug -doc -gnome -gstreamer -odbc -pch -sdl&amp;quot; 25,745 kB 
[blocks B     ] &amp;lt;=x11-libs/wxGTK-2.6.4.0-r2 (is blocking app-admin/eselect-wxwidgets-0.8)
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;eselect-wxwidgets&lt;/em&gt; n'est disponible que dans une version.&lt;/p&gt;
&lt;p&gt;Installer une version inférieure de &lt;em&gt;wxGTK&lt;/em&gt; n'a mené à rien.&lt;/p&gt;
&lt;p&gt;Seule solution: tenter de monter de version pour &lt;em&gt;wxGTK&lt;/em&gt;.&lt;/p&gt;
&lt;pre&gt;
jseb ~ # eix wxGTK
[U] x11-libs/wxGTK
     Available versions:  
        (2.6)   2.6.4.0-r1 2.6.4.0-r3 ~2.6.4.0-r4
        (2.8)   2.8.7.1-r1 ~2.8.7.1-r2 ~2.8.8.0
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;
On installe la plus récente stable : &lt;code&gt;emerge -va
'=wxGTK-2.6.4.0-r3'&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;C'est bon, ça maaaaarche.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Retrouver une dépendance enfouie.&lt;/h3&gt;
&lt;p&gt;Je gardais le meilleur pour la fin.&lt;/p&gt;
&lt;p&gt;Certaines dépendances sont tellement enfouies qu'on ne les retrouve pas
directement.&lt;/p&gt;
&lt;p&gt;Un exemple : tous vos programmes utilisant GTK cessent de fonctionner
et réclament la bibliothèque partagée &lt;em&gt;libexpat.so.0&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Une rapide recherche nous renseigne: cette bibliothèque partagée a été
renommée. Horreur. Va-t-il falloir tout recompiler ?&lt;/p&gt;
&lt;p&gt;Non, car c'est &lt;em&gt;GTK+&lt;/em&gt; qui est concerné.&lt;/p&gt;
&lt;p&gt;Bon, alors on recompile &lt;em&gt;GTK+&lt;/em&gt;, c'est bien ça ?&lt;/p&gt;
&lt;p&gt;Non (du moins, pas tout de suite), car la dépendance à la &lt;em&gt;libexpat&lt;/em&gt;
n'est pas directe, et viens d'une autre bibliothèque à laquelle est lié
&lt;em&gt;GTK+&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Les gens qui connaissent un peu la hiérarchie de cette bibliothèque vont
recompiler de façon préventive &lt;em&gt;pango&lt;/em&gt; et &lt;em&gt;glib&lt;/em&gt; (à ne pas
confondre avec la &lt;em&gt;glibc&lt;/em&gt; qui est la bibliothèque des fonctions
systèmes).&lt;/p&gt;
&lt;p&gt;Perdu, le coupable était &lt;em&gt;poppler&lt;/em&gt;, une obscure bibliothèque chargée
du rendering pdf.&lt;/p&gt;
&lt;p&gt;Bon. J'avoue que j'ai triché, et qu'on me l'a dit. Mais vous pouvez être
confronté à un cas où vous vous retrouverez seul au monde avec votre dépendance
enfouie.&lt;/p&gt;
&lt;p&gt;Comment savoir dans un cas tel que celui-ci, ou au moins avoir une liste de
suspects ?&lt;/p&gt;
&lt;p&gt;Il faut retrouver tous les paquets en dépendance de GTK+ : &lt;code&gt;emerge
-Dp gtk+&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;ensuite, récupérer la liste des bibliothèques avec un &lt;code&gt;equery f
paquet&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Ensuite, rechercher &lt;em&gt;expat&lt;/em&gt; dans la liste des bibliothèques
dynamiques obtenues précédemment.&lt;/p&gt;
&lt;pre&gt;
ldd /usr/lib64/libpoppler.so.2.0.0 | grep expat
libexpat.so.1 =&amp;gt; /usr/lib/libexpat.so.1 (0x00007f8867cb7000)
&lt;/pre&gt;
&lt;p&gt;L'exemple ci-dessus est donné à titre indicatif. Il faut bien sûr mieux
faire un script, même pour les gens patient (tout le monde en a marre un jour,
sauf les cliqueurs sous MS-Windows).&lt;/p&gt;
&lt;p&gt;Gagné, c'était bien &lt;em&gt;poppler&lt;/em&gt;. Mais il y aurait pu en avoir
d'autres.&lt;/p&gt;
&lt;p&gt;Donc dans ce cas, il faudra recompiler &lt;em&gt;poppler&lt;/em&gt;, puis &lt;em&gt;gtk+&lt;/em&gt;.
Et toutes vos applications refonctionneront comme au premier jour. C'est beau,
snif.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Craaaaaac !&lt;/h3&gt;
&lt;p&gt;Hé bin voila m'dame Gentoo, j'vous z'avais bien dit qu'c'était pas grand
chose!&lt;/p&gt;
&lt;p&gt;Et n'hésitez pas à revenir me voir si vous z'avez d'nouveau mal au dos.&lt;/p&gt;
&lt;p&gt;Le mieux est quand même d'avoir un système à jour, en exécutant cette
commande régulièrement (disons une ou deux fois par mois) :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;emerge -vau system&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ceci devrait vous prémunir des blocages les plus gênants, et d'une façon
générale, votre Gentoo ne s'en portera pas plus mal.&lt;/p&gt;
&lt;p&gt;Attention, pour l'emerge général &lt;em&gt;system&lt;/em&gt;, il vaut mieux rester à
proximité, au cas où il serait nécessaire d'arrêter le process pour faire un
&lt;em&gt;revdep-rebuild&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Remerciements à Frédéric qui m'a passé un binaire de Bash le temps de
rétablir la situation &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;br /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.finiderire.com/post/2008/07/07/A-bloque-B-qui-bloque-A#comment-form</comments>
      <wfw:comment>http://www.finiderire.com/post/2008/07/07/A-bloque-B-qui-bloque-A#comment-form</wfw:comment>
      <wfw:commentRss>http://www.finiderire.com/feed/rss2/comments/258064</wfw:commentRss>
      </item>
    
  <item>
    <title>Panda3D : coup de bambou sur la Gentoo</title>
    <link>http://www.finiderire.com/post/2008/06/17/Panda3d-et-la-Gentoo2</link>
    <guid isPermaLink="false">urn:md5:92a3952ae26274efb15a4e7c7f3174db</guid>
    <pubDate>Tue, 17 Jun 2008 22:37:00 +0200</pubDate>
    <dc:creator>Jean-Seb</dc:creator>
        <category>Linuxeries</category>
            
    <description>&lt;p&gt;&lt;em&gt;Vous avez une Gentoo , et vous voulez installer Panda3D.&lt;/em&gt;&lt;br /&gt;
&lt;code&gt;emerge -va panda3d&lt;/code&gt; &lt;em&gt;, c'est bien ça ?&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Presque, petit scarabé, presque ...&lt;/em&gt;&lt;br /&gt;
&lt;strong&gt;Mises à jour&lt;/strong&gt; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;20 juin 2008. (&lt;em&gt;précisions sur l'intégration de l'ebuild&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;23 juin 2008. (&lt;em&gt;accélération du rendu sous MS-Windows&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;    &lt;h3&gt;Rendre à César...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Ce billet s'inspire fortement d'un post sur le forum Panda3D:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://panda3d.org/phpbb2/viewtopic.php?t=4077&amp;amp;highlight=gentoo+ebuild&quot;&gt;le
post original&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Panda3D et portage&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Le problème est simple: Panda3D n'est disponible que dans une version très
ancienne dans l'arbre portage.&lt;/li&gt;
&lt;li&gt;Et oui, ça arrive. Bien que cela soit heureusement très rare, il manque
parfois des choses dans portage.&lt;/li&gt;
&lt;li&gt;Face à cela, deux possibilités:
&lt;ul&gt;
&lt;li&gt;la mauvaise: compiler vous même Panda3D et l'installer comme vous le
pouvez.&lt;/li&gt;
&lt;li&gt;la bonne: utiliser un overlay, ce qui vous permettra de suivre proprement
les évolutions de version.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Petit rappel sur les overlays&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Un &lt;em&gt;overlay&lt;/em&gt; , c'est une série de &lt;em&gt;ebuild&lt;/em&gt; additionnels non
supportés dans l'arbre portage officiel.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.finiderire.com/post/2008/04/11/Developpement-pour-contrees-etrangeres&quot;&gt;J'en
parle déja ici&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.gentoo.org/proj/en/overlays/userguide.xml&quot;&gt;Pour tout
savoir sur les overlays&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Préparation de l'ebuild&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Je pars du principe que votre overlay se situe ici:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/usr/local/portage&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Vérifiez que votre &lt;strong&gt;make.conf&lt;/strong&gt; contient la ligne suivante,
sinon &lt;em&gt;emerge&lt;/em&gt; ne trouvera pas votre overlay:
&lt;ul&gt;
&lt;li&gt;PORTDIR_OVERLAY=&amp;quot;/usr/local/portage&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Créez le chemin de l'overlay de l'ebuild:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mkdir -p /usr/local/portage/media-libs/panda3d/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Voici l'ebuild à copier dans le répertoire précédemment créé
&lt;ul&gt;
&lt;li&gt;J'ai récupéré (et adapté légèrement) cet ebuild sur le forum de
Panda3D&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Fichier &lt;strong&gt;panda3d-1.5.2.ebuild&lt;/strong&gt; à placer dans
&lt;em&gt;/usr/local/portage/media-libs/panda3d/&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
# Copyright 2000-2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# 1.4.2 'stable' by joeldg - blog.peoplesdns.com
# 1.5.2 par jseb (article sur www.finiderire.com)
# $Header: $

inherit eutils python

DESCRIPTION=&amp;quot;A 3D framework in C++ with python bindings&amp;quot;
HOMEPAGE=&amp;quot;http://panda3d.org&amp;quot;
SRC_URI=&amp;quot;http://panda3d.org/download/${P}/${P}.tar.gz&amp;quot;

LICENSE=&amp;quot;Panda3D&amp;quot;
SLOT=&amp;quot;0&amp;quot;
KEYWORDS=&amp;quot;~x86&amp;quot;
IUSE=&amp;quot;png jpeg tiff fmod openal nspr python ssl truetype doc zlib&amp;quot;

DEPEND=&amp;quot;doc? ( dev-python/epydoc )
                png? ( media-libs/libpng )
                jpeg? ( media-libs/jpeg )
                tiff? ( media-libs/tiff )
                nspr? ( &amp;gt;=dev-libs/nspr-4.4.1-r2 )
                openal? ( media-libs/openal )
                fmod? ( =media-libs/fmod-3* )
                ssl? ( dev-libs/openssl )
                truetype? ( media-libs/freetype )
                zlib? ( sys-libs/zlib )
                python? ( dev-lang/python )&amp;quot;

pkg_setup() {
        ewarn &amp;quot;Please note that python bindings are now&amp;quot;
        ewarn &amp;quot;set by the python USE flag to coordinate&amp;quot;
        ewarn &amp;quot;with upstream.&amp;quot;
}

src_unpack()
{
        unpack ${A}
}

src_compile()
{
        #
        # the everything keyword has checks for your current libs
        # and will skip them if not available..
        # this also adds support for maya and max models.
        #
        ./makepanda/makepanda.py --everything   || die &amp;quot;build failed&amp;quot;
}

src_install()
{
        dodir /opt/panda3d

        doenvd ${FILESDIR}/50panda3d
        sed -i -e &amp;quot;s:lib:$(get_libdir):g&amp;quot; \
        ${D}/etc/env.d/50panda3d \
        || die &amp;quot;libdir patching failed&amp;quot;

        #construire la doc, quoiqu'il arrive
        cp -R ${S}/samples ${S}/built
        cp -R ${S}/direct/src ${S}/built/direct/src
        cd ${S}/built

        if use python ; then
                # python installation
                python_version
                dodir /usr/$(get_libdir)/python${PYVER}/site-packages
                cat &amp;lt;&amp;lt;- EOF &amp;gt; ${D}/usr/$(get_libdir)/python${PYVER}/site-packages/panda3d.pth
                # This document sets up paths for python to access the
                # panda3d modules
            /opt/panda3d/lib
            /opt/panda3d/direct
        /opt/panda3d/pandac             
                /opt/panda3d/built
                /opt/panda3d/built/$(get_libdir)
                EOF
        fi

        cp -R ${S}/direct/src ${S}/built/direct/
        cp -R ${S}/built/* ${D}/opt/panda3d
        use python &amp;amp;&amp;amp; touch ${D}/opt/panda3d/built/__init__.py
}

pkg_postinst()
{
        elog &amp;quot;Panda3d is installed in /opt/panda3d&amp;quot;
        elog
        if use doc ; then
                elog &amp;quot;Documentation is avaliable in /opt/panda3d/doc&amp;quot;
                elog &amp;quot;Samples are avalaible in /opt/panda3d/samples&amp;quot;
        fi
        elog &amp;quot;For C++ compiling, include directory must be set:&amp;quot;
        elog &amp;quot;g++ -I/opt/panda3d/include [other flags]&amp;quot;
        if use python ; then
                elog
                elog &amp;quot;ppython is depricated and panda3d modules are&amp;quot;
                elog &amp;quot;now installed as standard python modules.&amp;quot;
        fi
        elog
        elog &amp;quot;Tutorials avaliable at http://panda3d.org&amp;quot;
}
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;note&lt;/strong&gt; : si la commande &lt;strong&gt;ebuild&lt;/strong&gt; refuse
le script précédent, c'est probablement à cause d'un problème de tabulations
transformées en espaces.
&lt;ul&gt;
&lt;li&gt;Pour résoudre ce problème, vous pouvez éditer le fichier et transformer les
espaces de débuts de lignes en tabulations.&lt;/li&gt;
&lt;li&gt;avec Vim : &lt;code&gt;:%s/^\ \+/\t/g&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Il faut créer le journal (qui consiste en une liste de checksum des
fichiers impliqués) de l'ebuild
&lt;ul&gt;
&lt;li&gt;Cette opération est à refaire à chaque modification de l'ebuild.&lt;/li&gt;
&lt;li&gt;La première fois est plus longue, car les sources sont chargées pour
calculer leur checksum.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
jseb panda3d # ebuild /usr/local/portage/media-libs/panda3d/panda3d-1.5.2.ebuild digest
&amp;gt;&amp;gt;&amp;gt; Creating Manifest for /usr/local/portage/media-libs/panda3d
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Il faut également récupérer un fichier dans l'arbre portage officiel.
&lt;ul&gt;
&lt;li&gt;Il s'agit du fichier
&lt;em&gt;/usr/portage/media-libs/panda3d/files/50panda3d&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Il faut donc créer un sous-répertoire &lt;em&gt;files&lt;/em&gt; dans votre overlay
&lt;em&gt;panda3d&lt;/em&gt;, et le placer à l'intérieur.&lt;/li&gt;
&lt;li&gt;Ce fichier contient des informations d'installation pour Panda3D et est
utilisé par emerge.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;emerge&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;emerge -va panda3d&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Les slots des différents arbres portage (l'officiel et le votre) qui
contiennent Panda3D doivent apparaitre (à la fin des messages de
&lt;em&gt;emerge&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
 [0] /usr/portage
 [1] /usr/local/portage
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ne vous en faites pas pour les options, la compilation de Panda3D est
lancée via un script Python.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Le lancement de la compilation dans l'ebuild se fait ainsi:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;./makepanda/makepanda.py --everything&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Si un jour vous le construisez vous même, il est important de partir de la
racine du répertoire de sources (ce que l'on fait ici).&lt;/li&gt;
&lt;li&gt;L' option &lt;em&gt;--everything&lt;/em&gt; construira Panda3D avec le maximum de
packages disponibles sur votre système.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;La compilation est assez longue, y compris sur une machine moderne bien
dotée en ram.
&lt;ul&gt;
&lt;li&gt;ccache n'est pas utilisé pour les ebuild en dehors de l'arbre officiel
portage.&lt;/li&gt;
&lt;li&gt;quand j'aurai trouvé comment faire, je mettrai à jour ce billet. Si vous
savez le faire, postez un commentaire, merci.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Panda3D sera installé à part dans son répertoire /opt/panda3d
&lt;ul&gt;
&lt;li&gt;Ceci est normal et souhaitable.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Vérification des fichiers après emerge&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;/etc/ld.so.conf&lt;/strong&gt; : doit contenir
&lt;code&gt;/opt/panda3d/lib&lt;/code&gt; (le ldconfig est fait par emerge à la fin de la
compilation)
&lt;ul&gt;
&lt;li&gt;sinon on peut éventuellement modifier à la main la variable
&lt;strong&gt;LD_PATH_CONFIG&lt;/strong&gt; pour faire un essai.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;/usr/lib/python2.5/site-packages/&lt;/strong&gt; doit contenir un path
Python (normalement: &lt;em&gt;panda3d.pth&lt;/em&gt; )&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
jseb jseb # cat /usr/lib/python2.5/site-packages/panda3d.pth 
# This document sets up paths for python to access the
# panda3d modules
/opt/panda3d/lib
/opt/panda3d/direct
/opt/panda3d/pandac             
/opt/panda3d/built
/opt/panda3d/built/lib
&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Si, lorsque vous lancez un exemple (&lt;em&gt;/opt/panda3d/samples/&lt;/em&gt;), Python
ne trouve pas les import de Panda3D, vous aurez deux liens symboliques à créer
vous même
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ln -s /opt/panda3d/direct/
/usr/lib/python2.5/site-packages/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ln -s /opt/panda3d/pandac/
/usr/lib/python2.5/site-packages/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Attention à créer les liens dans la bonne version de Python (ici, 2.5) si
celui-ci est slotté (cohabitation avec une autre version). Prendre la version
utilisée par défaut lors du lancement de la commande Python.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Le nirvana est en vue&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Si vous obtenez un segfault lors de l'exécution de l'exemple
&lt;code&gt;Asteroids&lt;/code&gt; , vous avez probablement un problème avec le son.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Par défaut, OpenAL est utilisé, et cela semble poser quelques problèmes
pour l'instant.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Vous pouvez couper le son dans le fichier de config , pour vérifier qu'il
s'agit bien de cela.
&lt;ul&gt;
&lt;li&gt;dans &lt;strong&gt;/opt/panda3d/etc/Config.prc&lt;/strong&gt; , commentez cette
entrée :&lt;/li&gt;
&lt;li&gt;&lt;code&gt;audio-library-name p3openal_audio&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Sil il s'agit bien de cela, vous pouvez utiliser &lt;strong&gt;fmod&lt;/strong&gt;
(attention, bibliothèque non-libre) ou choisir de rétablir OpenAL.
&lt;ul&gt;
&lt;li&gt;J'ai écrit que vous pouviez rétablir OpenAL, car dans mon cas cela a suffit
(après avoir lancé l'exemple &lt;em&gt;asteroids&lt;/em&gt; en nosound, j'ai rétabli
l'entrée dans le fichier de config Panda3D).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Pour remplacer OpenAL par Fmod
&lt;ul&gt;
&lt;li&gt;dans &lt;strong&gt;/opt/panda3d/etc/Config.prc&lt;/strong&gt; :&lt;/li&gt;
&lt;li&gt;&lt;code&gt;audio-library-name fmod_audio&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Pour les utilisateurs de MS-Windows&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Vous êtes un utilisateur de MS-Windows et vous avez lu jusque là. C'est
gentil.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Panda3D rame, c'est un fait. Il y a cependant moyen d'améliorer la
situation.
&lt;ul&gt;
&lt;li&gt;Dans le fichier &lt;strong&gt;Config.prc&lt;/strong&gt; , remplacez le rendering OpenGL
par DirectX.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
#load-display pandagl
load-display pandadx8
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pour éviter d'utiliser la version de Python fournie avec l'installeur des
binaires de Panda3d, vous pouvez simplement utiliser les &lt;em&gt;path&lt;/em&gt; déja
évoqués ci-dessus&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
import sys
sys.path.append(repertoire_panda3d)
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On peut aussi demander à Python d'ajouter un &lt;q&gt;path&lt;/q&gt; au démarrage.
&lt;ul&gt;
&lt;li&gt;Il faut placer un fichier dans la racine du répertoire Python:&lt;/li&gt;
&lt;li&gt;Contenu de &lt;strong&gt;panda3d.pth&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
panda152
panda152/bin
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ce fichier spécifie simplement les répertoires contenant les binaires
(tools de Panda3D) et le répertoire racine de Panda3D, par rapport au
répertoire racine de Python.&lt;/li&gt;
&lt;li&gt;Ici, le répertoire de Panda3D se nomme donc &lt;em&gt;panda152&lt;/em&gt; et est placé
dans le répertoire racine de Python.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Vous pouvez ensuite effacer le répertoire Python fourni avec l'installeur
de Panda3D.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.finiderire.com/post/2008/06/17/Panda3d-et-la-Gentoo2#comment-form</comments>
      <wfw:comment>http://www.finiderire.com/post/2008/06/17/Panda3d-et-la-Gentoo2#comment-form</wfw:comment>
      <wfw:commentRss>http://www.finiderire.com/feed/rss2/comments/251704</wfw:commentRss>
      </item>
    
  <item>
    <title>Wi-Wi au pays du WiFi</title>
    <link>http://www.finiderire.com/post/2008/05/19/Wi-Wi-au-pays-du-WiFi</link>
    <guid isPermaLink="false">urn:md5:8ae3edb2b1fc77b10d98d589b6618364</guid>
    <pubDate>Thu, 22 May 2008 19:52:00 +0200</pubDate>
    <dc:creator>Jean-Seb</dc:creator>
        <category>Linuxeries</category>
            
    <description>&lt;p&gt;&lt;em&gt;Le WiFi... (soupir)&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Le chipset 3945 Intel sur un Dell D630 ... (soupir)&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;La configuration Linux ... (pan!)&lt;/em&gt;&lt;br /&gt;&lt;/p&gt;    &lt;h3&gt;Matériel concerné&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Il s'agit d'un portable Dell D630 avec chipset WiFi Intel 3945&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Tester avec Kismet&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Pour vérifier que votre matériel fonctionne, vous pouvez utiliser Kismet
avec un live-cd (Backtrack par exemple).
&lt;ul&gt;
&lt;li&gt;Une fois Kismet lancé, vous devriez voir votre réseau.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Configuration dans le noyau&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Je vous conseille d'activer tout ce qui a rapport de près ou de loin au
WiFi.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;iwl3945&lt;/strong&gt; est le nouveau module pour le chipset 3945.
Utilisez le à partir du noyau 2.6.22.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Mettez tout en module
&lt;ul&gt;
&lt;li&gt;Vous avez obligatoirement besoin de &lt;strong&gt;mac80211&lt;/strong&gt; et de
&lt;strong&gt;iwl3945&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;N'oubliez pas de rapatrier le microcode Intel dans
&lt;em&gt;/lib/firmware&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Si malgré tout vous avez l'horrible erreur &lt;q&gt;could not read
microcode : errorcode -2&lt;/q&gt;, et que votre firmware est bien là:
&lt;ul&gt;
&lt;li&gt;contrairement à ce qu'affirme le errorcode (&lt;em&gt;file not found&lt;/em&gt;), ce
n'est pas le fichier qui est absent.&lt;/li&gt;
&lt;li&gt;en fait, le fichier est incorrectement décodé. Il faut le support pour le
décoder.&lt;/li&gt;
&lt;li&gt;vous n'avez plus qu'à vous recompiler un noyau avec toutes les options, et
retirer des options petit à petit.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Script de démarrage&lt;/h3&gt;
&lt;p&gt;Et voici un script de démarrage prêt à l'emploi (ou presque).&lt;/p&gt;
&lt;pre&gt;
#!/bin/sh

wifi=`iwconfig | grep 802.11 | cut -f 1 -d' '`
if [ &amp;quot;$wifi&amp;quot; == &amp;quot;&amp;quot; ]; then
        echo $wifi
        echo &amp;quot;Pas de carte Wifi détectée!&amp;quot;
        exit
else
        echo carte wifi detectée sur $wifi
fi
ifconfig eth0 down
ifconfig $wifi down
route del default
iwconfig $wifi key 0102030405060708 essid &amp;quot;votre_essid&amp;quot; mode managed
ifconfig $wifi up
ifconfig $wifi 192.168.1.1
echo &amp;quot;petite pause avant le iwlist.........&amp;quot;
sleep 5
iwlist $wifi scan
route add default gw 192.168.1.254
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Quelques explications:
&lt;ul&gt;
&lt;li&gt;le &lt;em&gt;ifconfig down&lt;/em&gt; de eth0 sert à éviter les conflits avec la carte
réseau ethernet.&lt;/li&gt;
&lt;li&gt;le &lt;em&gt;iwlist&lt;/em&gt; n'est pas facultatif, et est très important pour
permettre l'association avec le point d'accès.&lt;/li&gt;
&lt;li&gt;la pause avant le &lt;em&gt;iwlist&lt;/em&gt; permet au matériel de s'initialiser (sans
la pause, ça ne marche pas à tous les coups)&lt;/li&gt;
&lt;li&gt;le &lt;em&gt;ifconfig&lt;/em&gt; sur l'interface wifi, ainsi que le &lt;em&gt;route add&lt;/em&gt;
peuvent souvent se remplacer par un &lt;em&gt;dhcpcd $wlan0&lt;/em&gt; qui vous donnera les
bonnes valeurs.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.finiderire.com/post/2008/05/19/Wi-Wi-au-pays-du-WiFi#comment-form</comments>
      <wfw:comment>http://www.finiderire.com/post/2008/05/19/Wi-Wi-au-pays-du-WiFi#comment-form</wfw:comment>
      <wfw:commentRss>http://www.finiderire.com/feed/rss2/comments/241604</wfw:commentRss>
      </item>
    
  <item>
    <title>Git est couvert</title>
    <link>http://www.finiderire.com/post/2008/04/22/Git-est-couvert</link>
    <guid isPermaLink="false">urn:md5:8da0494e97c0d36a0582225b1ba9bb0e</guid>
    <pubDate>Wed, 23 Apr 2008 21:53:00 +0200</pubDate>
    <dc:creator>Jean-Seb</dc:creator>
        <category>Coding</category>
            
    <description>&lt;p&gt;&lt;em&gt;Les projets prennent de l'ampleur. Les équipes
s'agrandissent.&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Premier réflexe: CVS ou SVN. Un vieux truc lent et centralisé,
donc.&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Intéressez-vous à &lt;strong&gt;Git&lt;/strong&gt;, le gestionnaire de versions de
Linus Torvalds.&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Réalisé avec les explications de &lt;strong&gt;Frédéric
Jolliton&lt;/strong&gt;.&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;&lt;ins&gt;Mise à jour&lt;/ins&gt; : 25 avril 2008&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;CoGITons&lt;/h3&gt;
&lt;p&gt;Contrairement à CVS et SVN, Git ne repose pas sur un serveur centralisé.&lt;/p&gt;
&lt;p&gt;Le principe de fonctionnement est celui d'un serveur de versions, soit
suivre l'évolution du contenu d'une arborescence.&lt;/p&gt;
&lt;p&gt;Git ne procède pas à un &lt;em&gt;diff&lt;/em&gt; , l'intégralité de chaque source
modifiée est sauvegardée.&lt;/p&gt;
&lt;p&gt;Rassurez-vous, cette sauvegarde se fait dans un &lt;em&gt;blob&lt;/em&gt; compressé, et
la taille prise sur le disque augmente très lentement.&lt;/p&gt;
&lt;p&gt;Git a été conçu comme un système de fichiers, et offre de très bonnes
performances.&lt;/p&gt;
&lt;p&gt;Comme tout serveur de données, on peut l'utiliser pour stocker tout type de
fichiers. Voici une comparaison de &lt;em&gt;Git&lt;/em&gt; avec &lt;em&gt;Subversion&lt;/em&gt; et
&lt;em&gt;Mercurial&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://joshcarter.com/productivity/svn_hg_git_for_home_directory&quot;&gt;Nous avons
un gagnant !&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Windows: bien aGITer avant emploi.&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Je ne traite pas de l'installation Linux, car elle ne présente pas de
problèmes.
&lt;ul&gt;
&lt;li&gt;Les utilisateurs de Linux peuvent aller directement ici : &lt;a href=&quot;http://git.or.cz/&quot;&gt;site officiel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Sous Windows, c'est un peu plus délicat, mais les développeurs ont quand
même pensé à vous.
&lt;ul&gt;
&lt;li&gt;Normalement, seul Cygwin est supporté.&lt;/li&gt;
&lt;li&gt;Il existe cependant un projet pour le faire tourner avec MSys.&lt;/li&gt;
&lt;li&gt;Cet installeur contient un shell MSys avec tous les outils
nécessaires.&lt;/li&gt;
&lt;li&gt;Rien ne vous empêche de continuer à utiliser votre propre shell, en
ajoutant le path &lt;strong&gt;bin&lt;/strong&gt; du shell de Git.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;L'installeur est ici :
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://code.google.com/p/msysgit/&quot;&gt;Page du projet
Msys-Git&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Lancer l'installation.
&lt;ul&gt;
&lt;li&gt;Surtout ne cherchez pas à l'installer dans votre arborescence MSys si vous
en avez déja une.&lt;/li&gt;
&lt;li&gt;Depuis la version 1.5.5, les fins de lignes sont converties en CRLF dans le
répertoire source, et en LF dans l'arbre Git. C'est une chose bonne et
souhaitable, et vous ne devriez pas chercher à changer ce comportement par
défaut.&lt;/li&gt;
&lt;li&gt;J'ai choisi de ne pas modifier les variables d'environnement (&lt;q&gt;Use Git
Bash only&lt;/q&gt;), car pour ma part, j'ai modifié le path de mon MSys déja
installé, pour inclure le répertoire bin de Msys-Git.&lt;/li&gt;
&lt;li&gt;Et voila, c'est installé. Tout est linké en statique, ça prend un peu plus
de 100mo. C'est mieux que les moutures précédentes qui prenaient plus de 600mo!
Encore un petit effort et ça sera parfait.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Un peu de personnalisation
&lt;ul&gt;
&lt;li&gt;pour ceux qui ont déja un shell, ajouter ${msysgit}/bin dans le ${PATH} de
celui-ci.&lt;/li&gt;
&lt;li&gt;modifier ${msysgit}/bin/vi , et mettre gvim à la place de l'appel de
vi.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Juste pour vérifier&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
~$ git --version
git version 1.5.5.1015.g9d258
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Configuration&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Utiliser &lt;code&gt;git config&lt;/code&gt; avec les clés de configuration à
modifier.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Emplacement des fichiers de configuration
&lt;ul&gt;
&lt;li&gt;La configuration générale est stockée ici:
&lt;strong&gt;${HOME}/.gitconfig&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;La configuration locale est stockée dans le répertoire du projet&lt;/li&gt;
&lt;li&gt;Les Unixiens ont également une config pour tous les utilisateurs du système
dans &lt;strong&gt;/etc/gitconfig&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Une bonne idée est de donner quelques informations sur la machine et
l'unité carbone qui l'utilise.
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git config --global user.name &amp;quot;Jean Seb&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git config --global user.email
&amp;quot;johannsebaztian@finiderire.com&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Pour voir la clé de configuration &lt;em&gt;global&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
 git config --global --list
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On veut tout voir (et rien payer)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
git config --list
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Commandes de base&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Création d'un repository Git
&lt;ul&gt;
&lt;li&gt;se mettre dans un répertoire (peuplé ou pas), puis: &lt;code&gt;git
init&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;par défaut, la branche créée se nomme &lt;strong&gt;master&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Ajouter et enlever des fichiers au dépot
&lt;ul&gt;
&lt;li&gt;ajouter les fichier avec &lt;code&gt;git add fichier&lt;/code&gt; (on peut utiliser des
jokers)&lt;/li&gt;
&lt;li&gt;pour ajouter &lt;strong&gt;tous&lt;/strong&gt; les fichiers , utiliser un
&lt;em&gt;point&lt;/em&gt; : &lt;code&gt;git add .&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;on peut enlever ce qui ne sert plus avec &lt;code&gt;git rm fichier&lt;/code&gt; (on
peut aussi utiliser les jokers)&lt;/li&gt;
&lt;li&gt;plutot que d'ajouter en masse puis enlever les fichiers au cas par cas, on
spécifiera dans &lt;em&gt;exclude&lt;/em&gt; les fichiers à ne pas intégrer au projet.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Commiter
&lt;ul&gt;
&lt;li&gt;pour voir ce qui va être commité : &lt;code&gt;git diff --cached&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;pour commiter les changements: &lt;code&gt;git commit&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Première récupération d'un repository distant
&lt;ul&gt;
&lt;li&gt;Git est un serveur &lt;strong&gt;décentralisé&lt;/strong&gt; , on obtient donc des
&lt;strong&gt;copies&lt;/strong&gt; des projets.&lt;/li&gt;
&lt;li&gt;je prends un projet au hasard sur &lt;strong&gt;gitorious.org&lt;/strong&gt; , qui est
un hébergeur gratuit de repositories Git.&lt;/li&gt;
&lt;li&gt;pour créer le projet, utiliser &lt;strong&gt;clone&lt;/strong&gt; : &lt;code&gt;git
clone git://gitorious.org/interstellar/mainline.git&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Lister les modifications
&lt;ul&gt;
&lt;li&gt;tout lister : &lt;code&gt;git log&lt;/code&gt; (ou &lt;code&gt;git log -p&lt;/code&gt; pour
avoir le diff complet pour chaque étape)&lt;/li&gt;
&lt;li&gt;lister une modification particulière : &lt;code&gt;git log -p XXXXX&lt;/code&gt;
(avec XXXX le début du SHA1 correspondant à la modif.)&lt;/li&gt;
&lt;li&gt;il semble que &lt;code&gt;git show XXXXXX&lt;/code&gt; fait la même chose que la
commande précédente.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Rechercher dans les fichiers
&lt;ul&gt;
&lt;li&gt;nous disposons d'un vrai &lt;em&gt;grep&lt;/em&gt; : &lt;code&gt;git grep &lt;a href=&quot;http://www.finiderire.com/post/2008/04/22/Ii&quot; title=&quot;Ii&quot;&gt;Ii&lt;/a&gt;rrlicht&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Pour avoir des informations sur les commandes
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git --help&lt;/code&gt; vous rappelle les principales commandes.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git &lt;a href=&quot;http://www.finiderire.com/post/2008/04/22/commande&quot; title=&quot;commande&quot;&gt;commande&lt;/a&gt; --help&lt;/code&gt;
invoque le man de la commande concernée dans votre navigateur.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Maintenance et suivi du dépôt&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;reset&lt;/strong&gt; : en cas de pépin
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git reset --hard&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;à réserver aux cas difficiles (problèmes de changement de branches par
exemple).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;gc&lt;/strong&gt; : pour nettoyer et reconstruire le dépot (à faire
de temps en temps sur les gros projets)
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git gc&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;fsck&lt;/strong&gt; : pour vérifier l'intégrité du dépôt
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git fsck&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;count-objects&lt;/strong&gt; : pour avoir des stats sur les objets
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git count-objects&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Les branches&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;pour voir la branche dans laquelle on se trouve: &lt;code&gt;git
branch&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;pour créer une branche : &lt;code&gt;git branch nouvelle_branche&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;pour voir &lt;strong&gt;toutes&lt;/strong&gt; les branches : &lt;code&gt;git branch
-r&lt;/code&gt; (donnera: &lt;code&gt;origin/HEAD&lt;/code&gt; et
&lt;code&gt;origin/master&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;pour changer de branche, utiliser &lt;strong&gt;checkout&lt;/strong&gt; :
&lt;code&gt;git checkout bidule&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;quand on change de branche, les fichiers sont modifiés en rapport (si un
fichier n'est pas utilisé dans la nouvelle branche, il disparaitra).&lt;/li&gt;
&lt;li&gt;un changement réussi de branche se solde par un &lt;em&gt;Switched to branch
&lt;q&gt;nom_de_la_branche&lt;/q&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;pour retourner dans une branche précédente, utiliser une nouvelle fois
&lt;strong&gt;checkout&lt;/strong&gt; : &lt;code&gt;git checkout
ancienne_branche&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;pour fusionner deux branches: &lt;strong&gt;merge&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Si on se trouve dans &lt;em&gt;main&lt;/em&gt; et que l'on veut fusionner le contenu de
&lt;em&gt;experimental&lt;/em&gt; : &lt;code&gt;git merge experimental&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;pour effacer une branche : &lt;code&gt;branch -d experimental&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;la commande précédente vérifie que les changements faits dans la branche
&lt;q&gt;experimental&lt;/q&gt; ont été intégrés. Pour forcer la destruction :
&lt;code&gt;branch -D experimental&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;avec &lt;strong&gt;checkout&lt;/strong&gt;, on peut récupérer la dernière version
commitée d'un fichier (si on regrette ses modifications)
&lt;ul&gt;
&lt;li&gt;on peut également restaurer le fichier depuis un commit antérieur, ou
depuis une autre branche.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;un dépôt n'est jamais modifiable, sauf en ajout. On ne peut pas modifier un
fichier commité (il faut refaire un commit, et donc ajouter une couche).
&lt;ul&gt;
&lt;li&gt;pour annuler un commit, le seul moyen est donc de faire soi-même les
modifications inverses sur les objets, puis de commiter à nouveau.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;commit , fetch , pull , push&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Le &lt;strong&gt;commit&lt;/strong&gt; est local.
&lt;ul&gt;
&lt;li&gt;Avant un &lt;strong&gt;commit&lt;/strong&gt;, Git demande d'ajouter un commentaire. La
première ligne est le résumé des modifications. Toutes les lignes commençant
par un dièse sont ignorées, et il faut obligatoirement une ligne qui ne
commence pas par un dièse.&lt;/li&gt;
&lt;li&gt;On peut aussi rentrer directement la description : &lt;code&gt;git commit -m
&amp;quot;Cette fois, ça va marcher!&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Le &lt;strong&gt;pull&lt;/strong&gt; (download) permet de récupérer des modifications
distantes &lt;strong&gt;et&lt;/strong&gt; d'appliquer la fusion (&lt;em&gt;merge&lt;/em&gt;) des
objets.
&lt;ul&gt;
&lt;li&gt;récupérer la branche &lt;em&gt;master&lt;/em&gt; du dépôt &lt;em&gt;project&lt;/em&gt; :&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
git pull /home/toto/project master
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le &lt;strong&gt;fetch&lt;/strong&gt; est un simple download, &lt;strong&gt;sans&lt;/strong&gt; la
fusion des objets (il faut faire soi-même un &lt;code&gt;git merge ...&lt;/code&gt; )&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
$~ git remote add fred /home/fred/project
$~ git fetch fred
$~ git log -p master..fred/master
$~ git merge fred/master
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le &lt;strong&gt;push&lt;/strong&gt; (upload) permet d'envoyer des fichiers à distance.
Il permet également d'envoyer des modifications dans une autre branche.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
git push git://serveur.git.org/projet.git
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Cas pratique&lt;/h3&gt;
&lt;p&gt;L'intêret de Git est de supprimer le côté centralisé de CVS et SVN. Mais
encore ?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Soit deux utilisateurs: jseb et fred.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Ces deux utilisateurs utilisent chacun un repository, plus deux
repositories &lt;q&gt;publics&lt;/q&gt; (hébergés chez fred) pour partager leurs
modifications.
&lt;ul&gt;
&lt;li&gt;Il y a donc deux dépôts privés (un chez jseb, un chez fred) et deux dépôts
public (hébergés chez fred, mais ils pourraient être n'importe où).&lt;/li&gt;
&lt;li&gt;Les modifications de jseb et fred ne vont toucher que leurs dépôts publics
respectifs (principe de décentralisation de Git, que n'ont pas SVN ou CVS). Il
appartient à jseb et à fred de faire le pull qui ramènera les modifications
publiques vers leur dépôt privé.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Côté fred&lt;/strong&gt; :
&lt;ul&gt;
&lt;li&gt;création d'un alias vers son dépôt public : &lt;code&gt;git remote add fred
git://publicgit.domaine.org/jseb.git&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;création d'un alias vers le dépôt public de jseb : &lt;code&gt;git remote
add jseb git://publicgit.domaine.org/jseb.git&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;git remote add&lt;/em&gt; ne fait qu'ajouter un alias dans
&lt;strong&gt;.git/config&lt;/strong&gt; et n'a pas d'autre effet que de simplifier les
opérations ultérieures.&lt;/li&gt;
&lt;li&gt;fred récupère les données du dépôt public (pour l'instant vide) vers son
dépôt privé : &lt;code&gt;git pull jseb&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;la commande précédente est équivalente à &lt;code&gt;git pull
git://publicgit.domaine.org/jseb.git&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Côté jseb&lt;/strong&gt; :
&lt;ul&gt;
&lt;li&gt;jseb veut envoyer les données de son dépôt &lt;em&gt;irrlicht&lt;/em&gt; dans le
repository public &lt;em&gt;jseb&lt;/em&gt; (celui-ci a été créé sur le serveur par fred
qui est l'hébergeur).&lt;/li&gt;
&lt;li&gt;fred a créé le dépôt public &lt;em&gt;fred.git&lt;/em&gt; où il placera ses
modifications, afin que jseb puisse y accéder&lt;/li&gt;
&lt;li&gt;jseb va donc créer un alias &lt;em&gt;fred.git&lt;/em&gt; pour récupérer les
modifications de fred : &lt;code&gt;git remote add fred
git://publicgit.domaine.org/jseb.git&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;jseb va également créer un alias &lt;em&gt;jseb&lt;/em&gt; pour pouvoir envoyer les
données modifiées vers son dépôt public.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;jseb envoie ses sources dans le dépôt public (ici, décomposé en deux temps
pour la démonstration)&lt;/li&gt;
&lt;li&gt;1er temps: partie &lt;q&gt;accès local&lt;/q&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git init&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git add .&lt;/code&gt; . Notez le point pour tout envoyer, sauf ce qui est
défini dans &lt;em&gt;.git/info/exclude&lt;/em&gt; (objets et les préfixes
d'exécutables)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git commit&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;2ème temps: partie &lt;q&gt;accès vers le serveur public distant&lt;/q&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git remote add jseb git://publicgit.domaine.org/jseb.git&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git push jseb&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;( &lt;strong&gt;note&lt;/strong&gt;: pour un premier envoi de jseb dans la branche
&lt;em&gt;master&lt;/em&gt; : &lt;code&gt;git push git://publicgit.domaine.org/jseb.git/
master&lt;/code&gt; )&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;fred récupère sur son dépôt privé les modifications de jseb
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git clone git://publicgit.domaine.org/jseb.git irrlicht-jseb&lt;/code&gt;
(l'argument &lt;em&gt;irrlicht-jseb&lt;/em&gt; est le nom à donner au répertoire)&lt;/li&gt;
&lt;li&gt;fred fait ensuite quelques modifs dans les sources.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;jseb peut récupérer les modifications de fred
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git pull fred&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;le processus se répète indéfiniment jusqu'à satisfaction des deux parties,
grosse fête, banquet, clameurs de liesse et couronnement des champions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Bonus : l'interface Tk&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Pour suivre une arborescence bien compliquée, rien ne vaut un petit
dessin.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Git est livré avec deux interfaces Tcl/Tk&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;gitk&lt;/strong&gt; : interface canal historique.
&lt;ul&gt;
&lt;li&gt;Placez vous dans un repository.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gitk&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;si la commande précédente ne fonctionne pas: &lt;code&gt;$~ wish $(type -p
gitk)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;pour voir toutes les branches : &lt;code&gt;$~ wish $(type -p gitk)
--all&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;git-gui&lt;/strong&gt; : interface simplifiée pour les opérations
courantes.
&lt;ul&gt;
&lt;li&gt;lancer &lt;code&gt;git-gui&lt;/code&gt; (si ça ne fonctionne pas, même remarque que
pour gitk).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Trouver un GITe&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.finiderire.com/post/2008/04/22/gitorious.org&quot;&gt;Gitorious&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://faq.tuxfamily.org/GIT/Fr&quot;&gt;Tux Family&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Liens divers&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://git.or.cz/&quot;&gt;Le site officiel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://team.gcu.info/~ange/git_article/&quot;&gt;Tuto français complet et
drôle&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.kernel.org/pub/software/scm/git/docs/everyday.html&quot;&gt;Le
strict minimum pour se faire une idée&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.kernel.org/pub/software/scm/git/docs/tutorial.html&quot;&gt;La
base pour utiliser Git&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.kernel.org/pub/software/scm/git/docs/core-tutorial.html&quot;&gt;Un
tutorial qui rentre plus dans les détails&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;L'aGITé du bocal&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;En anglais, &lt;q&gt;git&lt;/q&gt; signifie &lt;q&gt;connard&lt;/q&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;L. Torvalds dit avoir choisi le nom en assumant son côté d'incurable
égocentrique: &lt;q&gt;je nomme tous mes projets d'après ma personne. D'abord Linux,
maintenant Git&lt;/q&gt;.
&lt;ul&gt;
&lt;li&gt;Il ne faut donc voir aucun rapport avec le contexte qui a engendré ce
projet.&lt;/li&gt;
&lt;li&gt;Source: &lt;a href=&quot;http://www.pcworld.idg.com.au/index.php/id;1852076002;fp;16;fpid;0&quot;&gt;quel
déconneur ce Linus !&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.finiderire.com/post/2008/04/22/Git-est-couvert#comment-form</comments>
      <wfw:comment>http://www.finiderire.com/post/2008/04/22/Git-est-couvert#comment-form</wfw:comment>
      <wfw:commentRss>http://www.finiderire.com/feed/rss2/comments/232660</wfw:commentRss>
      </item>
    
  <item>
    <title>Développement durable pour contrées étrangères</title>
    <link>http://www.finiderire.com/post/2008/04/11/Developpement-pour-contrees-etrangeres</link>
    <guid isPermaLink="false">urn:md5:8587ce63cfe22345e0d2a083d4a07f7c</guid>
    <pubDate>Sat, 12 Apr 2008 13:40:00 +0200</pubDate>
    <dc:creator>Jean-Seb</dc:creator>
        <category>Coding</category>
            
    <description>&lt;p&gt;&lt;br /&gt;
&lt;em&gt;Pas très pratique de rebooter sous MS-Windows pour compiler un exe à
destination des malheureux toujours présents sur ce système.&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Encore moins pratique si on ne dispose plus de MS-Windows (c'est
ballot).&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;La solution existe et s'appelle &lt;strong&gt;crossdev&lt;/strong&gt;.&lt;/em&gt;&lt;br /&gt;&lt;/p&gt;    &lt;h3&gt;La cross-compilation&lt;/h3&gt;
&lt;p&gt;La technique consistant à compiler pour un autre environnement que le sien
se nomme &lt;em&gt;cross-compilation&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Sous Gentoo, il existe un utilitaire qui permet de définir des
environnements de compilation différents du sien.&lt;/p&gt;
&lt;p&gt;Cet utilitaire se nomme &lt;strong&gt;crossdev&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Si vous n'êtes pas sous Gentoo, c'est peut être l'occasion de se poser la
question d'y passer. La cross-compilation n'est pas un sujet trivial lorsqu'on
ne possède pas les outils adaptés.&lt;/p&gt;
&lt;p&gt;Comme d'habitude, cet article comprend le strict minimum pour installer un
environnement de compilation. Pour les détails (qui sont fort intéressants),
vous devrez vous référer à la documentation Gentoo.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.gentoo.org/proj/en/base/embedded/handbook&quot;&gt;Tout savoir
sur la cross-compilation Gentoo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://gentoo-wiki.com/HOWTO_MinGW&quot;&gt;How-To spécifique MinGW&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://gentoo-wiki.com/HOWTO_MinGW_and_SDL_CrossCompiling&quot;&gt;HowTo
spécifique MinGW et SDL&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Quelques définitions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;cross compilation&lt;/em&gt; : compilation pour un autre système que le
sien (que ce soit du point de vue de l'OS ou du matériel).&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;toolchain&lt;/em&gt; : l'ensemble des utilitaires nécessaires à une
cross compilation.
&lt;ul&gt;
&lt;li&gt;Un toolchain typique comprends:les binutils, les compilateurs spécifiques à
la plateforme, un débugger, plus éventuellement quelques particularités propres
au système cible (libc pour systèmes embarqués par exemple).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;host system&lt;/em&gt; : le système utilisé pour la cross
compilation.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;target system&lt;/em&gt; : le système cible de la compilation.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;sysroot&lt;/em&gt; : correspond à un répertoire du &lt;em&gt;host system&lt;/em&gt;
dans lequel la toolchain est installée.
&lt;ul&gt;
&lt;li&gt;Ce répertoire va servir de racine à un système de fichier simulant
l'environnement du système cible, et permettra la création de binaires pour
celui-ci.&lt;/li&gt;
&lt;li&gt;c'est à partir de ce répertoire racine que le compilateur va chercher ses
includes et ses libs.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;crossdev&lt;/em&gt; : utilitaire Gentoo servant à mettre en place les
environnements de cross compilation.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;overlay&lt;/em&gt; : ceci ne concerne pas spécifiquement la
cross-compilation. Un overlay (=une &lt;em&gt;couche&lt;/em&gt;) est un ensemble d'ebuilds
Gentoo qui ne font pas partie des ebuilds &lt;q&gt;officiels&lt;/q&gt; de l'arbre portage.
Un &lt;em&gt;overlay&lt;/em&gt; correspond donc à une série d' ebuilds additionels.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Utilitaires Gentoo&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;binutils-config : pour gérer les versions slottées des binutils
&lt;ul&gt;
&lt;li&gt;Exemple affichant la liste des binutils installés:&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
~$ binutils-config -l
[1] i686-pc-linux-gnu-2.16.1 *
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;gcc-config : pour gérer les compilateurs installés
&lt;ul&gt;
&lt;li&gt;Exemple affichant la liste des compilateurs installés:&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
~$ gcc-config -l
 [1] i686-pc-linux-gnu-4.1.1 *
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;crossdev : compile et installe les toolchains pour une plateforme
supportés par GCC.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;qpkg : créer des paquets binaires pour des &lt;em&gt;ebuilds&lt;/em&gt;
cross-compilés sur le &lt;em&gt;sysroot&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Installation des paquets nécessaires&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;emerge -va portage-utils&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;emerge -va crossdev&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;emerge -va layman&lt;/code&gt; : va permettre de gérer les
&lt;strong&gt;overlays&lt;/strong&gt; (lister et installer)
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;layman -S&lt;/code&gt; équivaut à &lt;code&gt;emerge --sync&lt;/code&gt;, mais pour les
overlays.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;layman -L&lt;/code&gt; va lister les overlays disponibles.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;layman -a overlay-name&lt;/code&gt; pour ajouter un des overlays listé
précédemment (il faut les ajouter soi-même).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;layman -i toolchain&lt;/code&gt; pour avoir des informations sur un overlay
particulier (ici, &lt;em&gt;toolchain&lt;/em&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;important&lt;/strong&gt; : une fois votre premier overlay ajouté,
insérer cette ligne dans &lt;strong&gt;make.conf&lt;/strong&gt; :
&lt;ul&gt;
&lt;li&gt;source /usr/portage/local/layman/make.conf&lt;/li&gt;
&lt;li&gt;il ne faut &lt;strong&gt;surtout pas&lt;/strong&gt; l'insérer avant d'avoir sélectionné
votre premier overlay, sinon portage échouera.&lt;/li&gt;
&lt;li&gt;on peut choisir un autre path en modifiant le fichier de config
&lt;em&gt;/etc/layman/layman.config&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Je ne m'étends pas plus sur le sujet, car pour l'exemple développé ici
(installation de la toolchain &lt;em&gt;mingw32&lt;/em&gt;), nous n'aurons pas besoin des
overlays de toolchain.
&lt;ul&gt;
&lt;li&gt;Les overlays de toolchain seront donc à réserver aux environnements de
cross-compilation plus exotiques.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Par contre, pensez à ajouter (si ce n'est pas déja fait) dans votre
make.conf:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;echo 'PORTDIR_OVERLAY=&amp;quot;/usr/local/portage&amp;quot;' &amp;gt;&amp;gt;
/etc/make.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Ceci vous permettra d'utiliser par la suite vos ebuild &amp;quot;fait maison&amp;quot; (les
&lt;em&gt;overlays&lt;/em&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Nommage des toolchains&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Les toolchains sont désignées par des &lt;strong&gt;tuples&lt;/strong&gt; :
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;machine-vendor-kernel-operating system&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;quelques exemples de valeurs pour les tuples (voir la doc pour toutes les
possibilités).
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;machine&lt;/strong&gt;  : ia64, i686, x86_64 , ...&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;vendor&lt;/strong&gt; : &lt;em&gt;pc&lt;/em&gt; parait le plus logique&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;kernel&lt;/strong&gt; : mingw32 ou mingw64 pour les MS-Windows 32/64
bits&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;operating system&lt;/strong&gt; : gnu (tous les OS qui possèdent une
glibc)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Donc, pour compiler pour un cpu générique (mais récent) vers un Windows 32
bits, la toolchain devrait se nommer:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;i686-pc-mingw32-gnu&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;sauf que&lt;/strong&gt; ... si vous utilisez cette chaine,
&lt;strong&gt;crossdev&lt;/strong&gt; va échouer et vous aurez dans le log:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;checking target system type... Invalid configuration
`i686-pc-mingw32-gnu': machine `i686-pc-mingw32' not recognized&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Donc, nous utiliserons: &lt;strong&gt;i686-mingw32&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Construction d'une toolchain&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Nous allons utiliser &lt;strong&gt;crossdev&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Ne vous inquiétez pas si vous faites une erreur dans la création de la
toolchain, chaque toolchain est isolée des autres: une erreur ne cassera pas
votre système de base.&lt;/li&gt;
&lt;li&gt;Nous reprenons la toolchain du paragraphe précédent:
&lt;strong&gt;i686-mingw32&lt;/strong&gt; , en stage 3 (pour gagner du temps).
&lt;ul&gt;
&lt;li&gt;Je rappelle que le stage 3 ne comprend pas le compilateur C++.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
~ # crossdev -s3 --target i686-mingw32
--------------------------------------------------------------------------------
 * Host Portage ARCH:     x86
 * Target Portage ARCH:   x86
 * Target System:         i686-mingw32
 * Stage:                 3 (C compiler &amp;amp; libc)

 * binutils:              binutils-[latest]
 * gcc:                   gcc-[latest]
 * headers:               w32api-[latest]
 * libc:                  mingw-runtime-[latest]

 * PORTDIR_OVERLAY:       /usr/local/portage
 * PORT_LOGDIR:           /var/log/portage
 * PKGDIR:                /usr/portage/packages/cross/i686-mingw32
 * PORTAGE_TMPDIR:        /var/tmp/cross/i686-mingw32

 * Forcing the latest versions of {binutils,gcc}-config/gnuconfig ...     [ ok ]
 * Log: /var/log/portage/cross-i686-mingw32-binutils.log
 * Emerging cross-binutils ...

etc...
&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;par défaut, tous les utilitaires sont générés, des binutils au compilateur
C (ou C++ si vous êtes en stage4)
&lt;ul&gt;
&lt;li&gt;soyez patients, même en stage3 c'est long.&lt;/li&gt;
&lt;li&gt;tout est loggé bien sagement dans &lt;em&gt;/var/log/portage/&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;on peut également choisir sa version de la libc, de gcc, de binutils ...
&lt;ul&gt;
&lt;li&gt;par exemple, si vous avez des soucis avec gcc-4, vous pouvez repasser dans
une version plus stable:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;crossdev --gcc 3.4.2 -t i686-mingw32&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;(j'ai lu que gcc-4 posait problème lors de la création de bibliothèques
partagées).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;crossdev&lt;/code&gt; pour avoir un résumé des options&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Tout s'est-il bien passé ?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Quelques tests de base pour s'assurer qu'il n'y a pas de gros soucis:
&lt;ul&gt;
&lt;li&gt;Tout d'abord, demander les infos de version du compilateur C&lt;/li&gt;
&lt;li&gt;On remarquera avec intêret l'emplacement du sysroot&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
~$ /usr/bin/i686-mingw32-gcc -v
Utilisation des specs internes.
Target: i686-mingw32
Configuré avec: /var/tmp/cross/i686-mingw32/portage/cross-i686-mingw32/gcc-4.2.3/work/gcc-4.2.3/configure --prefix=/usr --bindir=/usr/i686-pc-linux-gnu/i686-mingw32/gcc-bin/4.2.3 --includedir=/usr/lib/gcc/i686-mingw32/4.2.3/include --datadir=/usr/share/gcc-data/i686-mingw32/4.2.3 --mandir=/usr/share/gcc-data/i686-mingw32/4.2.3/man --infodir=/usr/share/gcc-data/i686-mingw32/4.2.3/info --with-gxx-include-dir=/usr/lib/gcc/i686-mingw32/4.2.3/include/g++-v4 --host=i686-pc-linux-gnu --target=i686-mingw32 --build=i686-pc-linux-gnu --disable-altivec --enable-nls --without-included-gettext --with-system-zlib --disable-checking --disable-werror --enable-secureplt --disable-libunwind-exceptions --disable-libmudflap --disable-libssp --disable-libgcj --with-arch=i686 --enable-languages=c --disable-shared --with-sysroot=/usr/i686-mingw32 --disable-bootstrap --disable-libgomp
Modèle de thread: win32
version gcc 4.2.3 (Gentoo 4.2.3 p1.0)
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vous pouvez également vous promener dans le sysroot, afin de voir tout ce
qui est installé.
&lt;ul&gt;
&lt;li&gt;Vous devriez trouver DirectX, mais également OpenGL, GLUT, et tout ce qui a
trait à Win32 (sockets, WinMM, OLE etc..)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Compiler un &amp;quot;hello world&amp;quot;
&lt;ul&gt;
&lt;li&gt;Vous trouverez le source ci-dessous.&lt;/li&gt;
&lt;li&gt;Compilez avec : &lt;code&gt;/usr/bin/i686-mingw32-gcc -mwindows
hello_mingw.c -o hello_mingw&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Important&lt;/strong&gt; : n'oubliez pas le flag &lt;em&gt;-mwindows&lt;/em&gt;
, autrement vous compilerez un programme console (ce qui peut servir pour la
mise au point, mais a tendance à dérouter les utilisateurs dans la version de
prod.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
#include &amp;lt;windows.h&amp;gt;

int WINAPI WinMain (HINSTANCE hInstance, 
      HINSTANCE hPrevInstance, 
      PSTR szCmdLine, 
      int iCmdShow) 
{
  MessageBox (NULL, &amp;quot;Win32 test&amp;quot;, &amp;quot;Hello mingw32&amp;quot;, MB_OK);
  return 0;
}
&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Plus qu'à tester votre hello world.
&lt;ul&gt;
&lt;li&gt;Avec Wine (pour les jusqu'au-boutistes).&lt;/li&gt;
&lt;li&gt;Transfert vers un vrai MS-Windows (allez, faites vous plaisir).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Des regrets ?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Ca ne &lt;q&gt;marche pas&lt;/q&gt; (j'adore cette expression qui désigne en général
les problèmes situés entre la chaise et le clavier).&lt;/li&gt;
&lt;li&gt;Vous n'en pouvez plus (ça m'arrive aussi).&lt;/li&gt;
&lt;li&gt;Du passé, faisons table rase:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;crossdev --clean i686-mingw32&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Cela en vaut-il vraiment la peine ?&lt;/h3&gt;
&lt;p&gt;Pour les indécis et les incrédules, pensez simplement à ceci: mingw et les
portages GNU sous MS-Windows sont certes très utiles, mais le principe de
crossdev est de permettre de monter un environnement cohérent avec une chaine
de développement complète et à jour.&lt;/p&gt;
&lt;p&gt;Un autre gros avantage: vous n'avez plus besoin d'utiliser MS-Windows et
vous pourrez programmer sur un système qui est pensé pour le développement.&lt;/p&gt;
&lt;p&gt;Avec tout ça, si vous bootez encore sous MS-Windows, c'est que vraiment vous
aimez ça.&lt;br /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.finiderire.com/post/2008/04/11/Developpement-pour-contrees-etrangeres#comment-form</comments>
      <wfw:comment>http://www.finiderire.com/post/2008/04/11/Developpement-pour-contrees-etrangeres#comment-form</wfw:comment>
      <wfw:commentRss>http://www.finiderire.com/feed/rss2/comments/229267</wfw:commentRss>
      </item>
    
  <item>
    <title>Un fichier ça va, dix fichiers ...</title>
    <link>http://www.finiderire.com/post/2008/03/11/Un-fichier-ca-va-dix-fichiers</link>
    <guid isPermaLink="false">urn:md5:350c7cba2c4499c2a1b6db8c4acb56f0</guid>
    <pubDate>Tue, 18 Mar 2008 21:33:00 +0100</pubDate>
    <dc:creator>Jean-Seb</dc:creator>
        <category>Vim</category>
            
    <description>&lt;p&gt;&lt;em&gt;Vous en avez assez de la navigation dans les buffers ?&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Vous ne vous y retrouvez plus après une compilation avec quickfix
?&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;&lt;strong&gt;Project&lt;/strong&gt; est fait pour vous&lt;/em&gt;&lt;br /&gt;&lt;/p&gt;    &lt;h3&gt;Dans la jungle des fichiers&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Vim&lt;/strong&gt; est le plus beau des éditeurs.&lt;/p&gt;
&lt;p&gt;Et non, ce n'est pas Emacs. Celui qui a dit &lt;q&gt;Visual Studio&lt;/q&gt; : dix
coups de baton!&lt;/p&gt;
&lt;p&gt;N'empêche.&lt;/p&gt;
&lt;p&gt;Quand vous utilisez le mode &lt;strong&gt;quickfix&lt;/strong&gt; (déja abordé dans ce
blog) et que vous en avez assez de naviguer dans les buffers pour retrouver vos
fichiers, il est temps de faire appel à un gestionnaire de projet.&lt;/p&gt;
&lt;p&gt;Devinez quoi, ça existe déja, et c'est très fort.&lt;/p&gt;
&lt;p&gt;Voici &lt;strong&gt;Project&lt;/strong&gt; de Aric Blumer.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;img src=&quot;http://www.finiderire.com/public/Project.jpg&quot; alt=&quot;Project_screenshot&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt; Franchement, que reste-t-il à Visual
Studio ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Project : download et préparation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Vous pouvez trouver le script sur le site Vim:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=69&quot;&gt;Project&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;votre Vim doit être en mode &lt;em&gt;nocompatible&lt;/em&gt; (je dis ça pour les masos
adeptes des années 70, de la disco, et de Vim en mode legacy)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Installez le, ainsi que sa doc, puis générez la doc.
&lt;ul&gt;
&lt;li&gt;Syntaxe: helptags &lt;em&gt;path de la doc&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Ex: &lt;code&gt;helptags e:\tools\vim\doc&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;help project&lt;/code&gt; : la doc doit apparaitre.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Chargez Project dans Vim (attention à la majuscule)
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;:Project&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:Pro&lt;/code&gt; fonctionne également chez moi, abréviation à tester chez
vous.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Quelle que soit la disposition de vos fenêtre, Project se situera toujours
verticalement à la gauche de l'écran. Cela me parait être un bon compromis, je
n'ai pas cherché à modifier ce comportement par défaut.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Un projet ex-nihilo&lt;/h3&gt;
&lt;p&gt;Nous allons créer un projet simple (mais de bon goût).&lt;/p&gt;
&lt;p&gt;Par défaut, le projet est créé dans &lt;em&gt;$HOME/.vimprojects&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Pour le créer à un autre endroit, invoquez &lt;em&gt;:Project&lt;/em&gt; suivi du chemin
et du nom de projet&lt;/p&gt;
&lt;p&gt;Normalement, vous devez avoir la fenêtre Project ouverte dans Vim (sinon,
chargez Project).&lt;/p&gt;
&lt;p&gt;Cette fenêtre fonctionne en suivant le principe des
&lt;strong&gt;folders&lt;/strong&gt;. Si vous ne connaissez pas: &lt;code&gt;:help
fold&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Se placer sur la fenêtre Project, puis &lt;strong&gt;\c&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Il s'agit donc bien d'un &lt;em&gt;backslash&lt;/em&gt; suivi de la touche &lt;em&gt;c&lt;/em&gt; ,
en mode commande.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Une fenêtre apparait, et demande le nom de l'entrée. Disons &lt;em&gt;toto&lt;/em&gt;,
pour faire original.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Une autre fenêtre, avec le nom du répertoire.
&lt;ul&gt;
&lt;li&gt;Les gens sous Linux auront droit à une belle fenêtre de sélection, sous
Windows il faut rentrer le path à la main.&lt;/li&gt;
&lt;li&gt;Ne rentrez pas le slash (ou antislash) final.&lt;/li&gt;
&lt;li&gt;Disons: &lt;em&gt;e:\coding\toto&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Encore une fenêtre, avec &amp;quot;enter the CD parameter&amp;quot;
&lt;ul&gt;
&lt;li&gt;permets de changer de répertoire quand on choisit un fichier.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CD=.&lt;/strong&gt; signifie que l'on utilisera le répertoire courant
pour les commandes à exécuter.&lt;/li&gt;
&lt;li&gt;on n'est pas obligé de rentrer ce paramètre. Dans ce cas, le répertoire
restera celui de base.&lt;/li&gt;
&lt;li&gt;le paramètre s'exprime en tant que chemin relatif au chemin racine.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Dernière fenêtre: choisir le filtre de fichiers
&lt;ul&gt;
&lt;li&gt;Ex: &lt;code&gt;*.c *.cpp *.h&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Voila, votre projet est créé.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Seuls les éléments obligatoires ont été validées avec cet &lt;q&gt;assistant&lt;/q&gt;
&lt;ul&gt;
&lt;li&gt;Pour les options, voir la doc&lt;/li&gt;
&lt;li&gt;Par exemple, vous pouvez utiliser &lt;strong&gt;in&lt;/strong&gt; et
&lt;strong&gt;out&lt;/strong&gt; pour exécuter des commandes quand vous entrez ou sortez
d'un répertoire.&lt;/li&gt;
&lt;li&gt;Vous pouvez également utiliser la combinaison &lt;strong&gt;\C&lt;/strong&gt;
(&lt;strong&gt;C&lt;/strong&gt; majuscule) qui crée également un projet, en intégrant par
défaut tous les sous-répertoires.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Manipulation des fichiers d'un projet&lt;/h3&gt;
&lt;p&gt;Maintenant que le projet est créé, nous allons faire quelques manipulations
essentielles.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Reorganiser l'emplacement des noms de fichiers
&lt;ul&gt;
&lt;li&gt;placez-vous sur le nom de fichier à déplacer, puis &lt;strong&gt;CTRL + curseur
haut/bas&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;attention, flêches du curseur obligatoire, ça ne fonctionne pas avec les
touche &lt;strong&gt;j&lt;/strong&gt; et &lt;strong&gt;k&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Ouvrir un fichier
&lt;ul&gt;
&lt;li&gt;se placer sur le nom du fichier, puis valider.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Ouvrir tous les fichiers d'un folder (sans les sous-repertoires)
&lt;ul&gt;
&lt;li&gt;se placer dans le répertoire désiré du folder, puis
&lt;strong&gt;\l&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Rafraichir l'affichage du folder
&lt;ul&gt;
&lt;li&gt;se placer sur le folder, puis &lt;strong&gt;\r&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;pour rafraichir tous les sous-folders : &lt;strong&gt;\R&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Ouvrir un fichier dans une nouvelle fenêtre splittée horizontalement
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SHIFT + Return&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;\s&lt;/strong&gt; si le terminal ne supporte pas la combinaison
précédente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;\S&lt;/strong&gt; pour ouvrir tous les fichiers dans des fenêtres
splittées (foutoir plus ou moins assuré selon le nombre de fichiers dans le
projet).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Oups.&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;La fenêtre projet est fermée ?
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;:Project&lt;/strong&gt; pour la faire revenir (pas la peine de spécifier
un nom de fichier, &lt;em&gt;Project&lt;/em&gt; reprend celui en cours d'utilisation).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;On ne voit rien!
&lt;ul&gt;
&lt;li&gt;Se placer sur la fenêtre Project, et appuyer sur &lt;em&gt;espace&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Appuyer à nouveau sur &lt;em&gt;espace&lt;/em&gt; pour revenir à la largeur par
défaut&lt;/li&gt;
&lt;li&gt;On peut choisir la valeur d'incrémentation avec la valeur de
&lt;strong&gt;g:proj_window_increment&lt;/strong&gt; (par défaut: 100)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Je veux tout recommencer.
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;:bwipe&lt;/strong&gt; : Nettoie le projet (ainsi que
&lt;strong&gt;tous&lt;/strong&gt; les buffers)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;L' onglet c'est bon, mangez-en.
&lt;ul&gt;
&lt;li&gt;J'ai ouvert un onglet (&lt;strong&gt;:tabnew&lt;/strong&gt;) , puis-je avoir Project à
nouveau ?&lt;/li&gt;
&lt;li&gt;Bien sûr: tapez tout simplement &lt;strong&gt;:Project&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Mais c'est du texte tout ça ?
&lt;ul&gt;
&lt;li&gt;Oui, la fenêtre peut être éditée librement (ajout, suppression).&lt;/li&gt;
&lt;li&gt;Pour commencer un nouveau projet, utilisez &lt;strong&gt;:bwipe&lt;/strong&gt; , la
suppression du texte de la fenetre Project ne suffira pas.&lt;/li&gt;
&lt;li&gt;Les folders peuvent s'imbriquer, et se manipulent simplement (double-clic
pour ouvrir/fermer par exemple)&lt;/li&gt;
&lt;li&gt;en cas de modification du texte d'un folder, n'oubliez pas
&lt;strong&gt;\r&lt;/strong&gt; ou &lt;strong&gt;\R&lt;/strong&gt; (général) pour rafraichir
l'affichage.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Le chemin est absolu (et la pente est rude)&lt;/h3&gt;
&lt;p&gt;Dans le cas d'un projet multiplateforme, on est gêné par l'obligation de
rentrer un chemin absolu pour le folder père.&lt;/p&gt;
&lt;p&gt;Les folders fils contiendront un chemin relatif au chemin de base, donné par
le folder père.&lt;/p&gt;
&lt;p&gt;Si , depuis MS-Windows, vous utilisez le shell MSYS (et vous utilisez
MSYS!), vous avez accès à &amp;quot;~&amp;quot; comme alias de votre $HOME.&lt;/p&gt;
&lt;p&gt;Voila donc le point commun avec Unix. Cela peut servir si vous avez besoin
de modifier à la volée le chemin de base de vos sources (voir plus loin).&lt;/p&gt;
&lt;p&gt;Voici un projet test qui vaudra mieux qu'un long discours (comme disait
Napoléon).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pour cet exemple, voici l'endroit où se trouve le projet:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;r:\coding\sound\soundtest&lt;/strong&gt; : chemin complet&lt;/li&gt;
&lt;li&gt;&lt;em&gt;r:\coding\&lt;/em&gt; est le répertoire racine contenant tous mes
projets.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;sound&lt;/em&gt; est une spécialisation contenant ce qui a trait au son.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;soundtest&lt;/em&gt; est le répertoire projet qui nous intéresse.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Se placer dans le répertoire racine de vos sources
(&lt;em&gt;r:\coding\sound\soundtest&lt;/em&gt;) et lancer Vim.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Depuis Vim
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;:Project&lt;/strong&gt; : crée un nouveau projet dans
&lt;em&gt;$home/.vimprojects&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;ou, si vous préférez avoir un fichier pour chaque nouveau projet:
&lt;strong&gt;:Project nom_du_projet&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;dans ce dernier cas, il faudra charger Vim depuis le shell de la façon
suivante: &lt;code&gt;vim +&amp;quot;Project nom_du_projet&amp;quot;&lt;/code&gt; (n'oubliez pas les
guillemets ou &lt;em&gt;nom_du_projet&lt;/em&gt; sera chargé comme un fichier
classique).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Dans la fenêtre de projet : création de la racine
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;\c&lt;/strong&gt; (&lt;q&gt;c&lt;/q&gt; minuscule) : invoque l'assistant projet,
pour parler comme les Windoziens.&lt;/li&gt;
&lt;li&gt;je me permets d'insister sur le &lt;q&gt;c&lt;/q&gt; minuscule, autrement l'intégralité
de votre arborescence de sources sera ramenée.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;nom du projet&lt;/em&gt; : &lt;strong&gt;ROOT&lt;/strong&gt; (ou ce que vous voulez,
mais servira dans le script de démarrage)&lt;/li&gt;
&lt;li&gt;Quel script de démarrage ? Celui que vous serez obligé d'écrire pour
modifier la valeur de base, si il y des différences d'arborescence entre vos
machines de dev.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;chemin &lt;strong&gt;absolu&lt;/strong&gt;&lt;/em&gt; : il est important de garder
la notation Unix des répertoires, avec les slashes. L'astuce consiste à omettre
la lettre de lecteur qui empêche cette notation de fonctionner. Par défaut, Vim
utilisera la lettre du lecteur d'où il est lancé. Sous Unix, vous n'aurez pas
tout ces problèmes, bien sûr. Ici, nous allons donc rentrer tout simplement:
&lt;code&gt;/coding&lt;/code&gt; pour MS-Windows (et probablement &lt;code&gt;~/coding&lt;/code&gt;
pour Unix).&lt;/li&gt;
&lt;li&gt;&lt;em&gt;filtres&lt;/em&gt; : ce que vous voulez. On peut toujours en ajouter par
la suite. Personnellement, je mets: &lt;strong&gt;*.c *.cxx *.cpp *.h&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Dans la fenêtre de projet : création du projet fils.
&lt;ul&gt;
&lt;li&gt;se placer sur une des lignes du folder &lt;q&gt;père&lt;/q&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;\C&lt;/strong&gt; : cette fois, c'est récursif pour le cas où votre
projet aurait des sous-répertoires. C'est conseillé, sauf si vous faites un
&lt;em&gt;fizzbuzz&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;nom du projet&lt;/em&gt; : je vous laisse juges.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;chemin&lt;/em&gt; : il faut rentrer un chemin relatif par rapport à la
racine de vos sources. Nous allons rentrer &lt;code&gt;sound/soundtest&lt;/code&gt; . Ne
mettez surtout pas de slash initial, il s'agit bien d'un chemin relatif.&lt;/li&gt;
&lt;li&gt;Pas besoin de filtres supplémentaires dans mon cas.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Et voila, un projet de créé. Vous pouvez en créer d'autres en vous
repositionnant sur le folder père, pour repartir de votre chemin racine.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;N'oubliez pas qu'en cas de modifications, &lt;strong&gt;\R&lt;/strong&gt; rafraichit de
manière récursive votre projet fils (il faut l'avoir sélectionné, être sur le
père ne suffit pas).&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Il ne vous reste qu'à synchroniser votre fichier &lt;q&gt;Project&lt;/q&gt; entre vos
différentes machines (&lt;strong&gt;Unison&lt;/strong&gt; est ton ami).
&lt;ul&gt;
&lt;li&gt;Sur mon Linux, je n'ai eu qu'à rajouter un &lt;strong&gt;~&lt;/strong&gt; au début de
ROOT dans &lt;em&gt;.vimprojects&lt;/em&gt; : &lt;code&gt;ROOT=~/coding&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Ca s'automatiserait très facilement, mais autant garder les choses simples.
C'est la seule chose à changer dans un fichier Projects, cela reste très
supportable.&lt;/li&gt;
&lt;li&gt;Par contre, si vous ne voulez pas du fichier global, je vous conseille de
faire un script qui recherche cette variable et la modifie selon l'OS, avant de
lancer Vim.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;pixel.cpp , pixel.h&lt;/h3&gt;
&lt;p&gt;Plus d'excuse pour ne pas découper de façon rationnelle votre code dans un
tas de jolis sous-répertoires.&lt;/p&gt;
&lt;p&gt;Ne faites pas non plus une classe pixel, ça serait exagéré (le coup de la
classe pixel vient d'un studio de dev, et est authentique).&lt;/p&gt;
&lt;p&gt;Et n'oubliez pas de lire la doc, notamment pour la liste des variables
modifiables.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.finiderire.com/post/2008/03/11/Un-fichier-ca-va-dix-fichiers#comment-form</comments>
      <wfw:comment>http://www.finiderire.com/post/2008/03/11/Un-fichier-ca-va-dix-fichiers#comment-form</wfw:comment>
      <wfw:commentRss>http://www.finiderire.com/feed/rss2/comments/219088</wfw:commentRss>
      </item>
    
  <item>
    <title>Et NTFS fusa.</title>
    <link>http://www.finiderire.com/post/2008/03/13/Et-NTFS-fusa</link>
    <guid isPermaLink="false">urn:md5:227f021b545b9d6eef1611141eb1b2d1</guid>
    <pubDate>Sat, 15 Mar 2008 14:07:00 +0100</pubDate>
    <dc:creator>Jean-Seb</dc:creator>
        <category>Linuxeries</category>
            
    <description>&lt;p&gt;&lt;em&gt;Vous avez un PC en dual-boot MS-Windows / Linux.&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Cela arrive, même aux meilleurs (la preuve).&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Vous voudriez avoir l'accès lecture/écriture en NTFS.&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;&lt;strong&gt;mise à jour&lt;/strong&gt; : 17 mars 2008&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Dites &lt;q&gt;Aaaahhh!&lt;/q&gt;. Très bien... maintenant, dites &lt;q&gt;FUSE&lt;/q&gt; et
&lt;q&gt;ntfs3g&lt;/q&gt;.&lt;/em&gt;&lt;br /&gt;&lt;/p&gt;    &lt;h3&gt;Big Red Warning&lt;/h3&gt;
&lt;p&gt;Si vous utilisez ntfs3g, votre machine est probablement en dual-boot
Linux/MS-Windows.&lt;/p&gt;
&lt;p&gt;Je dis &lt;q&gt;probablement&lt;/q&gt; car vous pouvez, pour des raisons intimes, avoir
besoin de lire un disque externe NTFS depuis votre Linux. Par exemple,
décontaminer celui-ci de la dernière cochonnerie à la mode, hahaha.&lt;/p&gt;
&lt;p&gt;Dans le cas d'un dual-boot, c'est une &lt;strong&gt;très mauvaise idée&lt;/strong&gt;
que d'utiliser l'hibernation de MS-Windows avant de rebooter sous Linux et de
remonter une partition NTFS en écriture.&lt;/p&gt;
&lt;p&gt;En effet, lors du retour sous MS-Windows, les données en cache de ladite
partition ne correspondront plus, et Dieu sait ce qui risque de se produire
(allez, un indice: probablement de la corruption de données, et peut être même
la perte de votre partition).&lt;/p&gt;
&lt;p&gt;De même, si vous hibernez sous Linux avant de rebooter sous Windows,
n'oubliez pas de (au choix)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Soit de démonter toutes les partitions NTFS avant l'hibernation.&lt;/li&gt;
&lt;li&gt;Soit de mettre dans votre script d'hibernation ce qu'il faut pour que le
démontage/remontage en sortie d'hibernation soit automatique&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ceci tient lieu de disclaimer et d'introduction.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Péter un fusible ou utiliser FUSE&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;FUSE&lt;/strong&gt; permets de monter des systèmes de fichiers exotiques
en userland.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ici, nous allons utiliser le support ntfs (avec &lt;strong&gt;ntfs3g&lt;/strong&gt;),
mais il faut savoir que de nombreuses autres possibilités s'ouvrent à vous:
&lt;ul&gt;
&lt;li&gt;montage de FS réseaux (ftp, samba pour FUSE, webdav, sshfs .. que du
bon)&lt;/li&gt;
&lt;li&gt;montage de bases de données&lt;/li&gt;
&lt;li&gt;montage d'archives, de fichiers compressés et même images ISO9660)&lt;/li&gt;
&lt;li&gt;etc...&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Comme d'habitude, les exemples didactiques et sans engagement sont à
utiliser avec une Gentoo.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Les malheureux sous Debian pourront toujours essayer de se ramener le
paquet &lt;em&gt;unstable&lt;/em&gt; de l'année dernière.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Activation de FUSE dans le kernel&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Il faut juste activer le support FUSE dans le noyau, et récupérer les FS
userland utilisants son API.
&lt;ul&gt;
&lt;li&gt;Plus besoin de support kernel / module kernel pour vos FS exotiques!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;FUSE s'utilise de préférence avec un kernel supérieur ou égale à
&lt;strong&gt;2.6.20&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Je vous laisse vérifier si le support FUSE est présent. (&lt;code&gt;zcat
/proc/config.gz | grep -i fuse&lt;/code&gt;)
&lt;ul&gt;
&lt;li&gt;&lt;q&gt;not set&lt;/q&gt; ? J'en étais sûr. Bon, recompilez le, je vous
attends.&lt;/li&gt;
&lt;li&gt;ça se passe ici: &lt;strong&gt;File systems/Filesystem in Userspace
support&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Pendant que ça compile, vous pouvez prendre connaissance des possibilités
de la bête.
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://fuse.sourceforge.net&quot;&gt;Site Web FUSE&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Donc, on n'a plus besoin de compiler le support noyau NTFS read-only
&lt;ul&gt;
&lt;li&gt;Cependant, il semblerait que ce support soit plus rapide pour les
opérations de lecture.&lt;/li&gt;
&lt;li&gt;Un volontaire pour bencher ?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Attention, si FUSE est compilé sans l'option &lt;q&gt;root directory executable
prefix&lt;/q&gt;, vous ne pourrez pas monter automatiquement le NTFS au démarrage.
&lt;ul&gt;
&lt;li&gt;Une solution peut être de passer l'option adéquate à
&lt;em&gt;configure&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;./configure --exec-prefix=/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Activation de la partie userland de FUSE&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;emerge -va sys-fs/fuse&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Et l'installation de FUSE proprement dite est terminée.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Installation ntfs3g &amp;amp; tools ntfs&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Installer le driver ntfs pour FUSE
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;emerge -va ntfs3g&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Installer les tools ntfs
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;USE=&amp;quot;fuse&amp;quot; emerge -va ntfsprogs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Attention, il faudra penser à faire un USE=&amp;quot;fuse&amp;quot; (ce n'est pas par défaut
dans les flags)&lt;/li&gt;
&lt;li&gt;Vous trouverez tout ce qu'il faut pour gérer des partitions NTFS, y compris
un formateur (pour les nostalgiques).&lt;/li&gt;
&lt;li&gt;Pour un résumé de ce qui est installé: &lt;code&gt;man ntfsprogs&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Utilisation de ntfs3g&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Les droits : même principe que Samba.
&lt;ul&gt;
&lt;li&gt;Par défaut, les droits sur la partition NTFS montée sont inactivés par le
gid/uid du process.&lt;/li&gt;
&lt;li&gt;C'est à dire qu'un mount en root va donner un &lt;em&gt;gid/uid&lt;/em&gt; égal à
&lt;em&gt;root/root&lt;/em&gt;, et les utilisateurs auront tous les droits sur la partition
montée.&lt;/li&gt;
&lt;li&gt;Pour utiliser le système de droits NTFS, utilisez les flags &lt;em&gt;gid&lt;/em&gt; et
&lt;em&gt;uid&lt;/em&gt; avec &lt;em&gt;umask/fmask/dmask&lt;/em&gt; de &lt;em&gt;ntfs-3g&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;ntfs-3g crée les noms de fichier en suivant le standard POSIX.
&lt;ul&gt;
&lt;li&gt;Les caractères &lt;strong&gt;/&lt;/strong&gt; et &lt;strong&gt;\0&lt;/strong&gt; sont
interdits.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Les streams sont lisibles, mais par défaut, seuls les streams anonymes sont
lisibles.
&lt;ul&gt;
&lt;li&gt;Les streams sous NTFS, c'est ça : &lt;code&gt;cat montexte.txt:auteur&lt;/code&gt;
pour sortir le stream &lt;em&gt;auteur&lt;/em&gt; du fichier &lt;q&gt;montexte.txt&lt;/q&gt;.&lt;/li&gt;
&lt;li&gt;Pour plus d'infos sur les flux NTFS, voir par exemple le site de J.C.
Bellamy.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Quelques options utiles
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;locale&lt;/strong&gt; : pour les caractères spécifiques à une langue
étrangère (&lt;q&gt;étrangère&lt;/q&gt; d'un point de vue américain).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;show_sys_files&lt;/strong&gt; : c'est vous qui voyez.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;allow_other&lt;/strong&gt; : pour devenir le maitre des fichiers
(normalement réservé à root)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Exemple : un montage de base
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ntfs-3g /dev/hda1 /mnt/windows&lt;/code&gt; &lt;em&gt;équivalent à&lt;/em&gt;
&lt;code&gt;mount -t ntfs-3g /dev/hda1 /mnt/windows&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;la seconde forme servira si vous voulez utiliser &lt;em&gt;fstab&lt;/em&gt; pour monter
vos partitions NTFS.&lt;/li&gt;
&lt;li&gt;pour utiliser fstab, créez une entrée dans ce style:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/dev/hda1 /