<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
<channel>
  <title>Olivier Doucet</title>
  <link>http://www.olivierdoucet.info/blog/?</link>
  
  <description>Suivi technologique PHP/MySQL et des technologies web en général</description>
  <language>fr</language>
  <pubDate>Fri, 07 May 2010 09:42:00 +0200</pubDate>
  <copyright>Prière de préciser la source lors de citation sur Internet. Pour tout autre support, contacter l'auteur</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/olivierdoucet/rss" /><feedburner:info uri="olivierdoucet/rss" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
    <title>Nouvelle pub Canal</title>
    <link>http://feedproxy.google.com/~r/olivierdoucet/rss/~3/-gPGJFt5gtg/</link>
    <guid isPermaLink="false">urn:md5:1101e46b20c4dfef4d2d090b87c0ee01</guid>
    <pubDate>Mon, 05 Oct 2009 22:07:00 +0200</pubDate>
    <dc:creator>Olivier</dc:creator>
            
    <description>&lt;p&gt;Une super pub pour Canal+ &lt;img src="/blog/themes/default/smilies/wink.png" alt=";)" class="smiley" /&gt;&lt;/p&gt;

&lt;div class="external-media" style="margin: 1em auto; text-align: center;"&gt;
&lt;object type="application/x-shockwave-flash" data="http://www.dailymotion.com/swf/xamuz2&amp;amp;related=0" width="400" height="316"&gt;
  &lt;param name="movie" value="http://www.dailymotion.com/swf/xamuz2&amp;amp;related=0" /&gt;
  &lt;param name="wmode" value="transparent" /&gt;
  &lt;param name="FlashVars" value="playerMode=embedded" /&gt;
&lt;/object&gt;
&lt;br /&gt;&lt;a href="http://www.dailymotion.com/video/xamuz2_pub-canal-createur-original-coupsde_creation"&gt;Pub Canal+ Créateur Original&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/olivierdoucet/rss/~4/-gPGJFt5gtg" height="1" width="1"/&gt;</description>
    
    
    
          <comments>http://www.olivierdoucet.info/blog/?post/2009/10/05/Nouvelle-pub-Canal#comment-form</comments>
      <wfw:comment>http://www.olivierdoucet.info/blog/?post/2009/10/05/Nouvelle-pub-Canal#comment-form</wfw:comment>
      <wfw:commentRss>http://www.olivierdoucet.info/blog/?feed/atom/comments/72</wfw:commentRss>
      <feedburner:origLink>http://www.olivierdoucet.info/blog/?post/2009/10/05/Nouvelle-pub-Canal</feedburner:origLink></item>
    
  <item>
    <title>Librairie MySQL en C</title>
    <link>http://feedproxy.google.com/~r/olivierdoucet/rss/~3/wbDnUbLGgcU/</link>
    <guid isPermaLink="false">urn:md5:a5c13957976472e1e16e34f9cbc2c761</guid>
    <pubDate>Wed, 16 Sep 2009 19:30:00 +0200</pubDate>
    <dc:creator>Olivier</dc:creator>
            
    <description>Je reprends un peu le langage C (après plusieurs années sur PHP, où j'ai maintenant un excellent niveau).
&lt;br /&gt;Petit pense bête concernant l'utilisation de la librairie MySQL sous Windows :&lt;br /&gt; Si vous avez une erreur après mysql_real_connect comme quoi &amp;quot;cannot connect to MySQL Server XXXX (0)&amp;quot;, alors que vous êtes persuadé que ce serveur existe bien, vérifiez si vous avez bien initialisé votre variable MYSQL avant:
&lt;br /&gt;&lt;br /&gt;&lt;code&gt;MYSQL mysql;
&lt;br /&gt;if(mysql_init(&amp;amp;mysql)==NULL) {
&lt;br /&gt;    printf(&amp;quot;\nFailed to initate MySQL connection\n&amp;quot;);
&lt;br /&gt;    return(-1);&lt;br /&gt; }&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;En rajoutant ce petit bout de code, le script se met enfin à marcher &lt;img src="/blog/themes/default/smilies/smile.png" alt=":)" class="smiley" /&gt; Bizarrement aucun souci quand le code est compilé sous Linux avec GCC, le souci n'intervient qu'avec Visual C++ 2008 Express...&lt;img src="http://feeds.feedburner.com/~r/olivierdoucet/rss/~4/wbDnUbLGgcU" height="1" width="1"/&gt;</description>
    
    
    
          <comments>http://www.olivierdoucet.info/blog/?post/2009/09/16/Librairie-MySQL-en-C#comment-form</comments>
      <wfw:comment>http://www.olivierdoucet.info/blog/?post/2009/09/16/Librairie-MySQL-en-C#comment-form</wfw:comment>
      <wfw:commentRss>http://www.olivierdoucet.info/blog/?feed/atom/comments/71</wfw:commentRss>
      <feedburner:origLink>http://www.olivierdoucet.info/blog/?post/2009/09/16/Librairie-MySQL-en-C</feedburner:origLink></item>
    
  <item>
    <title>DiRT 2 : la petite claque graphique</title>
    <link>http://feedproxy.google.com/~r/olivierdoucet/rss/~3/tIAll4NgJFI/</link>
    <guid isPermaLink="false">urn:md5:2429766d8c52d758ca0e932cac3f2a2e</guid>
    <pubDate>Wed, 22 Jul 2009 14:09:00 +0200</pubDate>
    <dc:creator>Olivier</dc:creator>
        <category>General</category>
            
    <description>&lt;p&gt;J'attends avec impatience la sortie de DiRT 2, tellement les screenshots et vidéos ingame paraissent incroyables.&lt;/p&gt;


&lt;p&gt;Quelques aperçus dans ce billet.&lt;/p&gt;    &lt;div class="external-media" style="margin: 1em auto; text-align: center;"&gt;
&lt;object type="application/x-shockwave-flash" data="http://www.youtube.com/v/wSVClf8zDyw&amp;amp;hl=en&amp;amp;fs=1" width="425" height="350"&gt;
  &lt;param name="movie" value="http://www.youtube.com/v/wSVClf8zDyw&amp;amp;hl=en&amp;amp;fs=1" /&gt;
  &lt;param name="wmode" value="transparent" /&gt;
&lt;/object&gt;
&lt;br /&gt;Colin McRae: DiRT 2 - Utah Trailblazer
&lt;/div&gt;




&lt;div class="external-media" style="margin: 1em auto; text-align: center;"&gt;
&lt;object type="application/x-shockwave-flash" data="http://www.youtube.com/v/1Oz6g89KIPI&amp;amp;hl=en&amp;amp;fs=1" width="425" height="350"&gt;
  &lt;param name="movie" value="http://www.youtube.com/v/1Oz6g89KIPI&amp;amp;hl=en&amp;amp;fs=1" /&gt;
  &lt;param name="wmode" value="transparent" /&gt;
&lt;/object&gt;
&lt;br /&gt;Colin McRae: DiRT 2 - Croatia Rally
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/olivierdoucet/rss/~4/tIAll4NgJFI" height="1" width="1"/&gt;</description>
    
    
    
          <comments>http://www.olivierdoucet.info/blog/?post/2009/07/22/DiRT-2-%3A-la-petite-claque-graphique#comment-form</comments>
      <wfw:comment>http://www.olivierdoucet.info/blog/?post/2009/07/22/DiRT-2-%3A-la-petite-claque-graphique#comment-form</wfw:comment>
      <wfw:commentRss>http://www.olivierdoucet.info/blog/?feed/atom/comments/70</wfw:commentRss>
      <feedburner:origLink>http://www.olivierdoucet.info/blog/?post/2009/07/22/DiRT-2-%3A-la-petite-claque-graphique</feedburner:origLink></item>
    
  <item>
    <title>Plus c'est obscure, moins c'est secure</title>
    <link>http://feedproxy.google.com/~r/olivierdoucet/rss/~3/oTu2bgga5qs/</link>
    <guid isPermaLink="false">urn:md5:256bef7b272d7aa4a72cc80d2e70fbc4</guid>
    <pubDate>Thu, 02 Jul 2009 22:23:00 +0200</pubDate>
    <dc:creator>Olivier</dc:creator>
            
    <description>&lt;p&gt;Je ne trouvais pas de bon titre alors j'ai trouvé un truc bien débile &lt;img src="/blog/themes/default/smilies/smile.png" alt=":)" class="smiley" /&gt;&lt;/p&gt;


&lt;p&gt;Je voulais pousser un coup de gueule contre ce genre d'articles : &lt;a href="http://mcarthurgfx.com/blog/article/a-basic-lesson-in-password-hashing" hreflang="en"&gt;http://mcarthurgfx.com/blog/article/a-basic-lesson-in-password-hashing&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Pour moi, ca reste une référence de ce qu'il ne faut &lt;strong&gt;&lt;ins&gt;PAS&lt;/ins&gt;&lt;/strong&gt; faire.&lt;/p&gt;


&lt;p&gt;Ce monsieur - que je ne connaissais pas avant de lire l'article - part pourtant d'un excellent constat: les utilisateurs (ou les développeurs de site, ca marche aussi) stockent les mots de passe en clair et c'est mal. Autre mauvaise solution: utiliser un hash tout simple du mot de passe (en l'occurence md5).
&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Qu'est-ce qu'un hash ? Disons simplement que c'est un algorithme de cryptage à sens unique; Une fois cryptée, la chaine originelle ne peut être retrouvée; Pour savoir si un pass est le bon, on compare celui tapé par l'utilisateur, on l'encrypte de la même façon, et on compare les hash. Si ils sont identiques, la chaine d'origine l'est également (c'est du très très simplifié et donc en partie faux, mais c'est pas la question Geneviève).
&lt;br /&gt;
Jusque là tout va bien...
&lt;br /&gt;
Mais là, c'est le drame: l'auteur de l'article propose de rajouter un salt au md5 et de rajouter ce salt au milieu de &lt;code&gt; md5(salt + password) &lt;/code&gt;. Une chose est certaine, cet auteur n'a aucune notion de base en sécurité. Simplifions son raisonnement : &lt;br /&gt;&lt;/p&gt;


