<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://mirmodynamics.com/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Mirmo Dynamics - Tag - bonnes pratiques</title>
  <link>http://mirmodynamics.com/</link>
  <atom:link href="http://mirmodynamics.com/feed/tag/bonnes%20pratiques/rss2" rel="self" type="application/rss+xml"/>
  <description>Rien de grand ne se fit jamais sans enthousiasme.</description>
  <language>en</language>
  <pubDate>Wed, 03 Dec 2008 17:01:33 +0100</pubDate>
  <copyright>2003-2008 &amp;copy; Geoffrey Bachelet</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Ergonomie d'un blog</title>
    <link>http://mirmodynamics.com/post/2007/02/06/Ergonomie-dun-blog</link>
    <guid isPermaLink="false">urn:md5:07236eaaf779b167e98bc746cc86d29f</guid>
    <pubDate>Tue, 06 Feb 2007 10:27:00 +0100</pubDate>
    <dc:creator>Geoffrey</dc:creator>
        <category>Geekeries</category>
        <category>bonnes pratiques</category><category>clichés</category><category>concepts</category><category>ergonomie</category><category>interfaces utilisateurs</category><category>opinions</category>    
    <description>    &lt;p&gt;&lt;a href=&quot;http://www.biologeek.com/journal/index.php/ergonomie-d-un-blog-analyse-des-reponses&quot;&gt;Petite étude rapide sur l'ergonomie des blogs&lt;/a&gt;, chez Biologeek. Le panel représentatif est peut-être un peu faible, mais l'analyse compense :-)&lt;/p&gt;</description>
    
    
    
          <comments>http://mirmodynamics.com/post/2007/02/06/Ergonomie-dun-blog#comment-form</comments>
      <wfw:comment>http://mirmodynamics.com/post/2007/02/06/Ergonomie-dun-blog#comment-form</wfw:comment>
      <wfw:commentRss>http://mirmodynamics.com/feed/atom/comments/742</wfw:commentRss>
      </item>
    
  <item>
    <title>Interfaces et Classes Abstraites</title>
    <link>http://mirmodynamics.com/post/2007/01/31/Interfaces-et-Classes-Abstraites</link>
    <guid isPermaLink="false">urn:md5:7eff991a33b1612a701afab5a0ed3233</guid>
    <pubDate>Wed, 31 Jan 2007 09:08:00 +0100</pubDate>
    <dc:creator>Geoffrey</dc:creator>
        <category>Coding</category>
        <category>bonnes pratiques</category><category>concepts</category><category>doc</category><category>oop</category><category>opinions</category><category>php</category>    
    <description>&lt;p&gt;Les concepts de classes abstraites et d'interfaces sont souvents assez flous quand on débute dans la programmation objet, et on se fourvoie assez souvent sur leur utilisation et leur but. Voila une petite explication qui j'espère sera 1) juste et 2) assez claire pour tout le monde. Si vous pensez que je me fourvoie sur ces 2 concepts de base de la &lt;acronym&gt;POO&lt;/acronym&gt;, n'hésitez pas à me le faire savoir !&lt;/p&gt;    &lt;p&gt;Commençons par le commencement: l'Interface. Une Interface définit une &lt;acronym&gt;API&lt;/acronym&gt; (Application Programming Interface), dont le seul et unique but est de décrire les méthodes disponibles pour un objet donné. Une Interface ne contient pas de code fonctionnel, seulement des synopsis de méthodes et d'attributs. Par exemple, l'utilisation du mot clé &amp;quot;instanceof&amp;quot; permet de déterminer si un objet donné implémente ou non une interface donnée, et d'adapter le comportement de l'application selon la réponse. Le &amp;quot;type hinting&amp;quot; permet également ce genre de choses:&lt;/p&gt;

&lt;pre&gt;
&amp;lt;?php

interface Bar_Interface {
      public function doSomething();
}

class Bar implements Bar_Interface {
      public function doSomething() {
            echo &amp;quot;something was done.&amp;quot;;
      }
}

