<?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>Libre Experience</title>
	<atom:link href="http://www.libre-experience.org/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.libre-experience.org</link>
	<description>Bloc-notes sur les logiciels libres</description>
	<lastBuildDate>Wed, 16 May 2012 17:03:34 +0000</lastBuildDate>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Liquibase : un gestionnaire de changements de base de données</title>
		<link>http://www.libre-experience.org/index.php/2012/02/10/liquibase-un-gestionnaire-de-changement-de-base-de-donnees/</link>
		<comments>http://www.libre-experience.org/index.php/2012/02/10/liquibase-un-gestionnaire-de-changement-de-base-de-donnees/#comments</comments>
		<pubDate>Fri, 10 Feb 2012 15:47:16 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[base de données]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[Planet-Libre]]></category>

		<guid isPermaLink="false">http://www.libre-experience.org/?p=400</guid>
		<description><![CDATA[J&#8217;ai découvert ce matin Liquibase qui est un gestionnaire de mise à jour de base de données. Cela permet donc d&#8217;avoir un historique des modifications effectuées dans la base. Le principe est simple : 1) On dispose d&#8217;un fichier .xml qui contient toutes les modification effectuées, par exemple : ?View Code XML1 2 3 4 [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai découvert ce matin <a href="http://www.liquibase.org">Liquibase</a> qui est un gestionnaire de mise à jour de base de données.<br />
Cela permet donc d&#8217;avoir un historique des modifications effectuées dans la base.<span id="more-400"></span></p>
<p>Le principe est simple :<br />
1) On dispose d&#8217;un fichier .xml qui contient toutes les modification effectuées, par exemple :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p400code3'); return false;">View Code</a> XML</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p4003"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code" id="p400code3"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;databaseChangeLog</span></span>
<span style="color: #009900;">  <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://www.liquibase.org/xml/ns/dbchangelog&quot;</span></span>
<span style="color: #009900;">  <span style="color: #000066;">xmlns:xsi</span>=<span style="color: #ff0000;">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span></span>
<span style="color: #009900;">  <span style="color: #000066;">xsi:schemaLocation</span>=<span style="color: #ff0000;">&quot;http://www.liquibase.org/xml/ns/dbchangelog</span>
&nbsp;
<span style="color: #009900;">http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
&nbsp;
     <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;changeSet</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;1&quot;</span> <span style="color: #000066;">author</span>=<span style="color: #ff0000;">&quot;marc&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;createTable</span> <span style="color: #000066;">tableName</span>=<span style="color: #ff0000;">&quot;department&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;column</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;id&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;int&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;constraints</span> <span style="color: #000066;">primaryKey</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000066;">nullable</span>=<span style="color: #ff0000;">&quot;false&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/column<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;column</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;name&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;varchar(50)&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;constraints</span> <span style="color: #000066;">nullable</span>=<span style="color: #ff0000;">&quot;false&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/column<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;column</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;active&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;boolean&quot;</span> <span style="color: #000066;">defaultValueBoolean</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/createTable<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/changeSet<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/databaseChangeLog<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>2) Ensuite on lance Liquibase qui se charge d&#8217;effectuer les opérations de mise à jour de la base. Pour effectuer cette opération, il est possible d&#8217;utiliser par exemple un plugin <a href="http://maven.apache.org/">maven</a> :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p400code4'); return false;">View Code</a> XML</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p4004"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code" id="p400code4"><pre class="xml" style="font-family:monospace;">&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.liquibase<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>liquibase-maven-plugin<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>2.0.3<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;changeLogFile<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>src/test/resources/liquibase_test.xml<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/changeLogFile<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;driver<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>com.mysql.jdbc.Driver<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/driver<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;url<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>jdbc:mysql://localhost:3306/orioai_indexing_test<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/url<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;username<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>orioai<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/username<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;password<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>orioai<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/password<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;executions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;execution<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;phase<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>process-resources<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/phase<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;goals<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;goal<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>update<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/goal<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/goals<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/execution<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/executions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>Parmi les options proposées très intéressantes, grâce à Liquibase on va pouvoir :</p>
<ul>
<li>Connaitre le statut de la base par rapport aux opérations décrites dans le fichier xml (<em>mvn liquibase:status</em>)</li>
<li>Effectuer la mise à jour (<em>mvn liquibase:update</em>)</li>
<li>Effectuer un rollback à un point donné (<em>mvn -DrollbackCount=1 liquibase:rollback</em>)</li>
</ul>
<p>Il existe également la possibilité d&#8217;utiliser Liquibase via Spring.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.libre-experience.org/index.php/2012/02/10/liquibase-un-gestionnaire-de-changement-de-base-de-donnees/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installer Firefox 8.0 sur Ubuntu 11.10 (Oneiric)</title>
		<link>http://www.libre-experience.org/index.php/2011/11/17/installer-firefox-8-0-sur-ubuntu-11-10-oneiric/</link>
		<comments>http://www.libre-experience.org/index.php/2011/11/17/installer-firefox-8-0-sur-ubuntu-11-10-oneiric/#comments</comments>
		<pubDate>Thu, 17 Nov 2011 07:35:29 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[Planet-Libre]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.libre-experience.org/?p=394</guid>
		<description><![CDATA[Sur Ubuntu Oneiric, la version par défaut de Firefox est la 7.0. Pour installer la toute dernière version stable (la 8.0), voici ce qu&#8217;il faut faire : Ajouter dans votre /etc/apt/sources.list les deux lignes suivantes : deb http://ppa.launchpad.net/ubuntu-mozilla-security/ppa/ubuntu oneiric main deb-src http://ppa.launchpad.net/ubuntu-mozilla-security/ppa/ubuntu oneiric main Exécuter ensuite les commandes suivantes : sudo add-apt-repository ppa:ubuntu-mozilla-security/ppa sudo apt-get [...]]]></description>
			<content:encoded><![CDATA[<p>Sur Ubuntu Oneiric, la version par défaut de Firefox est la 7.0. Pour installer la toute dernière version stable (la 8.0), voici ce qu&#8217;il faut faire :</p>
<ul>
<li>Ajouter dans votre <em>/etc/apt/sources.lis</em>t les deux lignes suivantes :<br />
<code>deb http://ppa.launchpad.net/ubuntu-mozilla-security/ppa/ubuntu oneiric main<br />
deb-src http://ppa.launchpad.net/ubuntu-mozilla-security/ppa/ubuntu oneiric main</code></li>
<li>Exécuter ensuite les commandes suivantes :<br />
<code>sudo add-apt-repository ppa:ubuntu-mozilla-security/ppa<br />
sudo apt-get update<br />
sudo apt-get install firefox</code></li>
</ul>
<p><strong>EDIT : suite aux remarques de certains lecteurs, il n&#8217;y a pas besoin d&#8217;ajouter de dépôts, dans <em>/etc/apt/sources.list</em>, la commande <em><code>add-apt-repository</code></em> se charge de tout.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.libre-experience.org/index.php/2011/11/17/installer-firefox-8-0-sur-ubuntu-11-10-oneiric/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Sortie de la version 0.1.0 de Domogik</title>
		<link>http://www.libre-experience.org/index.php/2011/10/12/sortie-de-la-version-0-1-0-de-domogik/</link>
		<comments>http://www.libre-experience.org/index.php/2011/10/12/sortie-de-la-version-0-1-0-de-domogik/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 17:24:34 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[domogik]]></category>
		<category><![CDATA[domotique]]></category>
		<category><![CDATA[Planet-Libre]]></category>

		<guid isPermaLink="false">http://www.libre-experience.org/?p=372</guid>
		<description><![CDATA[La première version (Finale) de Domogik, la 0.1.0, est sortie ! Domogik est une solution libre d&#8217;automatisation de votre habitat basée sur le protocole xPL. Huit plugins sont livrés avec cette version : plcbus : support du PlcBus. x10_heyu : support du X10 via heyu. onewire : support de la technologie 1wire (DS18B20, DS18S20 et [...]]]></description>
			<content:encoded><![CDATA[<p id="magicdomid4">La première version (Finale) de Domogik, la 0.1.0, est sortie !</p>
<p id="magicdomid6">Domogik est une solution libre d&#8217;automatisation de votre habitat basée sur le protocole <a href="http://xplproject.org.uk/">xPL</a>. Huit plugins sont livrés avec cette version :<span id="more-372"></span></p>
<div id="magicdomid7">
<ul>
<li>plcbus : support du PlcBus.</li>
<li>x10_heyu : support du X10 via heyu.</li>
<li>onewire : support de la technologie 1wire (DS18B20, DS18S20 et DS2401).</li>
<li>ipx800 : support des cartes relai IPX 800 v1 et v2.</li>
<li>teleinfo : support des compteurs EDF récents pour récupérer les informations liées à la consommation électrique.</li>
<li>mirror : support du lecteur RFID Mir:ror.</li>
<li>cidmodem : gestion du &laquo;&nbsp;caller id&nbsp;&raquo; avec un modem.</li>
<li>wol_ping : démarrage d&#8217;ordinateurs à distance et ping.</li>
</ul>
</div>
<p id="magicdomid16">Une interface graphique est fournie avec Domogik : Domoweb. C&#8217;est une application web utilisant les dernières technologies (HTML5, CSS3) afin de vous permettre de contrôler votre maison depuis un navigateur internet. Une application pour Android est en cours de développement (Domodroid) : elle est déjà fonctionnelle mais toujours en phase de test.</p>
<p id="magicdomid18">Domogik a pour but de simplifier le contrôle des équipements de votre maison, quelles que soient les technologies. Pour ce faire, Domogik est modulaire : le support d&#8217;une nouvelle technologie peut être simplement ajouté à l&#8217;aide d&#8217;un plugin et chacun peut créer sa propre interface avec le langage de son choix grâce à son API <a href="http://fr.wikipedia.org/wiki/Representational_state_transfer">REST</a>.</p>
<p id="magicdomid20">Grâçe au wiki, une <a href="http://wiki.domogik.org">documentation très complète</a> est disponible. Elle détaille l&#8217;installation, l&#8217;utilisation ainsi que les possibilités d&#8217;extension de Domogik.</p>
<h3><strong>A propos des versions futures<br />
</strong></h3>
<p>La prochaine version (les développements sont déjà bien avancés) concernera plus  particulièrement les plugins. Domogik sera livré nu, pour installer seulement les plugins dont vous avez besoin, il suffira de passer par l&#8217;administration, et choisir les plugins présents dans un des dépôts. Cette indépendance entre les plugins et le coeur de Domogik apportera beaucoup plus de souplesse et de rapidité pour la mise à disposition des plugins. Il sera par exemple possible de tester les plugins en cours de développement en activant le dépôt &laquo;&nbsp;experimental&nbsp;&raquo; ou encore de se contenter des plugins stables avec la configuration par défaut.</p>
<div id="magicdomid26">Plusieurs contributeurs nous ont rejoint et différents plugins sont en cours de dévloppement : Zibase, Zwave, notifications Android et iphone, envoi de sms, rfxcom, TTS, tellstick, etc. Ces plugins seront disponibles dès la prochaine version dans les dépôts &laquo;&nbsp;stable&nbsp;&raquo;, &laquo;&nbsp;testing&nbsp;&raquo; ou &laquo;&nbsp;experimental&nbsp;&raquo; en fonction de leur avancement.</div>
<p id="magicdomid28">La version suivante concernera la fonctionnalité la plus attendue de Domogik, à savoir la possibilité de créer des scénarios.</p>
<h3>Téléchargement et documentation</h3>
<div>
<ul>
<li><a href="http://wiki.domogik.org/Download">Téléchargement de la version 0.1.0</a></li>
<li><a href="http://wiki.domogik.org/doc_StandardInstallation">Documentation détaillée de l&#8217;installation</a></li>
</ul>
</div>
<div id="magicdomid31">La documentation détaillée de l&#8217;installation est ici :</div>
<h3>Support et autres liens</h3>
<div id="magicdomid37">
<ul>
<li><a href="http://www.domogik.org/">http://www.domogik.org</a></li>
<li><a href="http://forum.domogik.org/">http://forum.domogik.org</a></li>
<li>irc : #domogik@freenode.net</li>
<li>General Mailing list : domogik-general@lists.labs.libre-entreprise.org</li>
<li>Developers Mailing list : domogik-developers@lists.labs.libre-entreprise.org</li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.libre-experience.org/index.php/2011/10/12/sortie-de-la-version-0-1-0-de-domogik/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quelques astuces pour l&#8217;exécution de tests unitaires avec Maven</title>
		<link>http://www.libre-experience.org/index.php/2011/04/14/quelques-astuces-pour-lexecution-de-tests-unitaires-avec-maven/</link>
		<comments>http://www.libre-experience.org/index.php/2011/04/14/quelques-astuces-pour-lexecution-de-tests-unitaires-avec-maven/#comments</comments>
		<pubDate>Thu, 14 Apr 2011 19:53:33 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[Planet-Libre]]></category>

		<guid isPermaLink="false">http://www.libre-experience.org/?p=362</guid>
		<description><![CDATA[Maven outil libre par excellence pour la gestion et l&#8217;automatisation de production des projets Java, dispose de nombreux plugins dont un bien connu pour l&#8217;exécution de tests unitaires : maven-surefire-plugin.J&#8217;utilise quotidiennement Maven pour le développement de mes projets Java, voici quelques astuces en ligne de commande pour l&#8217;exécution des tests unitaires. Il faut bien évidemment [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://fr.wikipedia.org/wiki/Apache_Maven">Maven</a> outil libre par excellence pour la gestion et l&#8217;automatisation de production des projets Java, dispose de nombreux plugins dont un bien connu pour l&#8217;exécution de tests unitaires : maven-surefire-plugin.<span id="more-362"></span>J&#8217;utilise quotidiennement Maven pour le développement de mes projets Java, voici quelques astuces en ligne de commande pour l&#8217;exécution des tests unitaires.</p>
<ul>
<li>Il faut bien évidemment avoir préalablement déclaré le plugin dans votre fichier central <em>pom.xml</em>, dans la section <em>&lt;plugins&gt;</em> :</li>
</ul>
<p><code>&lt;plugin&gt;<br />
&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;<br />
&lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;<br />
&lt;version&gt;2.8&lt;/version&gt;<br />
&lt;/plugin&gt;</code></p>
<ul>
<li>On exécute ensuite les tests unitaires avec la commande :</li>
</ul>
<p><code>mvn clean test</code></p>
<ul>
<li>On peut n&#8217;exécuter qu&#8217;une classe parmi toutes les classes de tests :</li>
</ul>
<p><code>mvn -Dtest=MyClass clean test</code></p>
<ul>
<li>On peut n&#8217;exécuter qu&#8217;une méthode de la classe en question (attention uniquement <strong>à partir de la version 2.8</strong> du plugin :</li>
</ul>
<p><code>mvn -Dtest=MyClass#myMethod clean test</code></p>
<ul>
<li>Il est possible également d&#8217;afficher le résultat (les erreurs) des tests directement dans la console (plutôt que dans le fichier de log de surefire), pour cela ajouter l&#8217;option :</li>
</ul>
<p><code>-Dsurefire.useFile=false</code></p>
<p>Pour la doc complète de ce plugin, voir <a href="http://maven.apache.org/plugins/maven-surefire-plugin/">son site officiel</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.libre-experience.org/index.php/2011/04/14/quelques-astuces-pour-lexecution-de-tests-unitaires-avec-maven/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Accéder à des services web en Python</title>
		<link>http://www.libre-experience.org/index.php/2011/02/24/acceder-a-des-services-web-en-python/</link>
		<comments>http://www.libre-experience.org/index.php/2011/02/24/acceder-a-des-services-web-en-python/#comments</comments>
		<pubDate>Thu, 24 Feb 2011 10:07:48 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[Planet-Libre]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[webservice]]></category>

		<guid isPermaLink="false">http://www.libre-experience.org/?p=355</guid>
		<description><![CDATA[Dans cet article nous allons voir comment accéder très simplement à des services web (webservices) en utilisant le langage Python. Voyons tout d&#8217;abord, grossièrement, ce qu&#8217;est un service web : c&#8217;est &#171;&#160;un programme informatique permettant la communication et l&#8217;échange de données entre applications et systèmes hétérogènes dans des environnements distribués&#160;&#187; (source Wikipédia). Il s&#8217;agit donc [...]]]></description>
			<content:encoded><![CDATA[<p>Dans cet article nous allons voir comment accéder très simplement à des services web (webservices) en utilisant le langage Python.<span id="more-355"></span></p>
<p>Voyons tout d&#8217;abord, grossièrement, ce qu&#8217;est un service web : c&#8217;est &laquo;&nbsp;un programme informatique permettant la communication et l&#8217;échange  de données entre applications et systèmes hétérogènes dans des  environnements distribués&nbsp;&raquo; (source <a href="http://fr.wikipedia.org/wiki/Service_Web" target="_blank">Wikipédia</a>). Il s&#8217;agit donc d&#8217;une application qui expose (met à disposition) des fonctionnalités. Celles-ci sont accessibles par Internet ou en mode plus restreint (Intranet). Un exemple de service web pourrait être un moteur de recherche qui met à disposition des fonctions permettant la recherche et/ou l&#8217;indexation de documents.<br />
L&#8217;intérêt d&#8217;un service web, outre le fait qu&#8217;il soit accessible à distance, est qu&#8217;il peut être accessible par une application qui est écrite dans un langage différent de celui de l&#8217;application qui expose ses services web. Pour reprendre l&#8217;exemple précédent, je peux très bien avoir une plateforme de recherche de documents écrite en Java et accéder à ses services par un programme réalisé en Python.<br />
Concernant le protocole de communication utilisé, il existe deux grandes familles : <a href="http://fr.wikipedia.org/wiki/Representational_state_transfer" target="_blank">REST</a> ou <a href="http://fr.wikipedia.org/wiki/SOAP" target="_blank">SOAP</a> / <a href="http://fr.wikipedia.org/wiki/Web_Services_Description_Language" target="_blank">WSDL</a>. Je ne rentrerai pas ici dans les détails concernant les différences vous pouvez approfondir en lisant <a href="http://fr.wikipedia.org/wiki/Service_Web" target="_blank">cet article sur Wikipédia</a>. Disons que si REST est très flexible et simple à mettre en oeuvre, SOAP est assez utilisé dans le monde de l&#8217;entreprise. Vous pouvez aussi lire <a href="http://www.clever-age.com/veille/clever-link/soap-vs.-rest-choisir-la-bonne-architecture-web-services.html" target="_blank">cet article</a> qui explique bien la philosophie de ces deux protocoles.</p>
<p>Nous utiliserons ici SOAP. La première chose est d&#8217;installer la bibliothèque Python qui va nous permettre d&#8217;utiliser SOAP pour communiquer avec notre service web. Il existe plusieurs bibliothèques, citons :</p>
<ul>
<li>Pour les &laquo;&nbsp;anciennes&nbsp;&raquo; :<br />
<em>SOAPpy</em> (simple à utiliser mais n&#8217;est plus maintenue), <em>ZSI</em> (plus complexe à utiliser)</li>
<li>Pour les &laquo;&nbsp;nouvelles&nbsp;&raquo; :<br />
<em>SUDS</em> (simple à utiliser pour déclarer un client, plus complexe pour un serveur, <em>soaplib</em> (le contraire).</li>
</ul>
<p>Comme ici nous souhaitons accéder à un service web existant, il nous faut un client SOAP. J&#8217;ai donc choisi <em>SUDS</em>.</p>
<h3>Installation de la bibliothèque</h3>
<p><code>sudo easy_install suds</code></p>
<h3>Accès au service web</h3>
<p><code>from suds.client import Client<br />
URL = 'http://localhost:8180/ori-oai-indexing-solr/xfire/IndexingService?wsdl'<br />
my_ws = Client(URL)<br />
if my_ws is None:<br />
exit(msg="Error can't connect to :%s" % URL)<br />
print("service : %s" % my_ws)<br />
print("Connected to %s" % URL)<br />
</code><br />
<em>URL</em> est donc l&#8217;url de mon service web.<br />
Je pense que ces lignes se passent de commentaires tellement elles sont explicites. A noter que l&#8217;avant dernière ligne permet d&#8217;afficher l&#8217;ensemble des fonctionnalités (fonctions) qui sont exposées par le service web.</p>
<p>Ensuite pour accéder à une fonction, il suffit d&#8217;utiliser l&#8217;attribut <em>service</em> :</p>
<p><code>my_ws.service.my_function(...)</code></p>
<p>Evidemment la fonction <em>my_fonction</em> doit avoir été exposée et donc se retrouver dans la liste affichée par <em>print(my_ws)</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.libre-experience.org/index.php/2011/02/24/acceder-a-des-services-web-en-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exporter rapidement ses données au format CSV avec PostgreSQL</title>
		<link>http://www.libre-experience.org/index.php/2011/02/18/exporter-rapidement-ses-donnees-au-format-csv-avec-postgresql/</link>
		<comments>http://www.libre-experience.org/index.php/2011/02/18/exporter-rapidement-ses-donnees-au-format-csv-avec-postgresql/#comments</comments>
		<pubDate>Fri, 18 Feb 2011 10:14:16 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[csv]]></category>
		<category><![CDATA[Planet-Libre]]></category>
		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://www.libre-experience.org/?p=351</guid>
		<description><![CDATA[Voici une astuce qui permet d&#8217;effectuer cette opération très rapidement : psql -U postgres -d oa_dev -c "COPY (select cli_nom as Nom, cli_vil as Ville from tbd_cli) to '/tmp/cli.csv' CSV HEADER" J&#8217;extrait de ma base oa_dev les champs cli_nom et cli_vil de ma table tbd_cli vers le fichier cli.csv. Simple non ?]]></description>
			<content:encoded><![CDATA[<p>Voici une astuce qui permet d&#8217;effectuer cette opération très rapidement :<br />
<code>psql -U postgres -d oa_dev -c "COPY (select cli_nom as Nom, cli_vil as Ville from tbd_cli) to '/tmp/cli.csv' CSV HEADER"</code></p>
<p>J&#8217;extrait de ma base <em>oa_dev</em> les champs <em>cli_nom</em> et <em>cli_vil</em> de ma table <em>tbd_cli</em> vers le fichier <em>cli.csv</em>.</p>
<p>Simple non ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.libre-experience.org/index.php/2011/02/18/exporter-rapidement-ses-donnees-au-format-csv-avec-postgresql/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Subversion vs Mercurial</title>
		<link>http://www.libre-experience.org/index.php/2011/01/19/subversion-vs-mercurial/</link>
		<comments>http://www.libre-experience.org/index.php/2011/01/19/subversion-vs-mercurial/#comments</comments>
		<pubDate>Wed, 19 Jan 2011 16:56:47 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[mercurial]]></category>
		<category><![CDATA[Planet-Libre]]></category>
		<category><![CDATA[subversion]]></category>

		<guid isPermaLink="false">http://www.libre-experience.org/?p=336</guid>
		<description><![CDATA[La plupart des développeurs à l&#8217;heure actuelle utilisent un gestionnaire de versions pour le code de leur application. C&#8217;est indispensable lors d&#8217;un travail en équipe mais cela peut être aussi fort intéressant même si on est seul sur un projet, car on dispose d&#8217;un historique de toutes les modifications effectuées . Reste à savoir quel [...]]]></description>
			<content:encoded><![CDATA[<p>La plupart des développeurs à l&#8217;heure actuelle utilisent un gestionnaire de versions pour le code de leur application. C&#8217;est indispensable lors d&#8217;un travail en équipe mais cela peut être aussi fort intéressant même si on est seul sur un projet, car on dispose d&#8217;un historique de toutes les modifications effectuées <span id="more-336"></span>.</p>
<p>Reste à savoir quel gestionnaire de version utiliser : personnellement j&#8217;ai commencé par <a href="http://www.seeks.fr/qc_redir?q=cvs&amp;url=http%3A%2F%2Ffr.wikipedia.org%2Fwiki%2FConcurrent_versions_system">CVS</a> puis sa version améliorée <a href="http://fr.wikipedia.org/wiki/Apache_Subversion">Subversion</a>. Il y a quelques temps lors du démarrage du projet <a href="http://www.domogik.org">Domogik</a>, mon collègue m&#8217;a proposé d&#8217;utiliser <a href="http://www.seeks.fr/qc_redir?q=mercurial&amp;url=http%3A%2F%2Ffr.wikipedia.org%2Fwiki%2FMercurial">Mercurial</a>. Je ne connaissais pas spécialement et j&#8217;ai dit “Ok pourquoi pas”. Il m&#8217;a vaguement expliqué les différences en me précisant que Mercurial était un gestionnaire de versions décentralisé. Cela n&#8217;a pas fait “tilt” chez moi et j&#8217;ai à peine relevé la remarque. Lorsqu&#8217;on a commencé à travailler, en bon informaticien, je n&#8217;ai pas pris le temps de lire la documentation de Mercurial et je me suis dit : “Bon à part la syntaxe des commandes qui change ça reste un gestionnaire de versions”.</p>
<p>Et là grave erreur, j&#8217;ai utilisé pendant des mois Mercurial comme  j&#8217;aurais fait avec Subversion. Du coup j&#8217;ai fréquemment pesté envers  Mercurial, avec toute la mauvaise foi qui s&#8217;impose, avançant des  arguments tels que “Mercurial c&#8217;est beaucoup trop compliqué pour notre  projet” etc. Je dis grave erreur, car par hasard un autre collègue m&#8217;a donné le lien  vers un excellent tutoriel qui explique les différences fondamentales  entre Subversion et Mercurial. Là je me suis dit que j&#8217;avais perdu pas mal de temps en sous-exploitant la souplesse offerte par Mercurial. En voici un (très gros) résumé :</p>
<ul>
<li> Mercurial est effectivement <strong>décentralisé</strong>, ainsi chaque développeur possède son propre dépôt (<em>repository</em>). Ainsi vous pouvez effectuer des <em>commits </em>locaux sans affecter le dépôt central tout en bénéficiant d&#8217;un historique de vos modifications.</li>
<li> Mercurial utilise la notion de <em>changeset</em> plutôt que de <em>revision</em>. Cela signifie, en gros, qu&#8217;il mémorise l&#8217;historique des <strong>changements</strong> qui ont été appliqués pour passer d&#8217;une version à l&#8217;autre. Subversion lui mémorise les <strong>versions</strong> de chaque fichier.</li>
<li> La notion de fusion (<strong><em>merge</em></strong>)  est parfaitement gérée par Mercurial, et je dirais qu&#8217;il s&#8217;agit même  d&#8217;une opération qu&#8217;on est amené à effectuer assez fréquemment. Si vous êtes plusieurs développeurs qui travaillent sur une même version et que vous effectuez régulièrement des <em>commits</em> sans les publier sur le dépôt central, alors lorsque vous souhaiterez récupérer les mises à jour de vos collègues, un <em>merge</em> sera nécessaire, même si vous n&#8217;avez pas travaillé sur les mêmes fichiers (je sais,  lorsqu&#8217;on vient du monde de Subversion cela peut paraître étrange, mais vous comprendrez le pourquoi du comment si vous suivez le tutoriel dont je vous parle à la fin). Notons  qu&#8217;avec Subversion la notion de <em>merge</em> fait souvent peur et doit être appliquée très prudemment, avec Mercurial il y a rarement des soucis.</li>
</ul>
<p>Bon les différences que j&#8217;expose ci-dessus peuvent vous paraître  énigmatiques si vous ne connaissez pas Mercurial, mais elles sont  fondamentales. Pour ceux qui sont confrontés à la gestion de versions (et qui lisent la  langue anglaise), je vous recommande très chaudement cet excellent <a title="http://hginit.com" rel="nofollow" href="http://hginit.com/">tutoriel</a>.  Après l&#8217;avoir lu, alors que j&#8217;étais initialement réticent à Mercurial,  j&#8217;ai été définitivement convaincu sur la supériorité de Mercurial. Il  n&#8217;est pas plus compliqué à utiliser que Subversion et offre à mon sens  beaucoup plus de possibilités.</p>
<p>Bonne gestion de versions !</p>
<p><strong>Références</strong> :</p>
<ul>
<li><a href="http://hginit.com/">Tutoriel hginit</a> [en]</li>
<li><a href="http://hgbook.red-bean.com/read">Le livre de référence de Mercurial</a> [en]</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.libre-experience.org/index.php/2011/01/19/subversion-vs-mercurial/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Personnaliser les titres d&#8217;une page Dokuwiki</title>
		<link>http://www.libre-experience.org/index.php/2010/12/14/personnaliser-les-titres-dune-page-dokuwiki/</link>
		<comments>http://www.libre-experience.org/index.php/2010/12/14/personnaliser-les-titres-dune-page-dokuwiki/#comments</comments>
		<pubDate>Tue, 14 Dec 2010 16:37:58 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[dokuwiki]]></category>
		<category><![CDATA[Planet-Libre]]></category>

		<guid isPermaLink="false">http://www.libre-experience.org/?p=331</guid>
		<description><![CDATA[Dans un précédent article, je vous avais expliqué tout le bien que je pensais de Dokuwiki&#8230; L&#8217;autre jour, le trouvant un peu tristounet au niveau de la présentation, je cherchais à modifier la couleurs des différents niveaux de titres que l&#8217;on peut appliquer dans une page. Après des recherches infructueuses sur le net, je décidais [...]]]></description>
			<content:encoded><![CDATA[<p>Dans un <a href="index.php/2010/04/13/de-lutilisation-de-dokuwiki/">précédent article</a>, je vous avais expliqué tout le bien que je pensais de Dokuwiki&#8230; <span id="more-331"></span><br />
L&#8217;autre jour, le trouvant un peu tristounet au niveau de la présentation, je cherchais à modifier la couleurs des différents niveaux de titres que l&#8217;on peut appliquer dans une page. Après des recherches infructueuses sur le net, je décidais de tenter ma chance sur l&#8217;IRC de Dokuwiki (irc.freenode.net / #dokuwiki).</p>
<p>Voici les étapes à suivre :</p>
<p>1) Créer dans le répertoire <em>conf </em>de Dokuwiki un fichier nommé <em>userstyle.css</em>.<br />
2) Définir dans ce fichier les styles pour chaque niveau de titre, par exemple :<br />
<code>div.dokuwiki h1 a {color: #1f1f52 !important;}<br />
div.dokuwiki h2 a {font-weight: bold; color: #1c1cf4 !important;}<br />
div.dokuwiki h3 a {color: #5b5bf6 !important;}</code></p>
<p><strong>Remarque 1</strong> : la présence de l&#8217;élément <em>!important</em> est impérative pour pouvoir changer la couleur.<br />
<strong>Remarque 2</strong> : évidemment il n&#8217;y a pas que les titres qu&#8217;il est possible de modifier. Par exemple on peut aussi modifier l&#8217;apparence des portions de code :<br />
<code>div.dokuwiki pre.code {<br />
        border: none;<br />
        border-left: 2px solid #F99451;<br />
        background-color: #e8e4e4;<br />
        color: #000053;<br />
        font-family: monospace;<br />
        font-size: 120%;<br />
}</code><br />
<strong>Remarque 3</strong> : pour repérer les styles, aller sur la page et utiliser l&#8217;excellente extension de Firefox : <a href="https://addons.mozilla.org/fr/firefox/addon/1843/">firebug</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.libre-experience.org/index.php/2010/12/14/personnaliser-les-titres-dune-page-dokuwiki/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Problème de connexion Java/MySql avec ArchLinux</title>
		<link>http://www.libre-experience.org/index.php/2010/12/13/probleme-de-connexion-javamysql-avec-archlinux/</link>
		<comments>http://www.libre-experience.org/index.php/2010/12/13/probleme-de-connexion-javamysql-avec-archlinux/#comments</comments>
		<pubDate>Mon, 13 Dec 2010 15:39:27 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[archlinux]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[Planet-Libre]]></category>

		<guid isPermaLink="false">http://www.libre-experience.org/?p=323</guid>
		<description><![CDATA[J&#8217;ai cherché une bonne partie de la journée pour résoudre ce problème, donc si ça peut aider quelqu&#8217;un A partir d&#8217;un petit programme Java tout simple, je tentais de me connecter à une base de données mysql locale. 1) Premier problème j&#8217;obtenais un &#171;&#160;Communications link failure &#8230; Connection refused&#160;&#187;. La solution est de commenter la [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai cherché une bonne partie de la journée pour résoudre ce problème, donc si ça peut aider quelqu&#8217;un<span id="more-323"></span></p>
<p>A partir d&#8217;un petit programme Java tout simple, je tentais de me connecter à une base de données mysql locale.</p>
<p>1) Premier problème j&#8217;obtenais un &laquo;&nbsp;Communications link failure &#8230; Connection refused&nbsp;&raquo;.</p>
<p>La solution est de commenter la variable <strong><em>skip-networking</em></strong> dans le fichier <em>/etc/mysql/my.cnf</em>. En effet l&#8217;accès à la base via jdbc se fait par TCP/IP. Si <em>skip-networking</em> est activé, mysql refuse les connexions en TCP/IP&#8230;</p>
<p>2) Second problème (celui qui m&#8217;a fait tourner en rond pendant des heures) : j&#8217;obtenais un &laquo;&nbsp;Communications link failure &#8230; java.io.EOFException: Can not read response from server&nbsp;&raquo;.</p>
<p>La solution est d&#8217;ajouter les lignes suivantes dans <em><strong>/etc/hosts.allow</strong></em></p>
<p><code>mysqld: ALL : ALLOW<br />
mysqld-max: ALL : ALLOW</code></p>
<p>A noter que ces manipulations sont propres à Archlinux. J&#8217;ai testé sur Ubuntu et là ça marche &laquo;&nbsp;out of the box&nbsp;&raquo;.</p>
<p>Ces informations ont été trouvées sur le <a href="https://wiki.archlinux.org/index.php/MySQL#Enable_remote_access" target="_blank">wiki d&#8217;Archlinux</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.libre-experience.org/index.php/2010/12/13/probleme-de-connexion-javamysql-avec-archlinux/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Django : utiliser des templates ayant le même nom dans plusieurs applications</title>
		<link>http://www.libre-experience.org/index.php/2010/10/11/django-utiliser-des-templates-ayant-le-meme-nom-dans-plusieurs-applications/</link>
		<comments>http://www.libre-experience.org/index.php/2010/10/11/django-utiliser-des-templates-ayant-le-meme-nom-dans-plusieurs-applications/#comments</comments>
		<pubDate>Mon, 11 Oct 2010 15:49:58 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[Planet-Libre]]></category>

		<guid isPermaLink="false">http://www.libre-experience.org/?p=311</guid>
		<description><![CDATA[Le problème est simple : vous avez dans le même projet deux applications disons app1 et app2 qui ont toutes les deux un même template nommé index.html. Pour éviter que Django n&#8217;effectue une confusion entre les deux templates au moment du chargement, il est nécessaire de respecter une marche à suivre bien précise. Lieu de [...]]]></description>
			<content:encoded><![CDATA[<p>Le problème est simple : vous avez dans le même projet deux applications disons <em>app1</em> et <em>app2 </em>qui ont toutes les deux un même template nommé <em>index.html</em>. Pour éviter que Django n&#8217;effectue une confusion entre les deux templates au moment du chargement, il est nécessaire de respecter une marche à suivre bien précise.<span id="more-311"></span></p>
<h3>Lieu de stockage des templates</h3>
<p>Surtout pas (ce qui pourrait paraître logique), <em>/mon_projet/app1/templates/index.html</em> et <em>/mon_projet/app2/templates/index.html</em>. Si vous le faites vous risquez de charger le fichier <em>index.html</em> de <em>app1</em> lorsque vous appelez <em>app2</em>.</p>
<p>Vous avez le choix :</p>
<ul>
<li>dans <em>/mon_projet/app1/templates/app1/index.html</em> (idem pour <em>app2</em> évidemment).</li>
<li>dans <em>/mon_projet/templates/app1/index.html</em> (idem pour <em>app2</em>).</li>
</ul>
<p>Personnellement je préfère la deuxième solution car le chemin est moins compliqué.</p>
<h3>Configuration du fichier <em>settings.py<br />
</em></h3>
<ul>
<li>Au niveau de la variable <em>TEMPLATE_LOADERS</em>, vous devez avoir la ligne suivante :<br />
<code>'django.template.loaders.filesystem.Loader'</code></li>
</ul>
<ul>
<li>Au niveau de la variable <em>TEMPLATE_DIRS</em>, les chemins d&#8217;accès aux templates doivent être déclarés :<br />
Si vous avez choisi la première option pour le stockage des templates :<br />
<code>os.path.join(ROOT, "app1/templates"),<br />
os.path.join(ROOT, "app2/templates"),</code><br />
Si vous avez choisi la seconde option :<br />
<code>os.path.join(ROOT, "templates"),</code><br />
Ceci suppose que vous avez déclaré en début de fichier :<br />
<code>ROOT = os.path.dirname(os.path.abspath(__file__))</code></li>
</ul>
<h3>Chargement des templates</h3>
<p>Lors du chargement des templates, il faut préciser le nom de l&#8217;application : <em>app1/index.html</em> et <em>app2/index.html</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.libre-experience.org/index.php/2010/10/11/django-utiliser-des-templates-ayant-le-meme-nom-dans-plusieurs-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