&lt;p&gt;&lt;q&gt;un simple MD5, c'est trop simple à crypter, donc on va faire une sauce très compliquée et ca sera plus difficile à trouver&lt;/q&gt;.&lt;/p&gt;


&lt;p&gt;&lt;br /&gt;
Dans la même famille de réflexe à la con, je voudrais le &lt;code&gt; md5(md5(md5(password))) &lt;/code&gt;.
&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;Comment démonter ce raisonnement ? Et bah c'est pas si évident finalement. Disons qu'à partir du moment où le pirate aura trouvé votre raisonnement, votre base de mot de passe ne va pas tenir longtemps. La génération de dictionnaires, d'autant plus sur l'algo md5, est devenue un passe-temps aussi courant que &lt;del&gt;la pèche à la morue&lt;/del&gt; jouer à World of Warcraft.&lt;/p&gt;


&lt;p&gt;La complexité, ou ce que j'appellerais aussi &amp;quot;l'obscurité&amp;quot; n'a jamais fait de bonne sécurité. Suffit de regarder le nombre de failles de sécu trouvées dans des logiciels closed-source ... Comme quoi, cela n'a jamais arrêté personne.&lt;/p&gt;


&lt;p&gt;&lt;br /&gt;
La meilleure sécurité et la plus simple, c'est d'imaginer que même avec votre raisonnement, un pirate ne pourra décrypter votre mot de passe. Un simple BLOWFISH, ou alors AES sont de très bons algos parfaitement connus et pourtant aucune faille n'a été trouvé (à condition d'avoir des clefs assez importantes, et que l'ordinateur quantique ne soit pas inventé dans les prochains mois).&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/olivierdoucet/rss/~4/oTu2bgga5qs" height="1" width="1"/&gt;</description>
    
    
    
          <comments>http://www.olivierdoucet.info/blog/?post/2009/07/02/Plus-c-est-obscure%2C-moins-c-est-secure#comment-form</comments>
      <wfw:comment>http://www.olivierdoucet.info/blog/?post/2009/07/02/Plus-c-est-obscure%2C-moins-c-est-secure#comment-form</wfw:comment>
      <wfw:commentRss>http://www.olivierdoucet.info/blog/?feed/atom/comments/69</wfw:commentRss>
      <feedburner:origLink>http://www.olivierdoucet.info/blog/?post/2009/07/02/Plus-c-est-obscure%2C-moins-c-est-secure</feedburner:origLink></item>
    
  <item>
    <title>J'ai relancé Terragen</title>
    <link>http://feedproxy.google.com/~r/olivierdoucet/rss/~3/pJasi0jZoho/</link>
    <guid isPermaLink="false">urn:md5:f3c68b19022bd92ef1df9c8d208a2264</guid>
    <pubDate>Mon, 15 Jun 2009 21:51:00 +0200</pubDate>
    <dc:creator>Olivier</dc:creator>
            
    <description>&lt;p&gt;&lt;img src="http://www.olivierdoucet.info/blog/public/.SnowFinal_m.jpg" alt="Terragen" style="display:block; margin:0 auto;" title="Terragen, juin 2009" /&gt;&lt;br /&gt;
Et plus exactement la nouvelle version &lt;img src="/blog/themes/default/smilies/smile.png" alt=":)" class="smiley" /&gt;
Y'a pas à dire, ce logiciel est vraiment exceptionnel. Vous pouvez générer des paysages en images de synthèses en quelques clics, et le résultat est superbe.&lt;/p&gt;


&lt;p&gt;Ma gallerie : &lt;a href="http://olivierdoucet.info/gallerie/" hreflang="fr"&gt;http://olivierdoucet.info/gallerie/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/olivierdoucet/rss/~4/pJasi0jZoho" height="1" width="1"/&gt;</description>
    
    
    
          <comments>http://www.olivierdoucet.info/blog/?post/2009/06/15/J-ai-relanc%C3%A9-Terragen#comment-form</comments>
      <wfw:comment>http://www.olivierdoucet.info/blog/?post/2009/06/15/J-ai-relanc%C3%A9-Terragen#comment-form</wfw:comment>
      <wfw:commentRss>http://www.olivierdoucet.info/blog/?feed/atom/comments/68</wfw:commentRss>
      <feedburner:origLink>http://www.olivierdoucet.info/blog/?post/2009/06/15/J-ai-relanc%C3%A9-Terragen</feedburner:origLink></item>
    
  <item>
    <title>Essai audio sur le thème de Zelda</title>
    <link>http://feedproxy.google.com/~r/olivierdoucet/rss/~3/Zc0DXoC_-CM/</link>
    <guid isPermaLink="false">urn:md5:bbc4f6d8396d7b7cc01f84d8fd760388</guid>
    <pubDate>Mon, 01 Jun 2009 21:44:00 +0200</pubDate>
    <dc:creator>Olivier</dc:creator>
            
    <description>&lt;p&gt;Un premier essai de synthé et de logiciel de remix. Je me suis basé sur le thème audio du jeu Zelda afin d'avoir déjà un thème sur lequel broder;&lt;/p&gt;