class Foo {
      public function doSomething(Bar_Interface $bar) {
            $bar-&amp;gt;doSomething();
      }
}

?&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Dans cet exemple, quand Foo::doSomething() est executée, on est certain que l'objet $bar dispose de la méthode doSomething car il implémente l'Interface Bar_Interface.&lt;/p&gt;


&lt;p&gt;Vient ensuite la classe abstraite. La classe abstraite, &amp;quot;abstract class&amp;quot; en V.O., se comporte comme un squelette d'objet. Elle est utile dans le cas où on utilise une série d'objets d'une même famille qui partagent du code commun, mais qui comportent tous leurs particularités propres. Dans ce cas de figure, on commence par implémenter le code commun dans la classe abstraite, dont hériteront les autres objets, dans lesquels le code spécifique pourra à son tour être implémenté. C'est très utile pour certains Design Pattern, comme par exemple &amp;quot;Adapter&amp;quot; ou &amp;quot;Proxy&amp;quot;, qui ont tous deux pour but de permettre des stratégies différentes pour une même situation, situation qui présente le plus souvent des points similaires quelque soit la stratégie adoptée.&lt;/p&gt;



&lt;p&gt;En règle générale, une classe abstraite implémente une interface (et un exemple d'Adapter en cadeau bonux):&lt;/p&gt;

&lt;pre&gt;
&amp;lt;?php

interface Bar_Adapter_Interface {
      public function doSomething();
}

class Bar {
      public function __construct(Bar_Adapter_Interface $adapter) {
            $this-&amp;gt;_adapter = $adapter;
      }

      public function doSomething() {
            return $this-&amp;gt;_adapter-&amp;gt;doSomething();
      }

      static public function factory($adapter) {
            $className = &amp;quot;Bar_Adapter_&amp;quot;.$adapter;
            if (!class_exists($className)) {
                  throw new Exception('Adapter not available: '.$adapter);
            } else {
                  return new Bar(new $className);
            }
      }
}

abstract class Bar_Adapter_Abstract implements Bar_Adapter_Interface {
      protected function getSomething() {
            return &amp;quot;la méthode pour accéder a ce truc est la même pour tout le monde&amp;quot;;
      }
}

class Bar_Adapter_Explode extends Bar_Adapter_Abstract {
      public function doSomething() {
            return explode(' ', $this-&amp;gt;getSomething());
      }
}

class Bar_Adapter_PregSplit extends Bar_Adapter_Abstract {
      public function doSomething() {
            return preg_split('/ /', $this-&amp;gt;getSomething());
      }
}

$bar = Bar::factory('Explode');
print_r($bar-&amp;gt;doSomething());

?&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Ici, l'objet Bar offre la méthode doSomething, qui présentement retourne une chaine explosée, et on propose deux adapteurs pour se faire, l'un utilisant explode(), l'autre preg_split(). Bien sur, cet exemple est complètement trivial :-)&lt;/p&gt;</description>
    
    
    
          <comments>http://mirmodynamics.com/post/2007/01/31/Interfaces-et-Classes-Abstraites#comment-form</comments>
      <wfw:comment>http://mirmodynamics.com/post/2007/01/31/Interfaces-et-Classes-Abstraites#comment-form</wfw:comment>
      <wfw:commentRss>http://mirmodynamics.com/feed/atom/comments/739</wfw:commentRss>
      </item>
    
  <item>
    <title>Discussion sur l'optimisation en PHP chez NiKo</title>
    <link>http://mirmodynamics.com/post/2006/11/23/Discussion-sur-loptimisation-en-PHP-chez-NiKo</link>
    <guid isPermaLink="false">urn:md5:967d08dda8033faf171a3edb213844a8</guid>
    <pubDate>Thu, 23 Nov 2006 13:40:00 +0100</pubDate>
    <dc:creator>Geoffrey</dc:creator>
        <category>Coding</category>
        <category>bonnes pratiques</category><category>clichés</category><category>configuration</category><category>environnement</category><category>optimisation</category><category>organisation</category><category>way of life</category>    
    <description>    &lt;p&gt;&lt;a href=&quot;http://www.prendreuncafe.com/blog/post/2006/11/22/12-astuces-optimisation-performances-php&quot;&gt;Une petite discussion sur l'optimisation en PHP&lt;/a&gt; à lieu en ce moment chez NiKo ! Ce n'est pas souvent que je &lt;em&gt;link&lt;/em&gt; directement comme ça, donc dites vous que quand je le fais, c'est que ça en vaut la peine ;-)&lt;/p&gt;</description>
    
    
    
          <comments>http://mirmodynamics.com/post/2006/11/23/Discussion-sur-loptimisation-en-PHP-chez-NiKo#comment-form</comments>
      <wfw:comment>http://mirmodynamics.com/post/2006/11/23/Discussion-sur-loptimisation-en-PHP-chez-NiKo#comment-form</wfw:comment>
      <wfw:commentRss>http://mirmodynamics.com/feed/atom/comments/724</wfw:commentRss>
      </item>
    
  <item>
    <title>Incubated</title>
    <link>http://mirmodynamics.com/post/2006/11/01/Incubated</link>
    <guid isPermaLink="false">urn:md5:7a9cdfbfea0dc5e4f1cc96795fdb0db3</guid>
    <pubDate>Wed, 01 Nov 2006 16:10:00 +0100</pubDate>
    <dc:creator>Geoffrey</dc:creator>
        <category>Geekeries</category>
        <category>bonnes pratiques</category><category>doc</category><category>google</category><category>librairie</category><category>microformats</category><category>optimisation</category><category>organisation</category><category>php</category><category>sso</category><category>svn</category><category>sécurité</category><category>ubuntu</category><category>unit testing</category><category>unix</category><category>way of life</category>    
    <description>&lt;p&gt;Les liens interressants (ou pas) de la semaine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://microformats.org/&quot; title=&quot;http://microformats.org/&quot;&gt;http://microformats.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.georss.org/&quot; title=&quot;http://www.georss.org/&quot;&gt;http://www.georss.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.thinkvitamin.com/features/ajax/create-a-searchable-google-map&quot; title=&quot;http://www.thinkvitamin.com/features/ajax/create-a-searchable-google-map&quot;&gt;http://www.thinkvitamin.com/feature...&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://features.launchpad.net/distros/ubuntu/+specs&quot; title=&quot;https://features.launchpad.net/distros/ubuntu/+specs&quot;&gt;https://features.launchpad.net/dist...&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://iwantmyopenid.org/bounty&quot; title=&quot;http://iwantmyopenid.org/bounty&quot;&gt;http://iwantmyopenid.org/bounty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://devzone.zend.com/node/view/id/1113&quot; title=&quot;http://devzone.zend.com/node/view/id/1113&quot;&gt;http://devzone.zend.com/node/view/i...&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://weierophinney.net/matthew/uploads/php_development_best_practices.pdf&quot; title=&quot;http://weierophinney.net/matthew/uploads/php_development_best_practices.pdf&quot;&gt;http://weierophinney.net/matthew/up...&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;    &lt;p&gt;J'ai pas mal entendu parler des microformats ces derniers temps, sans vraiment prendre le temps de me pencher dessus. &lt;a href=&quot;http://www.microformats.org/&quot;&gt;microformats.org&lt;/a&gt; présente l'occasion de se plonger dedans et de comprendre que finalement, les microformats peuvent être un facteur de développement non négligeable pour un site ou une application web. &lt;a href=&quot;http://www.georss.org/&quot;&gt;GeoRSS&lt;/a&gt; de son côté propose une implémentation &lt;em&gt;simple&lt;/em&gt; et &lt;em&gt;puissante&lt;/em&gt; (c'est eux qui le disent) du &lt;a href=&quot;http://en.wikipedia.org/wiki/Geotagging&quot;&gt;Geotagging&lt;/a&gt;. A voir si on ne peut pas coupler tout ça avec quelques pirouettes sur &lt;a href=&quot;http://mirmodynamics.com/post/2006/11/01/&quot;&gt;Google Maps&lt;/a&gt;...&lt;/p&gt;


&lt;p&gt;Pendant ce temps, chez Canonical, on établit déjà les &lt;a href=&quot;https://features.launchpad.net/distros/ubuntu/+specs&quot;&gt;specifications fonctionnelles de Feisty Fawn&lt;/a&gt;, et c'est assez prometteur :-)&lt;/p&gt;


&lt;p&gt;Enfin, dans le petit monde du &lt;acronym&gt;PHP&lt;/acronym&gt; et du webdev en général, il n'est jamais trop tard pour souligner l'existence de protocoles d'authentification centralisée libres comme &lt;a href=&quot;http://openid.net/&quot;&gt;OpenID&lt;/a&gt;, qui de plus à lancé un &lt;em&gt;concours&lt;/em&gt; d'implémentation sous forme de &lt;a href=&quot;http://iwantmyopenid.org/bounty&quot;&gt;bounties&lt;/a&gt; ! On notera également les débuts de &lt;a href=&quot;http://devzone.zend.com/node/view/id/1113&quot;&gt;l'extension d' input filtering pour PHP&lt;/a&gt;, qui promet de simplifier grandement la validation de données externes dans les applis &lt;acronym&gt;PHP&lt;/acronym&gt;. Enfin, &lt;a href=&quot;http://weierophinney.net/matthew/uploads/php_development_best_practices.pdf&quot;&gt;les slides de la conférences PHP Best Practices&lt;/a&gt; qui a eu lieu à la ZendCon, c'est vraiment rempli de bons conseils.&lt;/p&gt;</description>
    
    
    
          <comments>http://mirmodynamics.com/post/2006/11/01/Incubated#comment-form</comments>
      <wfw:comment>http://mirmodynamics.com/post/2006/11/01/Incubated#comment-form</wfw:comment>
      <wfw:commentRss>http://mirmodynamics.com/feed/atom/comments/711</wfw:commentRss>
      </item>
    
  <item>
    <title>Bonnes pratiques PHP</title>
    <link>http://mirmodynamics.com/post/2006/10/29/Bonnes-pratiques-PHP</link>
    <guid isPermaLink="false">urn:md5:1abac6f3dcb348da1fd774b47ad6e842</guid>
    <pubDate>Sun, 29 Oct 2006 16:22:00 +0100</pubDate>
    <dc:creator>Geoffrey</dc:creator>
        <category>Coding</category>
        <category>bonnes pratiques</category><category>clichés</category><category>opinions</category><category>optimisation</category><category>organisation</category><category>php</category><category>way of life</category>    
    <description>    &lt;p&gt;Vite fait, un petit jeu pour vous, amis PHPiens.&lt;/p&gt;


&lt;p&gt;Dans le snippet de code qui suit se cachent 6 bonnes pratiques (7 selon le degré de subjectivité que l'on inclue dans une &lt;em&gt;bonne pratique&lt;/em&gt;), saurez vous les retrouver ?&lt;/p&gt;


&lt;pre&gt;&amp;lt;?php

$code_is_ugly = true;
if (9069 === $code_author) {
	$code_is_ugly = false;
}

?&amp;gt;&lt;/pre&gt;</description>
    
    
    
          <comments>http://mirmodynamics.com/post/2006/10/29/Bonnes-pratiques-PHP#comment-form</comments>
      <wfw:comment>http://mirmodynamics.com/post/2006/10/29/Bonnes-pratiques-PHP#comment-form</wfw:comment>
      <wfw:commentRss>http://mirmodynamics.com/feed/atom/comments/705</wfw:commentRss>
      </item>
    
</channel>
</rss>