<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
	
	>
<channel>
	<title>Commentaires pour Le blog de James Poulson</title>
	<atom:link href="https://blog.developpez.com/james-poulson/comments/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/james-poulson</link>
	<description></description>
	<lastBuildDate>Mon, 11 Feb 2013 07:09:17 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Commentaires sur Utiliser un switch pour des cotes de test par Recap java, semaine 5, année 2013 &#124; Blog de la rubrique java</title>
		<link>https://blog.developpez.com/james-poulson/p11747/java/utiliser-un-switch-pour-des-cotes-de-test#comment-76</link>
		<dc:creator><![CDATA[Recap java, semaine 5, année 2013 &#124; Blog de la rubrique java]]></dc:creator>
		<pubDate>Mon, 11 Feb 2013 07:09:17 +0000</pubDate>
		<guid isPermaLink="false">http://blog.developpez.com/james-poulson/?p=72#comment-76</guid>
		<description><![CDATA[[...] Utiliser un switch pour des cotes de test par jpoulson (29/01/2013 23:54) [...]]]></description>
		<content:encoded><![CDATA[<p>[&#8230;] Utiliser un switch pour des cotes de test par jpoulson (29/01/2013 23:54) [&#8230;]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur L&#8217;éditeur GUI WindowBuilder Pro par Beginner.</title>
		<link>https://blog.developpez.com/james-poulson/p9788/ide/l_editeur_gui_windowbuilder_pro#comment-75</link>
		<dc:creator><![CDATA[Beginner.]]></dc:creator>
		<pubDate>Sun, 03 Feb 2013 23:25:01 +0000</pubDate>
		<guid isPermaLink="false">#comment-75</guid>
		<description><![CDATA[Bonsoir,

Merci pour votre réponse.

Oui vous avez raison, j&#039;ai téléchargé Eclipse 3.7 Indigo et WindowBuilder PRO était déjà intégré, je n&#039;ai donc rien eu à installer.

C&#039;est une très bonne chose je trouve car le fait que ce soit déjà intégré était pour moi un avantage de Netbeans mais maintenant je pense qu&#039;Eclipse passe largement devant, je le trouvais déjà meilleur et plus beau (oui l’esthétique ça joue quand même, c&#039;est plus agréable) et maintenant même sa palette est meilleure.

Tant mieux.]]></description>
		<content:encoded><![CDATA[<p>Bonsoir,</p>
<p>Merci pour votre réponse.</p>
<p>Oui vous avez raison, j&rsquo;ai téléchargé Eclipse 3.7 Indigo et WindowBuilder PRO était déjà intégré, je n&rsquo;ai donc rien eu à installer.</p>
<p>C&rsquo;est une très bonne chose je trouve car le fait que ce soit déjà intégré était pour moi un avantage de Netbeans mais maintenant je pense qu&rsquo;Eclipse passe largement devant, je le trouvais déjà meilleur et plus beau (oui l’esthétique ça joue quand même, c&rsquo;est plus agréable) et maintenant même sa palette est meilleure.</p>
<p>Tant mieux.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur L&#8217;éditeur GUI WindowBuilder Pro par jpoulson</title>
		<link>https://blog.developpez.com/james-poulson/p9788/ide/l_editeur_gui_windowbuilder_pro#comment-74</link>
		<dc:creator><![CDATA[jpoulson]]></dc:creator>
		<pubDate>Sat, 02 Feb 2013 21:16:45 +0000</pubDate>
		<guid isPermaLink="false">#comment-74</guid>
		<description><![CDATA[bonsoir Beginner,

Personellement je trouve que ce plugin est plus flexible que l editeur dans netbeans. 

Comme mentionne dans l article le code genere est modifiable et il faut juste faire attention a eviter une exception dans l onglet graphique. Pour les composantes il suffit d en selectionner une dans la palette et de le placer. 

Sinon il y a eu une evolution interessante dans le sens que le plugin est mentionne sur le site d Eclipse et sera sans doute integre dans des versions futures, preuve que l&#039;outil serait considere comme suffisamment robuste.]]></description>
		<content:encoded><![CDATA[<p>bonsoir Beginner,</p>
<p>Personellement je trouve que ce plugin est plus flexible que l editeur dans netbeans. </p>
<p>Comme mentionne dans l article le code genere est modifiable et il faut juste faire attention a eviter une exception dans l onglet graphique. Pour les composantes il suffit d en selectionner une dans la palette et de le placer. </p>
<p>Sinon il y a eu une evolution interessante dans le sens que le plugin est mentionne sur le site d Eclipse et sera sans doute integre dans des versions futures, preuve que l&rsquo;outil serait considere comme suffisamment robuste.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur L&#8217;éditeur GUI WindowBuilder Pro par Beginner.</title>
		<link>https://blog.developpez.com/james-poulson/p9788/ide/l_editeur_gui_windowbuilder_pro#comment-73</link>
		<dc:creator><![CDATA[Beginner.]]></dc:creator>
		<pubDate>Sat, 02 Feb 2013 18:05:56 +0000</pubDate>
		<guid isPermaLink="false">#comment-73</guid>
		<description><![CDATA[Bonsoir,

Je me demandais si avec cet éditeur on pouvait faire tout ce qu&#039;on peut faire avec celui de Netbeans et si cela était aussi simple ?

Je demande cela car je trouve que c&#039;est justement un des avantages de NetBeans sur Eclipse.

Merci.]]></description>
		<content:encoded><![CDATA[<p>Bonsoir,</p>
<p>Je me demandais si avec cet éditeur on pouvait faire tout ce qu&rsquo;on peut faire avec celui de Netbeans et si cela était aussi simple ?</p>
<p>Je demande cela car je trouve que c&rsquo;est justement un des avantages de NetBeans sur Eclipse.</p>
<p>Merci.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Les inner class (question de certification OCJP) par Recap java, semaine 2, année 2013 &#124; Blog de la rubrique java</title>
		<link>https://blog.developpez.com/james-poulson/p11711/java/les-inner-class-question-de-certification-ocjp#comment-72</link>
		<dc:creator><![CDATA[Recap java, semaine 2, année 2013 &#124; Blog de la rubrique java]]></dc:creator>
		<pubDate>Tue, 15 Jan 2013 19:18:55 +0000</pubDate>
		<guid isPermaLink="false">http://blog.developpez.com/james-poulson/?p=66#comment-72</guid>
		<description><![CDATA[[...] Les inner class (question de certification OCJP) par jpoulson (10/01/2013 08:52) [...]]]></description>
		<content:encoded><![CDATA[<p>[&#8230;] Les inner class (question de certification OCJP) par jpoulson (10/01/2013 08:52) [&#8230;]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Faire fonctionner Tess4J en déploiement par Recap java, semaine 38, année 2012 &#124; Blog de la rubrique java</title>
		<link>https://blog.developpez.com/james-poulson/p11328/java/faire-fonctionner-tess4j-en-deploiement#comment-71</link>
		<dc:creator><![CDATA[Recap java, semaine 38, année 2012 &#124; Blog de la rubrique java]]></dc:creator>
		<pubDate>Fri, 04 Jan 2013 17:28:37 +0000</pubDate>
		<guid isPermaLink="false">http://blog.developpez.com/james-poulson/?p=49#comment-71</guid>
		<description><![CDATA[[...] Collection  Faire fonctionner Tess4J en déploiement par jpoulson (20/09/2012 06:08) Tess4J est un wrapper JNA pour l&#8217;API de reconnaissance de [...]]]></description>
		<content:encoded><![CDATA[<p>[&#8230;] Collection  Faire fonctionner Tess4J en déploiement par jpoulson (20/09/2012 06:08) Tess4J est un wrapper JNA pour l&#8217;API de reconnaissance de [&#8230;]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Les développeurs engagés par Recap java, semaine 35, année 2012 &#124; Blog de la rubrique java</title>
		<link>https://blog.developpez.com/james-poulson/p11259/general/les_developpeurs_engages#comment-70</link>
		<dc:creator><![CDATA[Recap java, semaine 35, année 2012 &#124; Blog de la rubrique java]]></dc:creator>
		<pubDate>Fri, 04 Jan 2013 17:27:59 +0000</pubDate>
		<guid isPermaLink="false">#comment-70</guid>
		<description><![CDATA[[...] Les développeurs engagés par jpoulson (29/08/2012 03:32) Je ne sais pourquoi, il m&#8217;est venu l&#8217;idée de lancer une page Facebook pour regrouper les développeurs qui souhaiteraient participer à des bonnes causes. L&#8217;équivalent d&#8217;écrivain engagé dans la langue de Shakespeare ne fut pas évident à trouver mais finalement &#8230; Continue reading &#8594; [...]]]></description>
		<content:encoded><![CDATA[<p>[&#8230;] Les développeurs engagés par jpoulson (29/08/2012 03:32) Je ne sais pourquoi, il m&#8217;est venu l&#8217;idée de lancer une page Facebook pour regrouper les développeurs qui souhaiteraient participer à des bonnes causes. L&#8217;équivalent d&#8217;écrivain engagé dans la langue de Shakespeare ne fut pas évident à trouver mais finalement &#8230; Continue reading &#8594; [&#8230;]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Limitation du nombre d&#8217;instances d&#8217;une classe par Recap java, semaine 33, année 2012 &#124; Blog de la rubrique java</title>
		<link>https://blog.developpez.com/james-poulson/p11229/java/limitation_des_notres_d_instances#comment-69</link>
		<dc:creator><![CDATA[Recap java, semaine 33, année 2012 &#124; Blog de la rubrique java]]></dc:creator>
		<pubDate>Fri, 04 Jan 2013 17:27:20 +0000</pubDate>
		<guid isPermaLink="false">#comment-69</guid>
		<description><![CDATA[[...] Limitation du nombre d’instances d’une classe par jpoulson (17/08/2012 16:23) Dans un groupe Java sur Facebook une personne a demandé comment s&#8217;y prendre pour limiter le nombre d&#8217;instances d&#8217;une classe donnée. On pourrait imaginer que cela serve dans des cas de figures où on a besoin d&#8217;un nombre limité de &#8230; Continue reading &#8594; [...]]]></description>
		<content:encoded><![CDATA[<p>[&#8230;] Limitation du nombre d’instances d’une classe par jpoulson (17/08/2012 16:23) Dans un groupe Java sur Facebook une personne a demandé comment s&#8217;y prendre pour limiter le nombre d&#8217;instances d&#8217;une classe donnée. On pourrait imaginer que cela serve dans des cas de figures où on a besoin d&#8217;un nombre limité de &#8230; Continue reading &#8594; [&#8230;]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Quand une variable n&#8217;est pas égale à elle-même par Recap java, semaine 30, année 2012 &#124; Blog de la rubrique java</title>
		<link>https://blog.developpez.com/james-poulson/p11180/java/quand_une_variable_n_est_pas_egale_a_ell#comment-68</link>
		<dc:creator><![CDATA[Recap java, semaine 30, année 2012 &#124; Blog de la rubrique java]]></dc:creator>
		<pubDate>Fri, 04 Jan 2013 17:26:45 +0000</pubDate>
		<guid isPermaLink="false">#comment-68</guid>
		<description><![CDATA[[...] Quand une variable n’est pas égale à elle-même par jpoulson (27/07/2012 17:40) Est-il possible de faire en sorte que &#171;&#160;pas égal&#160;&#187; soit imprimé dans la console sans modifier la structure suivante ? if(x==x){ &#160; System.out.println(&quot;égal&quot;); } else { &#160; System.out.println(&quot;pas égal&quot;); } La réponse est oui et tient aux particularités de la &#8230; Continue reading &#8594; [...]]]></description>
		<content:encoded><![CDATA[<p>[&#8230;] Quand une variable n’est pas égale à elle-même par jpoulson (27/07/2012 17:40) Est-il possible de faire en sorte que &#171;&#160;pas égal&#160;&#187; soit imprimé dans la console sans modifier la structure suivante ? if(x==x){ &#160; System.out.println(&quot;égal&quot;); } else { &#160; System.out.println(&quot;pas égal&quot;); } La réponse est oui et tient aux particularités de la &#8230; Continue reading &#8594; [&#8230;]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Créer des instances à travers un enum par Recap java, semaine 29, année 2012 &#124; Blog de la rubrique java</title>
		<link>https://blog.developpez.com/james-poulson/p11167/java/creer_des_instances_a_travers_un_enum#comment-67</link>
		<dc:creator><![CDATA[Recap java, semaine 29, année 2012 &#124; Blog de la rubrique java]]></dc:creator>
		<pubDate>Fri, 04 Jan 2013 17:26:29 +0000</pubDate>
		<guid isPermaLink="false">#comment-67</guid>
		<description><![CDATA[[...] Créer des instances à travers un enum par jpoulson (19/07/2012 19:52) Le plus souvent un enum sert à reprendre une liste de constantes que l&#8217;on peut notamment utiliser de manière sémantique lors du passage de paramètres (ex: Color.white). Mais en Java il existe d&#8217;autres possibilités dont une manière pratique pour créer &#8230; Continue reading &#8594; [...]]]></description>
		<content:encoded><![CDATA[<p>[&#8230;] Créer des instances à travers un enum par jpoulson (19/07/2012 19:52) Le plus souvent un enum sert à reprendre une liste de constantes que l&#8217;on peut notamment utiliser de manière sémantique lors du passage de paramètres (ex: Color.white). Mais en Java il existe d&#8217;autres possibilités dont une manière pratique pour créer &#8230; Continue reading &#8594; [&#8230;]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Extraire les données de tables HTML avec XPath par Recap java, semaine 27, année 2012 &#124; Blog de la rubrique java</title>
		<link>https://blog.developpez.com/james-poulson/p11138/code/extraire_des_donnees_de_tables_html_avec#comment-66</link>
		<dc:creator><![CDATA[Recap java, semaine 27, année 2012 &#124; Blog de la rubrique java]]></dc:creator>
		<pubDate>Fri, 04 Jan 2013 17:26:01 +0000</pubDate>
		<guid isPermaLink="false">#comment-66</guid>
		<description><![CDATA[[...] Extraire les données de tables HTML avec XPath par jpoulson (07/07/2012 03:37) Récemment j&#8217;avais la tâche d&#8217;extraire des données à partir de pages sans doute encodées sous Excel et sauvegardées sous forme de tableaux HTML. Comme il y avait environ 800 fichiers à traiter une solution programmatique s&#8217;imposait. Le défi n&#8217;était pas &#8230; Continue reading &#8594; [...]]]></description>
		<content:encoded><![CDATA[<p>[&#8230;] Extraire les données de tables HTML avec XPath par jpoulson (07/07/2012 03:37) Récemment j&#8217;avais la tâche d&#8217;extraire des données à partir de pages sans doute encodées sous Excel et sauvegardées sous forme de tableaux HTML. Comme il y avait environ 800 fichiers à traiter une solution programmatique s&#8217;imposait. Le défi n&#8217;était pas &#8230; Continue reading &#8594; [&#8230;]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Suppréssion de doublons et transformation de majuscule en une majuscule+minuscules par Recap java, semaine 24, année 2012 &#124; Blog de la rubrique java</title>
		<link>https://blog.developpez.com/james-poulson/p11087/technique/suppression_de_doublons_et_transformatio#comment-65</link>
		<dc:creator><![CDATA[Recap java, semaine 24, année 2012 &#124; Blog de la rubrique java]]></dc:creator>
		<pubDate>Fri, 04 Jan 2013 17:25:23 +0000</pubDate>
		<guid isPermaLink="false">#comment-65</guid>
		<description><![CDATA[[...] Annotation, Collection  Suppréssion de doublons et transformation de majuscule en une majuscule+minuscules par jpoulson (12/06/2012 12:39) J&#8217;ai reçu une liste de noms et addresses e-mail sous format [...]]]></description>
		<content:encoded><![CDATA[<p>[&#8230;] Annotation, Collection  Suppréssion de doublons et transformation de majuscule en une majuscule+minuscules par jpoulson (12/06/2012 12:39) J&#8217;ai reçu une liste de noms et addresses e-mail sous format [&#8230;]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Petite astuce pour récuperer la ville d&#8217;origine avec l&#8217;API Facebook par Recap java, semaine 37, année 2011 &#124; Blog de la rubrique java</title>
		<link>https://blog.developpez.com/james-poulson/p10288/code/recuperer_la_ville_d_origine_avec_l_api#comment-64</link>
		<dc:creator><![CDATA[Recap java, semaine 37, année 2011 &#124; Blog de la rubrique java]]></dc:creator>
		<pubDate>Fri, 04 Jan 2013 17:16:39 +0000</pubDate>
		<guid isPermaLink="false">#comment-64</guid>
		<description><![CDATA[[...] Android2EE, Formation Android, Icone, Le savoir faire, Système  Petite astuce pour récuperer la ville d’origine avec l’API Facebook par jpoulson (14/09/2011 17:29) Voici une petite astuce pour récupérer la ville d&#8217;origine [...]]]></description>
		<content:encoded><![CDATA[<p>[&#8230;] Android2EE, Formation Android, Icone, Le savoir faire, Système  Petite astuce pour récuperer la ville d’origine avec l’API Facebook par jpoulson (14/09/2011 17:29) Voici une petite astuce pour récupérer la ville d&#8217;origine [&#8230;]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Quand une variable n&#8217;est pas égale à elle-même par jpoulson</title>
		<link>https://blog.developpez.com/james-poulson/p11180/java/quand_une_variable_n_est_pas_egale_a_ell#comment-19</link>
		<dc:creator><![CDATA[jpoulson]]></dc:creator>
		<pubDate>Tue, 14 Aug 2012 13:41:26 +0000</pubDate>
		<guid isPermaLink="false">#comment-19</guid>
		<description><![CDATA[Les particularités du NaN méritent d&#039;être souligné. Il y a un semblant d&#039;inconsistance avec Integer jusqu&#039;à ce qu&#039;on comprenne qu&#039;il s&#039;agit d&#039;une implémentation d&#039;un standard international.&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est des séquences d&#039;échappement, il y a probablement aucune fin pratique. Mais c&#039;est le genre de détail qui pourrait donner l’impression qu&#039;on a bien exploré l&#039;environnement de programmation.]]></description>
		<content:encoded><![CDATA[<p>Les particularités du NaN méritent d&rsquo;être souligné. Il y a un semblant d&rsquo;inconsistance avec Integer jusqu&rsquo;à ce qu&rsquo;on comprenne qu&rsquo;il s&rsquo;agit d&rsquo;une implémentation d&rsquo;un standard international.</p>
<p>Pour ce qui est des séquences d&rsquo;échappement, il y a probablement aucune fin pratique. Mais c&rsquo;est le genre de détail qui pourrait donner l’impression qu&rsquo;on a bien exploré l&rsquo;environnement de programmation.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Extraire les données de tables HTML avec XPath par FredGuile</title>
		<link>https://blog.developpez.com/james-poulson/p11138/code/extraire_des_donnees_de_tables_html_avec#comment-43</link>
		<dc:creator><![CDATA[FredGuile]]></dc:creator>
		<pubDate>Tue, 14 Aug 2012 12:36:45 +0000</pubDate>
		<guid isPermaLink="false">#comment-43</guid>
		<description><![CDATA[Ca marche nickel.&lt;br /&gt;
&lt;br /&gt;
Encore merci.]]></description>
		<content:encoded><![CDATA[<p>Ca marche nickel.</p>
<p>Encore merci.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Extraire les données de tables HTML avec XPath par FredGuile</title>
		<link>https://blog.developpez.com/james-poulson/p11138/code/extraire_des_donnees_de_tables_html_avec#comment-42</link>
		<dc:creator><![CDATA[FredGuile]]></dc:creator>
		<pubDate>Tue, 14 Aug 2012 12:25:25 +0000</pubDate>
		<guid isPermaLink="false">#comment-42</guid>
		<description><![CDATA[Merci pour votre diligence.&lt;br /&gt;
&lt;br /&gt;
Je teste tout ça.]]></description>
		<content:encoded><![CDATA[<p>Merci pour votre diligence.</p>
<p>Je teste tout ça.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Extraire les données de tables HTML avec XPath par jpoulson</title>
		<link>https://blog.developpez.com/james-poulson/p11138/code/extraire_des_donnees_de_tables_html_avec#comment-41</link>
		<dc:creator><![CDATA[jpoulson]]></dc:creator>
		<pubDate>Tue, 14 Aug 2012 12:17:21 +0000</pubDate>
		<guid isPermaLink="false">#comment-41</guid>
		<description><![CDATA[Bonjour FredGuile,&lt;br /&gt;
&lt;br /&gt;
Content d&#039;entendre que l&#039;article t&#039;a rendu service. Concernant le problème évoqué cela vient probablement de la manière dont nodeValue fonctionne (extraction de texte).&lt;br /&gt;
&lt;br /&gt;
Pour contourner cela ce que tu peut essayer c&#039;est un troisième boucle en récupérant tous les sous-éléments:&lt;br /&gt;
&lt;br /&gt;
cellElements = $cell-&gt;getElementsByTagName(&quot;*&quot;) // Wildcard&lt;br /&gt;
&lt;br /&gt;
La valeurs d&#039;attributs tel que href pourrait être extrait de la manière suivante (code non testé):&lt;br /&gt;
&lt;br /&gt;
$cellElement = $cellElements-&gt;item($k); &lt;br /&gt;
&lt;br /&gt;
if ($cellElement-&gt;hasAttributes()) {&lt;br /&gt;
  foreach ($cellElement-&gt;attributes as $attr) {&lt;br /&gt;
    $name = $attr-&gt;nodeName;&lt;br /&gt;
    $value = $attr-&gt;nodeValue;&lt;br /&gt;
    echo &quot;Attribute &#039;$name&#039; :: &#039;$value&#039;&lt;br /&gt;&quot;;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Il y a aussi la possibilité de changer la requête XPath en amont mais on perd la rangée en tant que repère.&lt;br /&gt;
&lt;br /&gt;
Voici quelques pages de documentation en espérant que cela a pu t&#039;avancer :) .&lt;br /&gt;
&lt;br /&gt;
http://php.net/manual/fr/domelement.getelementsbytagname.php&lt;br /&gt;
http://www.php.net/manual/fr/class.domnodelist.php&lt;br /&gt;
http://php.net/manual/fr/class.domnode.php&lt;br /&gt;
&lt;br /&gt;
http://www.w3schools.com/xpath/xpath_operators.asp&lt;br /&gt;
http://www.w3schools.com/xpath/xpath_syntax.asp]]></description>
		<content:encoded><![CDATA[<p>Bonjour FredGuile,</p>
<p>Content d&rsquo;entendre que l&rsquo;article t&rsquo;a rendu service. Concernant le problème évoqué cela vient probablement de la manière dont nodeValue fonctionne (extraction de texte).</p>
<p>Pour contourner cela ce que tu peut essayer c&rsquo;est un troisième boucle en récupérant tous les sous-éléments:</p>
<p>cellElements = $cell->getElementsByTagName(&laquo;&nbsp;*&nbsp;&raquo;) // Wildcard</p>
<p>La valeurs d&rsquo;attributs tel que href pourrait être extrait de la manière suivante (code non testé):</p>
<p>$cellElement = $cellElements->item($k); </p>
<p>if ($cellElement->hasAttributes()) {<br />
  foreach ($cellElement->attributes as $attr) {<br />
    $name = $attr->nodeName;<br />
    $value = $attr->nodeValue;<br />
    echo &laquo;&nbsp;Attribute &lsquo;$name&rsquo; :: &lsquo;$value&rsquo;<br />&laquo;&nbsp;;<br />
  }<br />
}</p>
<p>Il y a aussi la possibilité de changer la requête XPath en amont mais on perd la rangée en tant que repère.</p>
<p>Voici quelques pages de documentation en espérant que cela a pu t&rsquo;avancer <img src="https://blog.developpez.com/james-poulson/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /> .</p>
<p><a href="http://php.net/manual/fr/domelement.getelementsbytagname.php" rel="nofollow">http://php.net/manual/fr/domelement.getelementsbytagname.php</a><br />
<a href="http://www.php.net/manual/fr/class.domnodelist.php" rel="nofollow">http://www.php.net/manual/fr/class.domnodelist.php</a><br />
<a href="http://php.net/manual/fr/class.domnode.php" rel="nofollow">http://php.net/manual/fr/class.domnode.php</a></p>
<p><a href="http://www.w3schools.com/xpath/xpath_operators.asp" rel="nofollow">http://www.w3schools.com/xpath/xpath_operators.asp</a><br />
<a href="http://www.w3schools.com/xpath/xpath_syntax.asp" rel="nofollow">http://www.w3schools.com/xpath/xpath_syntax.asp</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Extraire les données de tables HTML avec XPath par FredGuile</title>
		<link>https://blog.developpez.com/james-poulson/p11138/code/extraire_des_donnees_de_tables_html_avec#comment-40</link>
		<dc:creator><![CDATA[FredGuile]]></dc:creator>
		<pubDate>Tue, 14 Aug 2012 11:28:15 +0000</pubDate>
		<guid isPermaLink="false">#comment-40</guid>
		<description><![CDATA[pardon, ma ligne d&#039;exemple est interprétée en html, j&#039;enlève les balises&lt;br /&gt;
&lt;br /&gt;
td a href=&#039;http://monlien&#039; mon texte a td&lt;br /&gt;
]]></description>
		<content:encoded><![CDATA[<p>pardon, ma ligne d&rsquo;exemple est interprétée en html, j&rsquo;enlève les balises</p>
<p>td a href=&rsquo;http://monlien&rsquo; mon texte a td</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Extraire les données de tables HTML avec XPath par FredGuile</title>
		<link>https://blog.developpez.com/james-poulson/p11138/code/extraire_des_donnees_de_tables_html_avec#comment-39</link>
		<dc:creator><![CDATA[FredGuile]]></dc:creator>
		<pubDate>Tue, 14 Aug 2012 11:25:25 +0000</pubDate>
		<guid isPermaLink="false">#comment-39</guid>
		<description><![CDATA[Bonjour et merci pour cet article qui m&#039;a bien aidé.&lt;br /&gt;
&lt;br /&gt;
Il me reste cependant un dernier problème que je n&#039;arrive pas à résoudre :&lt;br /&gt;
&lt;br /&gt;
une de mes cellules contient, en plus du texte, un lien&lt;br /&gt;
&lt;br /&gt;
mon texte&lt;br /&gt;
&lt;br /&gt;
Hors, $cell-&gt;nodeValue ne me renvoi que le texte et pas le contenu complet de la cellule.&lt;br /&gt;
&lt;br /&gt;
Auriez-vous une solution ?&lt;br /&gt;
&lt;br /&gt;
Merci d&#039;avance.&lt;br /&gt;
]]></description>
		<content:encoded><![CDATA[<p>Bonjour et merci pour cet article qui m&rsquo;a bien aidé.</p>
<p>Il me reste cependant un dernier problème que je n&rsquo;arrive pas à résoudre :</p>
<p>une de mes cellules contient, en plus du texte, un lien</p>
<p>mon texte</p>
<p>Hors, $cell->nodeValue ne me renvoi que le texte et pas le contenu complet de la cellule.</p>
<p>Auriez-vous une solution ?</p>
<p>Merci d&rsquo;avance.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Quand une variable n&#8217;est pas égale à elle-même par Uther</title>
		<link>https://blog.developpez.com/james-poulson/p11180/java/quand_une_variable_n_est_pas_egale_a_ell#comment-18</link>
		<dc:creator><![CDATA[Uther]]></dc:creator>
		<pubDate>Tue, 31 Jul 2012 16:04:30 +0000</pubDate>
		<guid isPermaLink="false">#comment-18</guid>
		<description><![CDATA[Autant je connaissais la subtilité du NaN qui n&#039;est pas égal à lui-même, autant je ne savais pas que les séquences d’échappement Unicode pouvaient être utilisées en dehors des chaines de caractères.&lt;br /&gt;
&lt;br /&gt;
Je pense que ça ne me servira jamais mais merci quand même pour l&#039;info.]]></description>
		<content:encoded><![CDATA[<p>Autant je connaissais la subtilité du NaN qui n&rsquo;est pas égal à lui-même, autant je ne savais pas que les séquences d’échappement Unicode pouvaient être utilisées en dehors des chaines de caractères.</p>
<p>Je pense que ça ne me servira jamais mais merci quand même pour l&rsquo;info.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Créer des instances à travers un enum par benwit</title>
		<link>https://blog.developpez.com/james-poulson/p11167/java/creer_des_instances_a_travers_un_enum#comment-17</link>
		<dc:creator><![CDATA[benwit]]></dc:creator>
		<pubDate>Mon, 23 Jul 2012 05:57:05 +0000</pubDate>
		<guid isPermaLink="false">#comment-17</guid>
		<description><![CDATA[Perso, j&#039;aime bien utiliser le côté objet des enum Java pour les enrichir avec des caractéristiques supplémentaires.&lt;br /&gt;
&lt;br /&gt;
Après, c&#039;est sûr, il faut faire attention de ne pas trop en faire.&lt;br /&gt;
Pour l&#039;exemple, j&#039;aime bien la factory de &quot;le y@m&#039;s&quot; mais dans l&#039;enum FileType, je laisserai le libellé et les extensions (par défaut) associés au type de fichier. Je trouve que ces infos ont leur place ici.]]></description>
		<content:encoded><![CDATA[<p>Perso, j&rsquo;aime bien utiliser le côté objet des enum Java pour les enrichir avec des caractéristiques supplémentaires.</p>
<p>Après, c&rsquo;est sûr, il faut faire attention de ne pas trop en faire.<br />
Pour l&rsquo;exemple, j&rsquo;aime bien la factory de &laquo;&nbsp;le y@m&rsquo;s&nbsp;&raquo; mais dans l&rsquo;enum FileType, je laisserai le libellé et les extensions (par défaut) associés au type de fichier. Je trouve que ces infos ont leur place ici.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Un Filefilter reprenant plusieurs extensions de fichier par le y@m\'s</title>
		<link>https://blog.developpez.com/james-poulson/p11166/java/un_filefilter_reprenant_plusieurs_extens#comment-55</link>
		<dc:creator><![CDATA[le y@m\'s]]></dc:creator>
		<pubDate>Mon, 23 Jul 2012 01:17:05 +0000</pubDate>
		<guid isPermaLink="false">#comment-55</guid>
		<description><![CDATA[Le &lt;code&gt;SortedSet&lt;/code&gt; est une collection triée d&#039;objets uniques. &lt;br /&gt;
Dans ton cas d&#039;utilisation (chercher dans la collection si un élément existe), le fait qu&#039;elle soit triée a tout sont intérêt, cela rend plus facile la recherche d&#039;un élément.&lt;br /&gt;
Par exemple, avec les extensions &quot;bmp&quot;, &quot;gif&quot;, &quot;jpg&quot;, &quot;png&quot;, &quot;tif&quot;.&lt;br /&gt;
Si on recherche l&#039;extension &quot;tif&quot;, en utilisant le parcours simple du tableau, complexité O(n), cela nécessiterait de le parcourir dans son intégralité soit 5 itérations.&lt;br /&gt;
En utilisant une collection triée, avec un algo du genre dichotomie, complexité O(log(n)), le nombre d&#039;itération tombe à 2 ou 3.&lt;br /&gt;
&lt;br /&gt;
Pour t&#039;aider à comprendre la notation de la complexité en O, pense aux courbes des fonctions.&lt;br /&gt;
En abscisse tu as le &quot;n&quot; qui représente ce que tu &quot;demandes&quot; à l&#039;algorithme et l&#039;ordonnée représente le nombre d&#039;itération qu&#039;il effectuera.&lt;br /&gt;
Donc pour la complexité O(n) (imagine la courbe d&#039;une fonction f(n) = n ) ça te donne une droite qui augment linéairement. Donc plus tu demandes à l&#039;algo, plus cela va coûter en perfs et ce de façon linéaire.&lt;br /&gt;
Maintenant pour la complexité O(log(n)), visualise la fonction log(n). Au début ça monte un peu linéairement mais que plus n augmente moins la courbe monte et elle tend à se stabiliser. Une complexité O(log(n)) est donc mieux qu&#039;une complexité O(n).&lt;br /&gt;
Inversement prend une complexité O(n²), la courbe n² augmente beaucoup plus rapidement que la courbe n, la complexité O(n²) est donc supérieure.&lt;br /&gt;
&lt;br /&gt;
Superpose les courbes sur un même graphe ça devrait t&#039;aider à mieux visualiser ;)&lt;br /&gt;
&lt;br /&gt;
Donc pour en revenir à la méthode &lt;code&gt;contains()&lt;/code&gt; du &lt;code&gt;SortedSet&lt;/code&gt;, la javadoc confirme que sa complexité est en O(log(n)) ce qui est nettement plus performant que le parcours systématique d&#039;un tableau de complexité O(n) ;).&lt;br /&gt;
]]></description>
		<content:encoded><![CDATA[<p>Le</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">SortedSet</div></div>
<p>est une collection triée d&rsquo;objets uniques. <br />
Dans ton cas d&rsquo;utilisation (chercher dans la collection si un élément existe), le fait qu&rsquo;elle soit triée a tout sont intérêt, cela rend plus facile la recherche d&rsquo;un élément.<br />
Par exemple, avec les extensions &laquo;&nbsp;bmp&nbsp;&raquo;, &laquo;&nbsp;gif&nbsp;&raquo;, &laquo;&nbsp;jpg&nbsp;&raquo;, &laquo;&nbsp;png&nbsp;&raquo;, &laquo;&nbsp;tif&nbsp;&raquo;.<br />
Si on recherche l&rsquo;extension &laquo;&nbsp;tif&nbsp;&raquo;, en utilisant le parcours simple du tableau, complexité O(n), cela nécessiterait de le parcourir dans son intégralité soit 5 itérations.<br />
En utilisant une collection triée, avec un algo du genre dichotomie, complexité O(log(n)), le nombre d&rsquo;itération tombe à 2 ou 3.</p>
<p>Pour t&rsquo;aider à comprendre la notation de la complexité en O, pense aux courbes des fonctions.<br />
En abscisse tu as le &laquo;&nbsp;n&nbsp;&raquo; qui représente ce que tu &laquo;&nbsp;demandes&nbsp;&raquo; à l&rsquo;algorithme et l&rsquo;ordonnée représente le nombre d&rsquo;itération qu&rsquo;il effectuera.<br />
Donc pour la complexité O(n) (imagine la courbe d&rsquo;une fonction f(n) = n ) ça te donne une droite qui augment linéairement. Donc plus tu demandes à l&rsquo;algo, plus cela va coûter en perfs et ce de façon linéaire.<br />
Maintenant pour la complexité O(log(n)), visualise la fonction log(n). Au début ça monte un peu linéairement mais que plus n augmente moins la courbe monte et elle tend à se stabiliser. Une complexité O(log(n)) est donc mieux qu&rsquo;une complexité O(n).<br />
Inversement prend une complexité O(n²), la courbe n² augmente beaucoup plus rapidement que la courbe n, la complexité O(n²) est donc supérieure.</p>
<p>Superpose les courbes sur un même graphe ça devrait t&rsquo;aider à mieux visualiser <img src="https://blog.developpez.com/james-poulson/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /></p>
<p>Donc pour en revenir à la méthode</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">contains()</div></div>
<p>du</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">SortedSet</div></div>
<p>, la javadoc confirme que sa complexité est en O(log(n)) ce qui est nettement plus performant que le parcours systématique d&rsquo;un tableau de complexité O(n) ;).</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Créer des instances à travers un enum par le y@m\'s</title>
		<link>https://blog.developpez.com/james-poulson/p11167/java/creer_des_instances_a_travers_un_enum#comment-16</link>
		<dc:creator><![CDATA[le y@m\'s]]></dc:creator>
		<pubDate>Mon, 23 Jul 2012 00:42:36 +0000</pubDate>
		<guid isPermaLink="false">#comment-16</guid>
		<description><![CDATA[La cohésion est une notion de POO qui en quelques sorte représente les responsabilités d&#039;une classe.&lt;br /&gt;
Une forte cohésion indique qu&#039;une classe ne se disperse pas dans une multitude de responsabilité, elle se &quot;concentre&quot; sur une chose. A l&#039;inverse, une faible cohésion indique une classe faisant plusieurs choses différentes.&lt;br /&gt;
&lt;br /&gt;
Du fait quelle rend une classe plus simple, une forte cohésion augmente sa lisibilité et sa compréhension. Elle augmente également la maintenabilité ainsi que la modularité du code.&lt;br /&gt;
&lt;br /&gt;
C&#039;est comme le principe qu&#039;il est plus facile de résoudre plusieurs petit problèmes simples qu&#039;un seul gros problème compliqué ;). &lt;br /&gt;
&lt;br /&gt;
C&#039;est un concept important de la POO tout comme le couplage (qui lui, doit au contraire être le plus faible possible). En cherchant sur le net tu trouveras facilement de la littérature sur ces deux notions ;)&lt;br /&gt;
]]></description>
		<content:encoded><![CDATA[<p>La cohésion est une notion de POO qui en quelques sorte représente les responsabilités d&rsquo;une classe.<br />
Une forte cohésion indique qu&rsquo;une classe ne se disperse pas dans une multitude de responsabilité, elle se &laquo;&nbsp;concentre&nbsp;&raquo; sur une chose. A l&rsquo;inverse, une faible cohésion indique une classe faisant plusieurs choses différentes.</p>
<p>Du fait quelle rend une classe plus simple, une forte cohésion augmente sa lisibilité et sa compréhension. Elle augmente également la maintenabilité ainsi que la modularité du code.</p>
<p>C&rsquo;est comme le principe qu&rsquo;il est plus facile de résoudre plusieurs petit problèmes simples qu&rsquo;un seul gros problème compliqué ;). </p>
<p>C&rsquo;est un concept important de la POO tout comme le couplage (qui lui, doit au contraire être le plus faible possible). En cherchant sur le net tu trouveras facilement de la littérature sur ces deux notions <img src="https://blog.developpez.com/james-poulson/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /></p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Créer des instances à travers un enum par jpoulson</title>
		<link>https://blog.developpez.com/james-poulson/p11167/java/creer_des_instances_a_travers_un_enum#comment-15</link>
		<dc:creator><![CDATA[jpoulson]]></dc:creator>
		<pubDate>Sun, 22 Jul 2012 18:57:22 +0000</pubDate>
		<guid isPermaLink="false">#comment-15</guid>
		<description><![CDATA[Merci pour les commentaires. J&#039;avoue ici avoir visé le possible sans me pencher sur la conception et les aspects pratiques. L&#039;idée est juste venu en voyant que certains programmeurs décrivent des valeurs par défaut en &quot;dur&quot; pour substituer l&#039;éventuelle absence d&#039;un fichier de configuration.&lt;br /&gt;
&lt;br /&gt;
@le y@m&#039;s, j&#039;apprécie beaucoup. Pourrais-tu expliquer ton raisonnement face à cette question de cohésion ? S&#039;agit t-il de diviser les données et responsabilités en unités distinctes ? Je comprend le principe du motif Factory.&lt;br /&gt;
&lt;br /&gt;
@lunatix, il est vrai que l&#039;Enum peut être utilisé à d&#039;autres fins. Pour le singleton cela est justement conseillé par Jon Skeet sur le site StackOverflow. C&#039;est dans cet esprit là que j&#039;ai imaginé la structure ci-dessous.&lt;br /&gt;
&lt;br /&gt;
@Tarul: Tu as tout à fait raison! Je n&#039;avais pas pensé à cela. En effet, lorsqu&#039;on appelle un enum on dirait que toutes les valeurs sont enclenchées à la fois. Je réflêchirait à un moyen d&#039;éviter cela mais la solution du Factory semble être plus appropriée.]]></description>
		<content:encoded><![CDATA[<p>Merci pour les commentaires. J&rsquo;avoue ici avoir visé le possible sans me pencher sur la conception et les aspects pratiques. L&rsquo;idée est juste venu en voyant que certains programmeurs décrivent des valeurs par défaut en &laquo;&nbsp;dur&nbsp;&raquo; pour substituer l&rsquo;éventuelle absence d&rsquo;un fichier de configuration.</p>
<p>@le y@m&rsquo;s, j&rsquo;apprécie beaucoup. Pourrais-tu expliquer ton raisonnement face à cette question de cohésion ? S&rsquo;agit t-il de diviser les données et responsabilités en unités distinctes ? Je comprend le principe du motif Factory.</p>
<p>@lunatix, il est vrai que l&rsquo;Enum peut être utilisé à d&rsquo;autres fins. Pour le singleton cela est justement conseillé par Jon Skeet sur le site StackOverflow. C&rsquo;est dans cet esprit là que j&rsquo;ai imaginé la structure ci-dessous.</p>
<p>@Tarul: Tu as tout à fait raison! Je n&rsquo;avais pas pensé à cela. En effet, lorsqu&rsquo;on appelle un enum on dirait que toutes les valeurs sont enclenchées à la fois. Je réflêchirait à un moyen d&rsquo;éviter cela mais la solution du Factory semble être plus appropriée.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Un Filefilter reprenant plusieurs extensions de fichier par jpoulson</title>
		<link>https://blog.developpez.com/james-poulson/p11166/java/un_filefilter_reprenant_plusieurs_extens#comment-54</link>
		<dc:creator><![CDATA[jpoulson]]></dc:creator>
		<pubDate>Sat, 21 Jul 2012 22:35:09 +0000</pubDate>
		<guid isPermaLink="false">#comment-54</guid>
		<description><![CDATA[Bonsoir,&lt;br /&gt;
&lt;br /&gt;
Merci pour les suggestions. En effet, tel qu&#039;était écrit le code le endsWith provoque une sortie prématurée de la boucle. Pour le reste, je ne suis pas familier avec la collection SortedSet. Existe t-il une référence qui compare les performances de différentes structures ? Aussi, j&#039;essaye de m&#039;y faire à la notation O pour la comparaison des algorithmes mais ce n&#039;est pas encore gagné :)]]></description>
		<content:encoded><![CDATA[<p>Bonsoir,</p>
<p>Merci pour les suggestions. En effet, tel qu&rsquo;était écrit le code le endsWith provoque une sortie prématurée de la boucle. Pour le reste, je ne suis pas familier avec la collection SortedSet. Existe t-il une référence qui compare les performances de différentes structures ? Aussi, j&rsquo;essaye de m&rsquo;y faire à la notation O pour la comparaison des algorithmes mais ce n&rsquo;est pas encore gagné <img src="https://blog.developpez.com/james-poulson/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Créer des instances à travers un enum par Tarul</title>
		<link>https://blog.developpez.com/james-poulson/p11167/java/creer_des_instances_a_travers_un_enum#comment-14</link>
		<dc:creator><![CDATA[Tarul]]></dc:creator>
		<pubDate>Fri, 20 Jul 2012 13:21:56 +0000</pubDate>
		<guid isPermaLink="false">#comment-14</guid>
		<description><![CDATA[Bonjour,&lt;br /&gt;
&lt;br /&gt;
je ne vais pas critiquer la mise en place d&#039;une factory dans une enum (en fait je comprend que l&#039;on souhaite mettre ce genre de chose dans certains cas), mais je vais quand même faire une critique sur le code de l&#039;article.&lt;br /&gt;
&lt;br /&gt;
Les méthodes suivantes : &lt;br /&gt;
&lt;code&gt; public FileFilter getFileFilter() {  &#160;&lt;br /&gt;
&#160;   return new MultipleExtensionFileFilter(filterName,fileNameExtensions); &#160;&lt;br /&gt;
&#160; } &#160;&lt;br /&gt;
&#160; &#160;&lt;br /&gt;
&#160; public static List getAllFileFilters() { &#160;&lt;br /&gt;
&#160;   &#160;&lt;br /&gt;
&#160;   List fileFilters = new ArrayList(); &#160;&lt;br /&gt;
&#160;   &#160;&lt;br /&gt;
&#160;   for( FileFiltersEnum fileFilterEnum : FileFiltersEnum.values()) { &#160;&lt;br /&gt;
&#160;     fileFilters.add(new MultipleExtensionFileFilter(fileFilterEnum.filterName,fileFilterEnum.fileNameExtensions)); &#160;&lt;br /&gt;
&#160;   } &#160;&lt;br /&gt;
&#160;   &#160;&lt;br /&gt;
&#160;   return fileFilters; &#160;&lt;br /&gt;
&#160; }&#160;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
ont le défaut de générer de nouvelles instances de MultipleExtensionFileFilter à chaque appel. Ce n&#039;est pas ça qui va te provoquer&lt;br /&gt;
un OutOfMemory, mais je trouve cela dommage.]]></description>
		<content:encoded><![CDATA[<p>Bonjour,</p>
<p>je ne vais pas critiquer la mise en place d&rsquo;une factory dans une enum (en fait je comprend que l&rsquo;on souhaite mettre ce genre de chose dans certains cas), mais je vais quand même faire une critique sur le code de l&rsquo;article.</p>
<p>Les méthodes suivantes : </p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;public FileFilter getFileFilter() { &nbsp;&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; return new MultipleExtensionFileFilter(filterName,fileNameExtensions); &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; } &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; public static List getAllFileFilters() { &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; List fileFilters = new ArrayList(); &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; for( FileFiltersEnum fileFilterEnum : FileFiltersEnum.values()) { &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; &nbsp; fileFilters.add(new MultipleExtensionFileFilter(fileFilterEnum.filterName,fileFilterEnum.fileNameExtensions)); &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; } &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; return fileFilters; &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; }&amp;nbsp;&lt;br /&gt;</div></div>
<p>
ont le défaut de générer de nouvelles instances de MultipleExtensionFileFilter à chaque appel. Ce n&rsquo;est pas ça qui va te provoquer<br />
un OutOfMemory, mais je trouve cela dommage.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Créer des instances à travers un enum par le y@m\'s</title>
		<link>https://blog.developpez.com/james-poulson/p11167/java/creer_des_instances_a_travers_un_enum#comment-13</link>
		<dc:creator><![CDATA[le y@m\'s]]></dc:creator>
		<pubDate>Fri, 20 Jul 2012 12:39:20 +0000</pubDate>
		<guid isPermaLink="false">#comment-13</guid>
		<description><![CDATA[Je ne suis pas un extremiste du &quot;non au singleton&quot; mais c&#039;est un dp à utiliser avec extrême modération. Dans la très grande majorité des cas une interface et une injection de dépendance sont à préférer.&lt;br /&gt;
&lt;br /&gt;
Rajouter les responsabilités dans une classe comme ça va ne fait que réduire sa cohérence, la rendre moins flexible, moins lisible et moins maintenable. Quel est l&#039;intérêt de faire ça au vu des inconvénients ? Avoir une seule classe au lieu de trois ? La belle affaire ^^.&lt;br /&gt;
&lt;br /&gt;
Alors oui l&#039;enum est un objet et peut servir à faire des factory, mais ce qu&#039;on peut faire n&#039;est pas toujours la meilleure chose à faire ;) (ce n&#039;est pas parce qu&#039;on peut que c&#039;est bien, on peut faire beaucoup d&#039;horreur en Java ^^)]]></description>
		<content:encoded><![CDATA[<p>Je ne suis pas un extremiste du &laquo;&nbsp;non au singleton&nbsp;&raquo; mais c&rsquo;est un dp à utiliser avec extrême modération. Dans la très grande majorité des cas une interface et une injection de dépendance sont à préférer.</p>
<p>Rajouter les responsabilités dans une classe comme ça va ne fait que réduire sa cohérence, la rendre moins flexible, moins lisible et moins maintenable. Quel est l&rsquo;intérêt de faire ça au vu des inconvénients ? Avoir une seule classe au lieu de trois ? La belle affaire ^^.</p>
<p>Alors oui l&rsquo;enum est un objet et peut servir à faire des factory, mais ce qu&rsquo;on peut faire n&rsquo;est pas toujours la meilleure chose à faire <img src="https://blog.developpez.com/james-poulson/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /> (ce n&rsquo;est pas parce qu&rsquo;on peut que c&rsquo;est bien, on peut faire beaucoup d&rsquo;horreur en Java ^^)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Créer des instances à travers un enum par lunatix</title>
		<link>https://blog.developpez.com/james-poulson/p11167/java/creer_des_instances_a_travers_un_enum#comment-12</link>
		<dc:creator><![CDATA[lunatix]]></dc:creator>
		<pubDate>Fri, 20 Jul 2012 11:58:22 +0000</pubDate>
		<guid isPermaLink="false">#comment-12</guid>
		<description><![CDATA[&quot;Une enum est une enum, son principe est de définir une liste fixe de constante point.&quot;&lt;br /&gt;
&lt;br /&gt;
ben non, justement, l&#039;Enum java est un objet, et il peut servir comme factory. (c&#039;est même le meilleur moyen de faire des singletons par exemple)&lt;br /&gt;
&lt;br /&gt;
c&#039;est pas l&#039;enum C++]]></description>
		<content:encoded><![CDATA[<p>&laquo;&nbsp;Une enum est une enum, son principe est de définir une liste fixe de constante point.&nbsp;&raquo;</p>
<p>ben non, justement, l&rsquo;Enum java est un objet, et il peut servir comme factory. (c&rsquo;est même le meilleur moyen de faire des singletons par exemple)</p>
<p>c&rsquo;est pas l&rsquo;enum C++</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Créer des instances à travers un enum par le y@m\'s</title>
		<link>https://blog.developpez.com/james-poulson/p11167/java/creer_des_instances_a_travers_un_enum#comment-11</link>
		<dc:creator><![CDATA[le y@m\'s]]></dc:creator>
		<pubDate>Fri, 20 Jul 2012 11:17:25 +0000</pubDate>
		<guid isPermaLink="false">#comment-11</guid>
		<description><![CDATA[Je trouve que c&#039;est un peu crado de mélanger les concepts comme ça :s et de faire d&#039;une enum une pseudo factory. C&#039;est pas flexible, pas extensible, la cohésion en prend un sacré coup et ça nuit aussi à la lisibilité et à la maintenabilité du code.&lt;br /&gt;
&lt;br /&gt;
Il est préférable de séparer les aspects et les responsabilités. Une enum est une enum, son principe est de définir une liste fixe de constante point.&lt;br /&gt;
&lt;br /&gt;
Si on veut associer quelque chose à ces constante (tes FileFilter par exemple) ce n&#039;est pas à l&#039;enum d&#039;en prendre la responsabilité. Ces enum pourraient servir dans un autre contexte où le concept de FileFilter n&#039;a aucun intérêt. Et si dans cet autre context tu as besoin d&#039;associer autre chose à tes enum, tu vas encore modifier la classe de l&#039;enum ? En faisant ça on arrive vite à des classes monstres et monstrueuses qui font tout et n&#039;importe quoi. Après c&#039;est l&#039;horreur à maintenir.&lt;br /&gt;
&lt;br /&gt;
Donc pour associer tes enum à tes FileFilter il est préférable de faire une simple factory et de laisser ton enum la plus simple possible. &lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&#160;&lt;br /&gt;
// enumeration simple&#160;&lt;br /&gt;
public enum FileType {&#160;&lt;br /&gt;
&#160;   JPEG,&#160;&lt;br /&gt;
&#160;   BITMAP,&#160;&lt;br /&gt;
&#160;   PNG,&#160;&lt;br /&gt;
&#160;   GIF,&#160;&lt;br /&gt;
&#160;   TIFF&#160;&lt;br /&gt;
}&#160;&lt;br /&gt;
&#160;&lt;br /&gt;
// interface de ma factory&#160;&lt;br /&gt;
public interface MultipleExtensionFileFilterProvider {&#160;&lt;br /&gt;
&#160;&lt;br /&gt;
&#160;   MultipleExtensionFileFilter getFileFilter(FileType fileType);&#160;&lt;br /&gt;
&#160;&lt;br /&gt;
&#160;   MultipleExtensionFileFilter[] getAllFileFilters();&#160;&lt;br /&gt;
}&#160;&lt;br /&gt;
&#160;&lt;br /&gt;
// une implementation&#160;&lt;br /&gt;
public class DefaultMultipleExtensionFileFilterProvider implements MultipleExtensionFileFilterProvider {&#160;&lt;br /&gt;
&#160;&lt;br /&gt;
&#160;   private Map filters = new EnumMap(FileType.class);&#160;&lt;br /&gt;
&#160;&lt;br /&gt;
&#160;   public DefaultMultipleExtensionFileFilterProvider() {&#160;&lt;br /&gt;
&#160;       filters.put(FileType.JPEG, new MultipleExtensionFileFilter(&quot;JPEG files&quot;, &quot;.jpg&quot;,&quot;.jpe&quot;,&quot;.jpeg&quot;,&quot;.jfif&quot;,&quot;.fif&quot;));&#160;&lt;br /&gt;
&#160;       filters.put(FileType.BITMAP, new MultipleExtensionFileFilter(&quot;Bitmap files&quot;, &quot;.bmp&quot;));&#160;&lt;br /&gt;
&#160;       filters.put(FileType.PNG, new MultipleExtensionFileFilter(&quot;PNG files&quot;, &quot;.png&quot;));&#160;&lt;br /&gt;
&#160;       filters.put(FileType.GIF, new MultipleExtensionFileFilter(&quot;GIF files&quot;, &quot;.gif&quot;));&#160;&lt;br /&gt;
&#160;       filters.put(FileType.TIFF, new MultipleExtensionFileFilter(&quot;TIFF files&quot;, &quot;.tif&quot;));&#160;&lt;br /&gt;
&#160;   }&#160;&lt;br /&gt;
&#160;   &#160;&lt;br /&gt;
&#160;   @Override&#160;&lt;br /&gt;
&#160;   public MultipleExtensionFileFilter getFileFilter(FileType fileType) {&#160;&lt;br /&gt;
&#160;       return filters.get(fileType);&#160;&lt;br /&gt;
&#160;   }&#160;&lt;br /&gt;
&#160;   &#160;&lt;br /&gt;
&#160;   @Override&#160;&lt;br /&gt;
&#160;   public MultipleExtensionFileFilter[] getAllFileFilters() {&#160;&lt;br /&gt;
&#160;       return filters.values().toArray(new MultipleExtensionFileFilter[filters.size()]);&#160;&lt;br /&gt;
&#160;   }&#160;&lt;br /&gt;
&#160;   &#160;&lt;br /&gt;
}&#160;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi pour l&#039;utilisation on utilise la factory de manière transparente&lt;br /&gt;
&lt;code&gt;&#160;&lt;br /&gt;
MultipleExtensionFileFilterProvider filterProvider = new DefaultMultipleExtensionFileFilterProvider();&#160;&lt;br /&gt;
&#160;&lt;br /&gt;
...&#160;&lt;br /&gt;
FileFilter jpegFileFilter = filterProvider.getFileFilter(FileType.JPEG);&#160;&lt;br /&gt;
chooser.addChoosableFileFilter(jpegFileFilter); &#160;&lt;br /&gt;
&#160;&lt;br /&gt;
// On récupère tous les Filefilters &#160;&lt;br /&gt;
List imageFilters = filterProvider.getAllFileFilters(); &#160;&lt;br /&gt;
&#160;&lt;br /&gt;
for ( FileFilter filter : imageFilters ) { &#160;&lt;br /&gt;
&#160;   chooser.addChoosableFileFilter(filter); &#160;&lt;br /&gt;
} &#160;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
L&#039;autre avantage est que tu peux utiliser une autre implémentation de la factory, tes associations ne sont pas gravées dans le marbre ad vitam aeternam. ]]></description>
		<content:encoded><![CDATA[<p>Je trouve que c&rsquo;est un peu crado de mélanger les concepts comme ça :s et de faire d&rsquo;une enum une pseudo factory. C&rsquo;est pas flexible, pas extensible, la cohésion en prend un sacré coup et ça nuit aussi à la lisibilité et à la maintenabilité du code.</p>
<p>Il est préférable de séparer les aspects et les responsabilités. Une enum est une enum, son principe est de définir une liste fixe de constante point.</p>
<p>Si on veut associer quelque chose à ces constante (tes FileFilter par exemple) ce n&rsquo;est pas à l&rsquo;enum d&rsquo;en prendre la responsabilité. Ces enum pourraient servir dans un autre contexte où le concept de FileFilter n&rsquo;a aucun intérêt. Et si dans cet autre context tu as besoin d&rsquo;associer autre chose à tes enum, tu vas encore modifier la classe de l&rsquo;enum ? En faisant ça on arrive vite à des classes monstres et monstrueuses qui font tout et n&rsquo;importe quoi. Après c&rsquo;est l&rsquo;horreur à maintenir.</p>
<p>Donc pour associer tes enum à tes FileFilter il est préférable de faire une simple factory et de laisser ton enum la plus simple possible. </p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;nbsp;&lt;br /&gt;<br />
// enumeration simple&amp;nbsp;&lt;br /&gt;<br />
public enum FileType {&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; JPEG,&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; BITMAP,&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; PNG,&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; GIF,&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; TIFF&amp;nbsp;&lt;br /&gt;<br />
}&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp;&lt;br /&gt;<br />
// interface de ma factory&amp;nbsp;&lt;br /&gt;<br />
public interface MultipleExtensionFileFilterProvider {&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; MultipleExtensionFileFilter getFileFilter(FileType fileType);&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; MultipleExtensionFileFilter[] getAllFileFilters();&amp;nbsp;&lt;br /&gt;<br />
}&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp;&lt;br /&gt;<br />
// une implementation&amp;nbsp;&lt;br /&gt;<br />
public class DefaultMultipleExtensionFileFilterProvider implements MultipleExtensionFileFilterProvider {&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; private Map filters = new EnumMap(FileType.class);&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; public DefaultMultipleExtensionFileFilterProvider() {&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; &nbsp; &nbsp; filters.put(FileType.JPEG, new MultipleExtensionFileFilter(&quot;JPEG files&quot;, &quot;.jpg&quot;,&quot;.jpe&quot;,&quot;.jpeg&quot;,&quot;.jfif&quot;,&quot;.fif&quot;));&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; &nbsp; &nbsp; filters.put(FileType.BITMAP, new MultipleExtensionFileFilter(&quot;Bitmap files&quot;, &quot;.bmp&quot;));&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; &nbsp; &nbsp; filters.put(FileType.PNG, new MultipleExtensionFileFilter(&quot;PNG files&quot;, &quot;.png&quot;));&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; &nbsp; &nbsp; filters.put(FileType.GIF, new MultipleExtensionFileFilter(&quot;GIF files&quot;, &quot;.gif&quot;));&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; &nbsp; &nbsp; filters.put(FileType.TIFF, new MultipleExtensionFileFilter(&quot;TIFF files&quot;, &quot;.tif&quot;));&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; }&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; @Override&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; public MultipleExtensionFileFilter getFileFilter(FileType fileType) {&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; &nbsp; &nbsp; return filters.get(fileType);&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; }&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; @Override&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; public MultipleExtensionFileFilter[] getAllFileFilters() {&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; &nbsp; &nbsp; return filters.values().toArray(new MultipleExtensionFileFilter[filters.size()]);&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; }&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; &amp;nbsp;&lt;br /&gt;<br />
}&amp;nbsp;&lt;br /&gt;</div></div>
<p>Ainsi pour l&rsquo;utilisation on utilise la factory de manière transparente</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;nbsp;&lt;br /&gt;<br />
MultipleExtensionFileFilterProvider filterProvider = new DefaultMultipleExtensionFileFilterProvider();&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp;&lt;br /&gt;<br />
...&amp;nbsp;&lt;br /&gt;<br />
FileFilter jpegFileFilter = filterProvider.getFileFilter(FileType.JPEG);&amp;nbsp;&lt;br /&gt;<br />
chooser.addChoosableFileFilter(jpegFileFilter); &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp;&lt;br /&gt;<br />
// On récupère tous les Filefilters &amp;nbsp;&lt;br /&gt;<br />
List imageFilters = filterProvider.getAllFileFilters(); &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp;&lt;br /&gt;<br />
for ( FileFilter filter : imageFilters ) { &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; chooser.addChoosableFileFilter(filter); &amp;nbsp;&lt;br /&gt;<br />
} &amp;nbsp;&lt;br /&gt;</div></div>
<p>
L&rsquo;autre avantage est que tu peux utiliser une autre implémentation de la factory, tes associations ne sont pas gravées dans le marbre ad vitam aeternam. </p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Un Filefilter reprenant plusieurs extensions de fichier par le y@m\'s</title>
		<link>https://blog.developpez.com/james-poulson/p11166/java/un_filefilter_reprenant_plusieurs_extens#comment-53</link>
		<dc:creator><![CDATA[le y@m\'s]]></dc:creator>
		<pubDate>Fri, 20 Jul 2012 10:41:08 +0000</pubDate>
		<guid isPermaLink="false">#comment-53</guid>
		<description><![CDATA[Je pense qu&#039;il y a une erreur dans ton code. En effet, si l&#039;extension du fichier n&#039;est pas la première du tableau alors ta méthode &lt;code&gt;accept&lt;/code&gt; renverra toujours &lt;code&gt;false&lt;/code&gt;. Le code serait plutôt :&lt;br /&gt;
&lt;code&gt;&#160;&lt;br /&gt;
for( String extension : extensions ){ &#160;&lt;br /&gt;
&#160;   if(nomFichier.endsWith(extension)) {&#160;&lt;br /&gt;
&#160;       return true;&#160;&lt;br /&gt;
&#160;   }&#160;&lt;br /&gt;
}     &#160;&lt;br /&gt;
return false; &#160;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite il serait peut être plus performant d&#039;utiliser un &lt;code&gt;SortedSet&lt;/code&gt; pour stocker les extensions puis pour le test de récupérer l&#039;extension sur le nom du fichier et faire un simple &lt;code&gt;contains()&lt;/code&gt;.&lt;br /&gt;
&lt;code&gt;&#160;&lt;br /&gt;
private final SortedSet extensions = new TreeSet();&#160;&lt;br /&gt;
&#160;&lt;br /&gt;
public MultipleExtensionFileFilter(String description, String... extensions) {&#160;&lt;br /&gt;
&#160;   this.extensions.addAll(Arrays.asList(extensions)); // De base les valeurs null ne sont pas permises pas le TreeSet&#160;&lt;br /&gt;
&#160;   &#160;&lt;br /&gt;
&#160;   StringBuilder sb = new StringBuilder(description).append(&quot; (&quot;); &#160;&lt;br /&gt;
&#160;   for( String s : extensions ){ &#160;&lt;br /&gt;
&#160;     sb.append(&quot;*&quot;).append(s).append(&quot;,&quot;); &#160;&lt;br /&gt;
&#160;   } &#160;&lt;br /&gt;
&#160;   sb.replace(sb.length() - 1, sb.length(), &quot;)&quot;); // remplacement du dernier &#039;,&#039; par &#039;)&#039;&#160;&lt;br /&gt;
&#160;   this.description = sb.toString(); &#160;&lt;br /&gt;
&#160; }&#160;&lt;br /&gt;
&#160;&lt;br /&gt;
&#160; public boolean accept(File file) { &#160;&lt;br /&gt;
&#160;   if (file.isDirectory()) { &#160;&lt;br /&gt;
&#160;     return true; &#160;&lt;br /&gt;
&#160;   } &#160;&lt;br /&gt;
&#160;   String nomFichier = file.getName().toLowerCase(); &#160;&lt;br /&gt;
&#160;   int index = nomFichier.lastIndexOf(&quot;.&quot;);&#160;&lt;br /&gt;
&#160;   String extension = index &lt; 0 ? &quot;&quot; : nomFichier.substring(index + 1);&#160;&lt;br /&gt;
&#160;   return extensions.contains(extension);&#160;&lt;br /&gt;
&#160; }&#160;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
]]></description>
		<content:encoded><![CDATA[<p>Je pense qu&rsquo;il y a une erreur dans ton code. En effet, si l&rsquo;extension du fichier n&rsquo;est pas la première du tableau alors ta méthode</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">accept</div></div>
<p>renverra toujours</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">false</div></div>
<p>. Le code serait plutôt :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;nbsp;&lt;br /&gt;<br />
for( String extension : extensions ){ &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; if(nomFichier.endsWith(extension)) {&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; &nbsp; &nbsp; return true;&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; }&amp;nbsp;&lt;br /&gt;<br />
} &nbsp; &nbsp; &amp;nbsp;&lt;br /&gt;<br />
return false; &amp;nbsp;&lt;br /&gt;</div></div>
<p>Ensuite il serait peut être plus performant d&rsquo;utiliser un</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">SortedSet</div></div>
<p>pour stocker les extensions puis pour le test de récupérer l&rsquo;extension sur le nom du fichier et faire un simple</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">contains()</div></div>
<p>.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;nbsp;&lt;br /&gt;<br />
private final SortedSet extensions = new TreeSet();&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp;&lt;br /&gt;<br />
public MultipleExtensionFileFilter(String description, String... extensions) {&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; this.extensions.addAll(Arrays.asList(extensions)); // De base les valeurs null ne sont pas permises pas le TreeSet&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; StringBuilder sb = new StringBuilder(description).append(&quot; (&quot;); &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; for( String s : extensions ){ &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; &nbsp; sb.append(&quot;*&quot;).append(s).append(&quot;,&quot;); &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; } &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; sb.replace(sb.length() - 1, sb.length(), &quot;)&quot;); // remplacement du dernier ',' par ')'&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; this.description = sb.toString(); &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; }&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; public boolean accept(File file) { &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; if (file.isDirectory()) { &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; &nbsp; return true; &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; } &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; String nomFichier = file.getName().toLowerCase(); &amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; int index = nomFichier.lastIndexOf(&quot;.&quot;);&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; String extension = index &amp;lt; 0 ? &quot;&quot; : nomFichier.substring(index + 1);&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; return extensions.contains(extension);&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; }&amp;nbsp;&lt;br /&gt;</div></div>
<p></p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Utiliser l&#8217;API PHP de Facebook par jpoulson</title>
		<link>https://blog.developpez.com/james-poulson/p10114/code/premiers_pas_avec_la_sdk_de_facebook_1#comment-36</link>
		<dc:creator><![CDATA[jpoulson]]></dc:creator>
		<pubDate>Sun, 08 Jul 2012 14:30:07 +0000</pubDate>
		<guid isPermaLink="false">#comment-36</guid>
		<description><![CDATA[Bonjour Cédric,&lt;br /&gt;
&lt;br /&gt;
Tu trouveras ce dont tu as besoin sur la page suivante:&lt;br /&gt;
&lt;br /&gt;
https://developers.facebook.com/docs/reference/api/user/&lt;br /&gt;
&lt;br /&gt;
L&#039;objet User devrait contenir le champ significant_other qui reprend à son tour un name et un id. D&#039;après le tableau les permissions à activer pour y accéder sont  &quot;user_relationships&quot; ou &quot;friends_relationships&quot;.&lt;br /&gt;
&lt;br /&gt;
En espérant que cela te soit utile.]]></description>
		<content:encoded><![CDATA[<p>Bonjour Cédric,</p>
<p>Tu trouveras ce dont tu as besoin sur la page suivante:</p>
<p><a href="https://developers.facebook.com/docs/reference/api/user/" rel="nofollow">https://developers.facebook.com/docs/reference/api/user/</a></p>
<p>L&rsquo;objet User devrait contenir le champ significant_other qui reprend à son tour un name et un id. D&rsquo;après le tableau les permissions à activer pour y accéder sont  &laquo;&nbsp;user_relationships&nbsp;&raquo; ou &laquo;&nbsp;friends_relationships&nbsp;&raquo;.</p>
<p>En espérant que cela te soit utile.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Utiliser l&#8217;API PHP de Facebook par cedlannoy</title>
		<link>https://blog.developpez.com/james-poulson/p10114/code/premiers_pas_avec_la_sdk_de_facebook_1#comment-35</link>
		<dc:creator><![CDATA[cedlannoy]]></dc:creator>
		<pubDate>Thu, 14 Jun 2012 21:22:05 +0000</pubDate>
		<guid isPermaLink="false">#comment-35</guid>
		<description><![CDATA[Bonjour,&lt;br /&gt;
Merci pour cet article!&lt;br /&gt;
&lt;br /&gt;
Par contre comment récupérer la valeur de &#039;En couple avec&#039;&lt;br /&gt;
&lt;br /&gt;
En effet je souhaiterais avec l&#039;ID de compte Facebook mais aussi l&#039;ID du conjoint.&lt;br /&gt;
&lt;br /&gt;
Merci de votre aide.&lt;br /&gt;
Cédric&lt;br /&gt;
]]></description>
		<content:encoded><![CDATA[<p>Bonjour,<br />
Merci pour cet article!</p>
<p>Par contre comment récupérer la valeur de &lsquo;En couple avec&rsquo;</p>
<p>En effet je souhaiterais avec l&rsquo;ID de compte Facebook mais aussi l&rsquo;ID du conjoint.</p>
<p>Merci de votre aide.<br />
Cédric</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Utiliser l&#8217;API PHP de Facebook par jpoulson</title>
		<link>https://blog.developpez.com/james-poulson/p10114/code/premiers_pas_avec_la_sdk_de_facebook_1#comment-34</link>
		<dc:creator><![CDATA[jpoulson]]></dc:creator>
		<pubDate>Fri, 09 Mar 2012 14:34:36 +0000</pubDate>
		<guid isPermaLink="false">#comment-34</guid>
		<description><![CDATA[Bonjour Dr.Revolte,&lt;br /&gt;
&lt;br /&gt;
&lt;cite&gt;Je te remercie beaucoup pour ce petit article :)&lt;br /&gt;
Je suis débutant en php, et je veux réaliser une application FB, je trouve pas beaucoup d&#039;article &amp; tutoriel très intéressants pour apprendre à utiliser leur API.&lt;/cite&gt;&lt;br /&gt;
&lt;br /&gt;
Un merci à toi et aux autres pour le retour. C&#039;est vrai qu&#039;il manque un peu de tutoriels à jour. J&#039;espére que cet article a pu vous avancer :)]]></description>
		<content:encoded><![CDATA[<p>Bonjour Dr.Revolte,</p>
<p><cite>Je te remercie beaucoup pour ce petit article <img src="https://blog.developpez.com/james-poulson/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /><br />
Je suis débutant en php, et je veux réaliser une application FB, je trouve pas beaucoup d&rsquo;article &amp; tutoriel très intéressants pour apprendre à utiliser leur API.</cite></p>
<p>Un merci à toi et aux autres pour le retour. C&rsquo;est vrai qu&rsquo;il manque un peu de tutoriels à jour. J&rsquo;espére que cet article a pu vous avancer <img src="https://blog.developpez.com/james-poulson/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Utiliser l&#8217;API PHP de Facebook par jpoulson</title>
		<link>https://blog.developpez.com/james-poulson/p10114/code/premiers_pas_avec_la_sdk_de_facebook_1#comment-33</link>
		<dc:creator><![CDATA[jpoulson]]></dc:creator>
		<pubDate>Fri, 09 Mar 2012 14:32:28 +0000</pubDate>
		<guid isPermaLink="false">#comment-33</guid>
		<description><![CDATA[Bonjour randriano,&lt;br /&gt;
&lt;br /&gt;
&lt;cite&gt;Je me demande en fait pour la liste des friends, est-ce que l&#039;on ne peut avoir que l&#039;id et le name? Il n&#039;est donc pas possible de voir le mur d&#039;un ami? &lt;/cite&gt;&lt;br /&gt;
&lt;br /&gt;
D&#039;après la documentation, les informations se limitent à des informations publiques. Pour avoir plus d&#039;informations sur un utilisateur on doit normalement obtenir son autorisation sous forme de token.]]></description>
		<content:encoded><![CDATA[<p>Bonjour randriano,</p>
<p><cite>Je me demande en fait pour la liste des friends, est-ce que l&rsquo;on ne peut avoir que l&rsquo;id et le name? Il n&rsquo;est donc pas possible de voir le mur d&rsquo;un ami? </cite></p>
<p>D&rsquo;après la documentation, les informations se limitent à des informations publiques. Pour avoir plus d&rsquo;informations sur un utilisateur on doit normalement obtenir son autorisation sous forme de token.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Utiliser l&#8217;API PHP de Facebook par jpoulson</title>
		<link>https://blog.developpez.com/james-poulson/p10114/code/premiers_pas_avec_la_sdk_de_facebook_1#comment-32</link>
		<dc:creator><![CDATA[jpoulson]]></dc:creator>
		<pubDate>Fri, 09 Mar 2012 14:25:50 +0000</pubDate>
		<guid isPermaLink="false">#comment-32</guid>
		<description><![CDATA[Bonjour latristef,&lt;br /&gt;
&lt;br /&gt;
&lt;cite&gt;Je rebondis sur votre phrase &quot;une bonne pratique est de laisser l&#039;utilisateur connecté sur son compte Facebook et de le déconnecter uniquement de votre site.&quot;&lt;/cite&gt;&lt;br /&gt;
&lt;br /&gt;
L&#039;explication que j&#039;ai donné à trait à l&#039;authentification que se fait par bouton ou lien et qui nécessite donc qu&#039;un utilisateur enclenche un lien. De mémoire, le getLogoutUrl est utilisé ici pour setter l&#039;adresse de renvoi. Pour visualiser cela le script passe la main à Facebook lors de l&#039;authentification, l&#039;addresse par défaut étant certainement celle du script appellant. Il doit y avoir un diagramme de séquence qui explique cela sur la partie développeur. Pour le reste, il faudra que je fasse quelques tests mais je dirais qu&#039;il ne devrait pas être nécessaire de toucher à la session.]]></description>
		<content:encoded><![CDATA[<p>Bonjour latristef,</p>
<p><cite>Je rebondis sur votre phrase &laquo;&nbsp;une bonne pratique est de laisser l&rsquo;utilisateur connecté sur son compte Facebook et de le déconnecter uniquement de votre site.&nbsp;&raquo;</cite></p>
<p>L&rsquo;explication que j&rsquo;ai donné à trait à l&rsquo;authentification que se fait par bouton ou lien et qui nécessite donc qu&rsquo;un utilisateur enclenche un lien. De mémoire, le getLogoutUrl est utilisé ici pour setter l&rsquo;adresse de renvoi. Pour visualiser cela le script passe la main à Facebook lors de l&rsquo;authentification, l&rsquo;addresse par défaut étant certainement celle du script appellant. Il doit y avoir un diagramme de séquence qui explique cela sur la partie développeur. Pour le reste, il faudra que je fasse quelques tests mais je dirais qu&rsquo;il ne devrait pas être nécessaire de toucher à la session.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Utiliser l&#8217;API PHP de Facebook par randriano</title>
		<link>https://blog.developpez.com/james-poulson/p10114/code/premiers_pas_avec_la_sdk_de_facebook_1#comment-31</link>
		<dc:creator><![CDATA[randriano]]></dc:creator>
		<pubDate>Mon, 05 Mar 2012 14:40:39 +0000</pubDate>
		<guid isPermaLink="false">#comment-31</guid>
		<description><![CDATA[Bon, j&#039;ai compris le principe en lisant en plus le lien de Facebook:&lt;br /&gt;
developers.facebook.com/docs/reference/api/&lt;br /&gt;
&lt;br /&gt;
Thanks again!]]></description>
		<content:encoded><![CDATA[<p>Bon, j&rsquo;ai compris le principe en lisant en plus le lien de Facebook:<br />
developers.facebook.com/docs/reference/api/</p>
<p>Thanks again!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Utiliser l&#8217;API PHP de Facebook par randriano</title>
		<link>https://blog.developpez.com/james-poulson/p10114/code/premiers_pas_avec_la_sdk_de_facebook_1#comment-30</link>
		<dc:creator><![CDATA[randriano]]></dc:creator>
		<pubDate>Mon, 05 Mar 2012 11:37:04 +0000</pubDate>
		<guid isPermaLink="false">#comment-30</guid>
		<description><![CDATA[Bonjour James,&lt;br /&gt;
&lt;br /&gt;
Merci pour cet article!&lt;br /&gt;
Je me demande en fait pour la liste des friends, est-ce que l&#039;on ne peut avoir que l&#039;id et le name? Il n&#039;est donc pas possible de voir le mur d&#039;un ami?]]></description>
		<content:encoded><![CDATA[<p>Bonjour James,</p>
<p>Merci pour cet article!<br />
Je me demande en fait pour la liste des friends, est-ce que l&rsquo;on ne peut avoir que l&rsquo;id et le name? Il n&rsquo;est donc pas possible de voir le mur d&rsquo;un ami?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Utiliser l&#8217;API PHP de Facebook par Dr.Revolte</title>
		<link>https://blog.developpez.com/james-poulson/p10114/code/premiers_pas_avec_la_sdk_de_facebook_1#comment-29</link>
		<dc:creator><![CDATA[Dr.Revolte]]></dc:creator>
		<pubDate>Fri, 24 Feb 2012 10:41:33 +0000</pubDate>
		<guid isPermaLink="false">#comment-29</guid>
		<description><![CDATA[Bien le bonjour @jpoulson&lt;br /&gt;
&lt;br /&gt;
Je te remercie beaucoup pour ce petit article :)&lt;br /&gt;
Je suis débutant en php, et je veux réaliser une application FB, je trouve pas beaucoup d&#039;article &amp; tutoriel très intéressants pour apprendre à utiliser leur API.&lt;br /&gt;
&lt;br /&gt;
Encore merci&lt;br /&gt;
&lt;br /&gt;
Bonne journée.]]></description>
		<content:encoded><![CDATA[<p>Bien le bonjour @jpoulson</p>
<p>Je te remercie beaucoup pour ce petit article <img src="https://blog.developpez.com/james-poulson/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /><br />
Je suis débutant en php, et je veux réaliser une application FB, je trouve pas beaucoup d&rsquo;article &amp; tutoriel très intéressants pour apprendre à utiliser leur API.</p>
<p>Encore merci</p>
<p>Bonne journée.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Utiliser l&#8217;API PHP de Facebook par latristef</title>
		<link>https://blog.developpez.com/james-poulson/p10114/code/premiers_pas_avec_la_sdk_de_facebook_1#comment-28</link>
		<dc:creator><![CDATA[latristef]]></dc:creator>
		<pubDate>Mon, 14 Nov 2011 10:03:07 +0000</pubDate>
		<guid isPermaLink="false">#comment-28</guid>
		<description><![CDATA[Bonjour,&lt;br /&gt;
Merci pour cet article fort utile.&lt;br /&gt;
Je rebondis sur votre phrase &quot;une bonne pratique est de laisser l&#039;utilisateur connecté sur son compte Facebook et de le déconnecter uniquement de votre site.&quot;&lt;br /&gt;
En effet, que fait getLogoutUrl ??? Déconnexion de facebook ou seulement de l&#039;application facebook du site concerné ?? &lt;br /&gt;
En effet, lorsque je fais getLogoutUrl, le programme réagit comme si l&#039;utilisateur était seulement déconnecté de l&#039;application mais pas de facebook. Si je recharge ma page, l&#039;utilisateur est déconnecté de facebook...idem pour l&#039;identification, dans certains cas, j&#039;ai besoin de recharger la page pour que mon utilisateur soit connecté à mon application même s&#039;il l&#039;a déjà accepté auparavant.&lt;br /&gt;
Y a t-il une manipulation à faire (remettre les sessions à null ?) pour que tout cela fonctionne avec cohénrence.&lt;br /&gt;
&lt;br /&gt;
Merci par avance pour votre aide.&lt;br /&gt;
]]></description>
		<content:encoded><![CDATA[<p>Bonjour,<br />
Merci pour cet article fort utile.<br />
Je rebondis sur votre phrase &laquo;&nbsp;une bonne pratique est de laisser l&rsquo;utilisateur connecté sur son compte Facebook et de le déconnecter uniquement de votre site.&nbsp;&raquo;<br />
En effet, que fait getLogoutUrl ??? Déconnexion de facebook ou seulement de l&rsquo;application facebook du site concerné ?? <br />
En effet, lorsque je fais getLogoutUrl, le programme réagit comme si l&rsquo;utilisateur était seulement déconnecté de l&rsquo;application mais pas de facebook. Si je recharge ma page, l&rsquo;utilisateur est déconnecté de facebook&#8230;idem pour l&rsquo;identification, dans certains cas, j&rsquo;ai besoin de recharger la page pour que mon utilisateur soit connecté à mon application même s&rsquo;il l&rsquo;a déjà accepté auparavant.<br />
Y a t-il une manipulation à faire (remettre les sessions à null ?) pour que tout cela fonctionne avec cohénrence.</p>
<p>Merci par avance pour votre aide.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Utiliser l&#8217;API PHP de Facebook par sylvievdm</title>
		<link>https://blog.developpez.com/james-poulson/p10114/code/premiers_pas_avec_la_sdk_de_facebook_1#comment-27</link>
		<dc:creator><![CDATA[sylvievdm]]></dc:creator>
		<pubDate>Wed, 02 Nov 2011 19:31:52 +0000</pubDate>
		<guid isPermaLink="false">#comment-27</guid>
		<description><![CDATA[Bien vu James ;-)]]></description>
		<content:encoded><![CDATA[<p>Bien vu James <img src="https://blog.developpez.com/james-poulson/wp-includes/images/smilies/icon_wink.gif" alt=";-)" class="wp-smiley" /></p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Utilisation d&#8217;un LIMIT dans une sous-requête avec MySQL par Phiss</title>
		<link>https://blog.developpez.com/james-poulson/p10023/code/utilisation_d_un_limit_dans_une_sous_req#comment-50</link>
		<dc:creator><![CDATA[Phiss]]></dc:creator>
		<pubDate>Tue, 25 Oct 2011 10:54:29 +0000</pubDate>
		<guid isPermaLink="false">#comment-50</guid>
		<description><![CDATA[Merci pour cette astuce.&lt;br /&gt;
Elle m&#039;a bien aidé même pour un SELECT classique.]]></description>
		<content:encoded><![CDATA[<p>Merci pour cette astuce.<br />
Elle m&rsquo;a bien aidé même pour un SELECT classique.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Architecture N-Tier, kézako? par eric.pommereau</title>
		<link>https://blog.developpez.com/james-poulson/p10184/java/architecture_n_tier_kezako#comment-62</link>
		<dc:creator><![CDATA[eric.pommereau]]></dc:creator>
		<pubDate>Mon, 26 Sep 2011 08:50:44 +0000</pubDate>
		<guid isPermaLink="false">#comment-62</guid>
		<description><![CDATA[En retard, merci pour ta réponse ;-)]]></description>
		<content:encoded><![CDATA[<p>En retard, merci pour ta réponse <img src="https://blog.developpez.com/james-poulson/wp-includes/images/smilies/icon_wink.gif" alt=";-)" class="wp-smiley" /></p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Architecture N-Tier, kézako? par jpoulson</title>
		<link>https://blog.developpez.com/james-poulson/p10184/java/architecture_n_tier_kezako#comment-61</link>
		<dc:creator><![CDATA[jpoulson]]></dc:creator>
		<pubDate>Tue, 09 Aug 2011 22:02:33 +0000</pubDate>
		<guid isPermaLink="false">#comment-61</guid>
		<description><![CDATA[@Radwane: Tu fais bien de le souligner. Il y a un débat à ce sujet dans le sens où un domaine anémique n&#039;est pas conforme à l&#039;idéal objet. C&#039;est d&#039;ailleurs l&#039;une des raisons pour lesquelles Martin Fowler est réfractaire à cette approche. Elle est toutefois encouragé par les Entity J2EE comme il le précise.&lt;br /&gt;
&lt;br /&gt;
En pratique, la difficulté d&#039;implémenter un domaine riche vient du fait qu&#039;il est nécessaire d&#039;établir un compromis pour décider quelles méthodes devraient rester dans le domaine. C&#039;est un point sur lequel Fowler et King seraient d&#039;accord.&lt;br /&gt;
&lt;br /&gt;
Les deux aspects sur lesquels il est nécessaire de veiller lorsqu&#039;on a un domaine riche sont les dépendances et l&#039;exposition (interface). Pour la transition d&#039;une méthode vers la couche service je dirais que cela se justifie si celle-ci doit interagir avec plusieurs DO. Cela évite que du code se retrouve parsemé à travers le domaine. Finalement, il est important de rendre compte que des problèmes de concurrence de threads peuvent affecter le domaine.&lt;br /&gt;
&lt;br /&gt;
Il y a un sujet intéressant sur SO à ce propos:&lt;br /&gt;
http://stackoverflow.com/questions/2333307/should-enterprise-java-entities-be-dumb/]]></description>
		<content:encoded><![CDATA[<p>@Radwane: Tu fais bien de le souligner. Il y a un débat à ce sujet dans le sens où un domaine anémique n&rsquo;est pas conforme à l&rsquo;idéal objet. C&rsquo;est d&rsquo;ailleurs l&rsquo;une des raisons pour lesquelles Martin Fowler est réfractaire à cette approche. Elle est toutefois encouragé par les Entity J2EE comme il le précise.</p>
<p>En pratique, la difficulté d&rsquo;implémenter un domaine riche vient du fait qu&rsquo;il est nécessaire d&rsquo;établir un compromis pour décider quelles méthodes devraient rester dans le domaine. C&rsquo;est un point sur lequel Fowler et King seraient d&rsquo;accord.</p>
<p>Les deux aspects sur lesquels il est nécessaire de veiller lorsqu&rsquo;on a un domaine riche sont les dépendances et l&rsquo;exposition (interface). Pour la transition d&rsquo;une méthode vers la couche service je dirais que cela se justifie si celle-ci doit interagir avec plusieurs DO. Cela évite que du code se retrouve parsemé à travers le domaine. Finalement, il est important de rendre compte que des problèmes de concurrence de threads peuvent affecter le domaine.</p>
<p>Il y a un sujet intéressant sur SO à ce propos:<br />
<a href="http://stackoverflow.com/questions/2333307/should-enterprise-java-entities-be-dumb/" rel="nofollow">http://stackoverflow.com/questions/2333307/should-enterprise-java-entities-be-dumb/</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Architecture N-Tier, kézako? par jpoulson</title>
		<link>https://blog.developpez.com/james-poulson/p10184/java/architecture_n_tier_kezako#comment-60</link>
		<dc:creator><![CDATA[jpoulson]]></dc:creator>
		<pubDate>Tue, 09 Aug 2011 21:54:23 +0000</pubDate>
		<guid isPermaLink="false">#comment-60</guid>
		<description><![CDATA[@eric190: C&#039;est pour cela que j&#039;en parle ici. Le concepte est un peu flou et j&#039;espère pouvoir le raffiner pour en faire un article.&lt;br /&gt;
&lt;br /&gt;
Les services domain peuvent être considérés comme une couche supplémentaire et semblent correspondre avec l&#039;idée de process. Il s&#039;agit d&#039;instances comme les DAO regroupant des méthodes formant des genres de boite à outils pour les classes domain (ex: UserService: login, updateInfo, addFriend,...). Dans un contexte anémique on peut y trouver une bonne partie de la logique d&#039;une application.&lt;br /&gt;
&lt;br /&gt;
P.S: Je ne connais par l&#039;origine de la terminologie mais le mot service est utilisé dans Spring (annotation @Service) ainsi qu&#039;au niveau de cette méthodologie: http://programmers.stackexchange.com/questions/49749/uml-going-from-use-case-to-class-diagram/49750#49750]]></description>
		<content:encoded><![CDATA[<p>@eric190: C&rsquo;est pour cela que j&rsquo;en parle ici. Le concepte est un peu flou et j&rsquo;espère pouvoir le raffiner pour en faire un article.</p>
<p>Les services domain peuvent être considérés comme une couche supplémentaire et semblent correspondre avec l&rsquo;idée de process. Il s&rsquo;agit d&rsquo;instances comme les DAO regroupant des méthodes formant des genres de boite à outils pour les classes domain (ex: UserService: login, updateInfo, addFriend,&#8230;). Dans un contexte anémique on peut y trouver une bonne partie de la logique d&rsquo;une application.</p>
<p>P.S: Je ne connais par l&rsquo;origine de la terminologie mais le mot service est utilisé dans Spring (annotation @Service) ainsi qu&rsquo;au niveau de cette méthodologie: <a href="http://programmers.stackexchange.com/questions/49749/uml-going-from-use-case-to-class-diagram/49750#49750" rel="nofollow">http://programmers.stackexchange.com/questions/49749/uml-going-from-use-case-to-class-diagram/49750#49750</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Architecture N-Tier, kézako? par rad_hass</title>
		<link>https://blog.developpez.com/james-poulson/p10184/java/architecture_n_tier_kezako#comment-59</link>
		<dc:creator><![CDATA[rad_hass]]></dc:creator>
		<pubDate>Mon, 08 Aug 2011 15:01:33 +0000</pubDate>
		<guid isPermaLink="false">#comment-59</guid>
		<description><![CDATA[Le domaine anemic est un antipattern... Et je ne pense pas que l&#039;approche DDD recommande ce type de domaine bien au contraire : http://martinfowler.com/bliki/AnemicDomainModel.html]]></description>
		<content:encoded><![CDATA[<p>Le domaine anemic est un antipattern&#8230; Et je ne pense pas que l&rsquo;approche DDD recommande ce type de domaine bien au contraire : <a href="http://martinfowler.com/bliki/AnemicDomainModel.html" rel="nofollow">http://martinfowler.com/bliki/AnemicDomainModel.html</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Peupler une nouvelle colonne d&#8217;une table à partir d&#8217;une autre selon une correspondance par jpoulson</title>
		<link>https://blog.developpez.com/james-poulson/p10189/code/peupler_une_nouvelle_colonne_d_une_table#comment-52</link>
		<dc:creator><![CDATA[jpoulson]]></dc:creator>
		<pubDate>Sat, 06 Aug 2011 16:15:07 +0000</pubDate>
		<guid isPermaLink="false">#comment-52</guid>
		<description><![CDATA[Le code ci-dessus a été testé sur MySQL. Il y a des requêtes équivalentes pour d&#039;autres bases de données. Je me souviens notamment d&#039;une requête qui utilise des arguments similaire à un JOIN. Si tu as un SGBD de préférence je pourrais peut être trouver la requête correspondante.]]></description>
		<content:encoded><![CDATA[<p>Le code ci-dessus a été testé sur MySQL. Il y a des requêtes équivalentes pour d&rsquo;autres bases de données. Je me souviens notamment d&rsquo;une requête qui utilise des arguments similaire à un JOIN. Si tu as un SGBD de préférence je pourrais peut être trouver la requête correspondante.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Forcer la mise à jour d&#8217;une image avec le caching par jpoulson</title>
		<link>https://blog.developpez.com/james-poulson/p10183/code/forcer_la_mise_a_jour_d_une_image_avec_l#comment-38</link>
		<dc:creator><![CDATA[jpoulson]]></dc:creator>
		<pubDate>Sat, 06 Aug 2011 14:34:43 +0000</pubDate>
		<guid isPermaLink="false">#comment-38</guid>
		<description><![CDATA[Mémodev, merci pour le conseil. En effet, ça éviterais de moins &quot;flooder&quot; le cache. Ici j&#039;avoue m&#039;être contenté de présenter une alternative aux balises meta/pragma (pas toujours fiable) sans aller plus loin. Il y a de chouettes informations sur le lien que tu as donné concernant la réécriture d&#039;URL pour automatiser cela.]]></description>
		<content:encoded><![CDATA[<p>Mémodev, merci pour le conseil. En effet, ça éviterais de moins &laquo;&nbsp;flooder&nbsp;&raquo; le cache. Ici j&rsquo;avoue m&rsquo;être contenté de présenter une alternative aux balises meta/pragma (pas toujours fiable) sans aller plus loin. Il y a de chouettes informations sur le lien que tu as donné concernant la réécriture d&rsquo;URL pour automatiser cela.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Peupler une nouvelle colonne d&#8217;une table à partir d&#8217;une autre selon une correspondance par ner0lph</title>
		<link>https://blog.developpez.com/james-poulson/p10189/code/peupler_une_nouvelle_colonne_d_une_table#comment-51</link>
		<dc:creator><![CDATA[ner0lph]]></dc:creator>
		<pubDate>Sat, 06 Aug 2011 14:14:03 +0000</pubDate>
		<guid isPermaLink="false">#comment-51</guid>
		<description><![CDATA[Très intéressant, je viens d&#039;apprendre quelque chose !&lt;br /&gt;
Est-ce qu&#039;on sait sur quels SGBD ça fonctionne ou sur lesquels ça ne fonctionne pas ?]]></description>
		<content:encoded><![CDATA[<p>Très intéressant, je viens d&rsquo;apprendre quelque chose !<br />
Est-ce qu&rsquo;on sait sur quels SGBD ça fonctionne ou sur lesquels ça ne fonctionne pas ?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Architecture N-Tier, kézako? par eric.pommereau</title>
		<link>https://blog.developpez.com/james-poulson/p10184/java/architecture_n_tier_kezako#comment-58</link>
		<dc:creator><![CDATA[eric.pommereau]]></dc:creator>
		<pubDate>Sat, 06 Aug 2011 06:11:51 +0000</pubDate>
		<guid isPermaLink="false">#comment-58</guid>
		<description><![CDATA[Bonjour,&lt;br /&gt;
&lt;br /&gt;
Intéressant ton billet, d&#039;autant que c&#039;est rare de voir cette thématique (architecture logicielle) vulgarisée.&lt;br /&gt;
Peux tu expliciter les services domain ? Est-ce bien dans le cadre de la couche Business ?&lt;br /&gt;
&lt;br /&gt;
Merci&lt;br /&gt;
&lt;br /&gt;
@+]]></description>
		<content:encoded><![CDATA[<p>Bonjour,</p>
<p>Intéressant ton billet, d&rsquo;autant que c&rsquo;est rare de voir cette thématique (architecture logicielle) vulgarisée.<br />
Peux tu expliciter les services domain ? Est-ce bien dans le cadre de la couche Business ?</p>
<p>Merci</p>
<p>@+</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Forcer la mise à jour d&#8217;une image avec le caching par remi.gaubert</title>
		<link>https://blog.developpez.com/james-poulson/p10183/code/forcer_la_mise_a_jour_d_une_image_avec_l#comment-37</link>
		<dc:creator><![CDATA[remi.gaubert]]></dc:creator>
		<pubDate>Fri, 05 Aug 2011 14:59:56 +0000</pubDate>
		<guid isPermaLink="false">#comment-37</guid>
		<description><![CDATA[Je recommande d&#039;utiliser un numéros de version plutôt qu&#039;un random : http://www.memodev.com/wiki/CSS#reloadCache&lt;br /&gt;
Ainsi, l&#039;image peut être mise en cache quand elle ne change pas. Lorsqu&#039;elle change, on force la mise à jour du cache en incrémentant le numéros de version.]]></description>
		<content:encoded><![CDATA[<p>Je recommande d&rsquo;utiliser un numéros de version plutôt qu&rsquo;un random : <a href="http://www.memodev.com/wiki/CSS#reloadCache" rel="nofollow">http://www.memodev.com/wiki/CSS#reloadCache</a><br />
Ainsi, l&rsquo;image peut être mise en cache quand elle ne change pas. Lorsqu&rsquo;elle change, on force la mise à jour du cache en incrémentant le numéros de version.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Utiliser l&#8217;API PHP de Facebook par jpoulson</title>
		<link>https://blog.developpez.com/james-poulson/p10114/code/premiers_pas_avec_la_sdk_de_facebook_1#comment-26</link>
		<dc:creator><![CDATA[jpoulson]]></dc:creator>
		<pubDate>Thu, 04 Aug 2011 22:55:57 +0000</pubDate>
		<guid isPermaLink="false">#comment-26</guid>
		<description><![CDATA[Bonsoir clarybelle. Si vous êtes tombé sur l&#039;article à travers un moteur de recherche il se peut que celui-ci a été référencé que depuis peu en raison de sa récente publication. J&#039;espère qu&#039;il vous a été utile :)]]></description>
		<content:encoded><![CDATA[<p>Bonsoir clarybelle. Si vous êtes tombé sur l&rsquo;article à travers un moteur de recherche il se peut que celui-ci a été référencé que depuis peu en raison de sa récente publication. J&rsquo;espère qu&rsquo;il vous a été utile <img src="https://blog.developpez.com/james-poulson/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Utiliser l&#8217;API PHP de Facebook par clarybelle</title>
		<link>https://blog.developpez.com/james-poulson/p10114/code/premiers_pas_avec_la_sdk_de_facebook_1#comment-25</link>
		<dc:creator><![CDATA[clarybelle]]></dc:creator>
		<pubDate>Wed, 03 Aug 2011 12:43:07 +0000</pubDate>
		<guid isPermaLink="false">#comment-25</guid>
		<description><![CDATA[Pourquoi n&#039;ai-je pas trouvé cet article plus tôt ?]]></description>
		<content:encoded><![CDATA[<p>Pourquoi n&rsquo;ai-je pas trouvé cet article plus tôt ?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Select des enregistrements sur le dernier mois par jpoulson</title>
		<link>https://blog.developpez.com/james-poulson/p9990/code/select_des_enregistrements_sur_le_dernie#comment-47</link>
		<dc:creator><![CDATA[jpoulson]]></dc:creator>
		<pubDate>Mon, 01 Aug 2011 00:19:37 +0000</pubDate>
		<guid isPermaLink="false">#comment-47</guid>
		<description><![CDATA[@Nanocom: Bonne remarque. En effet, le MONTH() rendrait la requête plus concise et peut être même plus performante. Ici, j&#039;étais parti de l&#039;idée de faire un SELECT des enregistrements remontant sur un nombre donné de jours. Je vais mettre à jour l&#039;article :)]]></description>
		<content:encoded><![CDATA[<p>@Nanocom: Bonne remarque. En effet, le MONTH() rendrait la requête plus concise et peut être même plus performante. Ici, j&rsquo;étais parti de l&rsquo;idée de faire un SELECT des enregistrements remontant sur un nombre donné de jours. Je vais mettre à jour l&rsquo;article <img src="https://blog.developpez.com/james-poulson/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Select des enregistrements sur le dernier mois par Nanocom</title>
		<link>https://blog.developpez.com/james-poulson/p9990/code/select_des_enregistrements_sur_le_dernie#comment-46</link>
		<dc:creator><![CDATA[Nanocom]]></dc:creator>
		<pubDate>Fri, 29 Jul 2011 16:01:25 +0000</pubDate>
		<guid isPermaLink="false">#comment-46</guid>
		<description><![CDATA[WHERE MONTH(date_commande) = MONTH(NOW()) peut suffire non ?]]></description>
		<content:encoded><![CDATA[<p>WHERE MONTH(date_commande) = MONTH(NOW()) peut suffire non ?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Ne rien modifier en cas de DUPLICATE KEY par jpoulson</title>
		<link>https://blog.developpez.com/james-poulson/p10016/code/ne_rien_modifier_en_cas_de_duplicate_key#comment-49</link>
		<dc:creator><![CDATA[jpoulson]]></dc:creator>
		<pubDate>Sat, 28 May 2011 10:52:56 +0000</pubDate>
		<guid isPermaLink="false">#comment-49</guid>
		<description><![CDATA[Bonjour revlis,&lt;br /&gt;
&lt;br /&gt;
Bonne question. Pour précision le mot clé IGNORE permute MySQL en mode non-stricte. Cela a pour effet d&#039;ignorer les DUPLICATE KEY ERROR mais également d&#039;autres types erreurs comme celles liées à de données non-valides en entrée. Pour reprendre l&#039;exemple du lien ci-dessous, la date &#039;2009-02-31&#039; produit un simple warning en mode non-stricte.&lt;br /&gt;
&lt;br /&gt;
5.8.5. Overriding Input Data Restrictions&lt;br /&gt;
http://book.opensourceproject.org.cn/lamp/mysql/mysql5cert/opensource/0672328127/ch05lev1sec8.html&lt;br /&gt;
&lt;br /&gt;
P.S: Il y a d&#039;autres alternatives qu&#039;on peut utiliser selon ses besoins comme un REPLACE (attention: remplace la clé primaire vu qu&#039;il s&#039;agit d&#039;un DELETE et INSERT en interne) ou un branchement conditionnel.&lt;br /&gt;
&lt;br /&gt;
IF NOT EXISTS (SELECT email FROM email_failures WHERE email = &#039;user@domain.com&#039;) THEN (INSERT (email, date) VALUES (&#039;user@domain.com&#039;, NOW() ) INTO email_failures)]]></description>
		<content:encoded><![CDATA[<p>Bonjour revlis,</p>
<p>Bonne question. Pour précision le mot clé IGNORE permute MySQL en mode non-stricte. Cela a pour effet d&rsquo;ignorer les DUPLICATE KEY ERROR mais également d&rsquo;autres types erreurs comme celles liées à de données non-valides en entrée. Pour reprendre l&rsquo;exemple du lien ci-dessous, la date &lsquo;2009-02-31&prime; produit un simple warning en mode non-stricte.</p>
<p>5.8.5. Overriding Input Data Restrictions<br />
<a href="http://book.opensourceproject.org.cn/lamp/mysql/mysql5cert/opensource/0672328127/ch05lev1sec8.html" rel="nofollow">http://book.opensourceproject.org.cn/lamp/mysql/mysql5cert/opensource/0672328127/ch05lev1sec8.html</a></p>
<p>P.S: Il y a d&rsquo;autres alternatives qu&rsquo;on peut utiliser selon ses besoins comme un REPLACE (attention: remplace la clé primaire vu qu&rsquo;il s&rsquo;agit d&rsquo;un DELETE et INSERT en interne) ou un branchement conditionnel.</p>
<p>IF NOT EXISTS (SELECT email FROM email_failures WHERE email = &lsquo;user@domain.com&rsquo;) THEN (INSERT (email, date) VALUES (&lsquo;user@domain.com&rsquo;, NOW() ) INTO email_failures)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Ne rien modifier en cas de DUPLICATE KEY par revlis</title>
		<link>https://blog.developpez.com/james-poulson/p10016/code/ne_rien_modifier_en_cas_de_duplicate_key#comment-48</link>
		<dc:creator><![CDATA[revlis]]></dc:creator>
		<pubDate>Fri, 27 May 2011 23:05:27 +0000</pubDate>
		<guid isPermaLink="false">#comment-48</guid>
		<description><![CDATA[Et pourquoi pas utiliser INSERT IGNORE  ? &quot;INSERT IGNORE  INTO email_failures SET email=&quot;&#039; . $db-&gt;escape( $email ) . &#039;&quot;, date_failure= NOW() &quot; ?]]></description>
		<content:encoded><![CDATA[<p>Et pourquoi pas utiliser INSERT IGNORE  ? &laquo;&nbsp;INSERT IGNORE  INTO email_failures SET email=&nbsp;&raquo;&lsquo; . $db->escape( $email ) . &lsquo;&nbsp;&raquo;, date_failure= NOW() &nbsp;&raquo; ?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Suppression de tout sauf un doublon dans une table par jpoulson</title>
		<link>https://blog.developpez.com/james-poulson/p9943/code/suppression_de_tout_sauf_un_doublon_dans#comment-45</link>
		<dc:creator><![CDATA[jpoulson]]></dc:creator>
		<pubDate>Thu, 05 May 2011 00:05:34 +0000</pubDate>
		<guid isPermaLink="false">#comment-45</guid>
		<description><![CDATA[Salut Jérôme,&lt;br /&gt;
&lt;br /&gt;
Oui par la suite j&#039;ai pensé à mettre une contraintre d&#039;unicité sur le couple d&#039;identifiants et il me reste à modifier la table.&lt;br /&gt;
&lt;br /&gt;
Côté requête j&#039;avais utilisé un UPDATE en testant le retour de mysql_affected_rows(). Je ne sais pas encore ce qui a créé les doublons. Pour le duplicate entry il serait possible le combiner un INSERT et UPDATE de la manière suivante.&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Il y aurait aussi la possibilité d&#039;utiliser un &lt;code&gt;INSERT INTO ... SELECT ...&lt;/code&gt; mais je ne sais pas si ça convient dans ce cas précis.]]></description>
		<content:encoded><![CDATA[<p>Salut Jérôme,</p>
<p>Oui par la suite j&rsquo;ai pensé à mettre une contraintre d&rsquo;unicité sur le couple d&rsquo;identifiants et il me reste à modifier la table.</p>
<p>Côté requête j&rsquo;avais utilisé un UPDATE en testant le retour de mysql_affected_rows(). Je ne sais pas encore ce qui a créé les doublons. Pour le duplicate entry il serait possible le combiner un INSERT et UPDATE de la manière suivante.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;</div></div>
<p>Il y aurait aussi la possibilité d&rsquo;utiliser un</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">INSERT INTO ... SELECT ...</div></div>
<p>mais je ne sais pas si ça convient dans ce cas précis.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Suppression de tout sauf un doublon dans une table par Blount</title>
		<link>https://blog.developpez.com/james-poulson/p9943/code/suppression_de_tout_sauf_un_doublon_dans#comment-44</link>
		<dc:creator><![CDATA[Blount]]></dc:creator>
		<pubDate>Wed, 04 May 2011 14:59:51 +0000</pubDate>
		<guid isPermaLink="false">#comment-44</guid>
		<description><![CDATA[Pour ton problème d&#039;insertion de doublon, une bonne pratique est d&#039;utiliser la contrainte d&#039;unicité.&lt;br /&gt;
Je ne sais pas si tu y as déjà réfléchis, mais le principe est simpliste.&lt;br /&gt;
&lt;br /&gt;
Tu commences pas créer ta contrainte. Comme tu comptes une visite par personne sur un profil, il suffit de créer un index unique sur le couple profile_id et visitor_id.&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&#160;&lt;br /&gt;
&#160;   id int(10) UNSIGNED Non Aucun AUTO_INCREMENT&#160;&lt;br /&gt;
&#160;   profile_id int(10) UNSIGNED Non 0&#160;&lt;br /&gt;
&#160;   visitor_id int(10) UNSIGNED Non 0&#160;&lt;br /&gt;
&#160;   date_visited timestamp Non CURRENT_TIMESTAMP,&#160;&lt;br /&gt;
&#160;   UNIQUE(profile_id, visitor_id)&#160;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, dans ton code, tu commences toujours par insérer une donner.&lt;br /&gt;
À l&#039;ancienne, ça donne :&lt;br /&gt;
&lt;code&gt;&#160;&lt;br /&gt;
mysql_query(&quot;INSERT INTO ...&quot;);&#160;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Si la requête échoue, alors tu testes la chaîne d&#039;erreur, si tu trouves un &quot;Duplicate entry&quot;, c&#039;est que la donnée existe déjà, tu n&#039;as plus qu&#039;à faire ton update.&lt;br /&gt;
&lt;br /&gt;
Je dis &quot;bonne pratique&quot;, mais bon, il y a d&#039;autre moyen de tester. Tu peux toujours commencer par UPDATE, si aucune ligne modifiée, alors elle n&#039;existe pas. Tu l&#039;insères donc (toujours en testant le retour, au cas où).]]></description>
		<content:encoded><![CDATA[<p>Pour ton problème d&rsquo;insertion de doublon, une bonne pratique est d&rsquo;utiliser la contrainte d&rsquo;unicité.<br />
Je ne sais pas si tu y as déjà réfléchis, mais le principe est simpliste.</p>
<p>Tu commences pas créer ta contrainte. Comme tu comptes une visite par personne sur un profil, il suffit de créer un index unique sur le couple profile_id et visitor_id.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; id int(10) UNSIGNED Non Aucun AUTO_INCREMENT&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; profile_id int(10) UNSIGNED Non 0&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; visitor_id int(10) UNSIGNED Non 0&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; date_visited timestamp Non CURRENT_TIMESTAMP,&amp;nbsp;&lt;br /&gt;<br />
&amp;nbsp; &nbsp; UNIQUE(profile_id, visitor_id)&amp;nbsp;&lt;br /&gt;</div></div>
<p>Ensuite, dans ton code, tu commences toujours par insérer une donner.<br />
À l&rsquo;ancienne, ça donne :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;nbsp;&lt;br /&gt;<br />
mysql_query(&quot;INSERT INTO ...&quot;);&amp;nbsp;&lt;br /&gt;</div></div>
<p>
Si la requête échoue, alors tu testes la chaîne d&rsquo;erreur, si tu trouves un &laquo;&nbsp;Duplicate entry&nbsp;&raquo;, c&rsquo;est que la donnée existe déjà, tu n&rsquo;as plus qu&rsquo;à faire ton update.</p>
<p>Je dis &laquo;&nbsp;bonne pratique&nbsp;&raquo;, mais bon, il y a d&rsquo;autre moyen de tester. Tu peux toujours commencer par UPDATE, si aucune ligne modifiée, alors elle n&rsquo;existe pas. Tu l&rsquo;insères donc (toujours en testant le retour, au cas où).</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Associer un éditeur de texte dans Filezilla par jpoulson</title>
		<link>https://blog.developpez.com/james-poulson/p9897/technique/associer_notepad_aux_types_de_fichiers_d#comment-56</link>
		<dc:creator><![CDATA[jpoulson]]></dc:creator>
		<pubDate>Thu, 21 Apr 2011 20:45:58 +0000</pubDate>
		<guid isPermaLink="false">#comment-56</guid>
		<description><![CDATA[Bonjour Mémodev. Merci pour le retour. Je vais ajouter ta solution dans l&#039;article.]]></description>
		<content:encoded><![CDATA[<p>Bonjour Mémodev. Merci pour le retour. Je vais ajouter ta solution dans l&rsquo;article.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Associer un éditeur de texte dans Filezilla par remi.gaubert</title>
		<link>https://blog.developpez.com/james-poulson/p9897/technique/associer_notepad_aux_types_de_fichiers_d#comment-57</link>
		<dc:creator><![CDATA[remi.gaubert]]></dc:creator>
		<pubDate>Sun, 17 Apr 2011 10:38:10 +0000</pubDate>
		<guid isPermaLink="false">#comment-57</guid>
		<description><![CDATA[Bonjour,&lt;br /&gt;
&lt;br /&gt;
Une autre solution plus simple dans FileZilla si vous souhaitez éditer tous vos fichiers avec Notepad++ :&lt;br /&gt;
Edition -&gt; Paramètres -&gt; Edition des fichiers. Puis sélectionnez &quot;Utiliser l&#039;éditeur personnalisé&quot; avec le chemin &quot;C:Program FilesNotepad++notepad++.exe&quot;&lt;br /&gt;
Sur le même écran, sélectionnez également &quot;Toujours utiliser l&#039;éditeur par défaut&quot;.&lt;br /&gt;
&lt;br /&gt;
Vous pourrez trouver d&#039;autres astuces sur les outils de développement web ici (comme par exemple savoir comment ne pas uploader avec FileZilla les fichiers CVS et SVN) : http://www.memodev.com/wiki/Bonnes_pratiques_du_Web#prerequis.&lt;br /&gt;
C&#039;est un wiki où chacun partage ses bonnes pratiques. &lt;br /&gt;
]]></description>
		<content:encoded><![CDATA[<p>Bonjour,</p>
<p>Une autre solution plus simple dans FileZilla si vous souhaitez éditer tous vos fichiers avec Notepad++ :<br />
Edition -> Paramètres -> Edition des fichiers. Puis sélectionnez &laquo;&nbsp;Utiliser l&rsquo;éditeur personnalisé&nbsp;&raquo; avec le chemin &laquo;&nbsp;C:Program FilesNotepad++notepad++.exe&nbsp;&raquo;<br />
Sur le même écran, sélectionnez également &laquo;&nbsp;Toujours utiliser l&rsquo;éditeur par défaut&nbsp;&raquo;.</p>
<p>Vous pourrez trouver d&rsquo;autres astuces sur les outils de développement web ici (comme par exemple savoir comment ne pas uploader avec FileZilla les fichiers CVS et SVN) : <a href="http://www.memodev.com/wiki/Bonnes_pratiques_du_Web#prerequis" rel="nofollow">http://www.memodev.com/wiki/Bonnes_pratiques_du_Web#prerequis</a>.<br />
C&rsquo;est un wiki où chacun partage ses bonnes pratiques. </p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur PHP et les pièges du typage faible par jpoulson</title>
		<link>https://blog.developpez.com/james-poulson/p9876/code/les_pieges_du_langage_php#comment-24</link>
		<dc:creator><![CDATA[jpoulson]]></dc:creator>
		<pubDate>Wed, 13 Apr 2011 15:33:15 +0000</pubDate>
		<guid isPermaLink="false">#comment-24</guid>
		<description><![CDATA[Salut lionheart33806. C&#039;est exacte. Je n&#039;étais pas tout à fait certain de la manière dont PHP traite une suite de caractères continus en interne mais il semble bien qu&#039;il interprète cela comme une chaine. Comme la valeur booléenne false est associée au zéro, toute suite de caractères est sans doute considéré comme un true (&gt; 0 ).]]></description>
		<content:encoded><![CDATA[<p>Salut lionheart33806. C&rsquo;est exacte. Je n&rsquo;étais pas tout à fait certain de la manière dont PHP traite une suite de caractères continus en interne mais il semble bien qu&rsquo;il interprète cela comme une chaine. Comme la valeur booléenne false est associée au zéro, toute suite de caractères est sans doute considéré comme un true (> 0 ).</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur PHP et les pièges du typage faible par lionheart33806</title>
		<link>https://blog.developpez.com/james-poulson/p9876/code/les_pieges_du_langage_php#comment-23</link>
		<dc:creator><![CDATA[lionheart33806]]></dc:creator>
		<pubDate>Sun, 10 Apr 2011 20:00:34 +0000</pubDate>
		<guid isPermaLink="false">#comment-23</guid>
		<description><![CDATA[Sans pouvoir le tester maintenant, pour le dernier exemple, il me semble que PHP l’interprète en tant que chaine de caractères, et donc passe &quot;true&quot;.]]></description>
		<content:encoded><![CDATA[<p>Sans pouvoir le tester maintenant, pour le dernier exemple, il me semble que PHP l’interprète en tant que chaine de caractères, et donc passe &laquo;&nbsp;true&nbsp;&raquo;.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Assainir une source HTML avec HTMLPurifier par jpoulson</title>
		<link>https://blog.developpez.com/james-poulson/p9865/code/assainir_une_source_html_avec_htmlpurifi#comment-22</link>
		<dc:creator><![CDATA[jpoulson]]></dc:creator>
		<pubDate>Mon, 04 Apr 2011 19:51:01 +0000</pubDate>
		<guid isPermaLink="false">#comment-22</guid>
		<description><![CDATA[Merci pour les commentaires Jérôme et nighty. Les réactions sont le bienvenu. Oui, là j&#039;avoue qu&#039;il y a erreur. J&#039;ai repris le PHP il y a quelques semaines et j&#039;en suis encore à me référer à des tutoriaux. J&#039;ai lu quelque chose à propos des PDO et ce serait bien de voir si on peut constituer une couche de données.]]></description>
		<content:encoded><![CDATA[<p>Merci pour les commentaires Jérôme et nighty. Les réactions sont le bienvenu. Oui, là j&rsquo;avoue qu&rsquo;il y a erreur. J&rsquo;ai repris le PHP il y a quelques semaines et j&rsquo;en suis encore à me référer à des tutoriaux. J&rsquo;ai lu quelque chose à propos des PDO et ce serait bien de voir si on peut constituer une couche de données.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Evaluation de compétence en ligne de Java par jpoulson</title>
		<link>https://blog.developpez.com/james-poulson/p9789/java/test_en_ligne_sur_le_java#comment-8</link>
		<dc:creator><![CDATA[jpoulson]]></dc:creator>
		<pubDate>Mon, 04 Apr 2011 19:25:31 +0000</pubDate>
		<guid isPermaLink="false">#comment-8</guid>
		<description><![CDATA[Voila, j&#039;ai placé une image trouvée sur Google pour complété la questions sur les layout.&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est de BlackBeltFactory le but premier aurait été de créer une plateforme d&#039;évaluation selon un modèle collaboratif. Certaines questions contiennent effectivemment des pièges comme dans le SCJP. D&#039;ailleurs Mughal Rasmussen, l&#039;auteur de &quot;A Programmer&#039;s Guide to Java SCJP Certification&quot;, y a contribué un test spécialement pour s&#039;y préparer. Le site propose également des cours en ligne allant du Java de base jusqu&#039;au frameworks les plus populaires.]]></description>
		<content:encoded><![CDATA[<p>Voila, j&rsquo;ai placé une image trouvée sur Google pour complété la questions sur les layout.</p>
<p>Pour ce qui est de BlackBeltFactory le but premier aurait été de créer une plateforme d&rsquo;évaluation selon un modèle collaboratif. Certaines questions contiennent effectivemment des pièges comme dans le SCJP. D&rsquo;ailleurs Mughal Rasmussen, l&rsquo;auteur de &laquo;&nbsp;A Programmer&rsquo;s Guide to Java SCJP Certification&nbsp;&raquo;, y a contribué un test spécialement pour s&rsquo;y préparer. Le site propose également des cours en ligne allant du Java de base jusqu&rsquo;au frameworks les plus populaires.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Assainir une source HTML avec HTMLPurifier par nighty</title>
		<link>https://blog.developpez.com/james-poulson/p9865/code/assainir_une_source_html_avec_htmlpurifi#comment-21</link>
		<dc:creator><![CDATA[nighty]]></dc:creator>
		<pubDate>Mon, 04 Apr 2011 16:23:07 +0000</pubDate>
		<guid isPermaLink="false">#comment-21</guid>
		<description><![CDATA[J&#039;allais également commenter la phrase de conclusion, mais Jérôme ci-dessus m&#039;a pris de cours. J&#039;irais même plus loin en disant que le mieux reste encore d&#039;utiliser PDO et des requêtes paramétrées, si c&#039;est du domaine du possible bien évidemment.&lt;br /&gt;
&lt;br /&gt;
En tout cas merci pour cet article, je ne connaissais pas HTML Purifier jusqu&#039;ici.]]></description>
		<content:encoded><![CDATA[<p>J&rsquo;allais également commenter la phrase de conclusion, mais Jérôme ci-dessus m&rsquo;a pris de cours. J&rsquo;irais même plus loin en disant que le mieux reste encore d&rsquo;utiliser PDO et des requêtes paramétrées, si c&rsquo;est du domaine du possible bien évidemment.</p>
<p>En tout cas merci pour cet article, je ne connaissais pas HTML Purifier jusqu&rsquo;ici.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Assainir une source HTML avec HTMLPurifier par Blount</title>
		<link>https://blog.developpez.com/james-poulson/p9865/code/assainir_une_source_html_avec_htmlpurifi#comment-20</link>
		<dc:creator><![CDATA[Blount]]></dc:creator>
		<pubDate>Mon, 04 Apr 2011 15:21:44 +0000</pubDate>
		<guid isPermaLink="false">#comment-20</guid>
		<description><![CDATA[&lt;blockquote&gt;*Prenez les précautions habituelles comme l&#039;utilisation de addslashes avant d&#039;entrer l&#039;information dans une base de données.&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
Arf, quel dommage de faire une conclusion sur une erreur pareil :/&lt;br /&gt;
http://fr.php.net/mysql_real_escape_string (pour MySQL)]]></description>
		<content:encoded><![CDATA[<blockquote><p>*Prenez les précautions habituelles comme l&rsquo;utilisation de addslashes avant d&rsquo;entrer l&rsquo;information dans une base de données.</p></blockquote>
<p>Arf, quel dommage de faire une conclusion sur une erreur pareil :/<br />
<a href="http://fr.php.net/mysql_real_escape_string" rel="nofollow">http://fr.php.net/mysql_real_escape_string</a> (pour MySQL)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Evaluation de compétence en ligne de Java par tchize_</title>
		<link>https://blog.developpez.com/james-poulson/p9789/java/test_en_ligne_sur_le_java#comment-7</link>
		<dc:creator><![CDATA[tchize_]]></dc:creator>
		<pubDate>Mon, 04 Apr 2011 11:04:42 +0000</pubDate>
		<guid isPermaLink="false">#comment-7</guid>
		<description><![CDATA[Uther: je viens (hier) d&#039;en passer un chez blackbelt pour rigoler. Je confirme, ils sont sournois, sans parler de quelques questions suspectes :)]]></description>
		<content:encoded><![CDATA[<p>Uther: je viens (hier) d&rsquo;en passer un chez blackbelt pour rigoler. Je confirme, ils sont sournois, sans parler de quelques questions suspectes <img src="https://blog.developpez.com/james-poulson/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Evaluation de compétence en ligne de Java par jpoulson</title>
		<link>https://blog.developpez.com/james-poulson/p9789/java/test_en_ligne_sur_le_java#comment-6</link>
		<dc:creator><![CDATA[jpoulson]]></dc:creator>
		<pubDate>Mon, 04 Apr 2011 10:48:36 +0000</pubDate>
		<guid isPermaLink="false">#comment-6</guid>
		<description><![CDATA[@David: En effet. L&#039;un des disques dans ma configuration RAID0 a lâché. Si je n&#039;arrive pas à récupérer les captures d&#039;écran j&#039;improviserais avec un éditeur d&#039;images. De mémoire, l&#039;image ressemblait à l&#039;ascii art ci-dessous. Le lien de BBF a été corrigé.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&#124;_&#124;_____&#124;_&#124;&lt;br /&gt;
&#124; &#124;     &#124; &#124;&lt;br /&gt;
&#124;_&#124;_____&#124;_&#124;&lt;br /&gt;
&#124; &#124;     &#124; &#124;&lt;/pre&gt;]]></description>
		<content:encoded><![CDATA[<p>@David: En effet. L&rsquo;un des disques dans ma configuration RAID0 a lâché. Si je n&rsquo;arrive pas à récupérer les captures d&rsquo;écran j&rsquo;improviserais avec un éditeur d&rsquo;images. De mémoire, l&rsquo;image ressemblait à l&rsquo;ascii art ci-dessous. Le lien de BBF a été corrigé.</p>
<pre>|_|_____|_|<br />
| |     | |<br />
|_|_____|_|<br />
| |     | |</pre>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Evaluation de compétence en ligne de Java par tchize_</title>
		<link>https://blog.developpez.com/james-poulson/p9789/java/test_en_ligne_sur_le_java#comment-5</link>
		<dc:creator><![CDATA[tchize_]]></dc:creator>
		<pubDate>Sun, 03 Apr 2011 12:31:35 +0000</pubDate>
		<guid isPermaLink="false">#comment-5</guid>
		<description><![CDATA[Et je rajoute que ton lien sur blackbelt ne marche pas ;)]]></description>
		<content:encoded><![CDATA[<p>Et je rajoute que ton lien sur blackbelt ne marche pas <img src="https://blog.developpez.com/james-poulson/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /></p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Evaluation de compétence en ligne de Java par tchize_</title>
		<link>https://blog.developpez.com/james-poulson/p9789/java/test_en_ligne_sur_le_java#comment-4</link>
		<dc:creator><![CDATA[tchize_]]></dc:creator>
		<pubDate>Sun, 03 Apr 2011 12:30:24 +0000</pubDate>
		<guid isPermaLink="false">#comment-4</guid>
		<description><![CDATA[L&#039;image n&#039;est toujours pas présente :)]]></description>
		<content:encoded><![CDATA[<p>L&rsquo;image n&rsquo;est toujours pas présente <img src="https://blog.developpez.com/james-poulson/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Tenir un journal d&#8217;erreurs par jpoulson</title>
		<link>https://blog.developpez.com/james-poulson/p9809/java/pourquoi_tenir_un_journal_d_erreurs_est#comment-10</link>
		<dc:creator><![CDATA[jpoulson]]></dc:creator>
		<pubDate>Thu, 17 Mar 2011 03:37:06 +0000</pubDate>
		<guid isPermaLink="false">#comment-10</guid>
		<description><![CDATA[Ce serait effectivement une bonne idée. A l&#039;heure actuelle il existe le site communautaire &lt;a href=&quot;http://stackoverflow.com/&quot; rel=&quot;nofollow&quot;&gt;StackOverflow&lt;/a&gt;. Rien de sophistiqué vu que c&#039;est un genre de faq vivante mais c&#039;est un chouette site pour avoir un conseil rapide et une mine d&#039;or point de vue information.]]></description>
		<content:encoded><![CDATA[<p>Ce serait effectivement une bonne idée. A l&rsquo;heure actuelle il existe le site communautaire <a href="http://stackoverflow.com/" rel="nofollow">StackOverflow</a>. Rien de sophistiqué vu que c&rsquo;est un genre de faq vivante mais c&rsquo;est un chouette site pour avoir un conseil rapide et une mine d&rsquo;or point de vue information.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Evaluation de compétence en ligne de Java par Uther</title>
		<link>https://blog.developpez.com/james-poulson/p9789/java/test_en_ligne_sur_le_java#comment-3</link>
		<dc:creator><![CDATA[Uther]]></dc:creator>
		<pubDate>Tue, 15 Mar 2011 10:17:02 +0000</pubDate>
		<guid isPermaLink="false">#comment-3</guid>
		<description><![CDATA[Je rajouterai sur la deuxième question que soit le rédacteur du test est un vrai vicieux et la réponse est &quot;Le code ne compile pas&quot;, soit tu as fait une faute de frappe. &lt;br /&gt;
&lt;br /&gt;
Il manque le &quot;s&quot; dans le second &quot;messages[0]&quot;.]]></description>
		<content:encoded><![CDATA[<p>Je rajouterai sur la deuxième question que soit le rédacteur du test est un vrai vicieux et la réponse est &laquo;&nbsp;Le code ne compile pas&nbsp;&raquo;, soit tu as fait une faute de frappe. </p>
<p>Il manque le &laquo;&nbsp;s&nbsp;&raquo; dans le second &laquo;&nbsp;messages[0]&nbsp;&raquo;.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Tenir un journal d&#8217;erreurs par yostane</title>
		<link>https://blog.developpez.com/james-poulson/p9809/java/pourquoi_tenir_un_journal_d_erreurs_est#comment-9</link>
		<dc:creator><![CDATA[yostane]]></dc:creator>
		<pubDate>Mon, 14 Mar 2011 00:07:49 +0000</pubDate>
		<guid isPermaLink="false">#comment-9</guid>
		<description><![CDATA[Le mieux serait d&#039;avoir un journal communautaire avec des outils adaptées pour obtenir des solutions très rapidement.]]></description>
		<content:encoded><![CDATA[<p>Le mieux serait d&rsquo;avoir un journal communautaire avec des outils adaptées pour obtenir des solutions très rapidement.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Evaluation de compétence en ligne de Java par jpoulson</title>
		<link>https://blog.developpez.com/james-poulson/p9789/java/test_en_ligne_sur_le_java#comment-2</link>
		<dc:creator><![CDATA[jpoulson]]></dc:creator>
		<pubDate>Sun, 13 Mar 2011 22:53:05 +0000</pubDate>
		<guid isPermaLink="false">#comment-2</guid>
		<description><![CDATA[Merci pour ton commentaire Uther. Effectivement, la question sur les interfaces a été mal traduite. Je vais rectifier ça tout de suite et j&#039;ajouterais une capture d&#039;écran pour la question sur les Layout.]]></description>
		<content:encoded><![CDATA[<p>Merci pour ton commentaire Uther. Effectivement, la question sur les interfaces a été mal traduite. Je vais rectifier ça tout de suite et j&rsquo;ajouterais une capture d&rsquo;écran pour la question sur les Layout.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Commentaires sur Evaluation de compétence en ligne de Java par Uther</title>
		<link>https://blog.developpez.com/james-poulson/p9789/java/test_en_ligne_sur_le_java#comment-1</link>
		<dc:creator><![CDATA[Uther]]></dc:creator>
		<pubDate>Thu, 10 Mar 2011 17:57:48 +0000</pubDate>
		<guid isPermaLink="false">#comment-1</guid>
		<description><![CDATA[Merci de nous faire partager ça.&lt;br /&gt;
&lt;br /&gt;
Bon je ne spoilerai pas les résultats ;) mais j&#039;ai noté quelque remarques:&lt;br /&gt;
&lt;br /&gt;
&gt;Parmi les propositions suivantes, quel est la déclaration valable d&#039;une interface?&lt;br /&gt;
Aucune de ces lignes ne déclare d&#039;interface. &lt;br /&gt;
&lt;br /&gt;
Je suppose que la bonne question est &quot;Parmi les déclarations suivantes, laquelle est valable à l&#039;intérieur d&#039;une interface?&quot; &lt;br /&gt;
Vu que dans ce cas la en effet une seule des lignes est valable.&lt;br /&gt;
&lt;br /&gt;
Il manque aussi l&#039;image de la question sur le Layout, ce qui pour le coup rend la réponse difficile.]]></description>
		<content:encoded><![CDATA[<p>Merci de nous faire partager ça.</p>
<p>Bon je ne spoilerai pas les résultats <img src="https://blog.developpez.com/james-poulson/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /> mais j&rsquo;ai noté quelque remarques:</p>
<p>>Parmi les propositions suivantes, quel est la déclaration valable d&rsquo;une interface?<br />
Aucune de ces lignes ne déclare d&rsquo;interface. </p>
<p>Je suppose que la bonne question est &laquo;&nbsp;Parmi les déclarations suivantes, laquelle est valable à l&rsquo;intérieur d&rsquo;une interface?&nbsp;&raquo; <br />
Vu que dans ce cas la en effet une seule des lignes est valable.</p>
<p>Il manque aussi l&rsquo;image de la question sur le Layout, ce qui pour le coup rend la réponse difficile.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