&lt;p&gt;Feedback wanted &lt;img src="/blog/themes/default/smilies/smile.png" alt=":)" class="smiley" /&gt;&lt;/p&gt;

&lt;div class="external-media" style="margin: 1em auto; text-align: center;"&gt;
&lt;object type="application/x-shockwave-flash" data="http://www.olivierdoucet.info/blog/?pf=player_mp3.swf" width="200" height="20"&gt;&lt;param name="movie" value="http://www.olivierdoucet.info/blog/?pf=player_mp3.swf" /&gt;&lt;param name="wmode" value="transparent" /&gt;&lt;param name="FlashVars" value="showvolume=1&amp;amp;loadingcolor=ff9900&amp;amp;bgcolor1=eeeeee&amp;amp;bgcolor2=cccccc&amp;amp;buttoncolor=0066cc&amp;amp;buttonovercolor=ff9900&amp;amp;slidercolor1=cccccc&amp;amp;slidercolor2=999999&amp;amp;sliderovercolor=0066cc&amp;amp;mp3=http://www.olivierdoucet.info/blog/public/zelda.mp3&amp;amp;width=200&amp;amp;height=20" /&gt;&lt;/object&gt;
&lt;br /&gt;&lt;a href="http://www.olivierdoucet.info/blog/public/zelda.mp3"&gt;zelda.mp3&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/olivierdoucet/rss/~4/Zc0DXoC_-CM" height="1" width="1"/&gt;</description>
    
    
    
          <comments>http://www.olivierdoucet.info/blog/?post/2009/06/01/Essai-audio-sur-le-th%C3%A8me-de-Zelda#comment-form</comments>
      <wfw:comment>http://www.olivierdoucet.info/blog/?post/2009/06/01/Essai-audio-sur-le-th%C3%A8me-de-Zelda#comment-form</wfw:comment>
      <wfw:commentRss>http://www.olivierdoucet.info/blog/?feed/atom/comments/67</wfw:commentRss>
      <feedburner:origLink>http://www.olivierdoucet.info/blog/?post/2009/06/01/Essai-audio-sur-le-th%C3%A8me-de-Zelda</feedburner:origLink></item>
    
  <item>
    <title>Hadopi: utilisation comme spam ?</title>
    <link>http://feedproxy.google.com/~r/olivierdoucet/rss/~3/TX_trX3QCQY/</link>
    <guid isPermaLink="false">urn:md5:7f669f2255924bbac24ed3eb528e435b</guid>
    <pubDate>Fri, 15 May 2009 21:05:00 +0200</pubDate>
    <dc:creator>Olivier</dc:creator>
            
    <description>&lt;p&gt;Je m'étonne de ne pas encore avoir vu apparaitre des spams se donnant des airs de mails envoyés sous couvert de l'HADOPI et nous invitant à télécharger un gentil trojan sensé nous protéger. Voilà à quoi cela pourrait ressembler :&lt;/p&gt;

&lt;pre&gt;
From: Hadopi &amp;lt;hadopi@hadopi.com&amp;gt;
X-Priority: 3
X-Mailer: Programme de surveillance HADOPI
To: votreadresse@mail.com
Content-Type: text/plain;

Monsieur,
Le 14 mai 2009, nous avons détécté que votre adresse IP
avait servi à télécharger des contenus protégés par le 
droit d'auteur.
D'après la loi HADOPI, vous êtes responsable de votre 
connexion Internet. Suite à ce mail, vous encourez
donc des poursuites  et une suspension de 
votre accès Internet.

La loi vous oblige dans ce cas à installer un 
logiciel de surveillance qui prouvera votre innocence 
en cas de nouvelle utilisation frauduleuse. Ce logiciel 
est disponible à l'adresse suivante :
http://site-en-russie.ru/hadopi.exe

Si sous 24h, ce logiciel n'est pas installé, la commission 
HADOPI se réserve le droit d'ouvrir des poursuites.

Cordialement,

Ministère de la Culture et de la communication
http://www.culture.gouv.fr/
&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/olivierdoucet/rss/~4/TX_trX3QCQY" height="1" width="1"/&gt;</description>
    
    
    
          <comments>http://www.olivierdoucet.info/blog/?post/2009/05/15/Hadopi%3A-utilisation-comme-spam#comment-form</comments>
      <wfw:comment>http://www.olivierdoucet.info/blog/?post/2009/05/15/Hadopi%3A-utilisation-comme-spam#comment-form</wfw:comment>
      <wfw:commentRss>http://www.olivierdoucet.info/blog/?feed/atom/comments/66</wfw:commentRss>
      <feedburner:origLink>http://www.olivierdoucet.info/blog/?post/2009/05/15/Hadopi%3A-utilisation-comme-spam</feedburner:origLink></item>
    
  <item>
    <title>Compiler binutils dans une LFS</title>
    <link>http://feedproxy.google.com/~r/olivierdoucet/rss/~3/wtX_A7wiZgk/</link>
    <guid isPermaLink="false">urn:md5:ba041f2be0624871d0d399ab4c2667fa</guid>
    <pubDate>Fri, 01 May 2009 16:31:00 +0200</pubDate>
    <dc:creator>Olivier</dc:creator>
        <category>LFS</category>    
    <description>&lt;p&gt;j'attaque les choses sérieuses : ma première &lt;a href="http://www.olivierdoucet.info/blog/?tag/LFS"&gt;LFS&lt;/a&gt; !
Pour ceux qui comme moi ont choisis de se jeter à l'eau, voici un peu d'aide pour compiler binutils 2.19 &lt;a href="http://www.linuxfromscratch.org/lfs/view/development/chapter05/binutils-pass1.html" hreflang="en"&gt;tel qu'expliqué ici&lt;/a&gt; par exemple. Une compilation en l'état résultera (en tout cas chez moi) par une erreur concernant bfd et int8_t, ou alors une erreur concernant libiberty et des fichiers .h de votre système.
J'ai résolu le soucis en &lt;a href="http://www.linuxfromscratch.org/~robert/new/patches/binutils-2.19-branch_update.diff" hreflang="en"&gt;appliquant ce patch&lt;/a&gt; au source au préalable.&lt;/p&gt;


&lt;p&gt;Et voilà ça compile &lt;img src="/blog/themes/default/smilies/smile.png" alt=":)" class="smiley" /&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/olivierdoucet/rss/~4/wtX_A7wiZgk" height="1" width="1"/&gt;</description>
    
    
    
          <comments>http://www.olivierdoucet.info/blog/?post/2009/05/01/Compiler-binutils-dans-une-LFS#comment-form</comments>
      <wfw:comment>http://www.olivierdoucet.info/blog/?post/2009/05/01/Compiler-binutils-dans-une-LFS#comment-form</wfw:comment>
      <wfw:commentRss>http://www.olivierdoucet.info/blog/?feed/atom/comments/65</wfw:commentRss>
      <feedburner:origLink>http://www.olivierdoucet.info/blog/?post/2009/05/01/Compiler-binutils-dans-une-LFS</feedburner:origLink></item>
    
  <item>
    <title>Affiche de mauvais goût</title>
    <link>http://feedproxy.google.com/~r/olivierdoucet/rss/~3/Ed2yuvMNwb8/</link>
    <guid isPermaLink="false">urn:md5:4fddf874b797b2396276428779aba14e</guid>
    <pubDate>Tue, 07 Apr 2009 16:46:00 +0200</pubDate>
    <dc:creator>Olivier</dc:creator>
            
    <description>&lt;p&gt;Et pourtant, c'est pour un musée. Preuve que l'actu ne se contrôle pas !
