<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ZedTuX On R00t</title>
	<atom:link href="http://blog.zedroot.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.zedroot.org</link>
	<description>Je travaille pour la plus grand entreprise du monde: L&#039;open source</description>
	<lastBuildDate>Thu, 09 Sep 2010 11:10:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Hack : python setup.py uninstall</title>
		<link>http://blog.zedroot.org/2010/09/hack-python-setup-py-uninstall/</link>
		<comments>http://blog.zedroot.org/2010/09/hack-python-setup-py-uninstall/#comments</comments>
		<pubDate>Tue, 07 Sep 2010 06:34:18 +0000</pubDate>
		<dc:creator>zedtux</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blog.zedroot.org/?p=1502</guid>
		<description><![CDATA[Si vous programmez avec python, et voulez distribuer votre jolie petite application toute fraîche, vous avez dut faire un fichier setup.py utilisant la bibliothèque distutils ou encore setuptools, qui permet l&#8217;installation de votre application grâce à : 1python setup.py install (En utilisant sudo si nécessaire.) Mais si vous tapez python setup.py uninstall vous aurez cette [...]]]></description>
			<content:encoded><![CDATA[<p>Si vous programmez avec python, et voulez distribuer votre jolie petite application toute fraîche, vous avez dut faire un fichier <strong>setup.py</strong> utilisant la bibliothèque <a href="http://docs.python.org/library/distutils.html" target="_blank">distutils</a> ou encore <a href="http://pypi.python.org/pypi/setuptools" target="_blank">setuptools</a>, qui permet l&#8217;installation de votre application grâce à :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">python setup.py install</div></td></tr></tbody></table></div>
<p>(En utilisant <strong>sudo</strong> si nécessaire.)</p>
<p>Mais si vous tapez <strong>python setup.py uninstall</strong> vous aurez cette erreur :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"># python setup.py uninstall<br />
--prefix=/usr/local<br />
usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]<br />
or: setup.py --help [cmd1 cmd2 ...]<br />
or: setup.py --help-commands<br />
or: setup.py cmd --help<br />
<br />
error: invalid command 'uninstall'</div></td></tr></tbody></table></div>
<h1><span id="more-1502"></span>Ajouter un rôle uninstall à setup.py</h1>
<p>Voici mon setup.py qui gère les rôles habituels :</p>
<ul>
<li>install</li>
<li>sdist</li>
<li>clean</li>
</ul>
<p>Et qui y ajoute le rôle uninstall :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:600px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br />134<br />135<br />136<br />137<br />138<br />139<br />140<br />141<br />142<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">#!/usr/bin/env python<br />
#<br />
# TuXtremSplit - A Linux Xtremsplit file tool<br />
#<br />
# Copyright (C) zedtux<br />
#<br />
# TuXtremSplit is free software; you can redistribute it and/or modify<br />
# it under the terms of the GNU General Public License as published by<br />
# the Free Software Foundation; either version 3 of the License, or<br />
# (at your option) any later version.<br />
#<br />
# TuXtremSplit is distributed in the hope that it will be useful,<br />
# but WITHOUT ANY WARRANTY; without even the implied warranty of<br />
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the<br />
# GNU General Public License for more details.<br />
#<br />
# You should have received a copy of the GNU General Public License<br />
# along with TuXtremSplit; if not, write to the Free Software Foundation, Inc.,<br />
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA<br />
<br />
import os<br />
import sys<br />
import glob<br />
<br />
from setuptools import setup, find_packages<br />
<br />
def execcmd(cmd):<br />
print &quot;Executing %s...&quot; % cmd<br />
result = os.system(cmd)<br />
if result == 0:<br />
print &quot;Executed successfully&quot;<br />
else:<br />
print &quot;Error: Execution failed !&quot;<br />
<br />
def extract_version():<br />
if os.path.exists(&quot;VERSION&quot;):<br />
f = open(&quot;VERSION&quot;)<br />
version = f.read()[0:-1]<br />
f.close()<br />
return version<br />
else:<br />
print &quot;ERROR: No file VERSION. Did you make 'make version' ?&quot;<br />
return &quot;&quot;<br />
<br />
def fix_args():<br />
&quot;&quot;&quot;<br />
Add if missing '--record' param<br />
&quot;&quot;&quot;<br />
record_found = False<br />
for arg in sys.argv:<br />
if arg == &quot;--record&quot;:<br />
record_found = True<br />
break<br />
if not record_found:<br />
sys.argv.append(&quot;--record&quot;)<br />
sys.argv.append(&quot;uninstall.list&quot;)<br />
<br />
if __name__ == '__main__':<br />
#-----------------------------------------<br />
# Hacked setup.py<br />
#<br />
# This hacked version provide an uninstall<br />
# role that standard setup.py miss.<br />
#-----------------------------------------<br />
if len(sys.argv) == 1:<br />
print &quot;error: no commands supplied&quot;<br />
<br />
elif sys.argv[1] == &quot;install&quot; or sys.argv[1] == &quot;sdist&quot; or sys.argv[1] == &quot;clean&quot;:<br />
<br />
if sys.argv[1] == &quot;install&quot;:<br />
fix_args()<br />
version = extract_version()<br />
<br />
if not version == &quot;&quot;:<br />
print &quot;Version : '%s'&quot; % version<br />
<br />
setup(name='tuxtremsplit',<br />
version=version,<br />
description='Xtremsplit Linux client',<br />
author='zedtux',<br />
author_email='zedtux@zedroot.org',<br />
url='http://tuxtremsplit.zedroot.org/',<br />
keywords=['xtremsplit','xtm','python'],<br />
scripts=['txs'],<br />
packages=find_packages(),<br />
data_files=[<br />
('share/tuxtremsplit/glade/', glob.glob('data/glade/*.glade')),<br />
('/usr/share/mime/packages/', glob.glob('data/xtm-mimetype.xml')),<br />
('/usr/share/applications/', glob.glob('data/tuxtremsplit.desktop')),<br />
('/usr/share/icons/hicolor/16x16/apps/', glob.glob('data/pixmaps/16x16/txs.png')),<br />
('/usr/share/icons/hicolor/22x22/apps/', glob.glob('data/pixmaps/22x22/txs.png')),<br />
('/usr/share/icons/hicolor/24x24/apps/', glob.glob('data/pixmaps/24x24/txs.png')),<br />
('/usr/share/icons/hicolor/32x32/apps/', glob.glob('data/pixmaps/32x32/txs.png')),<br />
('/usr/share/icons/hicolor/48x48/apps/', glob.glob('data/pixmaps/48x48/txs.png')),<br />
('/usr/share/icons/hicolor/64x64/apps/', glob.glob('data/pixmaps/64x64/txs.png')),<br />
('/usr/share/icons/hicolor/128x128/apps/', glob.glob('data/pixmaps/128x128/txs.png')),<br />
],<br />
license='GNU GPL',<br />
platforms='linux')<br />
<br />
[execcmd(cmd) for cmd in [&quot;update-mime-database /usr/share/mime/&quot;,<br />
&quot;xdg-mime install --mode system /usr/share/mime/packages/xtm-mimetype.xml&quot;,<br />
&quot;xdg-mime install --mode user /usr/share/mime/packages/xtm-mimetype.xml&quot;,<br />
&quot;xdg-mime default tuxtremsplit.desktop application/x-extension-xtm&quot;]]<br />
<br />
print<br />
print &quot;Installation finished !&quot;<br />
print<br />
print &quot;You must restart nautilus to have the new MimeType for xtm files.&quot;<br />
print &quot;To do this, execute this:&quot;<br />
print &quot; &nbsp; &nbsp; nautilus -q&quot;<br />
print<br />
print &quot;Then restart it by opening a folder, or with:&quot;<br />
print &quot; &nbsp; &nbsp; nautilus&quot;<br />
<br />
elif sys.argv[1] == &quot;uninstall&quot;:<br />
print &quot;Uninstalling...&quot;<br />
if os.path.exists(&quot;uninstall.list&quot;):<br />
<br />
# Remove all installed files<br />
execcmd(&quot;cat uninstall.list | xargs rm -rf&quot;)<br />
<br />
[execcmd(cmd) for cmd in [&quot;xdg-mime uninstall --mode system /usr/share/mime/packages/xtm-mimetype.xml&quot;,<br />
&quot;xdg-mime uninstall --mode user /usr/share/mime/packages/xtm-mimetype.xml&quot;,<br />
&quot;rm /usr/share/mime/packages/xtm-mimetype.xml&quot;,<br />
&quot;update-mime-database /usr/share/mime/&quot;,<br />
&quot;rm /usr/share/applications/tuxtremsplit.desktop&quot;,<br />
&quot;rm /usr/share/icons/hicolor/16x16/apps/txs.png&quot;,<br />
&quot;rm /usr/share/icons/hicolor/22x22/apps/txs.png&quot;,<br />
&quot;rm /usr/share/icons/hicolor/24x24/apps/txs.png&quot;,<br />
&quot;rm /usr/share/icons/hicolor/32x32/apps/txs.png&quot;,<br />
&quot;rm /usr/share/icons/hicolor/48x48/apps/txs.png&quot;,<br />
&quot;rm /usr/share/icons/hicolor/64x64/apps/txs.png&quot;,<br />
&quot;rm /usr/share/icons/hicolor/128x128/apps/txs.png&quot;]]<br />
<br />
else:<br />
print<br />
print &quot;Error: I can't find the file uninstall.list.&quot;<br />
print &quot;Please, execute again 'python setup.py install', then restart 'python setup.py uninstall'&quot;<br />
<br />
else:<br />
print &quot;error: invalid command '%s'&quot; % sys.argv[1]</div></td></tr></tbody></table></div>
<p>Il est aussi disponible dans le dépôt Bazaar sur Launchpad.net : <a href="http://bazaar.launchpad.net/~zedtux/tuxtremsplit/trunk/annotate/head%3A/setup.py">http://bazaar.launchpad.net/~zedtux/tuxtremsplit/trunk/annotate/head%3A/setup.py</a></p>
<h1><!--more-->Comment ça marche ?</h1>
<h2>Étape 1 : Fixer les arguments</h2>
<p>Pour pouvoir bien désinstaller votre projet, il faut savoir quels sont les fichiers que vous copiez à droite et à gauche.<br />
Tout ça étant déjà défini dans la méthode <strong>setup()</strong>, il serait bête de tout re-définir encore une fois dans la désinstallation.<br />
Et bonjour le maintien !</p>
<p>Pour régler ça, setup() peut prendre un argument <strong>&#8211;record</strong> puis un emplacement de fichier.<br />
Ce fichier contiendra tous les fichiers copiés ! Donc les supprimer par la suite est un jeu d&#8217;enfant ! <img src='http://blog.zedroot.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Donc le rôle <strong>install</strong> va commencer par appeler la méthode <strong>fix_args()</strong> qui ajoute si nécessaire l&#8217;argument <strong>&#8211;record</strong> puis <strong>./uninstall.list</strong>.</p>
<h2>Étape 2 : La version</h2>
<p>Lorsque vous faites un <strong>python setupy.py install</strong>, le script va d&#8217;abord chercher à récupérer la version courante du projet. Il va donc tenter de lire un fichier VERSION, à la racine du projet. (Moi, je le génère avec un Makefile, et un rôle <strong>version</strong>). Cette version sera utilisée pour compléter la valeur du champ <em>version</em> de la méthode <strong>setup()</strong>.</p>
<p>Cette étape me sert lorsque je fais un <strong>make builddeb</strong>.<br />
Ce rôle a besoin que la version du fichier <strong>debian/changelog</strong> et celle du <em>setup()</em> de <strong>setuptools</strong> soient les mêmes.</p>
<p>Du coup, lorsque je fais une modification, j&#8217;utilise <a href="http://pwet.fr/man/linux/commandes/debchange" target="_blank">debchange</a> pour maintenir le fichier <strong>debian/changelog</strong>.<br />
Si je crée une nouvelle version avec <strong>debchange -v new.version.id</strong>, la commande crée une nouvelle entrée dans le fichier <strong>debian/changelog</strong> pour cette nouvelle version, et renomme automatiquement le dossier du projet avec cette version (obligatoire pour l&#8217;empaquetage).<br />
Du coup, il faut que tous les acteurs dans l&#8217;installation et l&#8217;empaquetage soient au courant de cette version ! <img src='http://blog.zedroot.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Étape 3 : L&#8217;installation</h2>
<p>Là, le script travaille comme l&#8217;original : il lance la méthode <strong>setup()</strong> qui installe les fichiers.</p>
<h2>Étape 4 : Exécution de commandes diverses</h2>
<p>J&#8217;avais besoin, pour installer un nouveau MimeType avec mon application, de lancer quelques commandes (que j&#8217;ai laissées comme exemples).<br />
Un tableau contenant les commandes et leurs arguments à exécuter est itéré afin d&#8217;appeler la méthode <strong>execcmd()</strong>.</p>
<p>Avec ce fichier <strong>setup.py</strong>, mon programme <a href="http://tuxtremsplit.zedroot.org/">TuXtremSplit</a> s&#8217;installe entièrement, et se désinstalle proprement ! <img src='http://blog.zedroot.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zedroot.org/2010/09/hack-python-setup-py-uninstall/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Créer le fichier debian/compat en une ligne bash</title>
		<link>http://blog.zedroot.org/2010/09/creer-le-fichier-debiancompat-en-une-ligne-bash/</link>
		<comments>http://blog.zedroot.org/2010/09/creer-le-fichier-debiancompat-en-une-ligne-bash/#comments</comments>
		<pubDate>Sun, 05 Sep 2010 13:59:26 +0000</pubDate>
		<dc:creator>zedtux</dc:creator>
				<category><![CDATA[Non classé]]></category>

		<guid isPermaLink="false">http://blog.zedroot.org/?p=1416</guid>
		<description><![CDATA[J&#8217;avais besoin de générer simplement le fichier compat pour créer un paquet debian. J&#8217;ai donc pondu cette petit ligne qui le fait tout simplement : 1echo `dpkg -p debhelper &#124; grep Version &#124; cut -d &#34;:&#34; -f 3 &#124; cut -d &#34;.&#34; -f 1 &#124; tr -d &#34; &#34;` &#38;gt; debian/compat]]></description>
			<content:encoded><![CDATA[<p>J&#8217;avais besoin de générer simplement le fichier compat pour créer un paquet debian.</p>
<p>J&#8217;ai donc pondu cette petit ligne qui le fait tout simplement :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">echo `dpkg -p debhelper | grep Version | cut -d &quot;:&quot; -f 3 | cut -d &quot;.&quot; -f 1 | tr -d &quot; &quot;` &amp;gt; debian/compat</div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.zedroot.org/2010/09/creer-le-fichier-debiancompat-en-une-ligne-bash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Postfix : Prise en charge des adresses email avec des &#8216;+&#8217;</title>
		<link>http://blog.zedroot.org/2010/09/postfix-prise-en-charge-des-adresses-email-avec-des/</link>
		<comments>http://blog.zedroot.org/2010/09/postfix-prise-en-charge-des-adresses-email-avec-des/#comments</comments>
		<pubDate>Fri, 03 Sep 2010 14:11:50 +0000</pubDate>
		<dc:creator>zedtux</dc:creator>
				<category><![CDATA[OVH - RPS]]></category>
		<category><![CDATA[postfix]]></category>

		<guid isPermaLink="false">http://blog.zedroot.org/?p=1489</guid>
		<description><![CDATA[Peut-être connaissez-vous les adresses emails avec un symbole &#171;&#160;+&#160;&#187; comme par exemple : your.email.address+with+plus+symbol@domain.ltd qui pointera vers your.email.address@domain.ltd. Ce système de tag pas toujours reconnu (même par les plus grands) peux s’avérer très pratique. Une fois que j&#8217;ai eu vent de cette spécificité, j&#8217;ai immédiatement effectué un test sur mon serveur qui utilise PostFix + [...]]]></description>
			<content:encoded><![CDATA[<p>Peut-être connaissez-vous les adresses emails avec un symbole &laquo;&nbsp;+&nbsp;&raquo; comme par exemple : your.email.address+with+plus+symbol@domain.ltd qui pointera vers your.email.address@domain.ltd.</p>
<p>Ce système de tag <a href="http://getsatisfaction.com/facebook/topics/valid_email_addresses_with_plus_symbol_are_considered_invalid" target="_blank">pas toujours reconnu (même par les plus grands)</a> peux s’avérer très pratique.</p>
<p>Une fois que j&#8217;ai eu vent de cette spécificité, j&#8217;ai immédiatement effectué un test sur mon serveur qui utilise PostFix + MySQL pour gérer les adresses virtuelles.</p>
<p>Malheureusement, la requête SQL en charge de vérifier l’existence du destinataire recopie les tags et donc retourne NULL.</p>
<p>Une petite recherche plus tard, et je découvre le sésame :</p>
<blockquote><p>sudo postconf -e &laquo;&nbsp;recipient_delimiter = +&nbsp;&raquo;</p></blockquote>
<p>Un restart de PostFix et roulez jeunesse ! Ça marche ! <img src='http://blog.zedroot.org/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zedroot.org/2010/09/postfix-prise-en-charge-des-adresses-email-avec-des/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TextMate + Cucumber : Formater vos features pour plus de clarté</title>
		<link>http://blog.zedroot.org/2010/09/textmate-cucumber-formater-vos-features-pour-plus-de-clarte/</link>
		<comments>http://blog.zedroot.org/2010/09/textmate-cucumber-formater-vos-features-pour-plus-de-clarte/#comments</comments>
		<pubDate>Wed, 01 Sep 2010 16:08:23 +0000</pubDate>
		<dc:creator>zedtux</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[gherkin]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[textmate]]></category>

		<guid isPermaLink="false">http://blog.zedroot.org/?p=1476</guid>
		<description><![CDATA[Si vous utilisez des features en Gherkin[en] (avec cucumber par exemple) pour faire du Behavior Driven Development, voici une petite macro écrite par mon collègue Greg (avec qui je bosse en pair)  qui va corriger les espaces manquants qui permettent à TextMate de découper votre fichier en sections rétractables ! La macro n&#8217;est basée que [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.zedroot.org/files/2010/09/TextMate300-20081010-140320.png"><img class="aligncenter size-full wp-image-1477" src="http://blog.zedroot.org/files/2010/09/TextMate300-20081010-140320.png" alt="" width="300" height="300" /></a></p>
<p>Si vous utilisez des <strong>features</strong> en <a href="http://wiki.github.com/aslakhellesoy/cucumber/gherkin" target="_blank">Gherkin</a>[en] (avec <a href="http://cukes.info/" target="_blank">cucumber</a> par exemple) pour faire du <a href="https://secure.wikimedia.org/wikipedia/fr/wiki/Behavior_Driven_Development" target="_blank">Behavior Driven Development</a>, voici une petite macro écrite par mon collègue Greg (avec qui je bosse en pair)  qui va corriger les espaces manquants qui permettent à <a href="http://macromates.com/" target="_blank">TextMate</a> de découper votre fichier en sections rétractables !</p>
<p><span id="more-1476"></span><span style="text-decoration: line-through">La macro n&#8217;est basée que sur un seul cas pour le moment. Elle recherche les retours ligne doubles (entre deux scenarii) où ces fameux espaces sont manquant ou trop nombreux pour en mettre le bon nombre.</span></p>
<p><span style="text-decoration: line-through">Mais nous allons essayer d&#8217;améliorer cela encore <img src='http://blog.zedroot.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </span></p>
<h1>Avant</h1>
<p>Prenons l&#8217;exemple affiché sur le site de cucumber. Voici le résultat dans TextMate :</p>
<p><a href="http://blog.zedroot.org/files/2010/09/textmate_feature_avant.jpg"><img class="aligncenter size-full wp-image-1479" src="http://blog.zedroot.org/files/2010/09/textmate_feature_avant.jpg" alt="" width="496" height="404" /></a></p>
<p>Vous pourrez remarquer sur cette capture que TextMate veut découper le fichier en sections rétractables (ligne 7 et 13), mais il ne retrouve pas la fin de la section, et c&#8217;est donc inutilisable.</p>
<h1>Après</h1>
<p>Maintenant, utilisons la macro de Greg avec <strong>⌘ + ctrl + shift + F</strong>.</p>
<p>Et voici le résultat !</p>
<p><a href="http://blog.zedroot.org/files/2010/09/textmate_feature_apres.jpg"><img class="aligncenter size-full wp-image-1478" src="http://blog.zedroot.org/files/2010/09/textmate_feature_apres.jpg" alt="" width="496" height="404" /></a></p>
<p>Voilà ! TextMate retrouve la fin des sections, et les affiche (ligne 12 et 18).</p>
<p>Maintenant vous pouvez utiliser <strong>⌘ + 0</strong> pour replier ou déplier toutes les sections et ainsi obtenir :</p>
<p><a href="http://blog.zedroot.org/files/2010/09/textmate_feature_apres2.jpg"><img class="aligncenter size-full wp-image-1480" src="http://blog.zedroot.org/files/2010/09/textmate_feature_apres2.jpg" alt="" width="496" height="404" /></a></p>
<p>Dans une grande feature, ça devient vite intéressant pour éviter d&#8217;user votre molette et de chercher dans quel scénario vous travaillez ! <img src='http://blog.zedroot.org/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<h1>Téléchargement</h1>
<p>La macro est disponible dans mon dépôt Subversion à cette adresse : <a href="http://svn.zedroot.org/Guillaume%27s%20bundle.tmbundle/Macros/Format%20feature.tmMacro" target="_blank">http://svn.zedroot.org/Guillaume%27s%20bundle.tmbundle/Macros/Format%20feature.tmMacro</a></p>
<p>Pour l&#8217;installer, il vous suffit de la mettre dans un nouveau bundle, ou un existant, ou simplement de faire un <a href="http://svnbook.red-bean.com/en/1.0/re04.html" target="_blank">checkout</a> de mon bundle dans <strong>~/Library/Application\ Support/TextMate/Bundles/</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zedroot.org/2010/09/textmate-cucumber-formater-vos-features-pour-plus-de-clarte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bash : Voir le top ten des commandes lancées</title>
		<link>http://blog.zedroot.org/2010/08/bash-voir-le-top-ten-des-commandes-lancees/</link>
		<comments>http://blog.zedroot.org/2010/08/bash-voir-le-top-ten-des-commandes-lancees/#comments</comments>
		<pubDate>Tue, 31 Aug 2010 13:56:50 +0000</pubDate>
		<dc:creator>zedtux</dc:creator>
				<category><![CDATA[Information Divers]]></category>
		<category><![CDATA[bash]]></category>

		<guid isPermaLink="false">http://blog.zedroot.org/?p=1464</guid>
		<description><![CDATA[Voici une commande qui affiche dans l&#8217;ordre décroissant les commandes les plus utilisées dans tout votre historique : 1history &#124; awk '{print $2}' &#124; awk 'BEGIN {FS=&#34;&#124;&#34;}{print $1}' &#124; sort &#124; uniq -c &#124; sort -n &#124; tail &#124; sort -nr Sur la machine du boulot : 12345678910210 git 34 nano 28 reload 21 rake [...]]]></description>
			<content:encoded><![CDATA[<p>Voici une commande qui affiche dans l&#8217;ordre décroissant les commandes les plus utilisées dans tout votre historique :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">history | awk '{print $2}' | awk 'BEGIN {FS=&quot;|&quot;}{print $1}' | sort | uniq -c | sort -n | tail | sort -nr</div></td></tr></tbody></table></div>
<p>Sur la machine du boulot :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">210 git<br />
34 nano<br />
28 reload<br />
21 rake<br />
20 eprofile<br />
17 cucumber<br />
17 cd<br />
12 rgrep<br />
11 ls<br />
10 sudo</div></td></tr></tbody></table></div>
<p>Et chez moi :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">1 49283072<br />
297 sudo<br />
247 git<br />
217 bzr<br />
210 cd<br />
171 svn<br />
157 ls<br />
145 make<br />
99 quiestla/face.py<br />
70 ./tuxtremsplit.py</div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.zedroot.org/2010/08/bash-voir-le-top-ten-des-commandes-lancees/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Launchpad PPA : Publier une application ou bibliothèque</title>
		<link>http://blog.zedroot.org/2010/08/launchpad-ppa-publier-une-application-ou-bibliotheque/</link>
		<comments>http://blog.zedroot.org/2010/08/launchpad-ppa-publier-une-application-ou-bibliotheque/#comments</comments>
		<pubDate>Sat, 28 Aug 2010 12:00:08 +0000</pubDate>
		<dc:creator>zedtux</dc:creator>
				<category><![CDATA[Divertissement]]></category>
		<category><![CDATA[Développement]]></category>

		<guid isPermaLink="false">http://blog.zedroot.org/?p=1288</guid>
		<description><![CDATA[Finalement, j&#8217;ai enfin pris le taureau par les cornes et étudié comment créer un dépôt PPA que Launchpad.net (créé par Canonical, la société à l&#8217;origine d&#8217;Ubuntu) met à disposition de ses membres. Ça va me permettre de distribuer mes applications telles que TuXtremSplit très simplement, grâce à l&#8217;utilisation d&#8217;apt, et de add-apt-repository ! Point de départ [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.zedroot.org/wp-content/uploads/2009/11/deb.png"><img class="aligncenter size-full wp-image-992" src="http://blog.zedroot.org/wp-content/uploads/2009/11/deb.png" alt="" width="128" height="128" /></a></p>
<p>Finalement, j&#8217;ai enfin pris le taureau par les cornes et étudié comment créer un dépôt <strong>PPA</strong> que <a href="https://launchpad.net/" target="_blank">Launchpad.net</a> (créé par <a href="http://www.canonical.com/" target="_blank">Canonical</a>, la société à l&#8217;origine d&#8217;<a href="http://ubuntu-fr.org/" target="_blank">Ubuntu</a>) met à disposition de ses membres.</p>
<p>Ça va me permettre de distribuer mes applications telles que <a href="http://trac.zedroot.org/wiki/TuXtremSplitV2" target="_blank">TuXtremSplit</a> très simplement, grâce à l&#8217;utilisation d&#8217;<a href="http://fr.wikipedia.org/wiki/Advanced_Packaging_Tool" target="_blank">apt</a>, et de <a href="http://blog.zedroot.org/2009/11/add-apt-repository-ajouter-simplement-un-repo-ppa-a-apt/" target="_blank">add-apt-repository</a> !</p>
<p><span id="more-1288"></span></p>
<h2>Point de départ</h2>
<p>Disons que vous avez un compte Launchpad, activé, avec <a href="https://launchpad.net/codeofconduct" target="_blank">le code de conduite</a>[en] signé, et <a href="https://help.launchpad.net/YourAccount/CreatingAnSSHKeyPair" target="_blank">une clé GPG importée dans Launchpad</a> <img src='http://blog.zedroot.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Je prendrai mon programme <span style="text-decoration: underline">TuXtremSplit</span> pour l&#8217;exemple puisqu&#8217;il est divisé en 2 :</p>
<ul>
<li>Une librairie contenant le &laquo;&nbsp;moteur&nbsp;&raquo;</li>
<li>Un client console pour utiliser cette bibliothèque</li>
</ul>
<p>Donc il va falloir préparer la bibliothèque en premier, puis la console, sachant que cette console va donc dépendre de la bibliothèque.</p>
<h2>C&#8217;est parti !</h2>
<p>Bon, pour commencer, il faut donc les sources !</p>
<p>Ensuite, il va falloir créer un dossier de travail pour créer vos paquets, afin de l&#8217;envoyer vers un PPA.</p>
<h3>Création du plan de travail, récupération des sources</h3>
<p>Je vous propose donc de récupérer les sources dans un dossier <strong>developpements/</strong> et de créer un dossier <strong>empaquetage/</strong></p>
<p>Ensuite, placez vous dans le dossier <strong>developpements</strong><strong>/</strong> puis avec un VCS (<strong>V</strong>ersioning <strong>C</strong>ontrol <strong>S</strong>ystem[<a href="https://secure.wikimedia.org/wikipedia/fr/wiki/Gestion_de_versions" target="_blank">Wikipedia</a>]) tel que <a href="http://fr.wikipedia.org/wiki/Subversion_%28logiciel%29" target="_blank">subversion</a> récupérez les sources :</p>
<blockquote><p>svn co http://svn.zedroot.org/TuXtremSplit::v2/trunk/ tuxtremsplit</p></blockquote>
<p>Vous aurez un dossier <strong>tuxtremsplit/</strong> qui contient :</p>
<blockquote><p>console/</p>
<p>library/</p>
<p>modules/</p>
<p>&#8230;</p></blockquote>
<p>Puis des fichiers dont un <strong>CMakeLists.txt</strong> qui est mon fichier de configuration pour <a href="http://www.cmake.org/" target="_blank">CMake</a>.</p>
<h3>Préparation</h3>
<p>Nous allons préparer la zone d&#8217;empaquetage.</p>
<p>Nous allons créer un dossier <strong>tuxtremsplit/</strong> dans le dossier <strong>empaquetage</strong><strong>/</strong> puis nous allons, dans le dossier <strong>tuxtremsplit/</strong>, créer les dossiers <strong>console/</strong> et <strong>library/</strong> :</p>
<blockquote><p>mkdir -p empaquetage/tuxtremsplit/console/</p>
<p>mkdir empaquetage/tuxtremsplit/library/</p></blockquote>
<p>Donc nous allons séparer le code de la bibliothèque et celui de la console afin d&#8217;avoir deux paquets différents.</p>
<p>Maintenant il nous reste à placer le code dans chaque dossier, afin de pouvoir passer à la suite ! <img src='http://blog.zedroot.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Pour ce faire, vous n&#8217;avez qu&#8217;à copier <strong>developpements/tuxtremsplit</strong><strong>/library/</strong> dans <strong>empaquetage/tuxtremsplit/library/</strong></p>
<blockquote><p>cp -R developpements/tuxtremsplit/library/ empaquetage/tuxtremsplit/library/</p></blockquote>
<p>Rassurez vous, ce n&#8217;est pas une erreur de ma part d&#8217;avoir copié le dossier entier, car nous allons le renommer !</p>
<p>En effet, l&#8217;outil que nous allons utiliser bientôt a besoin d&#8217;être lancé dans un dossier nommé comme le sera le paquet, c&#8217;est-à-dire avec le nom du programme, un trait d&#8217;union, puis la version:</p>
<blockquote><p>mv empaquetage/tuxtremsplit/library/library/ empaquetage/tuxtremsplit/library/libxtm-1.0.1.1</p></blockquote>
<p>Donc libxtm pour la bibliothèque, puis 1.0.1 pour la version. Le dernier 1 de la fin représente la version du paquet. Vous aurez très certainement à recommencer vos envois&#8230; et vous allez comprend pourquoi à ce moment là ! <img src='http://blog.zedroot.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Faisons pareil pour la console :</p>
<blockquote><p>cp -R developpements/tuxtremsplit/console/ empaquetage/tuxtremsplit/console/</p>
<p>mv empaquetage/tuxtremsplit/console/console/ empaquetage/tuxtremsplit/console/tuxtremsplit-2.0.1.1</p></blockquote>
<p>Ici pareil, le dossier <strong>console/</strong> est renommé en tuxtremsplit pour le nom du programme, puis sa version 2.0.1, puis la version du paquet.</p>
<h3>Nettoyage</h3>
<p>Avant de passer à l&#8217;action, il reste à nettoyer les sources. En effet, Subversion crée des dossiers <strong>.svn/</strong> qui n&#8217;ont rien à faire dans nos paquets !</p>
<blockquote><p>find empaquetage/tuxtremsplit/ -name &#8216;.svn&#8217; -type d -exec rm -rf {} \;</p></blockquote>
<h3>Créer le fichier source compressé</h3>
<p>Créer un paquet debian veux bien dire empaqueter un code source téléchargé quelque part, pour le mettre dans un trentenaire de type debian.</p>
<p>Il faudra donc donner une archive de ces sources.</p>
<blockquote><p>tar -czf empaquetage/tuxtremsplit/library/libxtm-1.0.1.1.tar.gz empaquetage/tuxtremsplit/library/libxtm-1.0.1.1/</p></blockquote>
<blockquote><p>tar -czf empaquetage/tuxtremsplit/console/tuxtremsplit-2.0.1.1.tar.gz empaquetage/tuxtremsplit/console/tuxtremsplit-2.0.1.1/</p></blockquote>
<h3>Identification</h3>
<p>Nous allons finir la préparation de notre plan de travail par notre identification au prêt de Launchpad pour la création du paquet !</p>
<p>Il existe deux variables d&#8217;environnements qui contiennent votre nom/pseudo et votre email. Généralement, ont met ça dans le fichier <strong>~/.bashrc</strong> comme ceci (remplacez pour vous) :</p>
<blockquote><p>DEBEMAIL=adresse.email.de.votre.compte.launchpad@exemple.org<br />
DEBFULLNAME=&#8217;Launchpad PPA for Nom Prénom&#8217;</p></blockquote>
<h2>dh_make</h2>
<p>Les choses sérieuses commencent ! <img src='http://blog.zedroot.org/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p><em>dh_make</em> est une commande qui va vous créer un répertoire <strong>debian/</strong> dans les sources ainsi qu&#8217;un tas de fichiers (dont une série que l&#8217;on supprimera), qui sont indispensables pour créer un paquet debian !</p>
<p>Commençons par installer <em>dh_make</em> ! <img src='http://blog.zedroot.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<blockquote><p>sudo apt-get install dh-make</p></blockquote>
<p>Maintenant ouvrez un terminal dans le répertoire <strong>empaquetage/tuxtremsplit/library/</strong><strong>libxtm-1.0.1.1/</strong> et lancez cette commande :</p>
<blockquote><p>$ dh_make -l -f ../libxtm-1.0.1.1.tar.gz</p>
<p>Maintainer name : Launchpad PPA for Nom Prénom<br />
Email-Address   : adresse.email.de.votre.compte.launchpad@exemple.org<br />
Date            : Thu, 28 Aug 2010 20:29:00 +0200<br />
Package Name    : libxtm<br />
Version         : 1.0.1.1<br />
License         : blank<br />
Using dpatch    : no<br />
Using quilt     : no<br />
Type of Package : Library<br />
Hit &lt;enter&gt; to confirm:</p></blockquote>
<p>Pressez &laquo;&nbsp;Entrée&nbsp;&raquo; pour valider. Maintenant le dossier debian/ est apparu, et contient un tas de fichiers.</p>
<h2>Préparation des fichiers de paquet</h2>
<h3>Nettoyage</h3>
<p>Pour commencer, il n&#8217;y a que quelques fichiers qui nous intéressent. Le reste, on le vire :</p>
<blockquote><p>rm debian/*.ex; rm debian/*.EX</p></blockquote>
<h3>changelog</h3>
<p>Le fichier changelog est très important et respecte aussi une syntaxe très stricte. (Nombre d&#8217;espaces import etc&#8230;). Pour nous faciliter la tâche, nous allons utiliser la commande dch qui permet d&#8217;éditer simplement ce fichier changelog.</p>
<p>Cette commande n&#8217;est pas encore installée, alors commençons par ça :</p>
<blockquote><p>sudo apt-get install devscripts</p></blockquote>
<p>Comme c&#8217;est la première création du paquet, et que dch ajoute au fichier changelog, et ne remplace pas l&#8217;existant, nous allons effacer le fichier changelog, et le re-créer :</p>
<blockquote><p>rm debian/changelog</p>
<p>dch &#8211;create &#8211;package libxtm -v 1.0.1.1-1 &laquo;&nbsp;Initial release&nbsp;&raquo;</p></blockquote>
<p>Pour en finir avec le fichier de log, il faut initialiser la release avec :</p>
<blockquote><p>dch -r</p></blockquote>
<p>Attention à bien sauvegarder ! Vous devez trouver le nom de la release d&#8217;Ubuntu dans le fichier de log.</p>
<p>Maintenant, quand vous voudrez ajouter une entrée au fichier, vous n&#8217;aurez qu&#8217;à faire :</p>
<blockquote><p>dch -i &laquo;&nbsp;Le nouveau log à ajouter&nbsp;&raquo;</p></blockquote>
<p>C&#8217;est tout ! <img src='http://blog.zedroot.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>control</h3>
<p>Le fichier control est le fichier principal car il contient toutes les infos importantes sur le paquet comme les dépendances, la description, la version, etc. Ouvrez-le avec votre éditeur de fichier texte préféré et en route !</p>
<p>Commencons par le plus dur : <strong>Build-Depends</strong>. Ce champ contient donc les dépendances qui seront utilisées pour construire votre application.<br />
Pour TuXtremSplit vous devez mettre :</p>
<blockquote><p>Build-Depends: debhelper (&gt;= 7), cmake, libmagic-dev, libglibmm-2.4-dev, libglademm-2.4-dev, libgtkmm-2.4-dev, libboost-regex-dev, libssl-dev</p></blockquote>
<p>Je vous mets directement le fichier complet, ça sera plus simple :</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:600px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Source: libxtm<br />
Priority: extra<br />
Maintainer: Launchpad PPA <span style="color: #000000; font-weight: bold;">for</span> Guillaume HAIN <span style="color: #000000; font-weight: bold;">&amp;</span>lt;zedtux<span style="color: #000000; font-weight: bold;">@</span>zedroot.org<span style="color: #000000; font-weight: bold;">&amp;</span>gt;<br />
Build-Depends: debhelper <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">&amp;</span>gt;= 7.0.50~<span style="color: #7a0874; font-weight: bold;">&#41;</span>, cmake, libmagic-dev, libglibmm-<span style="color: #000000;">2.4</span>-dev, libglademm-<span style="color: #000000;">2.4</span>-dev, libgtkmm-<span style="color: #000000;">2.4</span>-dev, libboost-regex-dev, libssl-dev<br />
Standards-Version: 3.9.1<br />
Section: libs<br />
Homepage: http:<span style="color: #000000; font-weight: bold;">//</span>trac.zedroot.org<span style="color: #000000; font-weight: bold;">/</span>wiki<span style="color: #000000; font-weight: bold;">/</span>TuXtremSplitV2<br />
<br />
Package: libxtm-dev<br />
Section: libdevel<br />
Architecture: any<br />
Depends: libxtm <span style="color: #7a0874; font-weight: bold;">&#40;</span>= <span style="color: #800000;">${binary:Version}</span>, <span style="color: #800000;">${misc:Depends}</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
Description: TuXtremSplit’s XTM <span style="color: #c20cb9; font-weight: bold;">file</span> managment library <span style="color: #7a0874; font-weight: bold;">&#40;</span>dev<span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
Development files.<br />
<br />
Package: libxtm<br />
Section: libs<br />
Architecture: any<br />
Depends: <span style="color: #800000;">${shlibs:Depends}</span>, <span style="color: #800000;">${misc:Depends}</span><br />
Description: TuXtremSplit’s XTM <span style="color: #c20cb9; font-weight: bold;">file</span> managment library<br />
Manage the XTM <span style="color: #c20cb9; font-weight: bold;">file</span> format <span style="color: #7a0874; font-weight: bold;">&#40;</span> from Xtremsplit windows application <span style="color: #7a0874; font-weight: bold;">&#41;</span></div></td></tr></tbody></table></div>
<h3>copyright</h3>
<p>Fichier important pour ne pas froisser un développeur ! <img src='http://blog.zedroot.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Voici le mien :</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:600px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">This work was packaged <span style="color: #000000; font-weight: bold;">for</span> Debian by:<br />
<br />
Launchpad PPA <span style="color: #000000; font-weight: bold;">for</span> Guillaume HAIN &nbsp;on Sat, <span style="color: #000000;">17</span> Apr <span style="color: #000000;">2010</span> 02:<span style="color: #000000;">41</span>:<span style="color: #000000;">59</span> +0200<br />
<br />
It was downloaded from:<br />
<br />
http:<span style="color: #000000; font-weight: bold;">//</span>trac.zedroot.org<span style="color: #000000; font-weight: bold;">/</span>wiki<span style="color: #000000; font-weight: bold;">/</span>TuXtremSplitV2<br />
<br />
Upstream Author<span style="color: #7a0874; font-weight: bold;">&#40;</span>s<span style="color: #7a0874; font-weight: bold;">&#41;</span>:<br />
<br />
zedtux<br />
<br />
Copyright:<br />
<br />
GPLv3 <span style="color: #7a0874; font-weight: bold;">&#91;</span>see http:<span style="color: #000000; font-weight: bold;">//</span>www.gnu.org<span style="color: #000000; font-weight: bold;">/</span>licenses<span style="color: #000000; font-weight: bold;">/</span>gpl-<span style="color: #000000;">3.0</span>.txt<span style="color: #7a0874; font-weight: bold;">&#93;</span><br />
<br />
License:<br />
<br />
This program is <span style="color: #c20cb9; font-weight: bold;">free</span> software: you can redistribute it and<span style="color: #000000; font-weight: bold;">/</span>or modify<br />
it under the terms of the GNU General Public License <span style="color: #c20cb9; font-weight: bold;">as</span> published by<br />
the Free Software Foundation, either version <span style="color: #000000;">3</span> of the License, or<br />
<span style="color: #7a0874; font-weight: bold;">&#40;</span>at your option<span style="color: #7a0874; font-weight: bold;">&#41;</span> any later version.<br />
<br />
This package is distributed <span style="color: #000000; font-weight: bold;">in</span> the hope that it will be useful,<br />
but WITHOUT ANY WARRANTY; without even the implied warranty of<br />
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &nbsp;See the<br />
GNU General Public License <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #c20cb9; font-weight: bold;">more</span> details.<br />
<br />
You should have received a copy of the GNU General Public License<br />
along with this program. &nbsp;If not, see .<br />
<br />
On Debian systems, the <span style="color: #7a0874; font-weight: bold;">complete</span> text of the GNU General<br />
Public License version <span style="color: #000000;">3</span> can be found <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">`/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>common-licenses<span style="color: #000000; font-weight: bold;">/</span>GPL-<span style="color: #000000;">3</span><span style="color: #ff0000;">'.<br />
<br />
The Debian packaging is:<br />
<br />
Copyright (C) 2010 Launchpad PPA for Guillaume HAIN<br />
<br />
# Please chose a license for your packaging work. If the program you package<br />
# uses a mainstream license, using the same license is the safest choice.<br />
# Please avoid to pick license terms that are more restrictive than the<br />
# packaged work, as it may make Debian'</span>s contributions unacceptable upstream.<br />
<span style="color: #666666; font-style: italic;"># If you just want it to be GPL version 3, leave the following line in.</span><br />
<br />
and is licensed under the GPL version <span style="color: #000000;">3</span>, see above.<br />
<br />
<span style="color: #666666; font-style: italic;"># Please also look if there are files or directories which have a</span><br />
<span style="color: #666666; font-style: italic;"># different copyright/license attached and list them here.</span></div></td></tr></tbody></table></div>
<h3>libxtm.install</h3>
<p>Ce fichier précise comment installer le fichier de bibliothèque. Vous devez donc y mettre :</p>
<blockquote><p>usr/lib/lib*.so.*</p></blockquote>
<p>Pour prendre en compte les fichiers lib*.so.* (donc libxtm.so.0 par exemple)</p>
<h3>libxtm-dev.install</h3>
<p>Comme le précédent, sauf qu&#8217;il contiendra les fichiers d&#8217;en-tête. Il faut y mettre :</p>
<blockquote><p>usr/include/*</p>
<p>usr/lib/*.so</p></blockquote>
<h2>Construction du paquet</h2>
<p>Maintenant nous sommes prêts pour créer notre paquet deb ! (Toujours dans le dossier <strong>empaquetage/tuxtremsplit/library/libxtm-1.0.1.1/</strong>)</p>
<blockquote><p>debuild -S -sa</p></blockquote>
<p>A la fin de cette étape, il vous sera demandé 2 fois de suite la passphrase de votre clé GPG pour signer les paquets (libxm et libxtm-dev).</p>
<h2>Envoie au PPA</h2>
<p>Voici la dernière étape ! Envoyer tout ça au PPA pour qu&#8217;il lance la construction et pour qu&#8217;il mette en ligne votre paquet !</p>
<p>Pour ce faire, il faut utiliser la commande <strong>dput</strong>.</p>
<p>Dans le dossier <strong>empaquetage/tuxtremsplit/library/</strong> :</p>
<blockquote><p>dput ppa:zedtux/tuxtremsplit libxtm_1.0.1.1-1_source.changes</p></blockquote>
<p>Vous trouverez pour votre PPA la commande à exécuter dans l&#8217;interface de Launchpad.</p>
<p>Vous allez recevoir un email dans quelques instants, vous indiquant si votre demande est acceptée ou pas, et en vous expliquant pourquoi.</p>
<p>Il ne vous reste plus qu&#8217;a surveiller la construction et voir en cas de problèmes le pourquoi et le fixer ! <img src='http://blog.zedroot.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zedroot.org/2010/08/launchpad-ppa-publier-une-application-ou-bibliotheque/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Développer en agile</title>
		<link>http://blog.zedroot.org/2010/08/developper-en-agile/</link>
		<comments>http://blog.zedroot.org/2010/08/developper-en-agile/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 18:59:04 +0000</pubDate>
		<dc:creator>zedtux</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[méthode agile]]></category>
		<category><![CDATA[pair programming]]></category>

		<guid isPermaLink="false">http://blog.zedroot.org/?p=1419</guid>
		<description><![CDATA[Ce mois-ci au boulot, il y a eu quelques petits changements dans les méthodes de travail : L&#8217;intégration de plus de méthodes Agiles. Les méthodes avant Le Behavior Driven Development Le Behavior Driven Development ou BDD, est la première méthode Agile que j&#8217;ai apprise. Cette méthode Agile est basée sur le Test Driven Development ou [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.zedroot.org/files/2010/08/AgileDilbert.jpg"><img class="aligncenter size-full wp-image-1420" src="http://blog.zedroot.org/files/2010/08/AgileDilbert.jpg" alt="" width="604" height="213" /></a></p>
<p>Ce mois-ci au boulot, il y a eu quelques petits changements dans les méthodes de travail : L&#8217;intégration de plus de <a href="http://fr.wikipedia.org/wiki/M%C3%A9thode_agile" target="_blank">méthodes Agiles</a>.</p>
<h1><span id="more-1419"></span>Les méthodes avant</h1>
<h3>Le Behavior Driven Development</h3>
<p>Le <a href="http://fr.wikipedia.org/wiki/Behavior_Driven_Development" target="_blank">Behavior Driven Development </a>ou <strong>BDD</strong>, est la première méthode Agile que j&#8217;ai apprise.</p>
<p>Cette méthode Agile est basée sur le <a href="http://fr.wikipedia.org/wiki/Test_Driven_Development" target="_blank">Test Driven Development </a>ou <strong>TDD</strong>, qui, en résumé, consiste en l&#8217;écriture de tests avant celle du code, sauf qu&#8217;elle ajoute une couche supplémentaire aux tests.</p>
<p>Cette nouvelle couche est, elle, écrite dans la langue maternelle, normalement, ou une langue commune aux différents acteurs implémentant la nouvelle fonctionnalité. Le principe théorique est que tout le monde participe, c&#8217;est-à-dire le demandeur de la nouvelle fonctionnalité, le gestionnaire de projets, les développeurs, les testeurs, &#8230;<br />
L&#8217;idée est que le demandeur de la nouvelle fonctionnalité et le gestionnaire de projet écrivent ensemble ce que l&#8217;on appelle une <strong>feature</strong>, contenant des scenarii décrivant la nouvelle fonctionnalité, qui eux-mêmes contiennent les différentes étapes (<strong>steps</strong>) que le demandeur de la nouvelle fonctionnalité effectue pour aboutir à sont besoin. (<em>Quand je clique sur &#8230;  je dois voire un message &#8230;</em>)</p>
<p>Une fois cette <strong>feature</strong> prête, il ne reste qu&#8217;à utiliser un programme prévu à cet effet, comme par exemple <a href="http://cukes.info/" target="_blank">cucumber</a>, ou encore <a href="http://lettuce.it/index.html" target="_blank">lettuce</a>, qui vont passer en vert les étapes valides, et en rouge les étapes ne fonctionnant pas. Du coup, votre mission sera de tout faire passer en vert. Donc comme pour le <strong>TDD</strong>, il faut écrire les étapes des scenarii avant de faire le code.</p>
<p>Cette méthode assure un niveau de qualité encore supérieur au <strong>TDD</strong>, et étant exécuté par le <a href="http://fr.wikipedia.org/wiki/Int%C3%A9gration_continue" target="_blank">serveur d&#8217;intégration continue</a> à chaque commit, vous saurez très vite si vous venez de régresser dans votre code ! <img src='http://blog.zedroot.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h1>Les méthodes après</h1>
<h3>La méthode kanban</h3>
<p><a href="http://fr.wikipedia.org/wiki/Kanban" target="_blank">La méthode kanban</a> est ultra simple, mais ultra efficace <span style="text-decoration: line-through">surtout si elle est bien respectée </span>!</p>
<p>Je ne vais pas donner d&#8217;explications, car <a href="http://www.openagile.net/2009/10/07/un-jour-au-pays-de-kanban/" target="_blank">cet article de ce blog le fait extrêmement bien (Merci et bravo à son auteur !)</a></p>
<p>Maintenant nous avons une vue claire de ce qui est à faire, ce qui se fait et par qui.<br />
Nous voyons aussi où les demandes coincent&#8230;</p>
<p>Bref, une super méthode, même si elle n&#8217;est pas encore complètement mise en place&#8230;</p>
<h3>Le pair programming</h3>
<p>La <a href="http://fr.wikipedia.org/wiki/Programmation_en_bin%C3%B4me" target="_blank">programmation en binôme</a> est quelque chose que j&#8217;attendais depuis un moment ! C&#8217;est le changement le plus important de ce mois-ci !</p>
<p>Un collègue de boulot a déménagé à côté de moi, et nous pratiquons cette méthode seulement depuis 2 semaines, mais le résultat et les bienfaits apparaissent déjà ! Nous travaillons donc sur le même ordinateur en collaboration. Cette méthode n&#8217;a (à mes yeux) que des avantages pour le moment :</p>
<ul>
<li><strong>Concentration maximale :</strong> On passe moins de temps à glander, ou à s&#8217;auto-distraire et donc plus à coder. L&#8217;un l&#8217;autre ont se motive à bosser.</li>
<li><strong>Communication plus intense :</strong> Nous discutons de comment corriger/implémenter telle ou telle chose de la meilleur façon possible.</li>
<li><strong>Apprentissage :</strong> L&#8217;un apprend à l&#8217;autre et vice versa.</li>
</ul>
<h1>Conclusion</h1>
<p>Tout n&#8217;est pas fait dans les règles de l&#8217;art, certes, mais ces changements sont assez motivants, même si au final, pour le moment, le boulot, lui, reste trop monotone.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zedroot.org/2010/08/developper-en-agile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Svn Stash: Contribuer à un projet en lecture seule</title>
		<link>http://blog.zedroot.org/2010/08/svn-stash-contribuer-a-un-projet-en-lecture-seule/</link>
		<comments>http://blog.zedroot.org/2010/08/svn-stash-contribuer-a-un-projet-en-lecture-seule/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 16:25:04 +0000</pubDate>
		<dc:creator>zedtux</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[subversion]]></category>

		<guid isPermaLink="false">http://blog.zedroot.org/?p=1398</guid>
		<description><![CDATA[Je viens d&#8217;être confronté au problème suivant: Je désire contribuer à un projet qui utilise un dépôt subversion en lecture seule. Mes modifications ne se font pas en 1 journée. Je ne doit pas perdre mes modifications. Je doit avoir le tout dernier code au fur et à mesure. Comment faire sans pouvoir faire de [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.zedroot.org/files/2010/08/logo_svn.png"><img class="aligncenter size-full wp-image-1399" src="http://blog.zedroot.org/files/2010/08/logo_svn.png" alt="" width="384" height="332" /></a></p>
<h3>Je viens d&#8217;être confronté au problème suivant:</h3>
<ul>
<li>Je désire contribuer à un projet qui utilise un dépôt subversion en lecture seule.</li>
<li>Mes modifications ne se font pas en 1 journée.</li>
<li>Je ne doit pas perdre mes modifications.</li>
<li>Je doit avoir le tout dernier code au fur et à mesure.</li>
</ul>
<p>Comment faire sans pouvoir faire de commit ?</p>
<h1><span id="more-1398"></span>Un script bash qui se charge de tout !</h1>
<p>Encore une fois, un bon développeur est un développeur <span style="text-decoration: line-through">mort</span> feignant !</p>
<p>Voici donc un script bash que je vient décrire qui créer un patch des modifications courante du dépôt subversion, puis efface tout les changements afin de lancer un <strong>svn update</strong> pour avoir les derniers codes sources. Il ne reste plus qu&#8217;à patcher les sources avec le patch.</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:600px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/bash</span><br />
<span style="color: #666666; font-style: italic;">#</span><br />
<span style="color: #666666; font-style: italic;"># SVN Stash will create a patch of the svn diff in the current directory,</span><br />
<span style="color: #666666; font-style: italic;"># revert all changes, update the working directory, finally apply back the patch.</span><br />
<span style="color: #666666; font-style: italic;">#</span><br />
<span style="color: #666666; font-style: italic;"># Written by zedtux &amp;lt;zedtux@zedroot.org&amp;gt;</span><br />
<span style="color: #666666; font-style: italic;">#</span><br />
<br />
<span style="color: #000000; font-weight: bold;">function</span> to_term<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
<span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;[SVN Stash] $1&quot;</span><br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">function</span> get_not_managed_files<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
<span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
<span style="color: #007800;">FILES_TO_ADD</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">svn</span> st <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #ff0000;">&quot;?&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-d</span> <span style="color: #ff0000;">&quot; &quot;</span> <span style="color: #660033;">-f</span> <span style="color: #000000;">8</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">tr</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #ff0000;">&quot; &quot;</span><span style="color: #000000; font-weight: bold;">`</span><br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">function</span> svn_add_not_managed_files<br />
<span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
get_not_managed_files<br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$FILES_TO_ADD</span>&quot;</span> <span style="color: #000000; font-weight: bold;">!</span>= <span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span><br />
to_term <span style="color: #ff0000;">&quot;Adding not managed files to subversion...&quot;</span><br />
<span style="color: #c20cb9; font-weight: bold;">svn</span> add <span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$FILES_TO_ADD</span>&quot;</span><span style="color: #000000; font-weight: bold;">`</span><br />
<span style="color: #000000; font-weight: bold;">else</span><br />
to_term <span style="color: #ff0000;">&quot;No not managed files found: Nothing todo =)&quot;</span><br />
<span style="color: #000000; font-weight: bold;">fi</span><br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">function</span> remove_not_managed_files<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
<span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
get_not_managed_files<br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$FILES_TO_ADD</span>&quot;</span> <span style="color: #000000; font-weight: bold;">!</span>= <span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span><br />
to_term <span style="color: #ff0000;">&quot;Removing not managed files to subversion...&quot;</span><br />
<span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$FILES_TO_ADD</span>&quot;</span><span style="color: #000000; font-weight: bold;">`</span><br />
<span style="color: #000000; font-weight: bold;">else</span><br />
to_term <span style="color: #ff0000;">&quot;No not managed files found: Nothing todo =)&quot;</span><br />
<span style="color: #000000; font-weight: bold;">fi</span><br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
<br />
<span style="color: #007800;">WORKING_PATH</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">pwd</span><span style="color: #000000; font-weight: bold;">`</span><br />
<span style="color: #7a0874; font-weight: bold;">cd</span> ..<br />
<span style="color: #007800;">PATCH_PATH</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">pwd</span><span style="color: #000000; font-weight: bold;">`</span><br />
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$WORKING_PATH</span>&quot;</span><br />
<br />
svn_add_not_managed_files<br />
<br />
to_term <span style="color: #ff0000;">&quot;Creating a patch of the current repository to <span style="color: #007800;">$PATCH_PATH</span>/.svn_stash_patch...&quot;</span><br />
<span style="color: #c20cb9; font-weight: bold;">svn</span> <span style="color: #c20cb9; font-weight: bold;">diff</span> <span style="color: #000000; font-weight: bold;">&amp;</span>gt; <span style="color: #ff0000;">&quot;<span style="color: #007800;">$PATCH_PATH</span>/.svn_stash_patch&quot;</span><br />
<br />
to_term <span style="color: #ff0000;">&quot;Cleaning working directory...&quot;</span><br />
<span style="color: #c20cb9; font-weight: bold;">svn</span> revert <span style="color: #660033;">-R</span> .<br />
<br />
remove_not_managed_files<br />
<br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;&quot;</span><br />
to_term <span style="color: #ff0000;">&quot;Updating working directory to the latest version...&quot;</span><br />
<span style="color: #c20cb9; font-weight: bold;">svn</span> up<br />
<br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;&quot;</span><br />
to_term <span style="color: #ff0000;">&quot;Patching code...&quot;</span><br />
<span style="color: #c20cb9; font-weight: bold;">patch</span> <span style="color: #660033;">-p0</span> <span style="color: #000000; font-weight: bold;">&amp;</span>lt; <span style="color: #ff0000;">&quot;<span style="color: #007800;">$PATCH_PATH</span>/.svn_stash_patch&quot;</span><br />
<br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;&quot;</span><br />
to_term <span style="color: #ff0000;">&quot;Everythings done !&quot;</span><br />
to_term <span style="color: #ff0000;">&quot;In case of error, use the patch from <span style="color: #007800;">$PATCH_PATH</span>/.svn_stash_patch&quot;</span></div></td></tr></tbody></table></div>
<p>Comme c&#8217;est un peu pourris les plugins pour afficher du code &#8230; je vous ai mis ca sur mon dépôt SVN : <a href="http://svn.zedroot.org/ZedUtils/trunk/svn_stash">http://svn.zedroot.org/ZedUtils/trunk/svn_stash</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zedroot.org/2010/08/svn-stash-contribuer-a-un-projet-en-lecture-seule/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TuXtremSplit v3: Premier apercu</title>
		<link>http://blog.zedroot.org/2010/08/tuxtremsplit-v3-premier-apercu/</link>
		<comments>http://blog.zedroot.org/2010/08/tuxtremsplit-v3-premier-apercu/#comments</comments>
		<pubDate>Wed, 11 Aug 2010 21:25:37 +0000</pubDate>
		<dc:creator>zedtux</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[tuxtremsplit]]></category>

		<guid isPermaLink="false">http://blog.zedroot.org/?p=1391</guid>
		<description><![CDATA[Voici un premier aperçu de la fenêtre dite d&#8217;action, qui affiche ce qui se passe. Ici l&#8217;idée est que lorsque vous double-cliquerez sur un fichier .001.xtm (valide), TuXtremSplit se lancera automatiquement, affichant cette fenêtre. J&#8217;ai trouvé bonne l&#8217;idée de la petite phrase détaillant le fichier contenu dans les fichiers XTM, sa taille etc&#8230; Seule bémol pour le moment (je réfléchis à une [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.zedroot.org/files/2010/08/tuxtremsplit.v3.0.actionwindow.png"><img class="aligncenter size-full wp-image-1392" src="http://blog.zedroot.org/files/2010/08/tuxtremsplit.v3.0.actionwindow.png" alt="" width="407" height="207" /></a></p>
<p>Voici un premier aperçu de la fenêtre dite d&#8217;action, qui affiche ce qui se passe.</p>
<p><span id="more-1391"></span></p>
<p>Ici l&#8217;idée est que lorsque vous double-cliquerez sur un fichier .001.xtm (valide), TuXtremSplit se lancera automatiquement, affichant cette fenêtre.<br />
J&#8217;ai trouvé bonne l&#8217;idée de la petite phrase détaillant le fichier contenu dans les fichiers XTM, sa taille etc&#8230;</p>
<p>Seule bémol pour le moment (je réfléchis à une solution), les fichiers auto-extractible généré par Xtremsplit sont reconnut comme application Windows à exécuter avec Wine. Cela dis, si le système d&#8217;identification des fichiers de <a href="http://freedesktop.org" target="_blank">freedesktop.org</a> est assez complet, peut-être il sera possible de détecter l&#8217;entête d&#8217;un XTM, et du coup, l&#8217;associer à TuXtremSplit.<br />
Autre problème: Pour une raison inconnu, le développeur d&#8217;<a href="http://xtremsplit.fr/" target="_blank">Xtremsplit</a> utilise <a href="http://upx.sourceforge.net" target="_blank">UPX (Ultimate Packer for eXecutables)</a> pour empaqueter le premier fichier .001.exe, du coup l&#8217;entête est offusqué&#8230; Donc à voire comment gérer cette drôle de situation.</p>
<p><strong>Si vous avez des propositions, idées, suggestions, n&#8217;hésitez pas, je suis ouvert !</strong></p>
<p>P.S: L&#8217;étoile ici est juste là temporairement, le temps d&#8217;essayer de trouver une icone plus adapté.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zedroot.org/2010/08/tuxtremsplit-v3-premier-apercu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TuXtremSplit v3 est en route !</title>
		<link>http://blog.zedroot.org/2010/08/tuxtremsplit-v3-est-en-route/</link>
		<comments>http://blog.zedroot.org/2010/08/tuxtremsplit-v3-est-en-route/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 12:06:44 +0000</pubDate>
		<dc:creator>zedtux</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[projet personnel]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[tuxtremsplit]]></category>

		<guid isPermaLink="false">http://blog.zedroot.org/?p=1383</guid>
		<description><![CDATA[Vous devez vous dire &#171;&#160;Encore une nouvelle version alors que la 2.x n&#8217;est pas fini ??&#160;&#187; En effet, j&#8217;ai commencé la fin de semaine dernière la ré-écriture de TuXtremSplit[sur Launchpad], mon clone d&#8217;Xtremsplit ! Pourquoi une nouvelle version ? Pour ceux qui ont suivi le fil de discussion du forum ubuntu-fr.org, ou qui me parle [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.zedroot.org/files/2010/08/python.png"><img class="aligncenter size-full wp-image-1384" src="http://blog.zedroot.org/files/2010/08/python.png" alt="" width="267" height="235" /></a></p>
<p>Vous devez vous dire &laquo;&nbsp;Encore une nouvelle version alors que la 2.x n&#8217;est pas fini ??&nbsp;&raquo; <img src='http://blog.zedroot.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>En effet, j&#8217;ai commencé la fin de semaine dernière la ré-écriture de <a href="http://tuxtremsplit.zedroot.org/">TuXtremSplit</a>[<a href="http://launchpad.net/tuxtremsplit">sur Launchpad</a>], mon clone d&#8217;<a href="http://xtremsplit.fr/" target="_blank">Xtremsplit</a> !</p>
<h2><span id="more-1383"></span>Pourquoi une nouvelle version ?</h2>
<p>Pour ceux qui ont suivi <a href="http://forum.ubuntu-fr.org/viewtopic.php?id=34185">le fil de discussion du forum ubuntu-fr.org</a>, ou qui me parle par messagerie instantané, vous savez que ce projet est un projet d&#8217;apprentissage pour moi.</p>
<p>C&#8217;est à dire que j’apprends les langages de programmation grâce à ce projet.<br />
La version 1 était en C, la version 2 en C++ et maintenant la version 3 en Python.</p>
<p>Ce qui explique pourquoi le projet évolue aussi bizarrement.</p>
<h2>Pourquoi Python ?</h2>
<p>La première raison est que Python est très populaire sur ma distribution préféré: <strong>Ubuntu</strong>.<br />
Plusieurs sessions sur IRC à suivre des présentations de Python et ton son petit monde, des tas d&#8217;applications en Python etc &#8230;</p>
<p>La second raison est que actuellement, au boulot, je bosse avec du <a href="http://www.ruby-lang.org/" target="_blank">Ruby</a>, qui est un langage très ressemblant au Python.<br />
(Cela dis, je préfère Ruby à Python.)</p>
<h2>Ce qui est prévue au programme ?</h2>
<p>Une fois tout le code écrit pour réaliser les deux taches principale du programme, qui sont joindre et couper des fichiers, je vais forcer l&#8217;accent sur l&#8217;intégration dans GNOME.</p>
<ul>
<li>J&#8217;ai très récemment lu le <a href="http://library.gnome.org/devel/hig-book/stable/" target="_blank"><strong>GNOME Human Interface  Guidelines</strong></a>, que je vais essayer de suivre au maximum.</li>
<li>J&#8217;imagine une intégration tel, qui vous permettent, en un double clique sur un fichier <em>xxxxxxxxxxx.001.xtm</em> de lancer le collage des fichiers.</li>
<li>Je vais aussi reprendre là où j&#8217;en étais avec l&#8217;intégration dans Nautilus (Icône spécial pour le fichier 001.xtm)</li>
</ul>
<p>Bref,  j’espère produire un outil peaufiné dans ses moindre détails !<br />
En espérant aussi avoir du retour de votre part sur ce qui manquerai, serai à changer, etc &#8230; <img src='http://blog.zedroot.org/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zedroot.org/2010/08/tuxtremsplit-v3-est-en-route/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