&lt;a href="http://www.olivierdoucet.info/blog/public/IMG_6332.JPG"&gt;&lt;img src="http://www.olivierdoucet.info/blog/public/.IMG_6332_m.jpg" alt="IMG_6332.JPG" style="display:block; margin:0 auto;" title="IMG_6332.JPG, avr. 2009" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/olivierdoucet/rss/~4/Ed2yuvMNwb8" height="1" width="1"/&gt;</description>
    
    
    
          <comments>http://www.olivierdoucet.info/blog/?post/2009/04/07/Affiche-de-mauvais-go%C3%BBt#comment-form</comments>
      <wfw:comment>http://www.olivierdoucet.info/blog/?post/2009/04/07/Affiche-de-mauvais-go%C3%BBt#comment-form</wfw:comment>
      <wfw:commentRss>http://www.olivierdoucet.info/blog/?feed/atom/comments/64</wfw:commentRss>
      <feedburner:origLink>http://www.olivierdoucet.info/blog/?post/2009/04/07/Affiche-de-mauvais-go%C3%BBt</feedburner:origLink></item>
    
  <item>
    <title>in_array et le mode strict</title>
    <link>http://feedproxy.google.com/~r/olivierdoucet/rss/~3/46svbF8cX3I/</link>
    <guid isPermaLink="false">urn:md5:29e2c1f975142c520d9e5d8f2c04c69c</guid>
    <pubDate>Mon, 09 Mar 2009 18:59:00 +0100</pubDate>
    <dc:creator>Olivier</dc:creator>
        <category>PHP / SQL</category>
        <category>php</category>    
    <description>&lt;p&gt;&lt;a href="http://fr.php.net/in_array" hreflang="fr"&gt;La fonction in_array&lt;/a&gt; peut avoir un comportement tout à fait étrange lorsqu'on utilise la syntaxe par défaut, qui fait une vérification non stricte :&lt;/p&gt;


&lt;p&gt;&lt;code&gt;var_dump(in_array('mouhahaha',array(0,1,2))); // bool(true)&lt;/code&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Et oui, mon texte est dans ce tableau d'après PHP. Etonnant, non ? Tout simplement parce que PHP va essayer de convertir (cast) les types avant de les comparer. Ma chaîne de caractère, à un moment, vaut 'true' et mon 1 vaut 'true' aussi, d'où l'égalité.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Par contre, si on met les nombres entre quotes comme ceci :
&lt;code&gt;var_dump(in_array('mouhahaha',array('0','1','2'))); // bool(false)&lt;/code&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Car les chaines étant de même type (string), aucun cast n'a lieu.&lt;/p&gt;


&lt;p&gt;Pour éviter les effets de bords et autres mauvaises surprises, utilisez le mode strict qui va également comparer le type de la variable. Pour cela, ajouter un 3e argument à in_array comme ceci : &lt;br /&gt;&lt;/p&gt;



&lt;p&gt;&lt;code&gt;var_dump(in_array('mouhahaha',array(0,1,2), true)); // bool(false)&lt;/code&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/olivierdoucet/rss/~4/46svbF8cX3I" height="1" width="1"/&gt;</description>
    
    
    
          <comments>http://www.olivierdoucet.info/blog/?post/2009/03/09/in_array-et-le-mode-strict#comment-form</comments>
      <wfw:comment>http://www.olivierdoucet.info/blog/?post/2009/03/09/in_array-et-le-mode-strict#comment-form</wfw:comment>
      <wfw:commentRss>http://www.olivierdoucet.info/blog/?feed/atom/comments/63</wfw:commentRss>
      <feedburner:origLink>http://www.olivierdoucet.info/blog/?post/2009/03/09/in_array-et-le-mode-strict</feedburner:origLink></item>
    
  <item>
    <title>Syntaxe d'un email</title>
    <link>http://feedproxy.google.com/~r/olivierdoucet/rss/~3/ueKM66URdG8/</link>
    <guid isPermaLink="false">urn:md5:dbf3710358e0931651788bb9e6263478</guid>
    <pubDate>Thu, 26 Feb 2009 15:11:00 +0100</pubDate>
    <dc:creator>Olivier</dc:creator>
        <category>email</category><category>RFC</category>    
    <description>&lt;p&gt;Quels vérifications faites-vous pour savoir si un email a une syntaxe valide ou non ? Je pense que nombre d'entre vous utilisent quelque chose du genre :&lt;/p&gt;
&lt;pre&gt;
[a-zA-Z0-9\-_\.]@[a-zA-Z0-9\-_\.]
&lt;/pre&gt;


&lt;p&gt;Et bien vous avez tord. Selon la &lt;a href="http://www.ietf.org/rfc/rfc2822.txt" hreflang="en"&gt;RFC 2822&lt;/a&gt;, les emails suivant sont tout à fait corrects :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;@@bob@domain.com&lt;/li&gt;
&lt;li&gt;bob+jones@domain.us&lt;/li&gt;
&lt;li&gt;&amp;quot;bob@jones&amp;quot;@domain.com&lt;/li&gt;
&lt;li&gt;&amp;quot;bob jones&amp;quot;@domain.com@@&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;je suis tombé là dessus par hasard en lisant une page de documentation du Zend Fra&lt;a href="http://framework.zend.com/manual/en/zend.validate.set.html" hreflang="en"&gt;&lt;/a&gt;mework.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/olivierdoucet/rss/~4/ueKM66URdG8" height="1" width="1"/&gt;</description>
    
    
    
          <comments>http://www.olivierdoucet.info/blog/?post/2009/02/26/Syntaxe-dun-email#comment-form</comments>
      <wfw:comment>http://www.olivierdoucet.info/blog/?post/2009/02/26/Syntaxe-dun-email#comment-form</wfw:comment>
      <wfw:commentRss>http://www.olivierdoucet.info/blog/?feed/atom/comments/62</wfw:commentRss>
      <feedburner:origLink>http://www.olivierdoucet.info/blog/?post/2009/02/26/Syntaxe-dun-email</feedburner:origLink></item>
    
  <item>
    <title>Stockage de nombre à virgules dans MySQL</title>
    <link>http://feedproxy.google.com/~r/olivierdoucet/rss/~3/y3k_CACVD8w/</link>
    <guid isPermaLink="false">urn:md5:c7f233568edc9f6c7ef977f0a5a8f984</guid>
    <pubDate>Sat, 21 Feb 2009 16:59:00 +0100</pubDate>
    <dc:creator>Olivier</dc:creator>
        <category>PHP / SQL</category>
        <category>float</category><category>MySQL</category>    
    <description>&lt;p&gt;Pour stocker un nombre à virgule (un flottant, ou float en anglais) dans MySQL, il existe plusieurs types de colonnes. Mais attention : ils ne sont pas tous identiques. Petite démonstration simple : &lt;br /&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prenons une table 'test', avec entre autre un champ de type FLOAT(8,2).&lt;/li&gt;
&lt;li&gt;Executez la requete suivante : &lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;INSERT INTO `test` (id, flottant) VALUES(4,'446351.74');&lt;/code&gt;
&lt;br /&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Puis relisez la ligne :&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;SELECT * FROM `test` WHERE id=4&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;Voici le résultat:&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;446351.75&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;Comment ?? ,75 et non ,74 comme je l'ai demandé ? Et oui, normal vu la méthode de stockage qu'utilise MySQL.&lt;/p&gt;    &lt;p&gt;Voici ce que dit la doc :&lt;/p&gt;


&lt;blockquote&gt;&lt;p&gt;&lt;em&gt; Les types NUMERIC et DECIMAL  &lt;a href="http://www.olivierdoucet.info/blog/?post/2009/02/21/..." title="..."&gt;...&lt;/a&gt; sont utilisées par des valeurs dont il est primordial de conserver la précision exacte, comme pour des données financières.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;La précision d'un FLOAT n'est donc pas parfaite. Faites attention à ça si vous stockez des valeurs financières dans une base de données.&lt;/p&gt;


&lt;p&gt;je vous encourage donc à aller lire attentivement la documentation lors de la création de vos tables &lt;img src="/blog/themes/default/smilies/wink.png" alt=";)" class="smiley" /&gt;
&lt;a href="http://dev.mysql.com/doc/refman/5.0/fr/numeric-type-overview.html" hreflang="fr"&gt;http://dev.mysql.com/doc/refman/5.0/fr/numeric-type-overview.html&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/olivierdoucet/rss/~4/y3k_CACVD8w" height="1" width="1"/&gt;</description>
    
    
    
          <comments>http://www.olivierdoucet.info/blog/?post/2009/02/21/Stockage-de-nombre-a-virgules-dans-MySQL#comment-form</comments>
      <wfw:comment>http://www.olivierdoucet.info/blog/?post/2009/02/21/Stockage-de-nombre-a-virgules-dans-MySQL#comment-form</wfw:comment>
      <wfw:commentRss>http://www.olivierdoucet.info/blog/?feed/atom/comments/61</wfw:commentRss>
      <feedburner:origLink>http://www.olivierdoucet.info/blog/?post/2009/02/21/Stockage-de-nombre-a-virgules-dans-MySQL</feedburner:origLink></item>
    
  <item>
    <title>Test du HTC Touch HD</title>
    <link>http://feedproxy.google.com/~r/olivierdoucet/rss/~3/sZXZZvs2tNc/</link>
    <guid isPermaLink="false">urn:md5:788708002686390e0adca7d21a85c7f5</guid>
    <pubDate>Sat, 20 Dec 2008 19:39:00 +0100</pubDate>
    <dc:creator>Olivier</dc:creator>
            
    <description>Je profite de la fin d'année et de noël pour changer mon forfait et au passage, quitte à repartir avec un engagement super long avec un opérateur, changer de téléphone.
Je passe donc de SFR à Orange, et change mon HTC TyTN II dont j'ai été assez content, au nouvel HTC Touch HD sorti il y a tout juste un mois, et dispo dans les agences Orange depuis aujourd'hui seulement.
Petit tour du propriétaire !    Petite parenthèse sur le prix prohibitif de ce téléphone. Là où Orange UK le commercialise à 100€ (80£), il m'a fallu débourser 250€ pour le même en France. La vendeuse chez Orange m'a dit qu'en ce moment, tout le monde ne jurait que pour l'iPhone et que ce modèle passait tout à fait inaperçu. &lt;br /&gt;Formalités d'usage expédiée en 30 minutes, j'ai le plaisir de ressortir du magasin avec le bijou en poche.&lt;br /&gt;&lt;a href="http://www.olivierdoucet.info/blog/public/touchHD/p1020661.jpg"&gt;&lt;img style="margin: 0 1em 1em 0; float: left;" alt="" src="http://www.olivierdoucet.info/blog/public/touchHD/.p1020661_s.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;Passons sur les choses qui fâchent, et regardons maintenant ce petit bijou. La boite fait toujours son effet, puisque le téléphone est visible dès l'ouverture. Ah oui, il est vraiment pas mal ! Les accessoires suivent dessus, et côté packaging c'est complet : écouteurs HTC ; cordon USB (le format me semble très étrange, il semblerait que ce ne soit pas un standard. A confirmer) ; &lt;a href="http://www.olivierdoucet.info/blog/public/touchHD/p1020663.jpg"&gt;&lt;img style="margin: 0 0 1em 1em; float: right;" alt="" src="http://www.olivierdoucet.info/blog/public/touchHD/.p1020663_s.jpg" /&gt;&lt;/a&gt;Chargeur secteur (on notera l'adaptateur prise FR à brancher en plus, ce qui permet à HTC de commercialiser le même chargeur dans le monde entier, avec juste l'adaptateur adapté en fonction des prises) ; une housse de protection (façon chaussette) ; une carte micro SD de 8Go ; Orange donne même un calque plastique à mettre sur l'appareil pour le protéger des rayures. C'est toujours ça de pris &lt;img src="/blog/themes/default/smilies/wink.png" alt=";)" class="smiley" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.olivierdoucet.info/blog/public/touchHD/p1020668.jpg"&gt;&lt;img style="margin: 0 1em 1em 0; float: left;" alt="" src="http://www.olivierdoucet.info/blog/public/touchHD/.p1020668_s.jpg" /&gt;&lt;/a&gt;Niveau interface, on trouve la très belle Touch Flo de HTC. Très fluide, on se rapproche d'un iPhone niveau défilement dans les menus, même si on sent la lourdeur du Windows Mobile derrière dès qu'on bascule dans des options ou autres.&lt;br /&gt;Niveau logiciel, je vais pas vous raconter ce que vous trouverez partout sur le net. Opera est fourni de base, les pages web sont affichées parfaitement et profitent bien de l'écran. L'appli audio est bien foutue, la vidéo marche bien (passez sur xda-developers pour optimiser facilement quelques paramêtres et avoir de la vidéo encore meilleure).&lt;br /&gt;Niveau réception Wifi, j'ai trouvé les performances plutôt bonnes par rapport à mon TyTN II. Il faudrait maintenant tester dans des espaces avec du wifi lointain, ce qui n'était pas mon cas.&lt;br /&gt;&lt;a href="http://www.olivierdoucet.info/blog/public/touchHD/p1020674.jpg"&gt;&lt;img style="margin: 0 0 1em 1em; float: right;" alt="" src="http://www.olivierdoucet.info/blog/public/touchHD/.p1020674_s.jpg" /&gt;&lt;/a&gt;Le seul point dérangeant, c'est la présence de Orange de partout dans le téléphone : les raccourcis web, les jeux, etc. C'est sensé simplifier la vie, mais on se dépèche de tout virer et de mettre ces propres liens. Certaines options semblent bloqués et non supprimables, comme la boite mail Orange (je pense qu'en cherchant on doit bien y arriver).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.olivierdoucet.info/blog/public/touchHD/p1020678.jpg"&gt;&lt;img style="margin: 0 1em 1em 0; float: left;" alt="" src="http://www.olivierdoucet.info/blog/public/touchHD/.p1020678_t.jpg" /&gt;&lt;/a&gt;&lt;a href="http://www.olivierdoucet.info/blog/public/touchHD/p1020679.jpg"&gt;&lt;img style="margin: 0 1em 1em 0; float: left;" alt="" src="http://www.olivierdoucet.info/blog/public/touchHD/.p1020679_t.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br /&gt;Au final, je trouve que ce HTC Touch HD valait vraiment l'attente. C'est un sérieux concurrent de l'iPhone, notamment grâce à l'énorme communauté derrière les produits Windows Mobile qui vont très vite nous sortir pleins d'options et de logiciels en plus pour le téléphone ! &lt;br /&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/olivierdoucet/rss/~4/sZXZZvs2tNc" height="1" width="1"/&gt;</description>
    
    
    
          <comments>http://www.olivierdoucet.info/blog/?post/2008/12/20/Test-du-HTC-Touch-HD#comment-form</comments>
      <wfw:comment>http://www.olivierdoucet.info/blog/?post/2008/12/20/Test-du-HTC-Touch-HD#comment-form</wfw:comment>
      <wfw:commentRss>http://www.olivierdoucet.info/blog/?feed/atom/comments/60</wfw:commentRss>
      <feedburner:origLink>http://www.olivierdoucet.info/blog/?post/2008/12/20/Test-du-HTC-Touch-HD</feedburner:origLink></item>
    
  <item>
    <title>Différence entre static:: et self:: en PHP 5.3</title>
    <link>http://feedproxy.google.com/~r/olivierdoucet/rss/~3/OOX0yPgJg20/</link>
    <guid isPermaLink="false">urn:md5:c9e68463682bb7c1f4db5167901cff5e</guid>
    <pubDate>Wed, 17 Dec 2008 18:31:00 +0100</pubDate>
    <dc:creator>Olivier</dc:creator>
        <category>PHP / SQL</category>
            
    <description>&lt;p&gt;Grâce au &lt;a href="http://fr3.php.net/oop5.late-static-bindings" hreflang="fr"&gt;Late Static Binding&lt;/a&gt; introduit dans PHP 5.3, la gestion des classes va encore plus loin.
Un nouveau mot-clef a été introduit dans le langage, il s'agit de 'static'.
Son utilisation ressemble étrangement à 'self', mais il y a une très grande différence entre les deux.&lt;/p&gt;    &lt;p&gt;Démonstration :
&lt;/p&gt;
&lt;pre&gt;&amp;lt;?php&lt;br /&gt;class test1 {&lt;br /&gt;    protected static $a = 0;&lt;br /&gt;   public static function go () {&lt;br /&gt;       echo self::$a;&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;class test2 extends test1 {&lt;br /&gt;    protected static $a = 1;&lt;br /&gt;}&lt;br /&gt;test2::go ();&lt;/pre&gt;
&lt;p&gt;En PHP 5.2 et PHP 5.3, le code ci-dessus va renvoyer 0. Pas normal me dites-vous, et vous avez bien raison. En effet, l'analyse du mot-clef 'self' se fait au moment de la compilation, donc son utilisation ignore toutes les classes étendues.&lt;/p&gt;
&lt;p&gt;Et voici la magie de PHP 5.3. Réécrivez la fonction go comme suit dans test1 : &lt;/p&gt;
&lt;pre&gt;&amp;lt;?php&lt;br /&gt;public static function go () {&lt;br /&gt;       echo static::$a;&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;Oh magie, le code affiche bien &amp;quot;1&amp;quot; !&lt;/p&gt;
&lt;p&gt;En conclusion :
&lt;a href="http://wiki.php.net/todo/php53" hreflang="fr"&gt;Les apports de PHP 5.3&lt;/a&gt; vont bien au delà de ce point de détail. Toutefois la version est encore largement buggée et inutilisable en production. Mais surveillez les nouveautés (notamment au niveau du langage objet), il y a vraiment de bonnes choses dedans.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/olivierdoucet/rss/~4/OOX0yPgJg20" height="1" width="1"/&gt;</description>
    
    
    
          <comments>http://www.olivierdoucet.info/blog/?post/2008/12/17/Difference-entre-static%3A%3A-et-self%3A%3A-en-PHP-53#comment-form</comments>
      <wfw:comment>http://www.olivierdoucet.info/blog/?post/2008/12/17/Difference-entre-static%3A%3A-et-self%3A%3A-en-PHP-53#comment-form</wfw:comment>
      <wfw:commentRss>http://www.olivierdoucet.info/blog/?feed/atom/comments/59</wfw:commentRss>
      <feedburner:origLink>http://www.olivierdoucet.info/blog/?post/2008/12/17/Difference-entre-static%3A%3A-et-self%3A%3A-en-PHP-53</feedburner:origLink></item>
    
  <item>
    <title>Les jeux marchent sous Linux ...</title>
    <link>http://feedproxy.google.com/~r/olivierdoucet/rss/~3/Sd2HaoJf9io/</link>
    <guid isPermaLink="false">urn:md5:888044c98661162153ea05879b3fb1f2</guid>
    <pubDate>Wed, 03 Dec 2008 23:46:00 +0100</pubDate>
    <dc:creator>Olivier</dc:creator>
        <category>Eve Online</category><category>Linux</category>    
    <description>&lt;p&gt;... et même mieux que sous Windows !
En effet j'ai repris du service sur &lt;a href="http://www.eve-online.com" hreflang="en"&gt;Eve Online&lt;/a&gt; depuis quelques jours. Seulement le jeu me fait un magnifique &lt;a href="http://fr.wikipedia.org/wiki/Blue_Screen_of_Death" hreflang="fr"&gt;BSOD&lt;/a&gt; sous Windows dès qu'il y a un peu trop d'éléments affichés à l'écran. Pas pratique en pleine bataille ...
D'où l'idée de voir si ca tournait bien sous Linux, vu que CCP, la boite qui fait ce jeu, dit que &amp;quot;maintenant tout roule sous Linux&amp;quot;. Installation facile (executer &amp;gt; suivant &amp;gt; suivant ... et hop ca marche). Bref, Linux comme je l'aime, pas de ligne de commande à tout va (ca rappellerait trop le boulot).
Et le top dans tout ça ? Le jeu est parfaitement fluide, et SURTOUT ne plante pas ! Bref, jouer sous Linux, c'est possible !
Note:  j'utilise Ubuntu Hardy Heron&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/olivierdoucet/rss/~4/Sd2HaoJf9io" height="1" width="1"/&gt;</description>
    
    
    
          <comments>http://www.olivierdoucet.info/blog/?post/2008/12/03/Les-jeux-marchent-sous-Linux#comment-form</comments>
      <wfw:comment>http://www.olivierdoucet.info/blog/?post/2008/12/03/Les-jeux-marchent-sous-Linux#comment-form</wfw:comment>
      <wfw:commentRss>http://www.olivierdoucet.info/blog/?feed/atom/comments/58</wfw:commentRss>
      <feedburner:origLink>http://www.olivierdoucet.info/blog/?post/2008/12/03/Les-jeux-marchent-sous-Linux</feedburner:origLink></item>
    
  <item>
    <title>Hymne russe sous titré en français</title>
    <link>http://feedproxy.google.com/~r/olivierdoucet/rss/~3/8Ez-V_0V4_s/</link>
    <guid isPermaLink="false">urn:md5:a8f42da7b7b31835b2a28790461696ab</guid>
    <pubDate>Sat, 22 Nov 2008 17:44:00 +0100</pubDate>
    <dc:creator>Olivier</dc:creator>
            
    <description>&lt;p&gt;Toute l'explication des paroles de l'hymne russe enfin en vidéo !&lt;/p&gt;

&lt;div class="external-media" style="margin: 1em auto; text-align: center;"&gt;
&lt;object type="application/x-shockwave-flash" data="http://www.youtube.com/v/WM5H1KthhUU&amp;amp;hl=en&amp;amp;fs=1" width="425" height="350"&gt;
  &lt;param name="movie" value="http://www.youtube.com/v/WM5H1KthhUU&amp;amp;hl=en&amp;amp;fs=1" /&gt;
  &lt;param name="wmode" value="transparent" /&gt;
&lt;/object&gt;
&lt;br /&gt;Hymne national soviétique sous-titre français
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/olivierdoucet/rss/~4/8Ez-V_0V4_s" height="1" width="1"/&gt;</description>
    
    
    
          <comments>http://www.olivierdoucet.info/blog/?post/2008/11/22/Hymne-russe-sous-titre-en-francais#comment-form</comments>
      <wfw:comment>http://www.olivierdoucet.info/blog/?post/2008/11/22/Hymne-russe-sous-titre-en-francais#comment-form</wfw:comment>
      <wfw:commentRss>http://www.olivierdoucet.info/blog/?feed/atom/comments/57</wfw:commentRss>
      <feedburner:origLink>http://www.olivierdoucet.info/blog/?post/2008/11/22/Hymne-russe-sous-titre-en-francais</feedburner:origLink></item>
    
  <item>
    <title>Le spam et Thunderbird</title>
    <link>http://feedproxy.google.com/~r/olivierdoucet/rss/~3/YBshTo8mRn0/</link>
    <guid isPermaLink="false">urn:md5:1f93809876bc9d440b9662d4b73b5ad9</guid>
    <pubDate>Thu, 13 Nov 2008 11:16:00 +0100</pubDate>
    <dc:creator>Olivier</dc:creator>
        <category>spam</category><category>thunderbird</category>    
    <description>&lt;p&gt;La lutte contre le spam est une préoccupation récurrente. Dernièrement, nous avons mis en place des filtres bayésiens.
Petite trouvaille : pour améliorer le filtre bayésien basé sur le feedback utilisateur, il est possible de récupérer le statut de &amp;quot;spam&amp;quot; posé par Thunderbird. En effet, ce dernier ajoute un flag IMAP nommé &amp;quot;Junk&amp;quot;. Reste à coder l'appli pour utiliser cette information, et à voir comment font les autres gestionnaires de mails.
Sinon petite stats: sur plusieurs dizaines de milliers de mails reçus par jour, le taux de spam est de 99,3%. La vérité doit être encore supérieure vu que certains spams passent à travers...
Enfin je suis tombé sur une étude récemment sur le taux de retour d'une campagne de spam. D'après l'étude, le taux de commande par mail envoyé est de 0,3 pour mille, là où une campagne classique (3 Suisses, La Redoute, etc.) est de ... 3 pour mille.
Bref, le spam est toujours aussi rentable, et ce n'est pas prêt de s'arrêter.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/olivierdoucet/rss/~4/YBshTo8mRn0" height="1" width="1"/&gt;</description>
    
    
    
          <comments>http://www.olivierdoucet.info/blog/?post/2008/11/13/Le-spam-et-Thunderbird#comment-form</comments>
      <wfw:comment>http://www.olivierdoucet.info/blog/?post/2008/11/13/Le-spam-et-Thunderbird#comment-form</wfw:comment>
      <wfw:commentRss>http://www.olivierdoucet.info/blog/?feed/atom/comments/56</wfw:commentRss>
      <feedburner:origLink>http://www.olivierdoucet.info/blog/?post/2008/11/13/Le-spam-et-Thunderbird</feedburner:origLink></item>
    
  <item>
    <title>Stocker un booléen dans MySQL</title>
    <link>http://feedproxy.google.com/~r/olivierdoucet/rss/~3/jmEzX50clY4/</link>
    <guid isPermaLink="false">urn:md5:057ffcbeb4853ca45cdfb6538f2dd28b</guid>
    <pubDate>Thu, 18 Sep 2008 20:18:00 +0200</pubDate>
    <dc:creator>Olivier</dc:creator>
        <category>PHP / SQL</category>
        <category>enum</category><category>mysql</category><category>php</category>    
    <description>&lt;p&gt;J'ai vu pas mal de méthodes pour stocker un booléen dans SQL. Certaines sont vraiment à éviter, d'autres sont plus faciles, etc.
Voici mon (humble) avis sur celles à absolument éviter et les bonnes méthodes.&lt;/p&gt;    &lt;h2&gt;Méthode 1: Stocker comme ENUM('0','1')&lt;/h2&gt;

&lt;p&gt;Probablement la plus mauvaise idée que vous pouvez avoir. Je m'arrache les cheveux à chaque fois que je vois ça dans le projet sur lequel je bosse actuellement (et dont je n'ai pas fait la conception).
Petite explication du pourquoi du comment.&lt;/p&gt;


&lt;p&gt;Soit une table membre, avec un champ `valide` de type ENUM('0','1'), représentant si le membre a validé son inscription ou non.
Je veux savoir si le membre est validé :&lt;/p&gt;
&lt;pre&gt;
SELECT id,nom FROM membre WHERE id=666 AND valide=1;
(0 row(s)returned)
&lt;/pre&gt;

&lt;p&gt;=&amp;gt; pas d'erreur, mais ne renvoie rien. Bizarre, j'ai pourtant cru que c'était bon. Je vérifie :&lt;/p&gt;
&lt;pre&gt;
SELECT id,nom FROM membre WHERE id=666 AND valide=0;
(0 row(s)returned)
&lt;/pre&gt;

&lt;p&gt;=&amp;gt; pas d'erreur, mais toujours rien retourné. Damned!
En effet, MySQL ne fait pas de typecasting, et pour lui, '0' ne vaut ni 1 ni 0.&lt;/p&gt;


&lt;p&gt;Deuxième soucis, c'est si vous utilisez des fonctions de comparaison MySQL. Exemple :&lt;/p&gt;
&lt;pre&gt;
select if (valide,'ok','pas bon') FROM membre WHERE id=666;
&lt;/pre&gt;

&lt;p&gt;=&amp;gt; retourne 'ok', quelque soit la valeur de valide. En effet, une chaine de caractère, même '0', est toujours vraie.&lt;/p&gt;


&lt;h3&gt;Côté stockage&lt;/h3&gt;

&lt;p&gt;Chaque valeur ENUM est associée à un index. Manque de bol, la 1e valeur a l'index 1. Donc ENUM('0','1') donne les index '0' =&amp;gt; 1 et '1' =&amp;gt; 2. Génial... L'index 0 est utilisé pour stocker une chaîne vide (cas d'erreur). &lt;a href="http://dev.mysql.com/doc/refman/5.0/fr/enum.html" hreflang="fr"&gt;cf la doc MySQL.&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Enfin, pour ceux qui me parlent de performance, sachez qu'un ENUM prend un ou deux octets en fonction du nombre de valeurs. Et si mes souvenirs sont bons, ENUM prend toujours 2 octets dans d'anciennes versions de MySQL &lt;em&gt;(à vérifier).&lt;/em&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt; : on oublie.
Note : ENUM() a également les mêmes soucis que VARCHAR(), donc n'utilisez pas de stockage de chaine pour cela, point barre.&lt;/p&gt;



&lt;h2&gt;Méthode 2: Stocker comme un entier (&lt;em&gt;INTEGER&lt;/em&gt;).&lt;/h2&gt;

&lt;p&gt;C'est une bonne solution, reste à choisir quel type de champ. Il en existe beaucoup : TINYINT, BIGINT, etc. Leur différence ? Ils permettent de stocker des entiers plus ou moins grand. Comme nous voulons juste stocker 2 valeurs, autant prendre le moins couteux, à savoir TINYINT, qui ne prend qu'un seul octet en mémoire. En définissant votre champ sur TINYINT(1), vous limitez même les erreurs. Pour les curieux qui veulent savoir l'espace de stockage nécéssaire et l'intervalle de chaque type de colonne,&lt;a href="http://dev.mysql.com/doc/refman/5.0/fr/numeric-types.html" hreflang="fr"&gt; la documentation est là pour ça.&lt;/a&gt;&lt;/p&gt;



&lt;h2&gt;Méthode 3: Stocker comme un champ de type BIT(1)&lt;/h2&gt;

&lt;p&gt;Solution relativement récente (BIT a été intégré dans MySQL 5.0.3). Niveau stockage c'est pas forcément très efficace, car BIT(1) prend quand même un octet. Il est question d'améliorer cette gestion dans de prochaines versions de MySQL. Par contre niveau utilisation c'est pas vraiment simple.&lt;/p&gt;

&lt;h3&gt;Insertion:&lt;/h3&gt;

&lt;pre&gt;
INSERT INTO matable VALUES (b'1');
INSERT INTO matable VALUES (0b1);
INSERT INTO matable VALUES (b'0');
INSERT INTO matable VALUES (0b0);
&lt;/pre&gt;


&lt;h3&gt;Pour la récupération ...&lt;/h3&gt;

&lt;p&gt;..., y'a une astuce. En effet, &lt;em&gt;SELECT monchamp FROM matable&lt;/em&gt; vous renverra de jolis signes cabalistique. En effet, MySQL vous renvoie la valeur binaire. Pour récupérer l'entier, plusieurs méthodes:&lt;/p&gt;
&lt;pre&gt;
SELECT monchamp+0 from test;
SELECT bin(champ) from test;
SELECT oct(champ) from test;
SELECT hex(champ) from test;
&lt;/pre&gt;

&lt;p&gt;Attention si vous stockez plus qu'un booléen (BIT(M) avec M&amp;gt;1), les sélections ci-dessus auront alors des comportements différents entre elles.
Comme toujours, &lt;a href="http://dev.mysql.com/doc/refman/5.0/fr/bit-field-values.html" hreflang="fr"&gt;RTFM&lt;/a&gt;.&lt;/p&gt;



&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;Personnellement, je recommanderais de stocker des booléens dans un champ TINYINT(1). C'est ce qui est le plus simple à utiliser. BIT reste un peu trop complexe pour peu/aucun gain de performance.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/olivierdoucet/rss/~4/jmEzX50clY4" height="1" width="1"/&gt;</description>
    
    
    
          <comments>http://www.olivierdoucet.info/blog/?post/2008/09/18/Stocker-un-booleen-dans-MySQL#comment-form</comments>
      <wfw:comment>http://www.olivierdoucet.info/blog/?post/2008/09/18/Stocker-un-booleen-dans-MySQL#comment-form</wfw:comment>
      <wfw:commentRss>http://www.olivierdoucet.info/blog/?feed/atom/comments/55</wfw:commentRss>
      <feedburner:origLink>http://www.olivierdoucet.info/blog/?post/2008/09/18/Stocker-un-booleen-dans-MySQL</feedburner:origLink></item>
    
  <item>
    <title>1, 2, 3, soleil ! avec un chat</title>
    <link>http://feedproxy.google.com/~r/olivierdoucet/rss/~3/BazsOIV3nrA/</link>
    <guid isPermaLink="false">urn:md5:2f5d5878e916c524043b07f39a5eeff7</guid>
    <pubDate>Fri, 12 Sep 2008 00:02:00 +0200</pubDate>
    <dc:creator>Olivier</dc:creator>
        <category>General</category>
            
    <description>&lt;p&gt;Une partie de 1, 2, 3 soleil qui me rappellent de (très très) vieux souvenirs. Sauf que avec un chat, c'est une grande première !&lt;/p&gt;

&lt;div class="external-media" style="margin: 1em auto; text-align: center;"&gt;
&lt;object type="application/x-shockwave-flash" data="http://www.dailymotion.com/swf/k6RDd6W1il339OLlD2&amp;amp;related=1" width="400" height="316"&gt;
  &lt;param name="movie" value="http://www.dailymotion.com/swf/k6RDd6W1il339OLlD2&amp;amp;related=1" /&gt;
  &lt;param name="wmode" value="transparent" /&gt;
  &lt;param name="FlashVars" value="playerMode=embedded" /&gt;
&lt;/object&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/olivierdoucet/rss/~4/BazsOIV3nrA" height="1" width="1"/&gt;</description>
    
    
    
          <comments>http://www.olivierdoucet.info/blog/?post/2008/09/12/1-2-3-soleil-avec-un-chat#comment-form</comments>
      <wfw:comment>http://www.olivierdoucet.info/blog/?post/2008/09/12/1-2-3-soleil-avec-un-chat#comment-form</wfw:comment>
      <wfw:commentRss>http://www.olivierdoucet.info/blog/?feed/atom/comments/54</wfw:commentRss>
      <feedburner:origLink>http://www.olivierdoucet.info/blog/?post/2008/09/12/1-2-3-soleil-avec-un-chat</feedburner:origLink></item>
    
  <item>
    <title>Les américains sont intelligents</title>
    <link>http://feedproxy.google.com/~r/olivierdoucet/rss/~3/vjBhmmzaw7M/</link>
    <guid isPermaLink="false">urn:md5:ec52ecf9e917b2fbe744d7b5755067cb</guid>
    <pubDate>Tue, 09 Sep 2008 00:19:00 +0200</pubDate>
    <dc:creator>Olivier</dc:creator>
        <category>Actualités</category>
            
    <description>&lt;p&gt;... et écrivent particulièrement bien anglais. Je n'ai pas résisté à l'envie de vous montrer ça :
&lt;img src="http://www.olivierdoucet.info/blog/public/./.3402_m.jpg" alt="georgia attacked" style="display:block; margin:0 auto;" /&gt;&lt;/p&gt;


&lt;p&gt;Ca se passe de commentaires &lt;img src="/blog/themes/default/smilies/smile.png" alt=":)" class="smiley" /&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/olivierdoucet/rss/~4/vjBhmmzaw7M" height="1" width="1"/&gt;</description>
    
    
    
          <comments>http://www.olivierdoucet.info/blog/?post/2008/09/09/Les-americains-sont-intelligents#comment-form</comments>
      <wfw:comment>http://www.olivierdoucet.info/blog/?post/2008/09/09/Les-americains-sont-intelligents#comment-form</wfw:comment>
      <wfw:commentRss>http://www.olivierdoucet.info/blog/?feed/atom/comments/53</wfw:commentRss>
      <feedburner:origLink>http://www.olivierdoucet.info/blog/?post/2008/09/09/Les-americains-sont-intelligents</feedburner:origLink></item>
    
</channel>
</rss>
